目錄
?前言:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教!
???????? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——By 作者:新曉·故知
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——Since?新曉-故知
?掃雷游戲(初級)編寫:
?創建文件項目:
菜單打印:test.c
菜單打印 test.c#include
void menu(){ printf("******掃雷游戲(初級)C語言版********/n"); printf("*************************************/n"); printf("***** 1.Play(輸入1:開始游戲)*****/n"); printf("***** 0.Exit(輸入0:退出游戲)*****/n"); printf("*************************************/n"); printf("/n"); printf(" ——By 作者:新曉·故知/n");}void game(){ printf("掃雷/n");}void test(){ int input = 0; //srand((unsigned int)time(NULL)); do { menu(); printf("請選擇:>"); 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;} ?
?打印棋盤:
1.game.h頭文件的包含#include
//#include //#include 符號的聲明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2//#define EASY_COUNT 10函數的聲明初始化棋盤void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);打印棋盤void DisplayBoard(char board[ROWS][COLS], int row, int col);2.game.c#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 DisplayBoard(char board[ROWS][COLS], int row, int col){ //1~9 int i = 0; int 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"); }}3.test.c#include "game.h"void menu(){ printf("******掃雷游戲(初級)C語言版********/n"); printf("*************************************/n"); printf("***** 1.Play(輸入1:開始游戲)*****/n"); printf("***** 0.Exit(輸入0:退出游戲)*****/n"); printf("*************************************/n"); printf("/n"); printf(" ——By 作者:新曉·故知/n");}void game(){ //printf("掃雷/n"); //創建數組 char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息 char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息 //初始化mine數組為全"0" InitBoard(mine, ROWS, COLS, "0"); //初始化show數組為全"*" InitBoard(show, ROWS, COLS, "*"); 打印棋盤 DisplayBoard(mine, ROW, COL); DisplayBoard(show, ROW, COL);}void test(){ int input = 0; //srand((unsigned int)time(NULL)); do { menu(); printf("請選擇:>"); 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;} ??
?
?布置雷:
布置雷:1.game.h//頭文件的包含#include
#include //#include //符號的聲明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2//#define EASY_COUNT 10//函數的聲明//初始化棋盤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 mine[ROWS][COLS], int row, int col);2.gamer.c#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 DisplayBoard(char board[ROWS][COLS], int row, int col){ //1~9 int i = 0; int 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 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--; } }}3.test.c#include "game.h"void menu(){ printf("******掃雷游戲(初級)C語言版********/n"); printf("*************************************/n"); printf("***** 1.Play(輸入1:開始游戲)*****/n"); printf("***** 0.Exit(輸入0:退出游戲)*****/n"); printf("*************************************/n"); printf("/n"); printf(" ——By 作者:新曉·故知/n");}void game(){ //printf("掃雷/n"); //創建數組 char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息 char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息 //初始化mine數組為全"0" InitBoard(mine, ROWS, COLS, "0"); //初始化show數組為全"*" InitBoard(show, ROWS, COLS, "*"); 打印棋盤 //DisplayBoard(mine, ROW, COL); //真正進行排雷會屏蔽此語句,此語句可查看雷的位置坐標 //DisplayBoard(show, ROW, COL); //真正進行排雷會屏蔽此語句,此語句可查看雷的位置坐標 //布置雷 SetMine(mine, ROW, COL); DisplayBoard(mine, ROW, COL);}void test(){ int input = 0; srand((unsigned int)time(NULL));//時間隨機生成數 do { menu(); printf("請選擇:>"); 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;} ?
?知識點:字符±(*/)ASCII碼 " 0 "=字符
?
?
?
?掃雷游戲(初級)完整代碼:
1.創建頭文件:game.h??
代碼如下:
game.h//頭文件的包含#include
#include #include //符號的聲明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10 //此處控制布置雷的個數,最終版將會設置成時間隨機生成雷的個位數!!!//函數的聲明//初始化棋盤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 mine[ROWS][COLS], int row, int col);//排查雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col); 2.創建源文件:? game.c?
代碼如下:
game.c#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 DisplayBoard(char board[ROWS][COLS], int row, int col){ //1~9 int i = 0; int 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 mine[ROWS][COLS], int row, int col){ int count = EASY_COUNT;//此處控制布置雷的個數,最終版將會設置成時間隨機生成雷的個位數 while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (mine[x][y] == "0") { mine[x][y] = "1"; count--; } }}static int get_mine_count(char mine[ROWS][COLS], int x, int y){ return mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * "0"; //n + "0" 可以得到字符n !!!}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 { //計算x,y坐標周圍有幾個雷 int n = get_mine_count(mine, x, y); show[x][y] = n + "0"; //n + "0" 可以得到字符n !!! DisplayBoard(show, row, col); win++; } } else { printf("輸入坐標非法,無法排雷,請重新輸入!/n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功!/n"); DisplayBoard(mine, row, col); }}
3.創建源文件: test.c
代碼如下:
test.c#define _CRT_SECURE_NO_WARNINGS#include "game.h"void menu(){ printf("******掃雷游戲(初級)C語言版********/n"); printf("*************************************/n"); printf("***** 1.Play(輸入1:開始游戲)*****/n"); printf("***** 0.Exit(輸入0:退出游戲)*****/n"); printf("*************************************/n"); printf("/n"); printf(" ——By 作者:新曉·故知/n");}void game(){ //printf("掃雷/n"); //創建數組 char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息 char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息 //初始化mine數組為全"0" InitBoard(mine, ROWS, COLS, "0"); //初始化show數組為全"*" InitBoard(show, ROWS, COLS, "*"); 打印棋盤 //DisplayBoard(mine, ROW, COL); //真正進行排雷會屏蔽此語句,此語句可查看雷的位置坐標 //DisplayBoard(show, ROW, COL); //真正進行排雷會屏蔽此語句,此語句可查看雷的位置坐標 //布置雷 SetMine(mine, ROW, COL); //DisplayBoard(mine, ROW, COL); //DisplayBoard(mine, ROW, COL); //排雷 FindMine(mine, show, ROW, COL);}void test(){ int input = 0; srand((unsigned int)time(NULL));//時間隨機生成數 do { menu(); //printf("請選擇:>"); printf("請選擇游戲開始或結束:>/n"); printf("#輸入數字1代表游戲開始,輸入數字0代表游戲結束#/n"); 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;}
4.按照提示運行程序即可?
運行結果示例:使用說明:
(1)紅框標記語句可控制“雷”的位置坐標的顯示與隱藏:
(2)紅框標記語句可更改“雷”的數量 :因本程序設置棋盤大小為9*9,故此處數量區間為[0,81],
(3)紅框標記語句可進行棋盤大小更改 :
將數字9更改即可,數字9代表棋盤操作大小,ROW+2代表棋盤總大小,
即操作棋盤大小為9*9,總棋盤大小(加上外框)為11*11
?
?題例:
遞歸例1:
#include
int Fun(int n){ if (n == 5) return 2; else return 2 * Fun(n + 1);}int main(){ int ret = Fun(2); printf("%d/n", ret); return 0;} ?
?
?遞歸例題2:
//編寫一個函數 reverse_string(char* string)(遞歸實現)//實現:將參數字符串中的字符反向排列,不是逆序打印。//要求:不能使用C函數庫中的字符串操作函數。//比如 ://char arr[] = "abcdef";//逆序之后數組的內容變成:fedcba#include
int my_strlen(char* s){ int count = 0; while (*s != "/0") { count++; s++; } return count;}//[a b c d e f g /0]遞歸版本void reverse_string(char* arr){ int len = my_strlen(arr); char tmp = *arr; *arr = *(arr + len - 1); *(arr + len - 1) = "/0"; if(my_strlen(arr+1)>1) reverse_string(arr+1); *(arr + len - 1) = tmp;}int main(){ char arr[] = "abcdefg"; reverse_string(arr); printf("%s/n", arr);//fedcba return 0;} 參數用指針的形式void reverse_string(char* str){ char* left = str; char* right = str + my_strlen(str) - 1; while (left
?
參數是數組的形式void reverse_string(char arr[]){ int left = 0; int right = my_strlen(arr)-1; //交換 while (left
?遞歸例題3:
寫一個遞歸函數DigitSum(n),輸入一個非負整數,返回組成它的數字之和例如,調用DigitSum(1729),則應該返回1 + 7 + 2 + 9,它的和是19輸入:1729,輸出:19int DigitSum(size_t n){ if (n <= 9) return n; else return DigitSum(n / 10) + n % 10;}int main(){ size_t num = 0; scanf("%u", &num); int ret = DigitSum(num); printf("%d/n", ret); return 0;}
?
?遞歸例題4:
double Pow(int n, int k){ if (k == 0) return 1; else if (k > 0) return n * Pow(n, k - 1); else return 1.0 / Pow(n, -k);}int main(){ int n = 0; int k = 0; scanf("%d %d", &n, &k); double ret = Pow(n, k); printf("%lf/n", ret); return 0;}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123189.html
摘要:目錄前言由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教前言由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教作者新曉故知作者新曉故知那些代碼背后的故事那些代碼背后的故事通過 目錄 前言:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚...
摘要:變量占用個字節的空間,這里是將的個字節的第一個字節的地址存放在變量中,就是一個之指針變量。是指針變量作者新曉故知總結指針變量,用來存放地址的變量。 目錄 前言:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教! ???????? ? ? ?? ? ? ? ? ? ...
摘要:掃雷最原始的版本可以追溯到年一款名為方塊的游戲。兩年后,湯姆安德森在的基礎上又編寫出了游戲地雷,由此奠定了現代掃雷游戲的雛形。年,微軟公司的羅伯特杜爾和卡特約翰遜兩位工程師在系統上加載了該游戲,掃雷游戲才正式在全世界推廣開來。 掃雷最原始的版本可以追溯到1973年一款名為方塊的游戲。 不久,...
摘要:上一期咱們用語言實現了三子棋的小游戲語言實現三子棋今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實現了三子棋的小游戲? C語言實現三子棋? ? ? ?今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
閱讀 2155·2021-11-12 10:36
閱讀 2147·2021-09-03 10:41
閱讀 2761·2021-08-19 10:57
閱讀 1230·2021-08-17 10:14
閱讀 1486·2019-08-30 15:53
閱讀 1209·2019-08-30 15:43
閱讀 975·2019-08-30 13:16
閱讀 2983·2019-08-29 16:56