利用C语言实现一个扫雷游戏-创新互联

今天就跟大家聊聊有关利用C语言实现一个扫雷游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

成都创新互联公司主要从事网站制作、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务下冶,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

一、思想实现


主要实现以下的功能:

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 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);

创建一个源文件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, 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;//布置雷的个数
 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)
{//旋转矩阵
 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("请输入一个坐标:\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, 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;
}

三、游戏结果

利用C语言实现一个扫雷游戏

利用C语言实现一个扫雷游戏

看完上述内容,你们对利用C语言实现一个扫雷游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。

分享名称:利用C语言实现一个扫雷游戏-创新互联
分享路径:https://www.cdcxhl.com/article2/coosic.html

成都网站建设公司_创新互联,为您提供网站营销手机网站建设网站策划品牌网站制作标签优化服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设