三个玩家,进行石头,剪刀,布游戏,定输赢;一局结束后,必须每个玩家都同意开始新游戏,才开始新的一局(不是2人的)
大家帮忙分析一下要怎么去写 还有如果3人各出石头、剪刀、布那算什么结果啊  大家帮忙分析一下整体思路啊
要是谁能设计UML图来更好了  
大家帮忙啊  很急啊!!

解决方案 »

  1.   

    用枚举吧,没人都有出石头,剪刀,布(比如0:石头 1:剪刀 2:布)的可能,一共是27中情况。可以定义一个int win(int x, int y, int z) x,y,z分别代表不用人出的情况,返回值代表胜出情况我只能想到这些,希望能帮到你
      

  2.   

    两层循环比较,赢的+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代表赢,平和输
      

  3.   

    你这是不是还要支持联机玩 牵涉到Socket编程啊?
      

  4.   

    设计一个函数,boolean f(int x,int y)
    如果x表示第一种石头剪子布,y表示第二种吧
      

  5.   

    6楼的  谢谢你再次帮我解决问题啊  上次路径问题也多亏了你帮忙啊  呵呵
    石头用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表示石头鸁, 
    这几句我看不明白呢  能不能解释下哦
      

  6.   

    int[] winner={3,3,3,0,-2,1,0,5,0,-5,3,-1,2,3,3,0};你可以事先把三个选手放一Map<Integer,Player>中,Integer是他们出的拳。比如说,Player1出的是2(剪刀),Player2出的也是2(剪刀),Palyer3出的是5(布).
    把三者出的加起来,2+2+5=9。
    则从winner[9]得到了-5,5不是布吗?-5表示出布的输了,另两个赢了。判断谁赢谁输的时候,map.get(Math.abs(winner[9])),把选手提出来。如果是null,是平局。否则提出来的选手,可以根据winner[9]的正负,看他是赢还是输,他赢了,其它两个就输了,他输了,其它两个就赢了。
      

  7.   

    石头1  剪子2 布3首先检查A、B、C是否各不相同,如果和为6,那就是平局接着检查是否有三个相同,如果一致,也是平局最后剩下的就是两个相同,一个不同,取出那两个不同的比
      

  8.   

    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);

    }
    }
    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)+"赢了");
    }
    }

     
    }
    }
      

  9.   

    F:\java>java  StoneScissorsCloth第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赢了
      

  10.   

    可以用一个boolean[],分别表示石头、剪子、布,有没有出过。
    判断的时候,只要判断,有没有比它大的,或者小的,就行了。    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;
        }
      

  11.   

    我的理解
    client:
    Enum {....}
    client.send(Enum.Choice...)server:
    server.recieved(client.id)
    process(client.getData[])中间的状态比较略过了...   其实楼主画个时序图就明晰了.  画UML也简单...