想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时没写完,最近又拿出来改了一下,完善了一些功能,修正了很多bug,终于将V0.1版做了出来,现贴出来分享一下。

鉴于居然有很多人都不会玩这个游戏,我还是简单介绍下规则吧:

猜数字: 系统每次随机产生一个4位数字,4位数的每一位都不相同,且都为0~9,然后你有5次机会去猜出那个数字,每次你猜一个4位数,都会得到一个反馈,反馈以 nAmB 的形式给出,有n个'A'表示你猜的数的4位中与答案有n位是完全相同的,但是你可能不知道这n个完全相同的位是那几位,有m个'B'表示你猜的数字与答案有共同的m个数,但是你猜的那m个数位置是错的。

比如:答案为1234,你猜的是2184,那么会返回1A2B,说明4是公共的且位置放对了,1和2是公共的,但是位置不对。

然后根据提示,经过自己的分析推理,尽可能快地猜出答案。

本游戏由4个数位,9个数码(1~9)组成。

-----------------------------------------规则介绍完毕------------------------------------------------

软件组件:

一、1个文本输入框EditText,用来输入数字,限制使用数字输入法

二、3个Button:

1.确定: 输入猜的数字后按确定提交获得返回结果

2.继续:进行一轮后继续下一轮,所有输出内容全部清空,重新产生随机数

3.退出:退出程序

三、6个TextView : 5个用来显示反馈(最多5次),1个用来显示正确答案。

界面设计:

布局XML程序:

<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"
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" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:text="@string/input"
/> <EditText
android:id="@+id/guessed"
android:hint = "@string/hint"
android:numeric="integer"
android:digits="1234567890"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="67dp"
android:ems="15" /> <Button
android:id="@+id/enter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/guessed"
android:layout_centerHorizontal="true"
android:layout_marginTop="14dp"
android:text="@string/begin" /> <TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/guessed"
android:layout_below="@+id/enter"
android:textSize="18sp"
android:layout_marginTop="17dp"
android:ems="10" /> <TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_alignLeft="@+id/TextView01"
android:layout_below="@+id/TextView01"
android:ems="10" /> <TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_alignLeft="@+id/TextView02"
android:layout_below="@+id/TextView02"
android:ems="10" /> <TextView
android:id="@+id/TextView04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_alignLeft="@+id/TextView03"
android:layout_below="@+id/TextView03"
android:ems="10" /> <TextView
android:id="@+id/TextView05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_alignLeft="@+id/TextView04"
android:layout_below="@+id/TextView04"
android:ems="10" /> <TextView
android:id="@+id/ANSTEXT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold"
android:layout_alignLeft="@+id/TextView05"
android:layout_below="@+id/TextView05"
android:ems="10" /> <Button
android:id="@+id/continuebut"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/cont" /> <Button
android:id="@+id/quitbut"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/ANSTEXT"
android:layout_alignTop="@+id/continuebut"
android:text="@string/quit" /> </RelativeLayout>

strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">猜数字游戏V0.1</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="input">请猜数字:</string>
<string name="begin">确定</string>
<string name="hint">请输入四位数字</string>
<string name="cont">继续</string>
<string name="quit">退出</string> </resources>

逻辑设计:

1.“确定”按钮监听确定时间,

.当enter被按下时,取得输入的数字,

.判断是否为4位,是否有两个数字相同,是否包含0,是否有非数字等,

....如果是则显示错误信息,

....否则正常处理,首先看是否猜中,

.如果猜中,直接输出,

....然后小于2次说明很厉害(运气好),

.否则计算nAmB,输出,

.同时Count加1,

.猜中了或者Count到达5次还没猜中,

....则将enter设为不可点击,

....然后公布正确答案。

....等待“继续”或“退出”按钮的按下。

2.“继续”按钮被按下后,

.清空所有TextView,

.初始化变量,

.重新产生随机数,

.设置enter为可点击。

3.“退出”按钮被按下后,调用finish()函数结束游戏。

Java主代码:

package com.example.guessit;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity; public class MainActivity extends Activity
{
int Count = 0,AA,BB,k,base,NUM;
int [] Tag = new int[11];
char [] ss = new char[5];
String Answer;
boolean flag = false, Double = false, Not4Digit = false, NotDigit = false, haveZero = false, haveNonDigit = false;
String GenerateRandomNumber()
{
for(int t=1;t<=9;t++) Tag[t]=0;
Tag[0]=20;
int [] Rn = new int[5];
Rn[0] = 1 + ((int)(Math.random()*8))%10;
while(Tag[Rn[0]]>0) Rn[0]= 1 + ((int)(Math.random()*8))%10;
Tag[Rn[0]]++;
Rn[1] = 1 + ((int)(Math.random()*8))%10; while(Tag[Rn[1]]>0) Rn[1]= 1 + ((int)(Math.random()*8))%10;
Tag[Rn[1]]++;
Rn[2] = 1 + ((int)(Math.random()*8))%10; while(Tag[Rn[2]]>0) Rn[2]= 1 + ((int)(Math.random()*8))%10;
Tag[Rn[2]]++;
Rn[3] = 1 + ((int)(Math.random()*8))%10; while(Tag[Rn[3]]>0) Rn[3]= 1 + ((int)(Math.random()*8))%10;
Tag[Rn[3]]++; //can be ignored base = 1;
NUM = 0;
for(int i=3;i>=0;i--)
{
NUM += base*Rn[i];
base *= 10;
}
return String.valueOf(NUM);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Answer = GenerateRandomNumber();
final Button enter = (Button) findViewById(R.id.enter);
final Button quit = (Button) findViewById(R.id.quitbut);
final Button cont = (Button) findViewById(R.id.continuebut);
quit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
flag = false;
Count = 0;
final TextView []show = new TextView [7];
final TextView ANS = (TextView) findViewById(R.id.ANSTEXT);
final EditText pass = (EditText) findViewById(R.id.guessed);
pass.setInputType(EditorInfo.TYPE_CLASS_PHONE);
show[1] = (TextView) findViewById(R.id.TextView01);
show[2] = (TextView) findViewById(R.id.TextView02);
show[3] = (TextView) findViewById(R.id.TextView03);
show[4] = (TextView) findViewById(R.id.TextView04);
show[5] = (TextView) findViewById(R.id.TextView05);
cont.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Answer = GenerateRandomNumber();
for(int i=1;i<=5;i++) show[i].setText("");
ANS.setText("");
pass.setText("");
flag = false;
Count = 0;
enter.setClickable(true);
Toast.makeText(MainActivity.this, "再接再厉", Toast.LENGTH_SHORT).show();
}
});
enter.setOnClickListener(new OnClickListener() // Guess the number and handle it by the Program!
{
public void onClick(View v)
{
String guessed = pass.getText().toString();
/////Check///////
Not4Digit = Double = haveZero = haveNonDigit = false;
if(guessed.length() != 4) {
Not4Digit = true;
}
else {
for(int i=0;i<4;i++)
for(int j=i+1;j<4;j++)
if(guessed.charAt(i) == guessed.charAt(j))
Double = true;
for(int i=0;i<4;i++)
if(guessed.charAt(i) == '0')
haveZero = true;
for(int i=0;i<4;i++)
if(guessed.charAt(i) < '0' || guessed.charAt(i) > '9')
haveNonDigit = true;
}
/////Check///////
if(Not4Digit) {
Toast.makeText(MainActivity.this, "请填入四位数字..", Toast.LENGTH_LONG).show();
pass.setText("");
}
else if(Double) {
Toast.makeText(MainActivity.this, "四位数字每位数字都不能相等!", Toast.LENGTH_LONG).show();
pass.setText("");
}
else if(haveNonDigit) {
Toast.makeText(MainActivity.this, "请不要输入其它非数字字符", Toast.LENGTH_LONG).show();
pass.setText("");
}
else if(haveZero) {
Toast.makeText(MainActivity.this, "数字为0~9之间哦", Toast.LENGTH_LONG).show();
pass.setText("");
}
else {
Count++; // only 5 chance!
pass.setText(""); //clear the input text
if(guessed.equals(Answer)) // Bingo!
{
flag = true;
if(Count <= 2) //2 次以内猜中
Toast.makeText(MainActivity.this, "你简直是个天才!", Toast.LENGTH_LONG).show();
else
Toast.makeText(MainActivity.this, "恭喜你,猜对了!", Toast.LENGTH_LONG).show();
show[Count].setText(guessed+" "+4+"A"+0+"B");
ANS.setText("正确答案: " + Answer);
enter.setClickable(false);
}
else
{
k = 0;
AA = BB = 0;
for(int i=0;i<4;i++)
{
if(guessed.charAt(i) == Answer.charAt(i))
AA++;
else
ss[k++]=guessed.charAt(i);
}
for(int j=0;j<k;j++)
{
for(int ka=0;ka<4;ka++)
{
if(ss[j] == Answer.charAt(ka))
BB++;
}
}
show[Count].setText(guessed+" "+AA+"A"+BB+"B");
}
if(!flag && Count == 5)
{
ANS.setText("正确答案: " + Answer);
Toast.makeText(MainActivity.this, "很遗憾,只有五次机会,你还是没有猜对.5555..", Toast.LENGTH_LONG).show();
enter.setClickable(false);
}
}
}
});
}
}

终端测试:

备注: 

目前还没有在别的机器上测试过,不知道有没有问题。

APK下载链接:http://pan.baidu.com/s/1i346vDN

欢迎大家下载来玩,或者提出建议哦。

【原创Android游戏】--猜数字游戏Version 0.1的更多相关文章

  1. CASIO 5800P计算器游戏--猜数字游戏

    CASIO 5800P 计算器游戏--猜数字游戏原代码 我编的计算器小游戏--猜数字游戏 LbI I↙ "xxGUESS NUMBERxx xPROGRAMMER:JCHx -------- ...

  2. C语言之猜数字游戏

    猜数字游戏 猜数字游戏是以前功能机上的一款益智游戏,计算机会根据输入的位数随机分配一个符合要求的数据,计算机输出guess后便可以输入数字,注意数字间需要用空格或回车符加以区分,计算机会根据输入信息给 ...

  3. 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用

    --------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...

  4. Python实现猜数字游戏1.0版

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=702 """ 功能: 随机生成一个数字,最多有3次猜测机会,如果第一次没有猜对,则从第 ...

  5. Java完成简单猜数字游戏v2.0

    猜数字游戏v2.0 优化了获取随机数.输入数据超出边界值的代码,并增加了异常处理,能够在玩家输入错误数据错误时给出可靠指引,希望对和我一样的新人有帮助, 最后希望有大神愿意帮我解决代码优化的问题,谢谢 ...

  6. [C++]猜数字游戏的提示(Master-Mind Hints,UVa340)

    [本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] Question 例题3-4 猜数字游戏的提示(Master-Mind Hints,UVa340) 实现一个 ...

  7. Poj 2328 Guessing Game(猜数字游戏)

    一.题目大意 两个小盆友玩猜数字游戏,一个小盆友心里想着1~10中的一个数字,另一个小盆友猜.如果猜的数字比实际的大,则告诉他"too high",小则"too low& ...

  8. 通过游戏学python 3.6 第一季 第三章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码 可复制直接使用 娱乐 可封装 函数

       猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码   #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码 import random secrst = random.rand ...

  9. C语言猜数字游戏

    猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...

随机推荐

  1. 给你推荐10款优秀的 HTML5 动画工具

    HTML5 在过去三年快速增长,已经成为 Web 开发人员最喜欢的编程语言之一.强大的编程语言拥有开发更好的网页应用的能力. HTML5 中引入的新技术都非常好,像 Chrome.Firefox.Sa ...

  2. Dynamics AX7 materials

    Dynamics AX community https://community.dynamics.com/ax Dynamics AX Wiki https://ax.help.dynamics.co ...

  3. Office 365 – SharePoint 2013 Online 之WebPart开发、部署教程

    1.打开Visual Studio,新建一个项目,选择SharePoint空项目,如下图: 2.选择调试站点和沙盒解决方案,如下图: 3.在项目中,添加一个WebPart,如下图: 4.添加完毕的项目 ...

  4. 完美解决AutoCAD2012,AutoCAD2013本身电脑里有NET4.0或以上版本却装不上的问题

    适用情况:电脑里本身有NET4.0或4.5版本,并且正确安装.或本身你就装有AutoCAD2013或AutoCAD2012要装AutoCAD2012或AutoCAD2013却装不上的情况 如图1所示. ...

  5. Android Handler机制(二)---MessageQueue源码解析

    MessageQueue 1.变量 private final boolean mQuitAllowed;//表示MessageQueue是否允许退出 @SuppressWarnings(" ...

  6. SVProgressHUD进度条蒙版

    GitHub:https://github.com/samvermette/SVProgressHUDSVProgressHUD和MBProgressHUD效果差不多,不过不需要使用协议,同时也不需要 ...

  7. Nodejs的模块实现

    在Node中引入模块,需要经历如下3个步骤:(1)路径分析(2)文件定位(3)编译执行 Node中模块分为两类: 一是Node提供的模块——核心模块.这部分在Node源代码的编译过程中,编译进了二进制 ...

  8. WPF学习之路(五) 实例:写字板

    写字板实例一 MainWindow.xaml <Window x:Class="Wordpad01.MainWindow" xmlns="http://schema ...

  9. iBatis 中 Like 的写法实现模糊查询

    iBatis 开发指南告诉我们,当 Person 对象的 name 属性不为 null 时启用 name 查询条件在映射文件 person.xml 中的配置为 <select id=" ...

  10. Python基本语法,python入门到精通[二]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]我们已经在自己的windows电脑上搭建好了python的开发环境,这篇博客呢我就开始学习一下Python的基本语法.现 ...