人狼ゲームを作ってみたのですがプレイヤー人数のところでなやんでいます。人数固定で作ってみたのですが、初めに人数を設定してゲームを始めるみたいな流れで作りたいです。自分で少し改良したりなどはしたんですが投票のほうまで反映されずなやんでいます。どのような形にすればいいでしょうか?
あとできればクラス分けなどもしてみたいのでアドバイスお願いします。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class jinro {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] side = {0,1,2,3,4,5,6};//初期役職。0:怪盗、1,2:人狼、3:占い師、4,5,6:村人 for(int r=0 ; r<side.length ; r++) {//ランダムに配列を変更 int rnd = (int)(Math.random()*(double)side.length); int z = side[r]; side[r] = side[rnd]; side[rnd] = z; } int[]sidek = {side[0],side[1],side[2],side[3],side[4],side[5],side[6]};//怪盗フェイズで使用
//夜の時間
System.out.println("夜になりました。");
for(int i=0; i<5 ; i++) {
System.out.print("番号を教えてください。:");
String str1 = br.readLine();
int num1 = Integer.parseInt(str1);
if(num1-1 == i) {
switch(side[i]) {
case 0://怪盗
System.out.println((i+1) + "番の役職は怪盗です。");
System.out.print("何番と交換しますか?(1~5):"); String str3 = br.readLine(); int num2 = Integer.parseInt(str3); if(0 < num2 && num2 < 6) { sidek[num2-1] = side[i]; sidek[i] = side[num2-1]; switch(sidek[i]) { case 0: System.out.println(num2 + "番と交換し、怪盗になりました。"); break; case 1: case 2: System.out.println(num2 + "番と交換し、人狼になりました。"); break; case 3: System.out.println(num2 + "番と交換し、占い師になりました。"); break; case 4: case 5: case 6: System.out.println(num2 + "番と交換し、村人になりました。"); break; } } else { System.out.println("1~5を入力してください。"); i--; } break; case 1://人狼 case 2: System.out.println((i+1) + "番の役職は人狼です。"); for(int j=0 ; j<5 ; j++) { if(i == j) continue; else if( side[j] == 1 || side[j] == 2 ) { System.out.println("あなたには" + (j+1) + "番の仲間がいます。"); } else { } } break; case 3://占い師 System.out.println((i+1) + "番の役職は占い師です。"); System.out.println("何番を占いますか?(1~5)。"); System.out.print("来ていない人2人を占う場合は(0):"); String str4 = br.readLine(); int num3 = Integer.parseInt(str4); if(num3 == 0) { for(int k=0 ; k<2 ; k++) { switch(side[num3+5]) { case 0: System.out.println("来ない人の役職は怪盗です。"); num3++; break; case 1: case 2: System.out.println("来ない人の役職は人狼です。"); num3++; break; case 3: System.out.println("来ない人の役職は占い師です。"); num3++; break; case 4: case 5: case 6: System.out.println("来ない人の役職は村人です。"); num3++; } } } else if(num3 < 6) { switch(side[num3-1]) { case 0: System.out.println((num3) + "番の役職は怪盗です。"); break; case 1: case 2: System.out.println((num3) + "番の役職は人狼です。"); break; case 3: System.out.println((num3) + "番の役職は占い師です。"); break; case 4: case 5: case 6: System.out.println((num3) + "番の役職は村人です。"); } } else { System.out.println("1~5を入力してください。"); i--; } break; case 4://村人 case 5: case 6: System.out.println((i+1) + "番の役職は村人です。"); System.out.println("特に能力はありません。"); System.out.println("頑張って人狼をあぶりだしてください。"); break; System.out.println("文字を飛ばします。");//画面遷移。入力待ちを利用し、疑似的に遷移。 String str3 = br.readLine(); System.out.println(str3 + "\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r"); } else { System.out.println("番号が違います。"); i--; } }
//日中の時間
System.out.println("朝になりました。誰に投票するか議論してください。");
System.out.println("終わったら1番から投票してください。");
System.out.println("------------------------------");
//投票行動
int [] vote = {0,0,0,0,0};//投票箱
int [] mem = {0,0,0,0,0};//投票先保持
int max = vote[0];//最大票
int [] win = {0,0,0,0,0};//処刑ルーチン
int w = 1;//勝利判定(2)
int y = 1;//勝利判定(1)
for(int l=0 ; l< vote.length ; l++) { System.out.print((l+1) + "番は投票してください。(1~5):"); String str4 = br.readLine(); int num4 = Integer.parseInt(str4); if(0 < num4 && num4 < 6) { vote[num4-1] += 1; mem[l] = num4; System.out.println(num4+"番に投票しました。"); System.out.println("文字を飛ばします。");//画面遷移。入力待ちを利用し、疑似的に遷移。 String str3 = br.readLine(); System.out.println(str3 + "\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r"); } else { System.out.println("1~5を入力してください。"); l--; } } for(int m=0 ; m< mem.length ; m++) { System.out.println((m+1) + "番は" + mem[m] + "番に投票しました。"); } System.out.println("------------------------------"); for(int n=0 ; n< vote.length ; n++) { switch(sidek[n]) { case 0: System.out.println((n+1) + "番の役職は怪盗で" + vote[n] + "票獲得しました。"); break; case 1: case 2: System.out.println((n+1) + "番の役職は人狼で"+ vote[n] + "票獲得しました。"); break; case 3: System.out.println((n+1) + "番の役職は占い師で"+ vote[n] + "票獲得しました。"); break; case 4: case 5: case 6: System.out.println((n+1) + "番の役職は村人で"+ vote[n] + "票獲得しました。"); break; case 7: System.out.println((n+1) + "番の役職は狂人で"+ vote[n] +"票獲得しました"); } } System.out.println("------------------------------"); for(int o=0 ; o< vote.length ; o++) {//配列から最大値を見つけ出し、maxに格納 int v = vote[o]; if(v > max) { max = v; } } if(max != 1) {//勝利判定1(全員同数) y--; } else { System.out.println("誰も処刑されませんでした。"); for(int s=0 ; s< vote.length ; s++) { if((sidek[s] == 1) || (sidek[s] == 2)) {//勝利判定1(人狼勝利) System.out.println("人狼の勝利です。"); s += 5; w--; y--; } } } if(y == 1) { System.out.println("村人の勝利です。");//勝利判定1(村人勝利) w--; } if(w == 1) {//勝利判定2(処刑ルーチン) for(int p=0 ; p < vote.length ; p++) {//maxとvote[]が一致した場合、処刑 if(vote[p] == max) { System.out.println((p+1) + "番は処刑されました。"); win[p] += 1; } } } if(w == 1) {//勝利判定2(票数が異なる場合) for(int q=0 ; q< win.length ; q++) {//勝利判定2(村人勝利) if((win[q] == 1 && sidek[q] == 1) || (win[q] ==1 && sidek[q] == 2)) { System.out.println("村人の勝利です。"); q += 5; w--; break; } } } if(w == 1) { System.out.println("人狼の勝利です。");//勝利判定2(人狼勝利) }
}
}