C語言實現掃雷遊戲詳細程式碼
阿新 • • 發佈:2020-12-01
本文例項為大家分享了C語言實現掃雷遊戲的詳細程式碼,供大家參考,具體內容如下
一、思想實現
本文的掃雷遊戲主要實現以下的功能:
1.顯示雷和其資訊
2.輸入一個座標可觀測其周圍九格內的地雷數
3.點選到地雷則遊戲結束
用到的IDE為VS2013
二、原始碼
建立一個頭檔案saolei.h
存放關於所有自定義函式的宣告
#define COL 9 char** creatMat(int row,int col); void intMat(char** Mat,int row,int col,char ch); void setMine(char** Mat,int col); void showMat(char** Mat,int col); int getMineNum(char** Mat,int x,int y); void game(char** mineMat,char** mineInfo,int col);
建立一個原始檔SaoLei.c
來存放具體的遊戲實現
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include "saolei.h" #include <Windows.h> char** creatMat(int row,int col) { //建立一個指標陣列 char** Mat = (char**)malloc(sizeof(char *)*(row+2));//多建立2行2列方便計算邊界角落的數值 //開闢每一行元素的空間 for (int i = 0; i < row+2; ++i) { Mat[i] = (char*)malloc(sizeof(char)*(col+2)); } return Mat; } void intMat(char** Mat,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 col)//雷的位置 { int count = MINE_NUM;//佈置雷的個數 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 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 y) {//旋轉矩陣 static int posOffset[8][2] = { { -1,-1 },{ -1,0 },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,int col) { int step = 0; while (step < row * col - MINE_NUM) { int x,y; printf("請輸入一個座標:\n"); scanf("%d%d",&x,&y); if (mineMat[x][y] == '*') { printf("game over!\n"); showMat(mineMat,row,col); break; } //獲取x,y周圍雷的個數 int num = getMineNum(mineMat,col,x,y); mineInfo[x][y] = num + '0'; showMat(mineInfo,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,'*'); setMine(mineMat,COL); printf("雷:"); showMat(mineMat,COL); printf("雷的資訊:"); showMat(mineInfo,COL); game(mineMat,mineInfo,COL); } int main() { test(); system("pause"); return 0; }
三、遊戲結果
END
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。