狼人杀,身份分配。
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;
}
}