java实现狼人杀游戏发牌

题目描述

共计21张牌。在{村民,狼人,守护,预言家,猎人,丘比特,长老,盗贼,替罪羊,女巫}随机生成12-18个身份
(每个身份唯一,村民狼人除外)。有三张底牌,底牌必须不能出现盗贼身份。 玩家输入游戏人数:15 随机生成游戏人数配置:
游戏配置:12-18人(大于18人或者小于12人,输出超出游戏人数范围) 标准配置: 人数(狼,民,神) 18(5,7,5)人 5狼人
7村民 1预言家 1女巫 1丘比特 1守护 1猎人 1村长 1 替罪羊 1吹笛者 1盗贼 21张牌
17(5,6,6)人 5狼人 7村民 1预言家 1女巫 1丘比特 1守护 1猎人 1村长 1 替罪羊 1盗贼
20张牌 16(5,6,5)人 5狼人 6村民 1预言家 1女巫 1丘比特 1守护 1猎人 1村长 1
替罪羊 1盗贼 19张牌 15(5,5,5)人 5狼人 5村民 1预言家
1女巫 1丘比特 1守护 1猎人 1村长 1 替罪羊 1盗贼 18张牌 14(4,5,5)人
4狼人 5村民 1预言家 1女巫 1丘比特 1守护 1猎人 1村长 1 替罪羊1 盗贼
17张牌 13(4,5,4)人 4狼人 5村民 1预言家 1女巫 1丘比特 1守护 1猎人 1村长 1 盗贼
16张牌 12(4,4,4)人 4狼人 4村民 1预言家 1女巫 1丘比特 1守护 1猎人 1村长 1 盗贼
15张牌

盗贼是一个特殊身份:当某位玩家获得盗贼牌的时候,可以翻开底牌三张选择底牌中自己想要的身份(有狼人要选狼人) 要求:
1.底牌可以没有狼人,如果有,最多只能有一个狼人;
2.底牌不能有盗贼;
3.输出如下:
玩家手牌为:

{01:村民,02:丘比特,03:盗贼,… ,15:女巫} 盗贼底牌为: {01:XX,02:XX ,03:XX}

package Werewolf;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Werewolf {
    public static ArrayList<String> all = new ArrayList<>();//所有的牌
    public static  ArrayList<String> play = new ArrayList<>();//可以发给玩家的牌
    public static  ArrayList<String> di = new ArrayList<>();//底牌
    public static Scanner scanner = new Scanner(System.in);
    public static int peopleName = 0;//玩家人数
    public static void main(String[] args) {

        init();//初始化牌
//        System.out.println(all);
//        System.out.println(play);
//        System.out.println(di);
        dipai();//分配底牌
        xipai();//给玩家发牌

        System.out.println("玩家手牌为:");
        System.out.println(play);
        System.out.println("盗贼底牌为:");
        System.out.println(di);


    }

    /*把之前玩家数组的牌一起整合到all里 根据随机数发给玩家*/
    public static void xipai()
    {
        Random random = new Random();
        all.addAll(play);//可以发给玩家的牌 除去底牌
        play.clear();//玩家牌清空
        while(all.size()>0)//一直分牌给玩家
        {
            int index = random.nextInt(all.size());//随机数的范围为all数组大小 左闭右开
            play.add(all.remove(index));//玩家拿牌
        }


    }
    /*all数组里面是分给底牌的(不能有盗贼)盗贼直接放到了玩家数组 最后重新洗牌  包含一个狼人 */
    public static void dipai()
    {
        Random random = new Random();
        for (int i = 0;i < 3;i++)
        {
            int index = random.nextInt(all.size());//随机数的范围为all数组大小 左闭右开
            di.add(all.remove(index));
        }
    }

    public static void init()
    {
        peopleName = scanner.nextInt();
        if (peopleName >= 12 && peopleName <= 18) {

            for (int i = 0;i < 3;i++)
            {
                play.add("狼人");
                all.add("村民");
            }
            all.add("村民");
            all.add("狼人");//一张可以给底牌的狼人 放到all数组里 其他狼人牌直接放到play数组里
            all.add("预言家");
            all.add("女巫");
            all.add("丘比特");
            all.add("守护");
            all.add("猎人");
            all.add("村长");
            play.add("盗贼");//底牌不能有盗贼 直接分配给玩家


            if (peopleName > 12)
            {
                all.add("村民");
            }
            if (peopleName > 13)
            {
                all.add("替罪羊");
            }
            if (peopleName > 14)
            {
                play.add("狼人");//放到play数组里
            }
            if (peopleName > 15)
            {
                all.add("村民");
            }
            if (peopleName > 16)
            {
                all.add("村民");
            }
            if (peopleName > 17)
            {
                all.add("吹笛者");
            }
        }else {
            System.out.println("超出人数范围");
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值