C語言陣列應用例項2: 掃雷遊戲
實現示例
實現程式碼
game.h
#ifndef _GAME_H_
#define _GAME_H_
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#define ROW 12
#define COL 12
#define NUMS 20 //設定雷的個數,可以用來控制遊戲的難度
#pragma warning(disable:4996)
void Menu();
void Game();
#endif
main.c
#include "game.h"
int main() {
int quit = 0;
int select = 0; // 控制使用者選擇開始遊戲還是退出遊戲
while (!quit) {
Menu();
scanf("%d", &select);
switch(select){
case 1:
Game();
break;
case 2:
quit = 1;
break;
default:
printf("輸入有誤,請重新選擇!\n");
break;
}
}
printf("BeyBey!\n");
system("pause");
return 0;
}
game.c
#include "game.h"
void Menu() {
printf("###################################\n");
printf("###################################\n");
printf("#### 1.Play 2.Exit ####\n");
printf("###################################\n");
printf("###################################\n");
printf("請輸入#\n");
}
void SetMines(char board[][COL], int row, int col) {
int num = NUMS;
while (num) {
// 隨機生成下標放置雷,注意+1
int x = rand() % 10 + 1;
int y = rand() % 10 + 1;
if (board[x][y] == '0') {
board[x][y] = '1';
num--;// 注意 num-- 位置,有可能會生成相同的座標
}
}
}
int GetNums(char board[][COL], int row, int col,int x,int y) {
return board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + board[x][y - 1] + board[x][y + 1] + board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0';
}
void ShowBoard(char board[][COL], int row, int col)
{
printf(" ");
for (int i = 1; i < col - 1; i++){
printf(" %2d ", i);
}
printf("\n");
printf("-------------------------------------------\n");
for (int i = 1; i < row - 1; i++){
printf("%2d|", i);
for (int j = 1; j < col - 1; j++){
printf(" %c |", board[i][j]);
}
printf("\n");
printf("-------------------------------------------\n");
}
}
void Game() {
system("cls");
srand((unsigned long)time(NULL));
char show_board[ROW][COL];// 展示的陣列
char mine_board[ROW][COL];// 掃描陣列
memset(show_board, '*', sizeof(show_board));
memset(mine_board, '0', sizeof(mine_board));
SetMines(mine_board, ROW, COL);// 佈雷
int count = (ROW - 2)*(COL - 2) - NUMS; //多少沒有雷的
int x = 0;
int y = 0;
do {
ShowBoard(show_board, ROW, COL);// 列印顯示給使用者的陣列
printf("請輸入你要掃的座標#");
scanf("%d %d", &x, &y);
// 情況一:輸入座標位置不合法
if (x < 1 || x > ROW - 2 || y < 1 || y > COL - 2) {
printf("輸入位置越界,請重新輸入!\n");
continue;
}
// 情況二:輸入的座標位置已經排除,不能重新掃雷
if (show_board[x][y] != '*') {
printf("該位置已經被排除!\n");
continue;
}
// 情況三:mine_board[x][y] 裡邊是'1',說明踩到雷了,被炸死遊戲結束
if (mine_board[x ][y] == '1') {
break;
}
// 計算(x,y)附近的雷的個數
int num = GetNums(mine_board, ROW, COL,x,y);
show_board[x][y] = num + '0';// 注意陣列型別是 char型別
count--;// 要排除的空位置減1
system("cls");
} while (count);// 只要沒有排完那麼就一直迴圈
// 跳出迴圈有兩種可能 1、排完了 count ==0 2、被炸死了
if (count > 0) {
printf("你被炸死了!\n");
ShowBoard(mine_board, ROW, COL);
}
else {
printf("恭喜,你通過遊戲!\n");
}
}
相關文章
- 探秘掃雷遊戲的C語言實現遊戲C語言
- 掃雷--C語言實現C語言
- C語言陣列C語言陣列
- 實驗4 c語言陣列應用程式設計C語言陣列程式設計
- c語言字元陣列C語言字元陣列
- c語言的陣列C語言陣列
- 實驗4_C語言陣列應用程式設計C語言陣列程式設計
- go語言實現掃雷Go
- C語言 指標與陣列C語言指標陣列
- C語言基礎-1、陣列C語言陣列
- Verilog例項陣列陣列
- C語言列舉型別所佔位元組大小例項解析C語言型別
- GO語言————7.6 字串、陣列和切片的應用Go字串陣列
- c語言-運算子,陣列,指標C語言陣列指標
- C語言陣列求學生成績C語言陣列
- C語言魔塔遊戲C語言遊戲
- (詳解)用C語言實現一個能夠連續展開的掃雷。C語言
- C語言動態陣列小作業C語言陣列
- go 語言陣列Go陣列
- 掃雷小遊戲-網頁版遊戲網頁
- 經典掃雷遊戲Web版遊戲Web
- c語言中二維陣列的生成及應用C語言陣列
- C語言開發漢字應用軟體技術與例項 王小華pdfC語言
- 用C語言輸出蛇形矩陣C語言矩陣
- 《魔窟掃雷》給掃雷遊戲指明瞭一個進化的方向遊戲
- C語言如何計算陣列的長度C語言陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- C語言陣列實現三子棋C語言陣列
- C語言 二維陣列課題程式碼C語言陣列
- 用C語言編寫小遊戲——“井字棋”C語言遊戲
- C語言小遊戲------貪吃蛇----小白專用C語言遊戲
- C語言例項解析精粹學習筆記——19C語言筆記
- 【乾貨】200個c語言例項的yuan碼C語言
- c語言關於陣列的簡單運算C語言陣列
- c語言獲取陣列長度的函式C語言陣列函式
- C語言多維陣列本質技術推演C語言陣列
- (C語言)使用指標列印陣列的內容C語言指標陣列
- 無聊的週末用Java寫個掃雷小遊戲Java遊戲