黑马程序员技术交流社区

标题: 求解 [打印本页]

作者: 海带    时间: 2015-4-28 11:39
标题: 求解
写一个程序小游戏,该游戏是你和电脑玩石头剪刀布,直到你或电脑连赢两次结束游戏
思路是:
1 定义两个变量分别存你出的剪刀石头布和电脑出的石头剪刀布;用0代表石头,1代表剪刀,2代表布;
2比较连个变量的大小,即判断你和电脑谁赢
3,定义两变量存谁赢的次数,在循环中玩游戏当次数等于二就break
我这样求的是谁赢两次就结束游戏不是连续赢两次;
文怎样思考能设置变量来解决连赢两次呢?
若解决了最好附上代码,Thank you very much!!!

作者: 1017161726    时间: 2015-4-28 14:30
/*写一个程序小游戏,该游戏是你和电脑玩石头剪刀布,直到你或电脑连赢两次结束游戏
                分析一下:
                                0 代表剪刀,1 代表石头,2 代表布。
                                me-pc=0;是平。
                                me-pc=1;是玩家赢。
                                me-pc=2;是电脑赢。
                                me-pc=-1;是电脑赢。
                                me-pc=-2;是玩家赢。
                                当然如果012代表的顺序不一样,这些结果的含义也不一样。       
                                                如果0 代表石头,1 代表剪刀,2 代表剪布。
                                                me-pc=0;是平。
                                                me-pc=1;是电脑赢。
                                                me-pc=2;是玩家赢。
                                                me-pc=-1;是玩家赢。
                                                me-pc=-2;是电脑赢。
                        但是有个规律是:
                                me-pc=-1和me-pc=2是同一方赢,me-pc=1和me-pc=-2也是同一方赢。这个需要仔细分析的。


        我大致写一下思路吧。我代码中就不写注释了。
                        定义电脑和玩家。创建一个有限数组,然后每次取出电脑和玩家的随机数比较差值是多少。
                        每次把比较后的结果添加进数组,然后和前一个数组元素比较,用字符串的equals方法比较内容是否相同。
                        如果相同,就是说明电脑或玩家第二次赢了。
                        这里用大于小于号表示是电脑赢还是玩家赢。所以比较时可以区分。
                                如果是平局,直接continue。
可能Math产生随机数你不太懂,可以查API,Java  lang包中的Math。
如果看懂了在评分里给点黑马币呗。辛苦写了一个半小时呢。
*/

  1. class Demo
  2. {
  3.         public static void main(String [] args)
  4.         {
  5.                 int me,pc;                //定义两个整数,表示玩家和电脑。

  6.                 String [] arr={"剪刀","石头","布"};
  7.                 System.out.println("玩家 VS 电脑:");
  8.                
  9.                 String [] a=new String [99];
  10.                 int x=1;
  11.                 while(x<99)
  12.                 {
  13.                         me=rand();
  14.                         pc=rand();

  15.                         if (me-pc==1 || me-pc==-2)
  16.                         {
  17.                                 a[x]=arr[me]+">"+arr[pc];
  18.                                 System.out.println(a[x]);
  19.                         }
  20.                         else if(me-pc==-1 || me-pc==2)
  21.                         {
  22.                                 a[x]=arr[me]+"<"+arr[pc];
  23.                                 System.out.println(a[x]);
  24.                         }
  25.                         else
  26.                                 continue;

  27.                         if(a[x].equals(a[x-1]))
  28.                                 return;
  29.                         x++;
  30.                 }
  31.         }

  32.         public static int rand()
  33.         {
  34.                 int x=(int)(Math.random()*300)+1;

  35.                 //如果直接用me=(int)(随机数*3),结果等于2的概率比较大,所以才这样中和一下的。
  36.                 x%=3;                                        //产生随机数:0,1,2中的一个。
  37.                 return x;
  38.         }
  39. }
复制代码





作者: 海带    时间: 2015-4-28 17:59
谢了,如果不用数组怎样解?
作者: 1017161726    时间: 2015-4-28 18:31

  1. class Demo
  2. {
  3.         public static void main(String [] args)
  4.         {
  5.                 int me,pc;
  6.                 String [] arr={"剪刀","石头","布"};                //这个数组得留着。
  7.                 System.out.println("玩家 VS 电脑:");
  8.                 int meWin=0,pcWin=0;
  9.                 while(true)
  10.                 {        
  11.                         me=rand();
  12.                         pc=rand();

  13.                         if (me-pc==1 || me-pc==-2)
  14.                         {
  15.                                 meWin++;
  16.                                 pcWin=0;   //重点是这个,pcWin如果不连续执行,值就会被重置为0.下面meWin也是一样。
  17.                                 System.out.println(arr[me]+">"+arr[pc]);
  18.                                 if (meWin==2)
  19.                                         return;
  20.                         }
  21.                         if(me-pc==-1 || me-pc==2)
  22.                         {
  23.                                 pcWin++;
  24.                                 meWin=0;
  25.                                 System.out.println(arr[me]+"<"+arr[pc]);
  26.                                 if (pcWin==2)
  27.                                         return;
  28.                         }
  29.                 }
  30.         }

  31.         public static int rand()
  32.         {
  33.                         int x=(int)(Math.random()*300)+1;
  34.                         x%=3;
  35.                         return x;
  36.         }
  37. }

  38. //你看一下,是不是出现了两个大于号或者两个小于号,程序就结束了??仔细看看分析,帮助理解。评分。
  39.                         
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2