摘要:目錄一菜單模塊一菜單模塊二函數二函數函數聲明及行數列數雷數函數聲明及行數列數雷數初始化雷陣初始化雷陣打印雷陣打印雷陣布置雷陣布置雷陣計算雷數計算雷數排雷排雷函數函數三全部代碼三全部代碼
目錄
菜單與井字棋類似都是先打印菜單然后用一個do……while循環嵌套switch選擇玩游戲或著退出游戲,如果選擇錯誤則提示輸入錯誤,讓用戶重新選擇
#include"game.h"void menu(){ printf("**************************************/n"); printf("************** 1. play ************/n"); printf("**************************************/n"); printf("************** 0. exit ************/n"); printf("**************************************/n");}void test(){ int input = 0; do { menu(); scanf("%d", &input); switch (input) { case 1 : game(); break; case 0 : exit(0); break; default: printf("選擇錯誤,重新選擇/n"); break; } } while (input);}int main(){ test(); return 0;}
#include#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//初始化數組void DisplayBoard(char board[ROWS][COLS], int rows, int cols);//打印棋盤void SetMine(char board[ROWS][COLS], int row, int col);//布置雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//排查雷
為后期方便修改游戲行列數直接在宏定義出行列數
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){ for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { board[i][j] = set; } }}
void DisplayBoard(char board[ROWS][COLS], int row, int col){ int i = 0, j = 0; for (i = 0; i <= col; i++)//打印列數 { printf("%d ", i); } printf("/n"); for (i = 1; i <= row; i++) { printf("%d ", i);//打印行數 for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("/n"); }}
?為方便輸入要排雷的坐標在第一行打印列數,第一列打印行數
void SetMine(char board[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (board[x][y] == "0") { board[x][y] = "1"; count--; } } }
用count記錄雷數當布置夠則跳出循環,結束函數
x,y在行列數以內隨機取值,如果沒有雷就布置雷
為正確生成隨機數在test函數中加入
srand((unsigned int)time(NULL));
int get_mine_count(char mine[ROWS][COLS], int x, int y){ return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1] - 8 * "0" + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1];}
如果輸入的坐標正確,計算周圍八個坐標中有幾個雷
因為初始化時在有雷的地方,寫為字符一,沒雷的地方為字符零,所以加起來減去八個字符零,就是雷的個數
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){ int x = 0; int y = 0; int win = 0; while (win < row * col - EASY_COUNT) { printf("請輸入要排查雷的坐標"); scanf("%d%d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (mine[x][y] == "1") { printf("很遺憾,你被炸死了/n"); DisplayBoard(mine, row, col); break; } else { int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; DisplayBoard(show, row, col); win++; } } else { printf("輸入錯誤,請重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("你贏了,排雷成功!/n"); } }
若輸入的坐標x,y超出行與列的范圍則輸入錯誤,讓玩家重新輸入
若輸入的坐標x,y位置處為字符一,則踩雷輸掉游戲,再打印出雷陣讓玩家“瞑目”
若輸入的坐標x,y位置處為字符零,預先準備一個計數器,計算排雷的數量,當數量等于所有的格子減雷的數量則排雷完成
void game(){ char mine[ROWS][COLS] = { 0 };//存放布雷位置 char show[ROWS][COLS] = { 0 };//存放排雷信息 InitBoard(mine, ROWS, COLS, "0");//初始化mine為0 InitBoard(show, ROWS, COLS, "*");//初始化show為0 SetMine(mine, ROW, COL); DisplayBoard(show, ROW, COL); FindMine(mine, show, ROW, COL);}
首先準備兩個數組,一個存放雷的位置,一個存放排雷的信息
將mine數組全部初始化為零,show全部初始化為*
先將棋盤打印一下,然后開始排雷
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){ printf("**************************************/n"); printf("************** 1. play ************/n"); printf("**************************************/n"); printf("************** 0. exit ************/n"); printf("**************************************/n");}void game(){ char mine[ROWS][COLS] = { 0 };//存放布雷位置 char show[ROWS][COLS] = { 0 };//存放排雷信息 InitBoard(mine, ROWS, COLS, "0");//初始化mine為0 InitBoard(show, ROWS, COLS, "*");//初始化show為0 SetMine(mine, ROW, COL); DisplayBoard(show, ROW, COL); FindMine(mine, show, ROW, COL);}void test(){ srand((unsigned int)time(NULL)); int input = 0; do { menu(); scanf("%d", &input); switch (input) { case 1 : game(); break; case 0 : exit(0); break; default: printf("選擇錯誤,重新選擇/n"); break; } } while (input);}int main(){ test(); return 0;}
#pragma once#include#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//初始化數組void DisplayBoard(char board[ROWS][COLS], int rows, int cols);//打印棋盤void SetMine(char board[ROWS][COLS], int row, int col);//布置雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//排查雷
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){ for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { board[i][j] = set; } }}void DisplayBoard(char board[ROWS][COLS], int row, int col){ int i = 0, j = 0; for (i = 0; i <= col; i++) { printf("%d ", i); } printf("/n"); for (i = 1; i <= row; i++) { printf("%d ", i); for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("/n"); }}void SetMine(char board[ROWS][COLS], int row, int col){ int count = EASY_COUNT; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (board[x][y] == "0") { board[x][y] = "1"; count--; } } }int get_mine_count(char mine[ROWS][COLS], int x, int y){ return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1] - 8 * "0" + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1];}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){ int x = 0; int y = 0; int win = 0; while (win < row * col - EASY_COUNT) { printf("請輸入要排查雷的坐標"); scanf("%d%d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (mine[x][y] == "1") { printf("很遺憾,你被炸死了/n"); DisplayBoard(mine, row, col); break; } else { int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; DisplayBoard(show, row, col); win++; } } else { printf("輸入錯誤,請重新輸入/n"); } } if (win == row * col - EASY_COUNT) { printf("你贏了,排雷成功!/n"); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/123358.html
摘要:上一期咱們用語言實現了三子棋的小游戲語言實現三子棋今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實現了三子棋的小游戲? C語言實現三子棋? ? ? ?今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
摘要:如果整個游戲的數據設計都基于一個二維數組的話相對來說容易混淆,比如只有一個數組的話,除了要對區分雷區與非雷區加以處理,還有后續排雷的信息要處理。 今天要分享給大家的是掃雷的代碼實現,和前幾天寫的那個三子棋差不多,大體思想就是以二維數組為載體,編寫設計函數來實現它的各種功能。我們先來看看最后的...
目錄 ?前言:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教! ???????? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——By 作者:新曉·故知 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
摘要:新人小白的第一篇博客,有什么不好之處望多提意見。這個掃雷小游戲主要是基于二維數組,循環與基本的函數知識等。請輸入坐標提示玩家輸入坐標。換行是為了看著好看,要不然打印出來的數組會變形的。用來接收判斷輸贏的函數的返回值。 ???????新人小白的第一篇博客,有什么不好之處望多提意見。 ? ? ?...
摘要:函數游戲菜單請選擇掃雷游戲退出游戲選擇錯誤解析函數內部利用時間戳,形成隨機數,主要目的是實現游戲中地雷的隨機埋放。 前言 本篇文章使用C語言實現簡單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數人都玩過或者了解過掃雷的游戲規則,但是在這里,我們在一起重溫一下掃雷的游戲規則,也更好...
閱讀 2509·2021-11-15 11:38
閱讀 1958·2021-11-05 09:37
閱讀 2279·2021-10-08 10:12
閱讀 2816·2019-08-30 15:55
閱讀 2117·2019-08-30 15:52
閱讀 1230·2019-08-29 13:24
閱讀 469·2019-08-26 18:27
閱讀 1480·2019-08-26 18:27