//=============================== // 2002-12-23 Ryusei // 真剣ずしシミュレーション用PG //=============================== import java.awt.*; import java.lang.*; import java.util.*; ////////// 各時点での必要データを保持するクラス ////////////////////////////// class SushiData { /*各々の得点を保存*/ public int sc1, sc2; /*現在の攻め手(0 or 1)*/ public int P; /*現在の手数(0 or 1)*/ public int T; /*1手目のカード種類*/ public int preC; /*既知カードの種類*/ public int old[]; SushiData(int sc1, int sc2, int P, int T, int preC, int[] old) { this.old = new int[old.length]; this.sc1 = sc1; this.sc2 = sc2; this.P = P; this.T = T; this.preC = preC; for (int i=0; i 0) { // memo:極楽騒動の最中、大晦日SPが元よりなかったのは不幸中の幸いか。「極楽はどこだ」 // num に 0-i の乱数を設定 // ランダムに選択するカードを設定 num = Math.abs((rnd.nextInt()) % s.size()); // 選択されたカードが既にゲットされていないかチェックする while (sdt.old[((Integer)(s.get(num))).intValue()] == 2) { num = Math.abs((rnd.nextInt()) % s.size()); } // 選択カード値取得 m = ((Integer)(s.get(num))).intValue(); // 1枚目のカード if (sdt.T == 0) { // ぐるぐるカード if (m == joker) { sdt.trnsPlayer(); // 取得したカードをリストから削除する s.remove(num); } // 既知のカードと一致 else if (sdt.old[m] == 1) { sdt.addSc(); sdt.old[m] = 2; // 取得したカードをリストから削除する(2枚) cutCard(s, m); } // 初めての種類のカード else { sdt.T = 1; sdt.preC = m; sdt.old[m] = 1; } } // 2枚目のカード else { // ぐるぐるカード if (m == joker) { sdt.trnsPlayer(); sdt.T = 0; // 取得したカードをリストから削除する s.remove(num); } // 1枚目のカードと一致 else if (m == sdt.preC) { sdt.addSc(); sdt.T = 0; sdt.old[m] = 2; // 取得したカードをリストから削除する(2枚) cutCard(s, m); } else { // 既知のカードと一致 if (sdt.old[m] == 1) { sdt.trnsPlayer(); sdt.addSc(); sdt.T = 0; sdt.old[m] = 2; // 取得したカードをリストから削除する(2枚) cutCard(s, m); } // 初めての種類のカード else { sdt.T = 0; sdt.trnsPlayer(); sdt.old[m] = 1; } } } } // 勝ち数カウント if (sdt.sc1 > sdt.sc2) { win1++; System.out.println("先攻の勝利です。"); } else if (sdt.sc1 < sdt.sc2) { win2++; System.out.println("後攻の勝利です。"); } else { win3++; System.out.println("引分けです。"); } // 成績別の内訳計算 int winAll = win1+win2+win3; System.out.println("先攻:"+(double)((double)(win1)*100/winAll)+" 後攻:"+(double)((double)(win2)*100/winAll)+" 引分け:"+(double)((double)(win3)*100/winAll)); } } //============================================================ // 機能名 :リスト削除 // // 返り値 :なし // // 機能説明:指定された値を持つ項目をリストから削除する // // 備考 :なし // //=========================================================== private void cutCard(LinkedList s, int val) { int i = 0; // カウンタ用 // LinkedList に対して削除操作を行いたいので、 // コレクション用にディープコピーする。 LinkedList scp = new LinkedList(s); for(Iterator e = scp.iterator(); e.hasNext();) { if (val == ((Integer)(e.next())).intValue()) { s.remove(i); } else { i++; } } } // メイン処理 public static void main(String args[]) { SushiRandPattern srp = new SushiRandPattern(); srp.doRandPattern(); } }