您的位置:首页 > 其它

猜数字小游戏

2007-12-06 22:00 141 查看
以前在电子词典上玩过的游戏的,很喜欢这个游戏现在用J2ME CLDC1.1+MIDP2.0的环境下测试能用,有兴趣的朋友可以自己在EclipseME 下编译后试试
import java.util.Random;
import java.lang.*;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class caishuzi extends MIDlet implements CommandListener {

public Form m_Form; //对话框
public TextField m_TFInput; //文本编辑框
public StringItem m_strItem; //文本显示组件
public int m_aNum[]; //存储目标数
public int m_nTimes = 0; //输入的次数
public boolean m_bEndGame = false; //游戏结束的标志
private Command OKCommand; //高级指令
//记录每次输入A的个数
public int []nB={0,0,0,0,0,0,0,0,0,0};
//记录每次输入B的个数
public int []nA={0,0,0,0,0,0,0,0,0,0};
public char aNum[][]=new char[10][4];//每次的输出记录数.
public int i=0;//循环变量..
public caishuzi() {
super();
m_Form = new Form("猜数字 By CR");
//设置m_TFInput组件,使其只能输入4位数字
m_TFInput = new TextField("输入","", 4, TextField.NUMERIC );
m_strItem = new StringItem("信息/n","" );
m_Form.append(m_TFInput);
m_Form.append(m_strItem);
//产生目标数
m_aNum = new int[4];
InitNum();
//创建指令,并设置指令的监听器
OKCommand = new Command( "输入", Command.OK, 0);
m_Form.addCommand( OKCommand );
m_Form.setCommandListener(this);

}

public void InitNum(){ //产生随机的目标数
Random random = new Random();
int k = random.nextInt();
int m = 0;
for( int n = 0; n < 4; n ++ ){
k = random.nextInt();
m_aNum
= Math.abs(k % 10);
//for循环语句,确保四个数位上的数字无重复
for( m = 0; m < n; m ++ ){
//若与前面的数字重复,则用加1的办法保证不重复
if( m_aNum
== m_aNum[m] )
m_aNum
++;
//若加1后大于9则回到0
if( m_aNum
> 9 )
m_aNum
= 0;
}
}
}

protected void startApp() throws MIDletStateChangeException {
//设置当前屏幕显示的对象
Display.getDisplay(this).setCurrent(m_Form);
}

protected void pauseApp() {
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}

public void commandAction(Command arg0, Displayable arg1) {
if( m_bEndGame )
return;
if (arg0 == OKCommand){ //指令被触发
char cNum[]=new char[4];
m_TFInput.getChars(cNum);
if( !CheckNumber( cNum ) )
{//如果输入数不合法
m_strItem.setText(null);
m_TFInput.setChars(null, 0, 0);
m_strItem.setText("输入有误,请重新输入!!");
return;
}
FeedBack(cNum); //反馈信息
}
}

public boolean CheckNumber( char cNum[] ){ //检测数据是否合法
if( cNum.length!=4)
return false;
for(i=0;i<4;i++ ){
for( int j=0;j<i;j++){
//有两个数字相同了,确定是非法输入
if( cNum[i] == cNum[j] ){
return false;
}
}
}
return true;
}

public void FeedBack(char cNum[]){ //根据输入数反馈信息
if( cNum.length != 4 )
return;

for(i=0;i<4;i++){aNum[m_nTimes][i]=cNum[i];
for( int j=0;j<4;j++){
//cNum[i]是字符,需先转换成对应的数字,再与m_aNum[j]进行比较
if( (int)(cNum[i]-'0')==m_aNum[j]){
if( i == j )
nA[m_nTimes]++; //如果位置也相同,则A的值加1
else
nB[m_nTimes]++; //如果位置不相同,则B的值加1
}
}
}
if( nA[m_nTimes]==4 ){ //猜数成功
m_strItem.setText(null);
m_strItem.setText("你猜对了,真不一般!!/n power by cr.");
m_bEndGame=true;
return;
}
else
m_nTimes++;
if( m_nTimes>9){ //猜数失败
//m_strItem.setText(null);Integer.toString(rand.nextInt(10))
//st={Integer.toString(m_aNum[0]),Integer.toString(m_aNum[1]),Integer.toString(m_aNum[2]),Integer.toString(m_aNum[3])};
m_strItem.setText(null);
m_strItem.setText("/n您猜错啦,再接再厉哦!!/n power by cr.");
m_bEndGame=true;
return;
}
//输出反馈信息
StringBuffer temp = new StringBuffer();
temp.append("你还有"+(10-m_nTimes)+"次机会,加油!/n");
for(i=0;i<m_nTimes;i++)
{
temp.append(i+1+" ");
temp.append(aNum[i]);
temp.append(" "+nA[i]);
temp.append("A");
temp.append(nB[i]);
temp.append("B");
if(i%2==0){temp.append(" ");}else{temp.append("/n");}
}
m_strItem.setText(null);
m_strItem.setText(temp.toString());
m_TFInput.setChars(null,0,0);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: