C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲
本文實(shí)例為大家分享了C語言數(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("恭喜,你通過游戲!\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é)果


以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題匯總
這篇文章主要給大家匯總介紹了關(guān)于c/c++那些你一定會(huì)出錯(cuò)的數(shù)組筆試題,除了基本數(shù)據(jù)類型之外,其余的都作為類對(duì)象,包括數(shù)組,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
關(guān)于C++類的成員初始化列表的相關(guān)問題
下面小編就為大家?guī)硪黄P(guān)于C++類的成員初始化列表的相關(guān)問題。小編覺得挺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-04
C++設(shè)計(jì)一個(gè)簡單內(nèi)存池的全過程
利用C/C++開發(fā)大型應(yīng)用程序中,內(nèi)存的管理與分配是一個(gè)需要認(rèn)真考慮的部分,下面這篇文章主要給大家介紹了關(guān)于C++設(shè)計(jì)一個(gè)簡單內(nèi)存池的全過程,需要的朋友可以參考下2021-09-09
Opencv2.4.9函數(shù)HoughLinesP分析
這篇文章主要為大家詳細(xì)介紹了Opencv2.4.9函數(shù)HoughLinesP,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01

