Java 随机匹对PK小组 猜拳

package com.formssi.testTream;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
 * 分组猜拳PK
 * @author pindu
 *
 */
public class BuildTeam {

    /**
     * 分组PK情况
     * @param teamNum
     */
    public static void buildTeam(int teamNum) {
        List<Integer> list = new ArrayList<>();
        //生成随机组数
        nums(teamNum, 1, teamNum, list);
        List<Integer> list2 = new ArrayList<>();
        //将随机组分组
        while (list2.size() < list.size()) {
            list2.add(list.remove(list.size()-1));
        }
        
        System.out.println("分组情况");
        //输出分组对阵
        for(int i=0;i<list2.size();i++){
            System.out.println(list2.get(i)+"\t"+list.get(i));
        }
        //输出分组猜拳情况
        System.out.println("分组猜拳情况");
        for(int i=0;i<list2.size();i++){
            isTeam(list2.get(i), list.get(i));
        }
    }
    
    /**
     * 判断两队猜拳的输赢情况,并输出
     * @param host
     * @param guest
     */
    public static void isTeam(int host,int guest) {
        if (paper(host, guest)) {
            System.out.println(host+" 队与 "+guest+" 队猜拳情况 "+host+" 队胜");
        }else {
            System.out.println(host+" 队与 "+guest+" 队猜拳情况 "+guest+" 队胜");
        }
    }
    
    /**
     * 生成一组不同的随机数 arr{1,2,3,4,5,6} 比如随机生成了3 取出arr[3]=3,然后将arr{1,2,6,4,5,3} 数组模拟长度减1
     * 比如随机生成了3 取出arr[3]=6,然后将arr{1,2,5,4,6,3} 数组模拟长度减1
     *
     * @author pindu
     */
    public static void nums(int num, int min, int max,List<Integer> list) {
        // 如果生成树目超出范围直接返回
        int len = max - min + 1;
        if (num > len) {
            return;
        }
        // 生成有序数组
        int[] arr = new int[len];
        for (int i = 0; i < len; i++) {
            arr[i] = i + min;
        }
        // 生成随机数
        int t = 0;
        while (num > 0) {
            t = (int) (Math.random() * (max - min + 1)) % len;
//            System.out.println(arr[t]);
            list.add(arr[t]);
            arr[t] = arr[--len];
            num--;
        }
    }
    
    /**
     * 判断两队猜拳输赢
     * @param host
     * @param guest
     * @return 返回TRUE 说明主队赢
     */
    public static boolean paper(int host,int guest) {
        List<Integer> list = new ArrayList<>();
        int temp = -6;
        int sum = 0;
        while (list.size() < 3) {
            sum = 0;
            if(0 != (temp=isWin(fight(), fight()))){
                list.add(temp);
            }
            switch (temp) {
            case 0:
                System.out.println("\t平");
                break;
            case 1:
                System.out.println("\t胜");
                break;
            case -1:
                System.out.println("\t输");
                break;
            }
            for(Integer i:list){
                sum +=i;
            }
            if (sum > 1) {
                return true;
            }else if (sum < -1) {
                return false;
            }
        }
        for(Integer i:list){
            sum +=i;
        }
        return sum >= 1 ? true : false;
    }
    
    /**
     * 随机猜拳情况
     * @return 随机出拳
     */
    public static char fight() {
        int t = (int) (Math.random()*3);
        if (0 == t) {
            return 'O';
        }else if (1 == t) {
            return 'X';
        }else {
            return '#';
        }
    }
    
    /**
     * 猜拳的所有情况
     * @param host    主队的出拳
     * @param guest 客队的出拳
     * @return
     */
    public static int isWin(char host,char guest) {
        
        System.out.print("host:"+host+"\tguest:"+guest);
        
        if ('O' == host && 'X' == guest) {
            return 1;
        }
        
        if ('O' == host && '#' == guest) {
            return -1;
        }
        
        if ('O' == host && 'O' == guest) {
            return 0;
        }
        if ('X' == host && 'O' == guest) {
            return -1;
        }
        
        if ('X' == host && '#' == guest) {
            return 1;
        }
        
        if ('X' == host && 'X' == guest) {
            return 0;
        }
        if ('#' == host && 'X' == guest) {
            return -1;
        }
        
        if ('#' == host && 'O' == guest) {
            return 1;
        }
        
        if ('#' == host && '#' == guest) {
            return 0;
        }        
        return 0;
    }
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入比赛组数:");
        int team = in.nextInt();
        while (team%2 != 0 || team <1) {
            System.out.println("比赛对数需要为偶数,请重新输入:");
            team = in.nextInt();
        }
        buildTeam(team);
        
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值