找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 7886|回复: 6

训练反应的小游戏

[复制链接]
发表于 2010-9-8 08:08:08 | 显示全部楼层 |阅读模式
上周末在地铁中 无意看到小朋友玩个小游戏机 就是练反应的 于是突发奇想 也想在NXT上实现那么一个像练反应又像是跳舞毯游戏一样的小程序
初步构思如下
屏幕最上方由时间控制随机产生上下左右的标志 然后短时间内按NXT按钮 如果按对了 最下面的计数显示正确数+1 如果错误了 最下面的计数显示错误数+1
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2010-9-8 10:21:33 | 显示全部楼层
有想法就要实践!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-9-8 12:13:11 | 显示全部楼层
呵呵 实践了 虽然效果不是很理想 可能是我对时间和多线程的把握还不算太好
游戏第一行显示随机图标 第二行显示正确(r) 错误(w) 总图标数(s)
不多说了 上代码:
import java.util.Random;
import lejos.nxt.*;

public class Game {

        public static long sum = 0;
        public static long count_right = 0;
        public static long count_wrong = 0;
        public static int num;
        public static boolean plusplus = false;
       
        class Exit extends Thread
        {

                @Override
                public void run() {
                        // TODO Auto-generated method stub
                        super.run();
                        while(true)
                        {
                                if(Button.ESCAPE.isPressed())
                                        NXT.exit(0);
                        }
                }
               
        }
       
        class Result extends Thread
        {
                @Override
                public void run() {
                        // TODO Auto-generated method stub
                        super.run();
                        while(true)
                        {
                                LCD.drawString("r:"+String.valueOf(count_right),0,2);
                                LCD.drawString("w:"+String.valueOf(count_wrong),5,2);
                                LCD.drawString("s:"+String.valueOf(sum),9,2);
                        }
                }
        }
       
        class ButtonReaction extends Thread
        {
                private boolean stop = false;
                private int clicked = 0;
               
                public void setStop()
                {
                        stop = true;
                        if(clicked==0)
                                count_wrong++;
                }
               
                @Override
                public void run() {
                        // TODO Auto-generated method stub
                        super.run();
                        while(!stop)
                        {
                                int clickedNum = -1;
                                if(Button.ENTER.isPressed())
                                {
                                        clickedNum = 1;
                                        clicked++;
                                        stop=true;
                                }
                               
                                else if(Button.LEFT.isPressed())
                                {
                                        clickedNum = 0;
                                        clicked++;
                                        stop=true;
                                }
                               
                                else if(Button.RIGHT.isPressed())
                                {
                                        clickedNum = 2;
                                        clicked++;
                                        stop=true;
                                }
                               
                                if(clicked==1)
                                {
                                        if(num==clickedNum)
                                                count_right++;
                                        else
                                                count_wrong++;
                                       
                                        sum++;
                                        plusplus=true;
                                }
                        }
                }
        }
       
        public static void main(String[] args) throws InterruptedException
        {
                // TODO Auto-generated method stub
                Thread exit = new Game().new Exit();
                Thread result = new Game().new Result();
                exit.start();
                result.start();
                LCD.drawString("ready",0,0);
                Thread.sleep(2000);
               
                while(true)
                {
                        LCD.clear();
                        Random rnd = new Random();
                        num = rnd.nextInt(3);
                        switch(num)
                        {
                                case 0: LCD.drawString("<-",0,0); break;
                                case 1: LCD.drawString("^",0,0); break;
                                default: LCD.drawString("->",0,0); break;
                       
                        }
                        ButtonReaction button = new Game().new ButtonReaction();
                        button.start();
                        plusplus=false;
                        Thread.sleep(5000);//速度调节
                        button.setStop();
                        if(!plusplus)
                                sum++;
                }
        }

}

代码还不完美 我打算有时间加上积分和过关系统 现在这个版本只是测试版 如果有什么不足或者很好的建议 还请大家指出
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-9-8 12:18:16 | 显示全部楼层
Game.rar (893 Bytes, 下载次数: 40) 源代码压缩包在这里 感兴趣的人可以下载
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-9-8 12:30:23 | 显示全部楼层
另外求教高手 我run里stop为false以后 线程是不是结束生命周期并且等待垃圾回收?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-9-8 22:24:34 | 显示全部楼层
怎么我的帖子有人看没人回复呢
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-1-4 20:31:51 | 显示全部楼层
有了有了,nxtprogram.com
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-12-22 16:29 , Processed in 0.102514 second(s), 21 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表