1. 程式人生 > 程式設計 >C語言實現掃雷遊戲詳細程式碼

C語言實現掃雷遊戲詳細程式碼

本文例項為大家分享了C語言實現掃雷遊戲的詳細程式碼,供大家參考,具體內容如下

一、思想實現

本文的掃雷遊戲主要實現以下的功能:

1.顯示雷和其資訊
2.輸入一個座標可觀測其周圍九格內的地雷數
3.點選到地雷則遊戲結束

用到的IDE為VS2013

C語言實現掃雷遊戲詳細程式碼

二、原始碼

建立一個頭檔案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;
}

三、遊戲結果

C語言實現掃雷遊戲詳細程式碼

C語言實現掃雷遊戲詳細程式碼

END

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。