用枚举吧,没人都有出石头,剪刀,布(比如0:石头 1:剪刀 2:布)的可能,一共是27中情况。可以定义一个int win(int x, int y, int z) x,y,z分别代表不用人出的情况,返回值代表胜出情况我只能想到这些,希望能帮到你
两层循环比较,赢的+1,输的-1,那么得分大于0的话就是赢,小于0就是输,等于0就是平 for i = 1 to 3 for j = 1 to 3 if(i != j)计算输赢 end 输出玩家i的结果 end至于比较输赢的话就用二元函数吧,可读性强些: int winner(int x,int y),返回+1,0或-1代表赢,平和输
mport java.util.*;class Player{ static final int STONE=1; static final int SCISSORS=2; static final int CLOTH=5; int id; int sign; boolean isWinner; Player(int i,int s){ id=i; sign=s; isWinner=false; } } public class StoneScissorsCloth{ public static void main(String[] args){ int[] ssc={Player.STONE,Player.SCISSORS,Player.CLOTH}; String[] sscChinese={"","石头","剪刀","","","布"}; Random rand=new Random(); //玩10次,每次产生三个玩家,玩家出的拳是随机的。 // for(int i=0;i<10;i++){ Player player1=new Player(1,ssc[rand.nextInt(3)]); Player player2=new Player(2,ssc[rand.nextInt(3)]); Player player3=new Player(3,ssc[rand.nextInt(3)]); System.out.println("\n第"+(i+1)+"局:"); System.out.print( "玩家1出的是"+sscChinese[player1.sign]+"\t"); System.out.print( "玩家2出的是"+sscChinese[player2.sign]+"\t"); System.out.println("玩家3出的是"+sscChinese[player3.sign]); whoWin(player1,player2,player3);
for i = 1 to 3
for j = 1 to 3
if(i != j)计算输赢
end
输出玩家i的结果
end至于比较输赢的话就用二元函数吧,可读性强些:
int winner(int x,int y),返回+1,0或-1代表赢,平和输
如果x表示第一种石头剪子布,y表示第二种吧
石头用1表示,剪刀用2表示,布用5表示 这个主意不错 判断起来方便
我想用两个方法去执行判断
1.beginA(Player1,Player2,Player3)//3个玩家
如果只能判断一个输的话在调用beginB(Player1,Player2) 不知道这个方法行不行你做一长度为16的数组,三个出拳之和为下标,可以立即查到结果。
[3,3,3,0,-2,1,0,5,0,-5,3,-1,2,3,3,0]
结果中3表示不可能出现的结果。0表示平局,1表示石头赢,-1表示石头输,1表示石头鸁,
这几句我看不明白呢 能不能解释下哦
把三者出的加起来,2+2+5=9。
则从winner[9]得到了-5,5不是布吗?-5表示出布的输了,另两个赢了。判断谁赢谁输的时候,map.get(Math.abs(winner[9])),把选手提出来。如果是null,是平局。否则提出来的选手,可以根据winner[9]的正负,看他是赢还是输,他赢了,其它两个就输了,他输了,其它两个就赢了。
static final int STONE=1;
static final int SCISSORS=2;
static final int CLOTH=5;
int id;
int sign;
boolean isWinner;
Player(int i,int s){
id=i;
sign=s;
isWinner=false;
}
}
public class StoneScissorsCloth{
public static void main(String[] args){
int[] ssc={Player.STONE,Player.SCISSORS,Player.CLOTH};
String[] sscChinese={"","石头","剪刀","","","布"};
Random rand=new Random();
//玩10次,每次产生三个玩家,玩家出的拳是随机的。
//
for(int i=0;i<10;i++){
Player player1=new Player(1,ssc[rand.nextInt(3)]);
Player player2=new Player(2,ssc[rand.nextInt(3)]);
Player player3=new Player(3,ssc[rand.nextInt(3)]);
System.out.println("\n第"+(i+1)+"局:");
System.out.print( "玩家1出的是"+sscChinese[player1.sign]+"\t");
System.out.print( "玩家2出的是"+sscChinese[player2.sign]+"\t");
System.out.println("玩家3出的是"+sscChinese[player3.sign]);
whoWin(player1,player2,player3);
}
}
public static void whoWin(Player one,Player two,Player three){
int[] win={3, 3, 3, 0, -2, 1, 0, 5, 0, -5, 3, -1, 2, 3, 3, 0};
Player[] players=new Player[3];
players[0]=one;
players[1]=two;
players[2]=three; int winner=win[one.sign+two.sign+three.sign];
if(winner!=0){
if(winner>0){
for(int i=0;i<3;i++){
if(players[i].sign==winner){
players[i].isWinner=true;
}
}
}else{
for(int i=0;i<3;i++){
if(players[i].sign!=-winner){
players[i].isWinner=true;
}
}
}
}else{
System.out.println("平局");
}
for(int i=0;i<3;i++){
//这里可以根据isWinner做相应的操作。
//
if(players[i].isWinner){
System.out.println("玩家"+(i+1)+"赢了");
}
}
}
}
玩家1出的是剪刀 玩家2出的是布 玩家3出的是剪刀
玩家1赢了
玩家3赢了第2局:
玩家1出的是石头 玩家2出的是剪刀 玩家3出的是布
平局第3局:
玩家1出的是剪刀 玩家2出的是布 玩家3出的是布
玩家1赢了第4局:
玩家1出的是布 玩家2出的是剪刀 玩家3出的是布
玩家2赢了第5局:
玩家1出的是剪刀 玩家2出的是石头 玩家3出的是石头
玩家2赢了
玩家3赢了第6局:
玩家1出的是石头 玩家2出的是剪刀 玩家3出的是石头
玩家1赢了
玩家3赢了第7局:
玩家1出的是石头 玩家2出的是石头 玩家3出的是石头
平局第8局:
玩家1出的是布 玩家2出的是剪刀 玩家3出的是石头
平局第9局:
玩家1出的是布 玩家2出的是布 玩家3出的是石头
玩家1赢了
玩家2赢了第10局:
玩家1出的是石头 玩家2出的是剪刀 玩家3出的是石头
玩家1赢了
玩家3赢了
判断的时候,只要判断,有没有比它大的,或者小的,就行了。 public static void main(String[] args) {
//0:石头 1:剪刀 2:布
int[] arg = {2, 2, 1, 1, 2, 1};
String[] str = test(arg);
for (int i = 0; i < str.length; i++) {
System.out.print(str[i] + " ");
}
System.out.println();
} public static String[] test(int[] arg) {
boolean[] barr = new boolean[3];
String[] result = new String[arg.length];
for (int i = 0; i < arg.length; i++) {
int x = arg[i];
if (x < 0 || x >= 3) {
throw new RuntimeException();
}
barr[x] = true;
}
for (int i = 0; i < arg.length; i++) {
int x = arg[i];
boolean big = x == 0 ? barr[2] : barr[x - 1];
boolean small = x == 2 ? barr[0] : barr[x + 1];
if (big == small) {
result[i] = "平";
} else {
if (small) {
result[i] = "赢";
} else {
result[i] = "输";
}
}
}
return result;
}
client:
Enum {....}
client.send(Enum.Choice...)server:
server.recieved(client.id)
process(client.getData[])中间的状态比较略过了... 其实楼主画个时序图就明晰了. 画UML也简单...