基于C語言實現(xiàn)簡易掃雷游戲
更新時間:2022年01月14日 11:45:05 作者:獨行劍俠
這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡易掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
本文實例為大家分享了C語言實現(xiàn)簡易掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下
1、頭文件
#define _CRT_SECURE_NO_WARNINGS //包含頭文件 #include <stdio.h> #include <stdlib.h> //定義數(shù)值 #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 //定義雷的數(shù)量 #define mine_num 10 //函數(shù)定義 //初始化 void init_board(char board[ROWS][COLS], int row, int col, char set); //打印棋盤 void print_board(char board[ROWS][COLS], int row, int col); //布雷 void set_mine(char mine[ROWS][COLS], int row, int col); //掃雷 void find_mine(char mine[ROWS][COLS], char board[ROWS][COLS], int row, int col);
2、游戲?qū)崿F(xiàn)函數(shù)
#include "game.h" //初始化 void init_board(char board[ROWS][COLS], int row, int col, char set) { ?? ?int x = 0; ?? ?int y = 0; ?? ?for (x = 0; x < row; x++) { ?? ??? ?for (y = 0; y < col; y++) { ?? ??? ??? ?board[x][y] = set; ?? ??? ?} ?? ?} } //打印棋盤 void print_board(char board[ROWS][COLS], int row, int col) { ?? ?int x = 0; ?? ?int y = 0; ?? ?for (x = 0; x <= row; x++) { ?? ??? ?printf("%d ", x); ?? ?} ?? ?printf("\n"); ?? ?for (x = 1; x <= row; x++) { ?? ??? ?printf("%d ", x); ?? ??? ?for (y = 1; y <= col; y++) { ?? ??? ??? ?printf("%c ", board[x][y]); ?? ??? ?} ?? ??? ?printf("\n"); ?? ?} } //布雷 void set_mine(char mine[ROWS][COLS], int row, int col) { ?? ?int count = mine_num; ?? ?while (count) { ?? ??? ?int x = rand() % row + 1; ?? ??? ?int y = rand() % col + 1; ?? ??? ?if (mine[x][y] == '0') { ?? ??? ??? ?mine[x][y] = '1'; ?? ??? ??? ?count--; ?? ??? ?} ?? ?} } //計算周圍雷的數(shù)量 int get_mine(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'; } //掃雷 void find_mine(char mine[ROWS][COLS], char board[ROWS][COLS], int row, int col) { ?? ?//獲取坐標 ?? ?int x = 0; ?? ?int y = 0; ?? ?int count = row * col - mine_num; ?? ?while (count) { ?? ??? ?printf("請輸入要排查的坐標>:\n"); ?? ??? ?scanf("%d%d", &x, &y); ?? ??? ?//判斷坐標的合法性 ?? ??? ?if (x >= 1 && y >= 1 && x <= row && y <= col) { ?? ??? ??? ?if (mine[x][y] == '1') { ?? ??? ??? ??? ?printf("是雷?。?!炸死了\n"); ?? ??? ??? ??? ?print_board(mine, ROW, COL); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?else { ?? ??? ??? ??? ?int num = get_mine(mine, x, y); ?? ??? ??? ??? ?board[x][y] = num + '0'; ?? ??? ??? ??? ?count--; ?? ??? ??? ??? ?print_board(board, ROW, COL); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?else { ?? ??? ??? ?printf("你輸入的坐標不合法,請重新輸入\n"); ?? ??? ?} ?? ?} ?? ?if (count == 0) { ?? ??? ?printf("恭喜你排雷成功?。。n"); ?? ?} }
3、主程序
#include "game.h" //打印游戲菜單 void menu() { ?? ?printf("**************************\n"); ?? ?printf("********* 掃 ? 雷 ********\n"); ?? ?printf("********* 1. play ********\n"); ?? ?printf("********* 0. exit ********\n"); ?? ?printf("**************************\n"); } //游戲?qū)崿F(xiàn) void game() { ?? ?//創(chuàng)建數(shù)組存儲雷和游戲棋盤 ?? ?char mine[ROWS][COLS] = { 0 }; ?? ?char board[ROWS][COLS] = { 0 }; ?? ?//初始化布雷 ?? ?init_board(mine, ROWS, COLS, '0'); ?? ?//初始化游戲棋盤 ?? ?init_board(board, ROWS, COLS, '*'); ?? ?//打印布雷棋盤 ?? ?//printf("------布雷棋盤------\n"); ?? ?//print_board(mine, ROW, COL); ?? ?//打印掃雷棋盤 ?? ?printf("------掃雷棋盤------\n"); ?? ?print_board(board, ROW, COL); ?? ?//布雷 ?? ?set_mine(mine, ROW, COL); ?? ?printf("------布雷棋盤------\n"); ?? ?//print_board(mine, ROW, COL); ?? ?//掃雷 ?? ?find_mine(mine, board, ROW, COL); } int main(void) { ?? ?int num = 0; ?? ?srand((unsigned int)time(NULL)); ?? ?do { ?? ??? ?menu(); ?? ??? ?printf("請選擇菜單!>:"); ?? ??? ?scanf("%d", &num); ?? ??? ?switch (num) { ?? ??? ?case 1: ?? ??? ??? ?game(); ?? ??? ??? ?break; ?? ??? ?case 0: ?? ??? ??? ?printf("退出游戲\n"); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?printf("你的選擇有誤,請重新選擇\n"); ?? ??? ??? ?break; ?? ??? ?} ?? ?} while (num); ?? ?system("pause"); ?? ?return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C語言編程中從密碼文件獲取數(shù)據(jù)的函數(shù)總結(jié)
這篇文章主要介紹了C語言編程中從密碼文件獲取數(shù)據(jù)的函數(shù)總結(jié),包括getpw()函數(shù)和getpwnam()函數(shù)以及getpwuid()函數(shù),需要的朋友可以參考下2015-08-08C++?OpenGL實現(xiàn)旋轉(zhuǎn)立方體的繪制
這篇文章主要主要為大家詳細介紹了如何利用C++和OpenGL實現(xiàn)旋轉(zhuǎn)立方體的繪制,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手嘗試一下2022-07-07C++實現(xiàn)LeetCode(32.最長有效括號)
這篇文章主要介紹了C++實現(xiàn)LeetCode(32.最長有效括號),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07老生常談C語言動態(tài)函數(shù)庫的制作和使用(推薦)
下面小編就為大家?guī)硪黄仙U凜語言動態(tài)函數(shù)庫的制作和使用(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08C和MFC巧妙獲取外網(wǎng)IP的兩種實現(xiàn)方法
這篇文章主要介紹了C和MFC巧妙獲取外網(wǎng)IP的兩種實現(xiàn)方法,功能非常的實用,需要的朋友可以參考下2014-07-07