打造一个简单的猜数字游戏
制作一个简单的猜数字游戏
新建一个GuessGame.java文件,GuessGame用于实现游戏逻辑
最后修改配置文件
最近我一直在学习Android开发,今天特意做了一个猜数字游戏,游戏虽然简单,但也用到了几个最基本的Android开发技术
首先介绍一下游戏流程
1、启动游戏后,进入登录界面,登录界面上有两个输入框,一个复选框,一个登录按钮,输入框用于输入用户名和密码
2、正确的用户名是admin,正确的密码是admin,玩家只有3次登陆游戏的机会,当玩家输入用户名和密码的错误次数超过3次会提示不能登陆这个游戏
当玩家输入了正确的用户名和密码后会进入到
如果勾选了记住用户名和密码。则在下次登录游戏时不需要用户手动输入用户名和密码
进入游戏后会app会自动生成一个1~100之内的随机数,在输入框中输入数字单击确认按钮后会做出判断
首先创建一个Android工程(我使用的开发工具是Android Studio),工程名称为Guess
修改activity_main.xml文件,activity_main作为登录游戏时的布局
<LinearLayout 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" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/et_usename" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" /> <EditText android:id="@+id/et_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" android:inputType="textPassword" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <CheckBox android:id="@+id/cb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="记住用户名和密码" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_gravity="right" android:onClick="login" android:text="登录" /> </RelativeLayout> </LinearLayout>
修改MainActivity,MainActivity作为游戏登录界面的Activity
package com.fyt.guess; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; public class MainActivity extends Activity { private EditText et_usename; private EditText et_password; private String usename; private String password; //记录登录失败的次数 private int numFail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得布局文件上的用户名和密码输入框对象 et_usename = (EditText) findViewById(R.id.et_usename); et_password = (EditText)findViewById(R.id.et_password); //读取保存在本地的用户名和密码 readAccount(); } //读取保存在本地的用户名和密码 public void readAccount() { File file = new File(getCacheDir(), "info.txt"); //如果这个文件存在,就从这个文件中读取用户名和密码 if(file.exists()) { try { //创建文件输入流 FileInputStream fis = new FileInputStream(file); //把字节流转换成字符流 BufferedReader br = new BufferedReader(new InputStreamReader(fis)); //读取txt文件中的用户名和密码 String text = br.readLine(); //将字符串分割成用户名和密码 String[] s = text.split("##"); //获得用户名和密码 usename = s[0]; password = s[1]; //将用户名和密码设置到输入框 et_usename.setText(usename); et_password.setText(password); } catch (Exception e) { e.printStackTrace(); } } } //登录 public void login(View v) { //获得输入框中的用户名和密码 usename = et_usename.getText().toString(); password = et_password.getText().toString(); //获得布局文件上的复选框控件 CheckBox checkBox = (CheckBox)findViewById(R.id.cb); if(usename.equals("admin") && password.equals("admin")) { if(checkBox.isChecked()) { //返回值也是一个File对象,其路径是data/data/com.itheima.apirwinrom/cache File file = new File(getCacheDir(), "info.txt"); FileOutputStream fos; try { fos = new FileOutputStream(file); fos.write((usename + "##" + password).getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } //登录失败的次数超过3次 if(numFail > 3) { //弹出登录次数超过3次时的提示对话框 showFailTimeDialog(); } //登录成功 else { //进入猜数字游戏 Intent intent = new Intent(MainActivity.this, GuessGame.class); startActivity(intent); } } //登录失败 else { if(numFail > 3) { showFailTimeDialog(); } else { //失败的次数加1 numFail += 1; //显示登录失败的对话框 showFailDialog(); } } } //显示登录失败的对话框 public void showFailDialog() { AlertDialog dlg = new AlertDialog.Builder(MainActivity.this).create(); dlg.setTitle(""); dlg.setMessage("您的用户名或密码输入错误,请选择"); //为退出按钮添加事件监听 DialogInterface.OnClickListener lis = new DialogInterface.OnClickListener() { //退出按钮响应函数 public void onClick(DialogInterface dialog, int which) { //退出游戏 System.exit(0); } }; //为重新输入按钮添加事件监听 DialogInterface.OnClickListener lis2 = new DialogInterface.OnClickListener() { //重新输入按钮的响应函数 public void onClick(DialogInterface dialog, int which) { //关闭登录提示对话框 dialog.cancel(); //清除输入框中的数据 et_usename.setText(""); et_password.setText(""); } }; dlg.setButton("退出", lis); dlg.setButton2("重新输入", lis2); dlg.show(); } //显示登录失败的次数超过3次的提示对话框 public void showFailTimeDialog() { AlertDialog dlg = new AlertDialog.Builder(MainActivity.this).create(); dlg.setTitle(""); dlg.setMessage("您登录失败的次数超过3次,不能再登录"); //为退出按钮添加事件监听 DialogInterface.OnClickListener lis = new DialogInterface.OnClickListener() { //退出按钮响应函数 public void onClick(DialogInterface dialog, int which) { //退出游戏 System.exit(0); } }; dlg.setButton("退出", lis); dlg.show(); } }
新建一个guess_game.xml作为游戏界面的布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/edittex" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:hint="请输入您猜测的数字(1-100)"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确定" android:onClick="Clicked"/> </LinearLayout>
新建一个GuessGame.java文件,GuessGame用于实现游戏逻辑
package com.fyt.guess; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class GuessGame extends Activity { private EditText et_number; //记录待猜的数字 private int guessNumber; //记录用户输入的数字 private int number; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guess_game); et_number = (EditText)findViewById(R.id.edittex); guessNumber = (int)(Math.random() * 100 + 1); } //确定按钮响应函数 public boolean Clicked(View v) { String numStr = et_number.getText().toString(); //当输入框中没有输入数字 if(numStr.isEmpty()) { String str = "请在输入框中输入一个你猜的数字"; createDialog(str); return false; } //将输入框中输入的数据转换成整数 number = Integer.parseInt(numStr); if(number > guessNumber) { String str = "你猜的数字" + number + "大了,点击确定按钮重新猜"; createDialog(str); } else if(number < guessNumber){ String str = "你猜的数字" + number + "小了,点击确定按钮重新猜"; createDialog(str); } else { String str = "恭喜你猜对了"; createDialog(str); //产生一个新的数字 guessNumber = (int)(Math.random() * 100 + 1); } return true; } //创建提示对话框 public void createDialog(String str) { AlertDialog dlg = new AlertDialog.Builder(GuessGame.this).create(); dlg.setTitle(""); dlg.setMessage(str); //为退出按钮添加事件监听 DialogInterface.OnClickListener lis = new DialogInterface.OnClickListener() { //退出按钮响应函数 public void onClick(DialogInterface dialog, int which) { dialog.cancel(); et_number.setText(""); } }; dlg.setButton("确定", lis); dlg.show(); } }
最后修改配置文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.fyt.guess" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".GuessGame"> </activity> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
完整版工程的下载地址http://download.****.net/detail/u010105970/9481806