C語言實(shí)現(xiàn)掃雷游戲詳細(xì)代碼
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)掃雷游戲的詳細(xì)代碼,供大家參考,具體內(nèi)容如下
一、思想實(shí)現(xiàn)
本文的掃雷游戲主要實(shí)現(xiàn)以下的功能:
1.顯示雷和其信息
2.輸入一個(gè)坐標(biāo)可觀測其周圍九格內(nèi)的地雷數(shù)
3.點(diǎn)擊到地雷則游戲結(jié)束
用到的IDE為VS2013
二、源代碼
創(chuàng)建一個(gè)頭文件saolei.h
存放關(guān)于所有自定義函數(shù)的聲明
#define COL 9 char** creatMat(int row, int col); void intMat(char** Mat, int row, int col, char ch); void setMine(char** Mat, int row, int col); void showMat(char** Mat, int row, int col); int getMineNum(char** Mat, int row, int col, int x, int y); void game(char** mineMat, char** mineInfo, int row, int col);
創(chuàng)建一個(gè)源文件SaoLei.c
來存放具體的游戲?qū)崿F(xiàn)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include "saolei.h" #include <Windows.h> char** creatMat(int row,int col) { //創(chuàng)建一個(gè)指針數(shù)組 char** Mat = (char**)malloc(sizeof(char *)*(row+2));//多創(chuàng)建2行2列方便計(jì)算邊界角落的數(shù)值 //開辟每一行元素的空間 for (int i = 0; i < row+2; ++i) { Mat[i] = (char*)malloc(sizeof(char)*(col+2)); } return Mat; } void intMat(char** Mat, int row, int col, char ch) { for (int i = 0; i < row+2; ++i) { for (int j = 0; j < col+2; ++j) { Mat[i][j] = ch; } } } void setMine(char** Mat, int row, int col)//雷的位置 { int count = MINE_NUM;//布置雷的個(gè)數(shù) while (count) { //x:1`row,y:1~col int x = rand() % row + 1; int y = rand() % col + 1; if (Mat[x][y] != '*') { Mat[x][y] = '*'; --count; } } } void showMat(char** Mat, int row, int col) { printf("------------------------------\n"); //顯示列 for (int i = 0; i <= col; ++i) { printf("%d ", i); } printf("\n"); //顯示行 for (int i = 1; i <= row; ++i) { printf("%d ", i); for (int j = 1; j <= col; ++j) { printf("%c ", Mat[i][j]); } printf("\n"); } printf("------------------------------\n"); } int getMineNum(char** Mat, int row, int col, int x, int y) {//旋轉(zhuǎn)矩陣 static int posOffset[8][2] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, { 1, 1 } }; int count = 0; for (int i = 0; i < 8; ++i) { int nx = x + posOffset[i][0]; int ny = y + posOffset[i][1]; if (Mat[nx][ny] == '*') { ++count; } } return 0; } void game(char** mineMat, char** mineInfo, int row, int col) { int step = 0; while (step < row * col - MINE_NUM) { int x, y; printf("請輸入一個(gè)坐標(biāo):\n"); scanf("%d%d", &x, &y); if (mineMat[x][y] == '*') { printf("game over!\n"); showMat(mineMat, row, col); break; } //獲取x,y周圍雷的個(gè)數(shù) int num = getMineNum(mineMat, row, col, x, y); mineInfo[x][y] = num + '0'; showMat(mineInfo, row, col); ++step;//成功走了一步 } if (step == row * col - MINE_NUM) { printf("win!\n"); } } void test() { char** mineMat = creatMat(ROW, COL); char** mineInfo = creatMat(ROW, COL); intMat(mineMat, ROW, COL, '0'); intMat(mineInfo, ROW, COL, '*'); setMine(mineMat, ROW, COL); printf("雷:"); showMat(mineMat, ROW, COL); printf("雷的信息:"); showMat(mineInfo, ROW, COL); game(mineMat, mineInfo, ROW, COL); } int main() { test(); system("pause"); return 0; }
三、游戲結(jié)果
END
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言實(shí)現(xiàn)統(tǒng)計(jì)100以內(nèi)所有素?cái)?shù)的個(gè)數(shù)
本文詳細(xì)講解了C語言實(shí)現(xiàn)統(tǒng)計(jì)100以內(nèi)所有素?cái)?shù)個(gè)數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì)。需要的朋友可以收藏下,方便下次瀏覽觀看2021-11-11C語言實(shí)現(xiàn)宿舍管理系統(tǒng)設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)宿舍管理系統(tǒng)設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C++中線性代數(shù)計(jì)算Eigen庫的使用教程詳解
Eigen是一個(gè)基于線性代數(shù)的C++模板庫,主要用于矩陣、向量、數(shù)值求解和相關(guān)算法,本文主要為大家簡單聊聊Eigen庫的使用,希望對(duì)大家有所幫助2023-12-12C++的STL中accumulate函數(shù)的使用方法
這篇文章主要介紹了C++的STL中accumulate的使用方法,accumulate作用是累加求和即自定義類型數(shù)據(jù)處理,下文具體的操作方法需要的小伙伴可以參考一下2022-03-03c++ 構(gòu)造函數(shù)中調(diào)用虛函數(shù)的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猚++ 構(gòu)造函數(shù)中調(diào)用虛函數(shù)的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12