摘要:通過二維數組的學習以及之前學的一些知識,實現初階掃雷小游戲。整體思路菜單一把不夠,再來一把利用二維數組創建兩個的棋盤,那為什么不是呢,下面代碼有解釋。中進行函數調用和部分函數實現。
通過二維數組的學習以及之前學的一些知識,實現初階掃雷(9×9)小游戲。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
?整體思路
1?menu菜單(一把不夠,再來一把)
2?利用二維數組創建兩個(11×11)的棋盤,那為什么不是(9×9)呢,下面代碼有解釋。
3?initboard初始化棋盤( char/int )
4 diaplayboard打印棋盤
5 ???????setmine布置雷
6 findmine統計周圍雷的個數
game.c中放函數實現,game.h中放函數聲明。test.c中進行函數調用和部分函數實現。
定義宏ROW,COL,ROWS,COLS,方便計算。
#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2
1菜單的實現
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){ printf("*****************************/n"); printf("****** 1. play *********/n"); printf("****** 0. exit *********/n"); printf("*****************************/n");}void test(){ int input = 0; srand((unsigned int)time(NULL));//布置雷的時候使用(隨機) do { menu(); printf("請選擇》/n"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戲/n"); break; default: printf("輸入錯誤/n"); break; }//switch用不慣的也可以用多條件if語句 } while (input);}
2.1?第一個棋盤
用來存放布置雷的信息,雷為"1",不是雷為"0",為啥要放字符‘1‘和’0’呢?咱們先往下看
2.2?第二個棋盤
玩家每走一步,用來顯示周圍雷個數的信息。沒排過的雷的坐標放"*",排過的顯示周圍雷的個數。
2.3?棋盤選用( char )
1和0本來是整形,我們可以考慮用int類型來創建,但由于之后棋盤要用函數打印,綜合考慮我們就統一用char。1和0換成"0"和"1"。
?
?
接上上面的棋盤創建
當出現上圖的情況時,我們在計算周圍雷數的時候會產生越界訪問。(11×11)就可以避免這個問題。
3初始化棋盤?
選char類型初始化棋盤一個函數可以打印兩個棋盤
//test.cinitboard(mine, ROWS, COLS, "0");initboard(show, ROWS, COLS, "*");
//game.c中的函數實現void initboard(char board[ROWS][COLS], int rows, int cols, char set){ int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j]=set; } }}
?4打印棋盤
//test.cdisplayboard(mine, ROW, COL);//這里我們打印棋盤是(9*9)displayboard(show, ROW, COL);//game.cvoid displayboard(char board[ROWS][COLS], int row, int col){ int i = 0; int j = 0; for (i = 0; i <=row; 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"); }}
?5布置雷(隨機)
//game.h#include#includesrand((unsigned int)time(NULL));//test.c//game.cvoid setmine(char mine[ROWS][COLS], int row, int col){ int count = 10; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (mine[x][y] == "0") { mine[x][y] = "1"; count--; } }}
?布置好雷后我們可以再調用displayboard函數打印棋盤進行查看。
6 找雷(‘0’和‘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 0 && x <= row&&y > 0 && y <= col) { if (mine[x][y] != "1") { int m =getmine(mine,x,y);//用來計算周圍雷的數量 show[x][y] = m+"0";//整型數字轉換成字符數字 displayboard(show, ROW, COL); win++; } else { printf("您被發往一趟去西天取經的航班,祝你旅途愉快/n"); displayboard(mine, ROW, COL); break; } } else { printf("輸入坐標非法,請重新輸入/n"); } } if (win == row*col - 10) { printf("你有當工兵的好天賦/n"); displayboard(mine, ROW, COL); }}
?getmine
int getmine(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] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * "0";//這里返回的是int類型,將字符數字轉化為整型數字(減去字符0):eg:"1"-"0"=1(感興趣的同學可以去查查ascall碼表)}
?完整代碼展示
game.h
#pragma once#include#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2//初始化棋盤void initboard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盤void displayboard(char board[ROWS][COLS], int row, int col);void setmine(char mind[ROWS][COLS], int row, int col);void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);#include#include
game.c
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void initboard(char board[ROWS][COLS], int rows, int cols, char set){ int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j]=set; } }}void setmine(char mine[ROWS][COLS], int row, int col){ int count = 10; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (mine[x][y] == "0") { mine[x][y] = "1"; count--; } }}int getmine(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] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * "0";//這里返回的是int類型,將字符數字轉化為整型數字(減去字符0):eg:"1"-"0"=1(感興趣的同學可以去查查ascall碼表)}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 0 && x <= row&&y > 0 && y <= col) { if (mine[x][y] != "1") { int m =getmine(mine,x,y); show[x][y] = m+"0"; displayboard(show, ROW, COL); win++; } else { printf("您被發往一趟去西天取經的航班,祝你旅途愉快/n"); displayboard(mine, ROW, COL); break; } } else { printf("輸入坐標非法,請重新輸入/n"); } } if (win == row*col - 10) { printf("你有當工兵的好天賦/n"); displayboard(mine, ROW, COL); }}void displayboard(char board[ROWS][COLS], int row, int col){ int i = 0; int j = 0; for (i = 0; i <=row; 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"); }}
?
test.c
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){ printf("*****************************/n"); printf("****** 1. play *********/n"); printf("****** 0. exit *********/n"); printf("*****************************/n");}void game(){ char mine[ROWS][COLS] = { 0 }; char show[ROWS][COLS] = { 0 }; //初始化棋盤 initboard(mine, ROWS, COLS, "0"); initboard(show, ROWS, COLS, "*"); setmine(mine, ROW, COL); displayboard(mine, ROW, COL); displayboard(show, ROW, COL); findmine(mine, show, ROW, COL); }void test(){ int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("請選擇》/n"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戲/n"); break; default: printf("輸入錯誤/n"); break; } } while (input);}int main(){ test(); return 0;}
今天的內容到這里就結束了,要是覺得對你有所幫助的話,不妨點贊關注一下,這也是我的第一篇博客,你的支持將是我最大的動力,最后謝謝大家的觀看,咱們下期見。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124779.html
摘要:目錄前言前言前期的準備前期的準備游戲代碼的具體實現游戲代碼的具體實現完整版的掃雷小游戲代碼完整版的掃雷小游戲代碼總結總結前言掃雷是一款大眾類的益智小游戲,于年發行。 目錄 前言 前期的準備 游戲代碼的具體實現 1、text.c 2、game.h 3、game.c 完整版的掃雷小游戲代碼: 1...
摘要:也可以理解成二維數組有三個元素,每個元素是一個一維數組我們可以把二維數組想象成一個幾行幾列的數組但是本質上的二維數組是一列的。數組名,計算整個數組的大小,內部單獨放一個數組名,數組名表示整個數組。數組名,數組名表示整個數組。 目錄 1. 一維數組 1.1?數組的創建和初始化 數組的創建: 數...
摘要:初學,寫了一個掃雷程序練練手掃雷規則及功能掃雷想必大家都不陌生,就是上點擊排雷的小游戲,它的主要規則有左鍵點擊顯示當前格子是否為雷,如果為雷的話,啦,如果不是雷的話,這個格子會顯示周圍八個格子內的雷數量。 初學javascript,寫了一個掃雷程序練練手! 掃雷規則及功能 掃雷想必大家都不陌生,就是windows上點擊排雷的小游戲,它的主要規則有 1.左鍵點擊顯示當前格子是否為雷,如果...
摘要:函數游戲菜單請選擇掃雷游戲退出游戲選擇錯誤解析函數內部利用時間戳,形成隨機數,主要目的是實現游戲中地雷的隨機埋放。 前言 本篇文章使用C語言實現簡單小游戲---掃雷。(文章最后有完整代碼鏈接) 想必大多數人都玩過或者了解過掃雷的游戲規則,但是在這里,我們在一起重溫一下掃雷的游戲規則,也更好...
摘要:上一期咱們用語言實現了三子棋的小游戲語言實現三子棋今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實現了三子棋的小游戲? C語言實現三子棋? ? ? ?今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
閱讀 3372·2023-04-26 01:40
閱讀 3080·2021-11-24 09:39
閱讀 1393·2021-10-27 14:19
閱讀 2637·2021-10-12 10:11
閱讀 1297·2021-09-26 09:47
閱讀 1839·2021-09-22 15:21
閱讀 2678·2021-09-06 15:00
閱讀 878·2021-08-10 09:44