目錄
前言:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教!
——By 作者:新曉·故知
2021.11.11
掃雷游戲(初級)撰寫:
創建檔案專案:
選單列印:test.c
列印棋盤:
布置雷:
字符±(*/)ASCII碼 ' 0 '=字符
掃雷游戲(初級)完整代碼:
1.創建頭檔案:game.h
2.創建源檔案: game.c
3.創建源檔案: test.c
4.按照提示運行程式即可
運行結果示例:
題例:
遞回例1:
遞回例題2:
遞回例題3:
遞回例題4:
——Since 新曉-故知
2021.11.11
前言:
●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教!
——By 作者:新曉·故知
2021.11.11
掃雷游戲(初級)撰寫:
創建檔案專案:
選單列印:test.c
選單列印 test.c #include<stdio.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"); } 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 <stdio.h> //#include <time.h> //#include <stdlib.h> 符號的宣告 #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 <stdio.h> #include <time.h> //#include <stdlib.h> //符號的宣告 #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 <stdio.h> #include <time.h> #include <stdlib.h> //符號的宣告 #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 <stdio.h> 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 <string.h> 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<right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } }
引數是陣列的形式 void reverse_string(char arr[]) { int left = 0; int right = my_strlen(arr)-1; //交換 while (left<right) { char tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } }
遞回例題3:
寫一個遞回函式DigitSum(n),輸入一個非負整數,回傳組成它的數字之和 例如,呼叫DigitSum(1729),則應該回傳1 + 7 + 2 + 9,它的和是19 輸入:1729,輸出:19 int 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; }
——Since 新曉-故知
2021.11.11
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/356197.html
標籤:其他
上一篇:C語言實作【掃雷游戲】拓展版


























