神経衰弱 その4
神経衰弱のJavaソースコード解説 3回目
それでは、神経衰弱のソースコードを続きを解説していきます。
102 103 104 105 106 107 108 109 110 111 112 113
// 指定した状態の数を戻す private static int getStatusNumber( int status ) { int number = 0; for ( int i = 0; i < statuses.length; i++ ) { if ( statuses[ i ] == status ) ++ number; } return number; }
116 117 118
// カードを1枚オープン private static int openCard() {
119 120 121
// 伏せられたカードの数を取得 int hidenumber = getStatusNumber( STATUS_HIDE ); if ( 1 > hidenumber ) return 0;
123 124
// 1~hidenumberの乱数を発生 int rnd = (int)( Math.random() * (double)hidenumber ) + 1;
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
// 伏せられたカードのrnd番目のカードをオープン int cardnum = 0; for ( int i = 0; i < statuses.length; i++ ) { if ( STATUS_HIDE == statuses[ i ] ) { --rnd; if ( 0 == rnd ) { // 状態を"オープンの状態"に変更 statuses[ i ] = STATUS_OPEN; // カード番号を代入 cardnum = cards[ i ]; //記憶を登録 memory[ i ] = cardnum; break; } } }
statuses[ i ]にSTATUS_OPENを、変数cardnumにカード番号cards[ i ]を代入しています。そして、memory[ i ]にcardnumを代入します。これで1度オープンしたカードが記憶されます。
143 144
// オープンしたカード番号を戻す return cardnum;
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
// 記憶したカード番号で隠されているカードをオープン private static boolean openMemoryCard( int cardnum ) { for ( int i = 0; i < statuses.length; i++ ) { if ( STATUS_HIDE == statuses[ i ] ) { if ( cardnum == memory[ i ] ) { // 状態を"オープンの状態"に変更 statuses[ i ] = STATUS_OPEN; return true; } } } return false; }
statuses[ i ]にSTATUS_OPENを代入しています。
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
// "オープン状態"の2枚のカード番号が同じかを判定 private static boolean isPair() { int number, cardnum; number = 0; cardnum = 0; for ( int i = 0; i < statuses.length; i++ ) { if ( STATUS_OPEN == statuses[ i ] ) { ++ number; if ( 1 == number ) { // 1枚目 cardnum = cards[ i ]; } else { // 2枚目 if ( cardnum == cards[ i ] ) { return true; } break; } } } return false; }
変数numberは見つけたオープン状態のカード数で、numberが1の場合に変数cardnumにカード番号を代入しています。numberが2の場合に、cardnumとcards[ i ]の一致判定をしています。
193 194 195 196 197 198 199 200
// 状態の変更(旧状態→新状態) private static void replaceStatus( int oldStatus, int newStatus ) { for ( int i = 0; i < statuses.length; i++ ) { if ( oldStatus == statuses[ i ] ) statuses[ i ] = newStatus; } }
オープンしたカード(STATUS_OPEN)を伏せる(STATUS_HIDE)などに使います。