void PrintSkor(Queue *Q) /* I.S : Queue tidak kosong */ /* F.S : Menampilkan seluruh skor pemain sesuai dengan format yang telah ditentukan */ { int i; for (i = Head(*Q); i <= Tail(*Q); i++) { printf("%s : %d", InfoHeadNama(*Q), InfoHeadSkor(*Q)); printf(" "); ChangeTurn(&(*Q)); } printf("\n"); }
bool Checkers::Move(Player* player, int xf, int yf, int xt, int yt) { // * 着手に関する確認 * // プレイヤーが実在するか確認 if(player != ally_player && player != enemy_player) return 0; // プレイヤーが手番者か確認 if(turn != player->side) return false; // 盤上での着手をしているか確認 if(board.IsAvailable(xf, yf) == 0 || board.IsAvailable(xt, yt) == 0) return false; // 移動するコマの存在を確認 if(board.getAt(xf, yf)->piece == 0) return false; // 移動先のセルの状態を確認 if(board.getAt(xt, yt)->piece != 0) return false; // * 着手の解釈 * if(!DutyJump(player->side)) { if(player->side == ally) { // 周囲1マス(進行) if((xt == xf-1 || xt == xf+1) && (yt == yf-1 || yt == yf+1)) { if(yt == yf-1) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; if(board.IsAvailable(xt-1, yt-1) == false) board.getAt(xt, yt)->piece->Crown(); ChangeTurn(); return true; } if(yt == yf+1 && board.getAt(xf, yf)->piece->isCrowned()) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; ChangeTurn(); return true; } } } else if(player->side == enemy) { // 周囲1マス(進行) if((xt == xf-1 || xt == xf+1) && (yt == yf-1 || yt == yf+1)) { if(yt == yf-1 && board.getAt(xf, yf)->piece->isCrowned()) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; ChangeTurn(); return true; } if(yt == yf+1) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; if(board.IsAvailable(xt+1, yt+1) == false) board.getAt(xt, yt)->piece->Crown(); ChangeTurn(); return true; } } } return false; } // 周囲2マス(ジャンプ) if(player->side == ally) { if((xt == xf-2 || xt == xf+2) && (yt == yf-2 || yt == yf+2)) { if(yt == yf-2) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; if(board.IsAvailable(xt-1, yt-1) == false) board.getAt(xt, yt)->piece->Crown(); if(xt == xf-2) { delete board.getAt(xf-1, yf-1)->piece; board.getAt(xf-1, yf-1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } if(xt == xf+2) { delete board.getAt(xf+1, yf-1)->piece; board.getAt(xf+1, yf-1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } } if(yt == yf+2 && board.getAt(xf, yf)->piece->isCrowned()) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; if(xt == xf-2) { delete board.getAt(xf-1, yf+1)->piece; board.getAt(xf-1, yf+1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } if(xt == xf+2) { delete board.getAt(xf+1, yf+1)->piece; board.getAt(xf+1, yf+1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } } } } else if(player->side == enemy) { if((xt == xf-2 || xt == xf+2) && (yt == yf-2 || yt == yf+2)) { if(yt == yf-2 && board.getAt(xf, yf)->piece->isCrowned()) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; if(xt == xf-2) { delete board.getAt(xf-1, yf-1)->piece; board.getAt(xf-1, yf-1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } if(xt == xf+2) { delete board.getAt(xf+1, yf-1)->piece; board.getAt(xf+1, yf-1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } } if(yt == yf+2) { board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece; board.getAt(xf, yf)->piece = 0; if(board.IsAvailable(xt+1, yt+1) == false) board.getAt(xt, yt)->piece->Crown(); if(xt == xf-2) { delete board.getAt(xf-1, yf+1)->piece; board.getAt(xf-1, yf+1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } if(xt == xf+2) { delete board.getAt(xf+1, yf+1)->piece; board.getAt(xf+1, yf+1)->piece = 0; if(!DutyJump(player->side)) ChangeTurn(); return true; } } } } return false; }