/* * Created on 2005/05/02 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ /** * @author kaz * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ /* * ToDo * ・クク宣言の処理 * ・プレイ中のオープンカードのマーク(家・馬・猫・道化・猫の呪いで死んだカード) * ・カウンティングによる各プレイヤーの手札推測メソッド * ・自分がチェンジされて渡したカードのマーク * ・各プレイヤーの手番開始前のチェンジ宣言の経過リスト */ public class CucuGame5 { public static void main(String[] args) { System.out.println("** start **"); GameSequence game = new GameSequence(); // ゲーム環境作成 game.addPlayer(new MyPlayer("a")); // プレイヤーの追加 game.addPlayer(new MyPlayer("b")); game.addPlayer(new MyPlayer("c")); game.addPlayer(new MyPlayer3("d")); game.addPlayer(new MyPlayer("e")); game.addPlayer(new MyPlayer("f")); game.addPlayer(new MyPlayer("g")); game.addPlayer(new MyPlayer3("h")); // 第1ラウンドの戦略分析 統計処理 int[] WINLOSE = new int[game.n]; int trial = 2000; for(int j = 0; j< trial; j++) { // ゲーム回数 System.out.println("+++++Game: " + j); game.init(); // ゲーム環境初期化 game.play4(); // 第1〜3ラウンドのみ&復活処理なしのゲーム System.out.println("+++++Game: " + j); for(int i = 0; i= n) { System.out.println("Player"+i+ ": draw"); tmp2 = drawCard(); } else { if(player[i+j].alive) { tmp2 = player[i+j].card; } } if(Card.getRank(tmp2) == 19 || // 馬・家 Card.getRank(tmp2) == 17 ) { System.out.println("pass"); if(i+j >= n) { discard(tmp2); } continue; } if(Card.getRank(tmp2) == 21) { // クク System.out.println("Cuccu"); if(i+j >= n) { discard(tmp2); } break CUCU; } if(Card.getRank(tmp2) == 18) { // 猫 System.out.println("Cat"); if(i+j >= n) { discard(tmp2); } System.out.println("負け Player" +owner[tmp1]); player[owner[tmp1]].alive = false; discard(player[owner[tmp1]].card); break; } if(Card.getRank(tmp2) == 20) { // 人間 System.out.println("Man"); if(i+j >= n) { discard(tmp2); } System.out.println("負け Player" +i); player[i].alive = false; discard(player[i].card); break; } player[i].card = tmp2; if(Card.getRank(tmp2) == 0) { // 道化 if(i+j>=n) { player[i].card = tmp2 + 50; // 道化のランク強化 } else { System.out.println("負け Player" +i); player[i].alive = false; discard(player[i].card); } } if(i+j= n) { System.out.println("Player"+i+ ": draw"); tmp2 = drawCard(); } else { if(player[i+j].alive) { tmp2 = player[i+j].card; } else { continue; } } if(Card.getRank(tmp2) == 19 || // 馬・家 Card.getRank(tmp2) == 17 ) { System.out.println("pass"); if(i+j >= n) { discard(tmp2); } continue; } if(Card.getRank(tmp2) == 21) { // クク if(i+j >= n) { // 山札からククを引いた System.out.println("Cucu"); discard(tmp2); break CUCU; } } if(Card.getRank(tmp2) == 18) { // 猫 System.out.println("Cat"); if(i+j >= n) { discard(tmp2); } System.out.println("負け Player" +owner[tmp1]); player[owner[tmp1]].alive = false; discard(player[owner[tmp1]].card); break; } if(Card.getRank(tmp2) == 20) { // 人間 System.out.println("Man"); if(i+j >= n) { discard(tmp2); } System.out.println("負け Player" +i); player[i].alive = false; discard(player[i].card); break; } player[i].card = tmp2; //もらうカードの処理 if(Card.getRank(tmp2) == 0) { // 道化 if(i+j>=n) { // 山札から引いた場合 player[i].card = tmp2 + 50; // 道化のランク強化 } else { System.out.println("負け Player" +i); player[i].alive = false; discard(tmp2); } } //渡すカードの処理 if(i+j=50) return "最強の道化"; return names[n/2]; } static int getRank(int n) { return n / 2; } } class Player { int chips = 10; boolean alive = true; boolean inplay = true; int card; int card1st; GameSequence game; String name; Player(String name) { this.name = name; } boolean cucu(int n , int m , int t) { // n人参加。自分は第mプレイヤ。現在t人目の順番 return false; //Cucu宣言する場合は、true } boolean change() { // どんな場合も必ずノーチェンジ return false; } int get1stCard(){ return card1st; } } class MyPlayer extends Player { MyPlayer(String name) { super(name); } boolean cucu(int n , int m , int t) { // n人参加。自分は第mプレイヤ。現在t人目の順番 return false; //Cucu宣言する場合は、true } boolean change() { // カードのランク(0が道化、21がクク)が10未満のときチェンジ if(Card.getRank(card) < 10) { return true; } else { return false; } } } class MyPlayer2 extends Player { MyPlayer2(String name) { super(name); } boolean cucu(int n , int m , int t) { // n人参加。自分は第mプレイヤ。現在t人目の順番 return true; //Cucu宣言する場合は、true } boolean change() { // カードのランク(0が道化、21がクク)が10未満のときチェンジ if(Card.getRank(card) < 10) { return true; } else { return false; } } } class MyPlayer3 extends Player { MyPlayer3(String name) { super(name); } boolean cucu(int n , int m , int t) { // n人参加。自分は第mプレイヤ。現在t人目の順番(スタートは1番目) if(n==2) return true; if(m==1) return false; if(t+3 < m) return false; return true; //Cucu宣言する場合は、true } boolean change() { int lives = game.getAliveNumber(); // 生きている人数 int seq = game.getSequenceNumber(); // 自分の順番(スタートは1番目) int fcd = get1stCard(); // 最初に持っていたカード if(fcd < card) { // 交換された後でカードが強くなった場合 return false; } // カードのランク(0が道化、21がクク)が10未満のときチェンジ // 山札から引いた道化カードは、ランク25 if(Card.getRank(card) < 8 + (4- lives/2)) { return true; } else { return false; } } }