C語(yǔ)言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲
本文實(shí)例為大家分享了C語(yǔ)言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下
掃雷游戲(10×10的面板):
1.定義兩個(gè)12×12的字符型數(shù)組;
2.show_board[][]:初始化全為*
mine_board[][]:隨機(jī)賦值字符’0’或’1’
3.統(tǒng)計(jì)雷的個(gè)數(shù):周圍8個(gè)位置的值累加-8×’0’
代碼:
game.h
#ifndef _GAME_H_ #define _GAME_H_ #include <stdio.h> #include <string.h> #include <time.h> #include <windows.h> #define ROW 12 #define COL 12 #define NUMS 20 ? ? //雷的個(gè)數(shù) #pragma warning(disable:4996)? void Menu(); void Game(); #endif
game.c
#include "game.h" void Menu() { ?? ?printf("########################\n"); ?? ?printf("#####1.Play ?2.Exit#####\n"); ?? ?printf("########################\n"); ?? ?printf("請(qǐng)輸入:"); } void SetMines(char board[][COL], int row,int col){ ?? ?int num = NUMS; ?? ?while (num){ ?? ??? ?int x = rand() % 10 + 1; ?? ??? ?int y = rand() % 10 + 1; ?? ??? ?if (board[x][y] == '0'){ ?? ??? ??? ?board[x][y] = '1'; ?? ??? ??? ?num--; ?? ??? ?} ?? ?} } int GetNums(char board[][COL], int row,int col, int x, int y) { ?? ?return board[x-1][y-1] + board[x-1][y] + \ ?? ??? ? ? board[x-1][y+1] + board[x][y+1] + \ ?? ??? ? ? board[x+1][y+1] + board[x+1][y] + \ ?? ??? ? ? board[x+1][y-1] + board[x][y-1] - 8 * '0'; } void ShowBoard(char board[][COL], int row, int col){ ?? ?printf(" ?"); ?? ?for (int i = 1; i < col - 1; i++){ ?? ??? ?printf(" %2d ", i); ?? ?} ?? ?printf("\n"); ?? ?printf("—————————————————————\n"); ?? ?for (int i = 1; i < row - 1; i++){ ?? ??? ?printf("%2d|", i); ?? ??? ?for (int j = 1; j < col - 1; j++){ ?? ??? ??? ?printf(" %c |", board[i][j]); ?? ??? ?} ?? ??? ?printf("\n"); ?? ??? ?printf("—————————————————————\n"); ?? ?} } void Game() { ?? ?system("cls"); ?? ?srand((unsigned long)time(NULL)); ?? ?char show_board[ROW][COL]; ?? ?char mine_board[ROW][COL]; ?? ?memset(show_board,'*', sizeof(show_board));? ?? ?memset(mine_board,'0', sizeof(mine_board)); //初始化二維數(shù)組 ?? ?SetMines(mine_board,ROW,COL); //布雷 ?? ?int count = (ROW - 2)*(COL - 2) - NUMS; ?? ?int x = 0; ?? ?int y = 0; ?? ?do{ ?? ??? ?ShowBoard(show_board,ROW,COL); ?? ??? ?printf("請(qǐng)輸入坐標(biāo):"); ?? ??? ?scanf("%d %d", &x, &y); ?? ??? ?if (x<1 || x>ROW - 2 || y<1 || y>COL - 2){ ?? ??? ??? ?printf("輸入位置越界,請(qǐng)重新輸入!\n"); ?? ??? ??? ?continue; ?? ??? ?} ?? ??? ?if (show_board[x][y] != '*'){ ?? ??? ??? ?printf("該位置已被排除,請(qǐng)重新輸入!\n"); ?? ??? ??? ?continue; ?? ??? ?} ?? ??? ?if (mine_board[x][y] == '1'){ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?int num = GetNums(mine_board,ROW,COL,x, y); ?? ??? ?show_board[x][y] = num + '0'; ?? ??? ?count--; ?? ??? ?system("cls"); ?? ?} while (count > 0); ?? ?if (count > 0){ ?? ??? ?printf("你被炸死了!\n"); ?? ??? ?ShowBoard(mine_board, ROW, COL); ?? ?} ?? ?else{ ?? ??? ?printf("恭喜,你通過(guò)游戲!\n"); ?? ?} }
main.c
#include "game.h" int main() { ?? ?int quit = 0; ?? ?int select = 0; ?? ?while (!quit){ ?? ??? ?Menu(); ?? ??? ?scanf("%d", &select); ?? ??? ?switch (select){ ?? ??? ?case 1: ?? ??? ??? ?Game(); ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?quit = 1; ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?printf("輸入有誤,請(qǐng)重新輸入!\n "); ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?printf("ByeBye!\n"); ?? ?system("pause"); ?? ?return 0; }
運(yùn)行結(jié)果
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于C語(yǔ)言實(shí)現(xiàn)的掃雷游戲代碼
- C語(yǔ)言開(kāi)發(fā)簡(jiǎn)易版掃雷小游戲
- C語(yǔ)言代碼實(shí)現(xiàn)掃雷游戲
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷小游戲
- C語(yǔ)言快速實(shí)現(xiàn)掃雷小游戲
- C語(yǔ)言 掃雷程序的實(shí)現(xiàn)
- C語(yǔ)言實(shí)現(xiàn)掃雷小游戲(適合初學(xué)者)
- C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單掃雷小游戲
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷小程序
- C語(yǔ)言實(shí)現(xiàn)掃雷程序
相關(guān)文章
c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題匯總
這篇文章主要給大家匯總介紹了關(guān)于c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題,除了基本數(shù)據(jù)類型之外,其余的都作為類對(duì)象,包括數(shù)組,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07關(guān)于C++類的成員初始化列表的相關(guān)問(wèn)題
下面小編就為大家?guī)?lái)一篇關(guān)于C++類的成員初始化列表的相關(guān)問(wèn)題。小編覺(jué)得挺2016-05-05在VC中隱藏控制臺(tái)程序窗口的實(shí)現(xiàn)代碼
大家都知道,當(dāng)編寫一個(gè)win32 console application時(shí),當(dāng)運(yùn)行此類程序的時(shí)候默認(rèn)情況下會(huì)有一個(gè)類似dos窗口的console窗口,但是有的時(shí)候我們只想在程序中運(yùn)行一段功能代碼,不希望顯示這個(gè)console窗口,讓代碼執(zhí)行完畢之后程序自動(dòng)退出2013-04-04C++設(shè)計(jì)一個(gè)簡(jiǎn)單內(nèi)存池的全過(guò)程
利用C/C++開(kāi)發(fā)大型應(yīng)用程序中,內(nèi)存的管理與分配是一個(gè)需要認(rèn)真考慮的部分,下面這篇文章主要給大家介紹了關(guān)于C++設(shè)計(jì)一個(gè)簡(jiǎn)單內(nèi)存池的全過(guò)程,需要的朋友可以參考下2021-09-09Opencv2.4.9函數(shù)HoughLinesP分析
這篇文章主要為大家詳細(xì)介紹了Opencv2.4.9函數(shù)HoughLinesP,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01