C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲
本文實(shí)例為大家分享了C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下
掃雷游戲(10×10的面板):
1.定義兩個12×12的字符型數(shù)組;
2.show_board[][]:初始化全為*
mine_board[][]:隨機(jī)賦值字符’0’或’1’
3.統(tǒng)計(jì)雷的個數(shù):周圍8個位置的值累加-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 ? ? //雷的個數(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("請輸入:");
}
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("請輸入坐標(biāo):");
?? ??? ?scanf("%d %d", &x, &y);
?? ??? ?if (x<1 || x>ROW - 2 || y<1 || y>COL - 2){
?? ??? ??? ?printf("輸入位置越界,請重新輸入!\n");
?? ??? ??? ?continue;
?? ??? ?}
?? ??? ?if (show_board[x][y] != '*'){
?? ??? ??? ?printf("該位置已被排除,請重新輸入!\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("輸入有誤,請重新輸入!\n ");
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?printf("ByeBye!\n");
?? ?system("pause");
?? ?return 0;
}運(yùn)行結(jié)果


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言驅(qū)動開發(fā)之內(nèi)核使用IO/DPC定時器詳解
本章將繼續(xù)探索驅(qū)動開發(fā)中的基礎(chǔ)部分,定時器在內(nèi)核中同樣很常用,在內(nèi)核中定時器可以使用兩種,即IO定時器,以及DPC定時器,感興趣的可以了解一下2023-04-04
在C/C++與Python之間實(shí)現(xiàn)通信的常見方法
在C/C++與Python之間實(shí)現(xiàn)通信的方式有很多,本文給大家介紹了一些常見的方法,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12
C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題
這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
C語言實(shí)現(xiàn)奇數(shù)階魔方陣的方法
這篇文章主要介紹了C語言實(shí)現(xiàn)奇數(shù)階魔方陣的方法,涉及數(shù)組及相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02

