狼人杀(身份随机分配)

狼人杀,身份分配。

12人身份,3个阵营。分配身份。
阵营:
神民:预言家、女巫、猎人、白痴
平民:4民
狼人:4 狼人

程序执行:
分配身份
退出
点击分配身份,将12个身份随机分给12个用户,打印出来。
例如:
1.预言家 7.女巫
2.平民 8.狼人
3.猎人 9狼人
4.狼人 10.平民
5.白痴 11狼人
6.平民 12.平民
(进阶功能,可以做一个猜身份的功能)
每次分配身份结果都随机,不是固定为上述功能。

package com.yong;

import java.util.*;

public class WerewolfKill {
    private static Random random=new Random();
    private static Scanner scanner=new Scanner(System.in);
    private static boolean antidote=true;//解药
    private static boolean poison=true;//毒药
    private static List<Map<String,Object>> players=new ArrayList<>();//场上玩家信息数组<名称,身份,种族>

    public static void main(String[] args) {
        /*玩家身份初始化*/
        identityInit();
        System.out.println(players.toString());
        System.out.println("游戏开始!");
        while (judgePriesthood()&&judgeWolf()&&judgePeople()){
            wolfsKill();
        }
        if(judgeWolf()==false){
            System.out.println("游戏结束,好人胜利!");
        }else {
            System.out.println("游戏结束,狼人胜利!");
        }
    }
    /*玩家身份初始化*/
    public static void identityInit(){
        List<Map<String,Object>> identitys=new ArrayList<>();//身份数组<身份名称,数量,种族>
        String identity[]={"预言家","女巫","猎人","白痴","平民","狼人"};
        Integer amount[]={1,1,1,1,4,4};
        String race[]={"神","神","神","神","人","狼"};
        for(int i=0;i<identity.length;i++){
            Map<String,Object> map=new HashMap<>();
            map.put("identity", identity[i]);
            map.put("amount", amount[i]);
            map.put("race", race[i]);
            identitys.add(map);
        }
        for(int i=0;i<12;i++){
            Map<String,Object> map=new HashMap<>();
            Integer num=positiveNumber(0,identitys.size());
            map.put("name", "玩家"+(i+1));
            map.put("identity",identitys.get(num).get("identity"));
            map.put("race",identitys.get(num).get("race"));
            identitys.get(num).put("amount",(Integer)identitys.get(num).get("amount")-1);
            if((Integer)identitys.get(num).get("amount")==0){
                identitys.remove(num.intValue());
            }
            players.add(map);
        }
    }
    /*夜晚-狼人投票s人*/
    public static void wolfsKill(){
        System.out.println("喔...,天黑请闭眼,狼人请睁眼!");
        for(int i=0;i<players.size();i++){
            System.out.print(players.get(i).get("name")+":");
            if(players.get(i).get("identity").equals("狼人")){
                System.out.print(players.get(i).get("identity")+"; ");
            }else{
                System.out.print("好人; ");
            }
        }
        System.out.println();
        System.out.println("淘汰玩家(输入玩家序号1,2..)...");
        int a=scanner.nextInt();
        int b=-1;
        for(int i=0;i<players.size();i++){
            if(players.get(i).get("name").equals("玩家"+a)){
                prophet();
                int k=witch(a);
                if(k==-2){
                    a=-1;
                    break;
                }
                if(k>=0){
                    b=k;
                }
                players.remove(i);
                break;
            }
        }
        referendum(a,b);
    }
    /*白天-全体公投*/
    public static void referendum(int a1,int a2){
        if(a1==-1&&a2==-1){
            System.out.println("今晚平安夜!");
        }else if(a1!=-1&&a2>=0){
            System.out.println("天亮了,玩家"+a1+","+a2+"死亡!");
            System.out.println("请玩家"+a1+"发表遗言...");
            String deathStr1=scanner.next();
            System.out.println("请玩家"+a2+"发表遗言...");
            String deathStr2=scanner.next();
        }else{
            System.out.println("天亮了,玩家"+a1+"死亡!");
            System.out.println("请玩家"+a1+"发表遗言...");
            String deathStr=scanner.next();
        }
        int num=positiveNumber(0,players.size());
        System.out.println("随机发言,从"+players.get(num).get("name")+"开始发言");
        for(int i=0;i<players.size();i++){
            if(num>players.size()-1){
                num=0;
            }
            System.out.println("请"+players.get(num).get("name")+"发言...");
            String str=scanner.next();
            num++;
        }
        System.out.println();
        System.out.println("发言完毕,开始全体公投");
        for(int i=0;i<players.size();i++) {
            System.out.print(players.get(i).get("name") + "; ");
        }
        System.out.println();
        System.out.println("淘汰玩家(输入玩家序号)...");
        int b=scanner.nextInt();
        for(int i=0;i<players.size();i++){
            if(players.get(i).get("name").equals("玩家"+b)){
                System.out.println("玩家"+b+"死亡,请发表遗言...");
                String outStr=scanner.next();
                hunter(i);
                players.remove(i);
                break;
            }
        }
    }
    /*猎人技能*/
    public static void hunter(int index){
            if(players.get(index).get("identity").equals("猎人")){
                System.out.println("==猎人技能==");
                for(int k=0;k<players.size();k++) {
                    System.out.print(players.get(k).get("name") + "; ");
                }
                System.out.println();
                System.out.println("猎人请发动技能,选择淘汰玩家...");
                int b=scanner.nextInt();
                for(int j=0;j<players.size();j++){
                    if(players.get(j).get("name").equals("玩家"+b)){
                        System.out.println("玩家"+b+"被猎人带走");
                        players.remove(j);
                        break;
                    }
                }
            }

    }
    /*预言家技能*/
    public static void prophet(){
        k:
        for(int j=0;j<players.size();j++){
            if(players.get(j).get("identity").equals("预言家")) {
                System.out.println("==预言家技能==");
                System.out.println("预言家请睁眼,今晚你要查验身份的玩家(输入玩家序号1,2..)...");
                int a = scanner.nextInt();
                for (int i = 0; i < players.size(); i++) {
                    if (players.get(i).get("name").equals("玩家" + a)) {
                        if (players.get(i).get("identity").equals("狼人")) {
                            System.out.println(players.get(i).get("name") + ":" + players.get(i).get("identity"));
                        } else {
                            System.out.println(players.get(i).get("name") + ":" + "好人");
                        }
                        break k;
                    }
                }
            }
        }

    }
    /*女巫技能*/
    public static int witch(int index)  {
        for(int i=0;i<players.size();i++) {
            if (players.get(i).get("identity").equals("女巫")) {
                System.out.println("==女巫技能==");
                if(antidote==true){
                    System.out.println("今夜死的是玩家"+index+"是否救他?(1:救 0:不救)");
                    int ii=scanner.nextInt();
                    if(ii==1){
                        antidote=false;
                        return -2;
                    }
                }
                if(poison==true){
                    System.out.println("今夜你是否使用毒药?(1:用 0:不用)");
                    int ii=scanner.nextInt();
                    if(ii==1){
                        for(int k=0;k<players.size();k++) {
                            System.out.print(players.get(k).get("name") + "; ");
                        }
                        System.out.println();
                        System.out.println("女巫发动技能,请选择淘汰玩家...");
                        int b=scanner.nextInt();
                        for(int j=0;j<players.size();j++){
                            if(players.get(j).get("name").equals("玩家"+b)){
                                poison=false;
                                players.remove(j);
                                return b;
                            }
                        }
                    }
                }
            }
        }
        return -3;
    }
    /*判断场上是否还有神职*/
    public static Boolean judgePriesthood(){
        int i=0;
        for(int j=0;j<players.size();j++){
            if( players.get(j).get("race").equals("神")){
                i++;
            }
        }
        if(i==0){
            return false;
        }else {
            return true;
        }
    }
    /*判断场上是否还有狼*/
    public static Boolean judgeWolf(){
        int i=0;
        for(int j=0;j<players.size();j++){
            if( players.get(j).get("race").equals("狼")){
                i++;
            }
        }
        if(i==0){
            return false;
        }else {
            return true;
        }
    }
    /*判断场上是否还平民*/
    public static Boolean judgePeople(){
        int i=0;
        for(int j=0;j<players.size();j++){
            if( players.get(j).get("race").equals("人")){
                i++;
            }
        }
        if(i==0){
            return false;
        }else {
            return true;
        }
    }
    /*范围随机取值*/
    public static Integer positiveNumber(Integer MIN, Integer MAX){
        return random.nextInt(MAX) % (MAX - MIN + 1) + MIN;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值