C言語は簡単な操作台の三子将棋のゲームを実現します。


C言語で簡単な操作台三子将棋ゲームを実現します。
まず、ゲームの基本的な流れを確定します。
1、ボードを作成して初期化します。ボードを二次元配列と見なす)
2、ボードを印刷して表示します。
3、プレイヤーは落子します。
4、勝負関係を判定する。プレイヤーが勝てばゲームを終了します。)
5、コンピュータの落下(ランダム位置の落下)。
6、勝負関係を判定する(パソコンが勝てば、ゲームから退出する。そうでなければ、ステップ2に戻って実行を続けます。)
第一歩は、ここではmenu()関数を構成することにより、簡単なインタラクティブメニューを作成して、プレイヤーとインタラクションして、ゲームを開始するかどうかを判断します。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int menu() {
 printf("====================
"); printf("1.
"); printf("0.
"); printf("====================
"); printf(" : "); int choice = 0; scanf("%d", &choice); return choice; } int main() { while (1) { int choice = menu(); if (choice == 1) { //game();// game 。 } else if (choice == 0) { printf("goodbye!
"); break; } } system("pause"); return 0; }
第二ステップは、第一ステップで呼び出したゲーム関数を構成する。game()関数はコア機能関数であり、その主な任務は基本プロセスを完成することである。
1.イニシャルinit()関数を構築します。3*3の二次元配列を初期化し、それを碁盤とし、配列要素を全部0に初期化します。

void init(char chessBoard[MAX_ROW][MAX_COL]) {
 //            =    “  ”。
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 chessBoard[row][col] = ' ';
 }
 }
}
2.ボード印刷print Board()関数を構築します。forループで3*3のボードをプリントアウトします。

void printChessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
 //       。
 printf("+---+---+---+
"); for (int row = 0; row < MAX_ROW; row++) { printf("| %c | %c | %c |
", chessBoard[row][0], chessBoard[row][1], chessBoard[row][2]); printf("+---+---+---+
"); } }
3.プレイヤー落子player Move()関数を構築し、プレイヤーは行列座標を入力することで落子します。この過程では、プレイヤーが入力した行列の座標がボードの正しい位置にあるかどうかを判断します。2.プレイヤーが入力した行の座標位置に駒があるかどうか。

void playerMove(char chessBoard[MAX_ROW][MAX_COL]) {
 //      .                  。
 while (1) {
 printf("        (row col): ");
 int row = 0;
 int col = 0;
 scanf("%d %d", &row, &col);
 //              (          )。
 if (row < 0 || row >= MAX_ROW
 || col < 0 || col >= MAX_COL) {
 //        ,           。
 printf("          [0, 2]  
"); continue; } // 。 if (chessBoard[row][col] != ' ') { printf(" !
"); continue; } // 。 “X” 。 chessBoard[row][col] = 'x'; break; } }
4.コンピュータの落下を制御するために、computterMove()関数を構築する。コンピュータで一連の乱数を生成して、碁盤の座標範囲内に置くようにします。

void computerMove(char chessBoard[MAX_ROW][MAX_COL]) {
 //     ,             。
 while (1) {
 int row = rand() % MAX_ROW;
 int col = rand() % MAX_COL;
 if (chessBoard[row][col] != ' ') {
 //                   。
 continue;
 }
 chessBoard[row][col] = 'o';
 break;
 }
}
この関数モジュールでは、コンピュータ落下子のランダム位置の生成は、ランド()関数によって制御されており、ランダムシードを設定することによって「疑似ランダム」の出現を回避する必要があることに注意が必要である。

srand((unsigned int)time(0));//            。
5.isWin()関数を構築して、勝利するかどうかを判断します。この関数の戻り結果を約束するためのものです。'x'はプレイヤーの勝利を表します。o'はコンピュータが勝ったという意味です。勝負がつかないことを表す。qは引き分けを表します。

char isWin(char chessBoard[MAX_ROW][MAX_COL]) {
 //       。
 for (int row = 0; row < MAX_ROW; row++) {
 if (chessBoard[row][0] != ' '
 && chessBoard[row][0] == chessBoard[row][1]
 && chessBoard[row][0] == chessBoard[row][2]) {
 return chessBoard[row][0];
 }
 }
 //       。
 for (int col = 0; col < MAX_COL; col++) {
 if (chessBoard[0][col] != ' '
 && chessBoard[0][col] == chessBoard[1][col]
 && chessBoard[0][col] == chessBoard[2][col]) {
 return chessBoard[0][col];
 }
 }
 //        。
 if (chessBoard[0][0] != ' '
 && chessBoard[0][0] == chessBoard[1][1]
 && chessBoard[0][0] == chessBoard[2][2]) {
 return chessBoard[0][0];
 }
 if (chessBoard[2][0] != ' '
 && chessBoard[2][0] == chessBoard[1][1]
 && chessBoard[2][0] == chessBoard[0][2]) {
 return chessBoard[2][0];
 }
 //       。           。
 //   isFull  。
 if (isFull(chessBoard)) {
 return 'q';
 }
 return ' ';
}
6.isFull()関数を作成して、ボードに空きがあるかどうかを判断して、引き分けと判断します。

int isFull(char chessBoard[MAX_ROW][MAX_COL]) {
 //  ”  “.      ,       。
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 if (chessBoard[row][col] == ' ') {
 //     “  ”      。
 return 0;
 }
 }
 }
 return 1;
}
最後に、上記のいくつかの機能関数を組み合わせて呼び出すことによって、最終的なゲーム関数の全体的なアーキテクチャを得ることができます。

void game() {
 // 1.         
 char chessBoard[MAX_ROW][MAX_COL] = { 0 };
 init(chessBoard);//       
 char winner = ' ';
 while (1) {
 // 2.     
 printChessBoard(chessBoard);
 // 3.     (              )
 playerMove(chessBoard);
 // 4.       
 winner = isWin(chessBoard);
 if (winner != ' ') {
 break;
 }
 // 5.     (      ) 
 computerMove(chessBoard);
 // 6.       
 winner = isWin(chessBoard);
 if (winner != ' ') {
 break;
 }
 }
 printChessBoard(chessBoard);
 if (winner == 'x') {
 printf("   ,    !
"); } else if (winner == 'o') { printf(" , ! !
"); } else { printf(" , !
"); } }
運行スクリーンショットは以下の通りです。
勝ちました

失敗しました

ここに駒があります

もっと面白い経典ミニゲームはテーマを実現して、みんなに共有します。
C++クラシックミニゲームまとめ
pythonクラシックミニゲームまとめ
pythonテトリスゲーム集合
JavaScript経典ゲームは遊んで止まらないです。
java経典の小さいゲームのまとめ
javascript経典ミニゲームのまとめ
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。