黑马程序员技术交流社区
标题:
求解
[打印本页]
作者:
海带
时间:
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。
如果看懂了在评分里给点黑马币呗。辛苦写了一个半小时呢。
*/
class Demo
{
public static void main(String [] args)
{
int me,pc; //定义两个整数,表示玩家和电脑。
String [] arr={"剪刀","石头","布"};
System.out.println("玩家 VS 电脑:");
String [] a=new String [99];
int x=1;
while(x<99)
{
me=rand();
pc=rand();
if (me-pc==1 || me-pc==-2)
{
a[x]=arr[me]+">"+arr[pc];
System.out.println(a[x]);
}
else if(me-pc==-1 || me-pc==2)
{
a[x]=arr[me]+"<"+arr[pc];
System.out.println(a[x]);
}
else
continue;
if(a[x].equals(a[x-1]))
return;
x++;
}
}
public static int rand()
{
int x=(int)(Math.random()*300)+1;
//如果直接用me=(int)(随机数*3),结果等于2的概率比较大,所以才这样中和一下的。
x%=3; //产生随机数:0,1,2中的一个。
return x;
}
}
复制代码
作者:
海带
时间:
2015-4-28 17:59
谢了,如果不用数组怎样解?
作者:
1017161726
时间:
2015-4-28 18:31
class Demo
{
public static void main(String [] args)
{
int me,pc;
String [] arr={"剪刀","石头","布"}; //这个数组得留着。
System.out.println("玩家 VS 电脑:");
int meWin=0,pcWin=0;
while(true)
{
me=rand();
pc=rand();
if (me-pc==1 || me-pc==-2)
{
meWin++;
pcWin=0; //重点是这个,pcWin如果不连续执行,值就会被重置为0.下面meWin也是一样。
System.out.println(arr[me]+">"+arr[pc]);
if (meWin==2)
return;
}
if(me-pc==-1 || me-pc==2)
{
pcWin++;
meWin=0;
System.out.println(arr[me]+"<"+arr[pc]);
if (pcWin==2)
return;
}
}
}
public static int rand()
{
int x=(int)(Math.random()*300)+1;
x%=3;
return x;
}
}
//你看一下,是不是出现了两个大于号或者两个小于号,程序就结束了??仔细看看分析,帮助理解。评分。
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2