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("超出人数范围");
}
}
}
标签:play,java,狼人,玩家,底牌,add,盗贼,发牌 来源: https://blog.csdn.net/qq_44004011/article/details/113325431