日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

扫雷完整源代码

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扫雷完整源代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單文件完整源碼:

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <time.h>#define ROW 3 #define COL 3 #define ROWS ROW+2 #define COLS COL+2 #define NUM 1//int main() //{ // int a = 1; // if (a == 1) // { // a = 2; // } // printf("%d", a); // return 0; //}//菜單 void menu() {printf("************************************************************************************************************************");printf("******************************************* 掃雷游戲 ********************************************");printf("******************************************* 1.Play 0.Exit ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************"); }//勝利 void Win() {printf("******************************************* 你贏啦 ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************"); }//失敗 void Defeat() {printf("******************************************* 你輸啦 ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************"); }//結束游戲 void End1() {system("cls");printf("************************************************************************************************************************");printf("************************************************************************************************************************");printf("******************************************* 游戲結束 ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************");Sleep(1000); }//輸入錯誤 void Error() {printf("請根據菜單正確選擇!\n"); }//游戲開頭 void Head() {printf("************************************************************************************************************************");printf("******************************************* 掃雷游戲 ********************************************");printf("************************************************************************************************************************");printf("\n");printf("\n"); }//游戲結尾 void End() {printf("\n");printf("************************************************************************************************************************"); }//初始化數組 void Initializeborad(char borad[ROWS][COLS], int row, int col) {int i = 0;int j = 0;for (i = 1; i <= row; i++){for (j = 1; j <= col; j++){//雙重for循環所有borad值變為空格borad[i][j] = ' ';}} }//打印函數 void Diskplay(char borad[ROWS][COLS], int row, int col) {//清屏system("cls");int i = 0;int j = 0;//打印開頭Head();//雙重for循環打印游戲面板for (i = 1; i <= row; i++){for (j = 1; j <= col; j++){//每行第一個元素前打印一堆空格美觀if (j == 1){printf(" ");}//第一列打印j作為列標if (i == 1){//行標1到9前加一個空格后加兩個空格補位if (j < 9){printf(" %d ", j);}//行標大于等于9前后加一個空格補位else{printf(" %d ", j);}}//不是第一列打印“---”else{printf("---");//最后一列不在打印“|”if (j == col){break;}printf("|");}}//換行printf("\n");for (j = 1; j <= col; j++){//每列第一個元素前打印一堆空格美觀if (j == 1){printf(" ");//1到10打印數字加空格,10以后只打印數(空格為了占位,兩位數本身就2位,不用空格補位)if (i+1 <= 10){printf("%d ", i);}else{printf("%d", i);}}printf(" %c ", borad[i][j]);if (j == col){break;}printf("|");}printf("\n");}//結尾效果End(); }//判斷是否是雷函數 int Ismine(char mineborad[ROWS][COLS], int x, int y, int row, int col) {if (mineborad[x][y] == '*'){return 1;}return 0; }//數九宮格雷個數 void Countmine(char borad[ROWS][COLS], char mineborad[ROWS][COLS], int a, int b, int row, int col) {//定義一個值表示地雷個數,初始為0int mine = 0;//依次判定9宮格除自己以外每個位置是否為雷,因為Ismine函數判定是雷返回1,不是返回0,所以直接mine += Ismine進行累計mine += Ismine(mineborad, a, b+1, ROW, COL);mine += Ismine(mineborad, a+1, b, ROW, COL);mine += Ismine(mineborad, a+1, b+1, ROW, COL);mine += Ismine(mineborad, a, b-1, ROW, COL);mine += Ismine(mineborad, a-1, b, ROW, COL);mine += Ismine(mineborad, a-1, b-1, ROW, COL);mine += Ismine(mineborad, a+1, b-1, ROW, COL);mine += Ismine(mineborad, a-1, b+1, ROW, COL);//數組是字符類型的,把得到的“數字”轉化為“字符”if (mine == 0){mineborad[a][b] = '0';}else if (mine == 1){mineborad[a][b] = '1';}else if (mine == 2){mineborad[a][b] = '2';}else if (mine == 3){mineborad[a][b] = '3';}else if (mine == 4){mineborad[a][b] = '4';}else if (mine == 5){mineborad[a][b] = '5';}else if (mine == 6){mineborad[a][b] = '6';}else if (mine == 7){mineborad[a][b] = '7';}else if (mine == 8){mineborad[a][b] = '8';} }//生成雷函數 void Minerand(char borad[ROWS][COLS], char mineborad[ROWS][COLS], int row, int col) {int x, y, z;z = 0;while (z < NUM){{//隨機生成坐標x = (rand()%row) + 1;y = (rand()%col) + 1;if (mineborad[x][y] == ' '){mineborad[x][y] = '*';z++;}}}//直接算出所有格子的值for (int i = 1; i <= row; i++){for (int j = 0; j <= col; j++){if (mineborad[i][j] != '*'){Countmine(borad, mineborad, i, j, ROW, COL);}}} }//排雷函數 int Demine(char borad[ROWS][COLS], char mineborad[ROWS][COLS], int x, int y, int row, int col) {//坐標位置不是空,表示該位置已經排查過了if (borad[x][y] != ' '){return 2;}//該位置為*表示該位置是0,把棋盤相應位置改為*,返回1表示游戲失敗if (mineborad[x][y] == '*'){borad[x][y] = mineborad[x][y];return 1;}//該位置不為雷,把雷盤上的數字賦值給棋盤else{borad[x][y] = mineborad[x][y];return 0;} }//標記雷函數 int Markmine(char borad[ROWS][COLS], char mineborad[ROWS][COLS], int x, int y) {//定義靜態局部變量來存儲標記對的個數static int count = 0;//如果棋盤該坐標位置為空,就把他標為*,并且雷盤上該位置如果真的為*,count加1表示正確標記了一個雷的位置if (borad[x][y] == ' '){borad[x][y] = '*';if (mineborad[x][y] == '*'){count++;}//如果某一次標記完標記對的個數count等于NUM(即雷的個數),說明游戲勝利,返回3if (count == NUM){count = 0;return 3;}return 0;}//該位置為*表示已經標記過else if (borad[x][y] == '*'){return 1;}//不是空也不是*表示該位置是數字else{return 2;} }//取消標記 int Unmark(char borad[ROWS][COLS], int x, int y) {//該位置是玩家標記的*,把它變回空格if (borad[x][y] == '*'){borad[x][y] = ' ';return 0;}//該位置不是標記位置,返回1else{return 1;} }//游戲函數 void game() {//創建模板char borad[ROWS][COLS] = {0};//創建雷板char mineborad[ROWS][COLS] = {0};//初始化模板Initializeborad(borad, ROW, COL);//初始化雷盤Initializeborad(mineborad, ROW, COL);//打印模板Diskplay(borad, ROW, COL);//隨機生成雷Minerand(borad, mineborad, ROW, COL);int a;do{//清空緩存(初始菜單選擇時留下一個“\n”沒有被讀取)getchar();//選擇菜單printf("請選擇操作:1排雷/2標記雷/3取消標記\n");a = getchar();switch (a){case '1':{int x, y;printf("請輸入坐標:\n");//獲取玩家的輸入坐標scanf("%d%d", &x, &y);//定義ret1接收有返回值的掃雷函數,并根據返回值寫結果int ret1 = Demine(borad, mineborad, x, y, ROW, COL);if (ret1 == 1){//返回值為1,即該位置是雷,打印雷盤并調用失敗函數Diskplay(mineborad, ROW, COL);Defeat(); a = 0;}if (ret1 == 2){//返回值為2說明這個坐標已經排查過了printf("該作坐標已經排查過了!\n");}if (ret1 == 0){//返回值為0說明該位置不為0,游戲繼續,打印棋盤Diskplay(borad, ROW, COL);}break;}case '2':{int x, y;printf("請輸入坐標:\n");//獲取玩家的輸入坐標scanf("%d%d", &x, &y);//定義ret2接收有返回值的標記函數,并根據返回值寫結果int ret2 = Markmine(borad, mineborad, x, y);if(ret2 == 3){//返回值為3表示所有位置雷都已經找到,打印棋盤并調用勝利函數Diskplay(borad, ROW, COL);Win();a = 0;}else if (ret2 == 1){//返回值為1表示該位置已經做過標記了Diskplay(borad, ROW, COL);printf("該位置已做過標記啦!\n");}else if (ret2 == 2){返回值為2表示該位置已經顯示為數字,不是雷Diskplay(borad, ROW, COL);printf("該位置已確定不是雷啦!\n");}else{//排除以上情況,表示游戲正在進行,沒分出輸贏,打印棋盤表示繼續Diskplay(borad, ROW, COL);}break;}case '3':{int x, y;printf("請輸入要取消的標記:\n");//獲取玩家的輸入坐標scanf("%d%d", &x, &y);//定義ret3接收有返回值的取消標記函數,并根據返回值寫結果int ret3 = Unmark(borad, x, y);//返回值為1,表示該位置并沒有被標記,無法取消if (ret3 == 1){Diskplay(borad, ROW, COL);printf("該位置不是標記位置!\n");}//除上中情況表示游戲應該正常繼續,打印棋盤else{Diskplay(borad, ROW, COL);}break;}default:{Error();break;}}//勝利或失敗條件達成把a置為0跳出循環} while (a); }//測試函數 void test() {srand((unsigned int)time(NULL));int a;do{printf("請根據菜單選擇!1.Play 0.Exit\n");scanf("%d", &a);switch (a){case 1:{game();break;}case 0:{printf("游戲退出!\n");break;}//輸出指令不是菜單中的default:{Error();break;}}} while (a);}//程序入口main函數 int main() {menu();test();return 0; }

標準化項目源碼:

test.cpp

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//菜單 void menu() {printf("************************************************************************************************************************");printf("******************************************* 掃雷游戲 ********************************************");printf("******************************************* 1.Play 0.Exit ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************"); }//勝利 void Win() {printf("******************************************* 你贏啦 ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************"); }//失敗 void Defeat() {printf("******************************************* 你輸啦 ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************"); }//結束游戲 void End1() {system("cls");printf("************************************************************************************************************************");printf("************************************************************************************************************************");printf("******************************************* 游戲結束 ********************************************");printf("************************************************************************************************************************");printf("************************************************************************************************************************");Sleep(1000); }//輸入錯誤 void Error() {printf("請根據菜單正確選擇!\n"); }//功能菜單 int Menu() {int a = 0;printf("請選擇掃雷或者標記雷:(1掃雷/2標記/3取消標記)");scanf("%d", &a);return a; }//游戲函數 void game() {//創建模板char borad[ROW][COL] = {0};//創建雷板char mineborad[ROW][COL] = {0};//初始化模板Initializeborad(borad, ROW, COL);//初始化雷盤Initializeborad(mineborad, ROW, COL);//打印模板Diskplay(borad, ROW, COL);//隨機生成雷Minerand(mineborad, ROW, COL);while (1){int ret1 = 0;int ret2 = 0;//功能菜單int ret = Menu();switch (ret){//掃雷case 1:{printf("請輸入坐標掃雷:\n");int x, y;scanf("%d%d", &x, &y);ret1 = Demine(borad, mineborad, x, y, ROW, COL);if (ret1 == 1){Diskplay(mineborad, ROW, COL);Defeat();break;}else if (ret1 == 2){Diskplay(borad, ROW, COL);printf("該位置已確定不是雷啦!\n");}else{Diskplay(borad, ROW, COL);}break;}//標記雷case 2:{printf("請輸入坐標標記雷:\n");int x, y;scanf("%d%d", &x, &y);ret2 = Markmine(borad, mineborad, x, y);if(ret2 == 3){Diskplay(borad, ROW, COL);Win();}else if (ret2 == 1){Diskplay(borad, ROW, COL);printf("該位置已做過標記啦!\n");}else if (ret2 == 2){Diskplay(borad, ROW, COL);printf("該位置已確定不是雷啦!\n");}else{Diskplay(borad, ROW, COL);}break;}//取消標記case 3:{printf("請輸入要取消的標記:\n");int x, y;scanf("%d%d", &x, &y);int ret3 = Unmark(borad, x, y);if (ret3 == 1){Diskplay(borad, ROW, COL);printf("該位置不是標記位置!\n");}else{Diskplay(borad, ROW, COL);}break;}default:{Error();break;}}if (ret1 == 1 || ret2 == 3){break;}} }//測試函數,游戲框架 void test() {int a = 0;srand((unsigned int)time(NULL));do{printf("請根據菜單選擇(1開始游戲,0退出游戲)\n");scanf("%d", &a);switch (a){case 1:{game();break;}case 0:{End1();break;}default:{Error();break;}}} while (a); }int main() {menu();test();return 0; }

game.cpp

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//游戲開頭 void Head() {printf("************************************************************************************************************************");printf("******************************************* 掃雷游戲 ********************************************");printf("************************************************************************************************************************");printf("\n");printf("\n"); }//游戲結尾 void End() {printf("\n");printf("************************************************************************************************************************"); }//初始化數組 void Initializeborad(char borad[ROW][COL], int row, int col) {int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){//雙重for循環所有borad值變為空格borad[i][j] = ' ';}} }//打印函數 void Diskplay(char borad[ROW][COL], int row, int col) {//清屏system("cls");int i = 0;int j = 0;//打印開頭Head();//雙重for循環打印游戲面板for (i = 0; i < row; i++){for (j = 0; j < col; j++){//每行第一個元素前打印一堆空格美觀if (j == 0){printf(" ");}if (i == 0){if (j < 9){printf(" %d ", j+1);}else if (j == 9){printf(" %d ", j+1);}else{printf(" %d ", j+1);}}else{printf("---");if (j == col-1){break;}printf("|");}}printf("\n");for (j = 0; j < col; j++){if (j == 0){printf(" ");if (i+1 < 10){printf("%d ", i+1);}else{printf("%d", i+1);}}printf(" %c ", borad[i][j]);if (j == col-1){break;}printf("|");}printf("\n");}End(); } //生成雷函數 void Minerand(char mineborad[ROW][COL], int row, int col) {int x, y, z;z = 0;while (z < 9){{x = rand()%row;y = rand()%col;if (mineborad[x][y] == ' '){mineborad[x][y] = '*';z++;}}} }//排雷函數 int count1 = 0; int Demine(char borad[ROW][COL], char mineborad[ROW][COL], int x, int y, int row, int col) {if (count1 == 0){if (mineborad[x-1][y-1] == '*'){mineborad[x-1][y-1] = ' ';int a, b;while (1){a = rand()%row;b = rand()%col;if (mineborad[a][b] == ' '){mineborad[a][b] = '*';break;}}}count1 = 1;}if (borad[x-1][y-1] != ' '){return 2;}int ret = Ismine(mineborad, x-1, y-1, ROW, COL);if (ret == 1){count1 = 0;return ret;}else{Countmine(borad, mineborad, x-1, y-1, ROW, COL);return 0;} }//判斷函數 int Ismine(char mineborad[ROW][COL], int x, int y, int row, int col) {if (x<0 || x>row-1 || y<0 || y>col-1){return 0;}else if (mineborad[x][y] == '*'){return 1;}return 0; }//數九宮格雷個數 void Countmine(char borad[ROW][COL], char mineborad[ROW][COL], int a, int b, int row, int col) {if (borad[a][b] == ' '){int mine = 0;mine += Ismine(mineborad, a, b+1, ROW, COL);mine += Ismine(mineborad, a+1, b, ROW, COL);mine += Ismine(mineborad, a+1, b+1, ROW, COL);mine += Ismine(mineborad, a, b-1, ROW, COL);mine += Ismine(mineborad, a-1, b, ROW, COL);mine += Ismine(mineborad, a-1, b-1, ROW, COL);mine += Ismine(mineborad, a+1, b-1, ROW, COL);mine += Ismine(mineborad, a-1, b+1, ROW, COL);if (mine == 0){borad[a][b] = '0';if (b-1>=0){Countmine(borad, mineborad, a, b-1, ROW, COL);}if (a-1>=0){Countmine(borad, mineborad, a-1, b, ROW, COL);}if (a+1<row){Countmine(borad, mineborad, a+1, b, ROW, COL);}if (b+1<col){Countmine(borad, mineborad, a, b+1, ROW, COL);}}else if (mine == 1){borad[a][b] = '1';}else if (mine == 2){borad[a][b] = '2';}else if (mine == 3){borad[a][b] = '3';}else if (mine == 4){borad[a][b] = '4';}else if (mine == 5){borad[a][b] = '5';}else if (mine == 6){borad[a][b] = '6';}else if (mine == 7){borad[a][b] = '7';}else if (mine == 8){borad[a][b] = '8';}} }//標記雷函數 int Markmine(char borad[ROW][COL], char mineborad[ROW][COL], int x, int y) {static int count = 0;if (borad[x-1][y-1] == ' '){borad[x-1][y-1] = '*';if (mineborad[x-1][y-1] == '*'){count++;}if (count == 9){count = 0;count1 = 0;return 3;}return 0;}else if (borad[x-1][y-1] == '*'){return 1;}else{return 2;} }//取消標記 int Unmark(char borad[ROW][COL], int x, int y) {if (borad[x-1][y-1] == '*'){borad[x-1][y-1] = ' ';return 0;}else{return 1;} }

?game.h

#define ROW 9 #define COL 9#include <stdio.h> #include <Windows.h> #include <time.h>void Initializeborad(char borad[ROW][COL], int row, int col); void Diskplay(char borad[ROW][COL], int row, int col); void Minerand(char mineborad[ROW][COL], int row, int col); int Demine(char borad[ROW][COL], char mineborad[ROW][COL], int x, int y, int row, int col); int Ismine(char mineborad[ROW][COL], int x, int y, int row, int col); void Countmine(char borad[ROW][COL], char mineborad[ROW][COL], int a, int b, int row, int col); int Markmine(char borad[ROW][COL], char mineborad[ROW][COL], int x, int y); int Unmark(char borad[ROW][COL], int x, int y);

總結

以上是生活随笔為你收集整理的扫雷完整源代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。