描述:
猜数字游戏包含“猜数”、“排行榜”和“设置” 3个模块。
1)“猜数”模块:随机生成一定范围内的一个整数,用户可以输入自己的猜想数字,程序进行判断并给出“猜大”、“猜小”或“正确”的3种提示
2)“排行榜”模块:根据用户猜对数字的次数进行排名显示。
3)“设置”模块:在这个模块,用户可以设置自己的用户名,也可以选择是否使用“默认姓名”进行后面的每一次猜数游戏
如果使用,后面则直接进行游戏,
如果不使用,后面的每次游戏结束后程序会提示要输入用户名,以便记录游戏历史,并在“排行榜”模块显示。
在“设置”模块,用户还可以选择接下来的要进行的猜数游戏的猜数范围,本次给出1-100,1-1000,1-10000三种范围,大家后期可以根据需要修改调整。
一、程序整体实现效果是这样的:
无默认姓名猜对时:
二、整个项目的结构分析:
先放一张整个Project目录结构:
res下的图片素材:
接下来,逐一对每个模块实现步骤进行讲解!
【数据库】
新建一个辅助类MyHelper类继承SQLiteOpenHelper类,并实现它的onCreate方法和onUpgrade方法。
package com.example.mygame;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){
super(context,name,factory,version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table ordertb(_id integer primary key "+"autoincrement," +
"name string not null,count integer not null,range integer not null)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
【下方导航栏的实现】
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:background="#E8EEF5"
android:baselineAligned="false"
tools:ignore="Orientation"
>
<!--猜数-->
<LinearLayout
android:id="@+id/llay_guess"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:background="#E8EEF5"
android:orientation="vertical">
<ImageView
android:id="@+id/img_guess"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/game_on"/>
<TextView
android:id="@+id/txt_guess"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_guess"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="@color/color_txt_pressed"/>
</LinearLayout>
<LinearLayout
android:layout_width="2dp"
android:layout_height="match_parent"
android:divider="@color/color_txt_pressed"
android:showDividers="end">
</LinearLayout>
<!--排行榜-->
<LinearLayout
android:id="@+id/llay_order"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/img_order"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/rank_off"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/txt_order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_order"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="@color/color_txt_normal"/>
</LinearLayout>
<!--设置-->
<LinearLayout
android:id="@+id/llay_setting"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/img_setting"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/setting_off"/>
<TextView
android:id="@+id/txt_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_setting"
android:textSize="20dp"
android:textStyle="bold"
android:textColor="@color/color_txt_normal"/>
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/fragment_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/linearLayout"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>
</RelativeLayout>
布局中涉及的“strings.xml”文件如下:
<string name="txt_guess">猜数</string>
<string name="txt_order">排行榜</string>
<string name="txt_setting">设置</string>
布局中涉及的“colors.xml”文件如下:
<color name="color_txt_normal">#737373</color>
<color name="color_txt_pressed">#d4257b</color>
在MainActivity中实现导航逻辑之前,先搭个基本页面框架:
新建GuessFragment(猜数字页)、OrderFragment(积分排行榜页)和SettingFragment(设置页)3个类,以及对应的布局文件“fragment_guess.xml”、“fragment_order.xml”和“fragment_setting.xml”。
在MainActivity中的代码如下:
package com.example.mygame;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private LinearLayout ILay_guess,ILay_order,ILay_setting;
private ImageView img_guess,img_order,img_setting;
private TextView txt_guess,txt_order,txt_setting;
private Fragment fm_guess,fm_order,