C言語実現コンソール掃海ミニゲーム


C言語実現コンソール「雷除去」ミニゲーム

以前のゲームの経験から、私達はまず雷除去ゲームの勝利のルールを確定することができます。雷ではないエリアを全部開けば勝利となります。
次にプログラム全体の設計構想を確認します。
1.まず、二つの9*9の二次元を定義しますか?それとも開いていない状態グループですか?最初の配列は雷エリア地図の展開状況、すなわち各要素の位置の状態が展開状態にあるか未展開状態にあるかを表します。私たちはshowMap()と名づけます。第二の配列は地雷の分布を表します。素体の各元素の位置は地雷と表記されています。
2.二つの地図を初期化し、地図をプリントアウトします。
3.プレイヤーは二次元配列の座標を入力して位置入力を行い、地図の位置を開きます。
4.プレイヤーが入力した位置が適法かどうかを判断します。
5.ユーザーが入力した位置に地雷があるかどうかを判断し、地雷があれば直接にゲーム終了を宣言する。地雷がなければゲームを続けます。
6.ゲームを続けると、ユーザーが入力した位置に近くの地雷の数が表示されます。
第一歩は、ここではmenu()関数を構成することにより、簡単なインタラクティブメニューを作成して、プレイヤーとインタラクションして、ゲームを開始するかどうかを判断します。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//   
#define MAX_ROW 9
#define MAX_COL 9
#define DEFAULT_MINE_COUNT 10

int menu() {
 printf("======================
"); printf(" 1.
"); printf(" 0.
"); printf("======================
"); printf(" : "); int choice = 0; scanf("%d", &choice); return choice; } int main() { srand((unsigned int)time(0)); while (1) { int choice = menu(); if (choice == 1) { game();// game() . } else if (choice == 0) { printf("Goodbye!
"); break; } else { printf(" !
"); } } system("pause"); return 0; }
第二ステップは、第一ステップで呼び出したゲーム関数を構成する。game()関数はコア機能関数であり、その主な任務は基本プロセスを完成することである。
1.init()関数を構築し、2つの二次元配列を初期化する。showMapを初期化し、配列のすべての要素を*に設定します。mineMapを初期化して、まず全部を‘0’に設定して、それからランダムにN個の‘1’を生成します。ここの‘1’は地雷を表します。Nの値はDEFAULT_です。ミネン.COUNT、つまり地雷の数です。

void init(char showMap[MAX_ROW][MAX_COL],
 char mineMap[MAX_ROW][MAX_COL]) {
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 showMap[row][col] = '*';
 }
 }
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 mineMap[row][col] = '0';
 }
 }
 int n = DEFAULT_MINE_COUNT;
 while (n > 0) {
 //         . 
 int row = rand() % MAX_ROW;
 int col = rand() % MAX_COL;
 if (mineMap[row][col] == '1') {
 //            ,          ,   
 //       . 
 continue;
 }
 mineMap[row][col] = '1';
 n--;
 }
}
2.printMap()関数を構築し、地図の印刷を担当しています。注意すべき点は、ほとんどの場合はshowMapを印刷していますが、GameOverの場合はmineMapを印刷する必要があります。

void printMap(char theMap[MAX_ROW][MAX_COL]) {
 //        ,             。
 //                    。
 printf(" |");
 for (int col = 0; col < MAX_COL; col++) {
 printf("%d ", col);
 }
 printf("
"); printf("--+------------------
"); for (int row = 0; row < MAX_ROW; row++) { printf(" %d|", row); for (int col = 0; col < MAX_COL; col++) { printf("%c ", theMap[row][col]); } printf("
"); } }
3.udateShowMap関数を構築し、現在入力されている位置から現在位置の周りにいくつかの雷があるかを計算し、showMapに更新表示します。

void updateShowMap(char showMap[MAX_ROW][MAX_COL],
 char mineMap[MAX_ROW][MAX_COL], int row, int col) {
 int count = 0;
 for (int r = row - 1; r <= row + 1; r++) {
 for (int c = col - 1; c <= col + 1; c++) {
 if (r < 0 || r >= MAX_ROW
 || c < 0 || c >= MAX_COL) {
 //   (row, col)     ,      。
 continue;
 }
 if (mineMap[r][c] == '1') {
 count++;
 }
 }
 }
 //    count          (row, col )            。
 //         showMap    。
 //       count        ,  : count   2,       '2' (ASCII 50)
 showMap[row][col] = count + '0';
}
最後に,以下の機能関数を統合して,私たちのゲーム関数を得た。

void game() {
 // 1.         。(    )。
 char showMap[MAX_ROW][MAX_COL] = { 0 };
 char mineMap[MAX_ROW][MAX_COL] = { 0 };
 init(showMap, mineMap);
 int openedBlockCount = 0;
 while (1) {
 printMap(mineMap);
 printf("=================================
"); printMap(showMap); // 2. , 。 int row = 0; int col = 0; printf(" (row col): "); scanf("%d %d", &row, &col); if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) { printf(" !
"); continue; } if (showMap[row][col] != '*') { printf(" !
"); continue; } // 3. . , GameOver。 if (mineMap[row][col] == '1') { printf("GameOver!
"); // , 。 printMap(mineMap); break; } // 4. , , 。 updateShowMap(showMap, mineMap, row, col); // 5. , // 。 openedBlockCount++; if (openedBlockCount == MAX_ROW * MAX_COL - DEFAULT_MINE_COUNT) { printf(" !
"); printMap(mineMap); break; } } }
実行スクリーンショット:
1.ゲーム起動:

2.座標不正ヒントを入力します。

3.入力座標位置が開きました。

4.ゲーム終了。

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