猜数字小游戏

以前在电子词典上玩过的游戏的,很喜欢这个游戏现在用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[n] = Math.abs(k % 10);
            //for循环语句,确保四个数位上的数字无重复
            for( m = 0; m < n; m ++ ){
                //若与前面的数字重复,则用加1的办法保证不重复
                if( m_aNum[n] == m_aNum[m] )
                    m_aNum[n] ++;
                //若加1后大于9则回到0
                if( m_aNum[n] > 9 )
                    m_aNum[n] = 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);        
        
   }
}
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值