想过七夕?->女朋友陪你玩游戏(C)(下)

简介: 七夕到了,没有女朋友怎么办?没事~ 写一个小游戏,让女朋友陪你玩扫雷~

扫雷



七夕到了,没有女朋友怎么办?没事~ 写一个小游戏,让女朋友陪你玩扫雷~

efc9c1fef9124233b29eec88fc871374.png


首先创建:


game.c的源文件–>游戏函数的实现

test.c的源文件–>测试使用

game.h的头文件–>游戏函数的声明

aebee51e1ead4cdea652b29bb716f04e.png


一共需要创建两个二维数组:

b6373f335eed4f04850afbaa4bc2a456.png

如果要实现9*9的数组雷区,则实际要创建11 *11的数组雷区,为了防止数组越界。

d561ee1a65a94b50868e2a5335272a50.png


1.初始化棋盘


void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
  int i, j;
  for (i = 0; i < ROWS; i++)
  {
    for (j = 0; j < COLS; j++)
    {
      board[i][j] = set;
    }
  }
}
void game()
{
  char mine[ROWS][COLS] = { 0 };//存放雷的信息
  char show[ROWS][COLS] = { 0 };//存放排查雷的信息
  //初始化棋盘
  InitBoard(mine, ROWS, COLS ,'0');
  InitBoard(show, ROWS, COLS,'*');
  //展示棋盘
  DisplayBoard(mine, ROWS, COLS);
  DisplayBoard(show, ROWS, COLS);
}


2.展示棋盘


void DisplayBoard(char board[ROWS][COLS], int rows, int cols)
{
  int i, j;
  for (i = 0; i < 10; i++)
  {
    printf("%d ", i);
  }
  printf("\n");
  for (i = 1; i < ROWS-1; i++)
  {
    printf("%d ", i);
    for (j = 1; j < COLS-1; j++)
    {
      printf("%c ", board[i][j]);
    }
    printf("\n");
  }
  printf("\n");
}

2c479d33105e4c029b0d5932f1780ac1.png

最外层的行列可以让玩家容易分清楚是在第几行第几列


3.布置雷


void SetMine(char board[ROWS][COLS], int row, int col)
{
  int count = EAST_COUNT;
  while (count)
  {   //1.生成随机下标
    int x = rand() % row + 1;
    int y = rand() % col + 1;
    if (board[x][y] != '1')
    {
      board[x][y] = '1';
      count--;
    }
  }
}

b469d7ad658b4c1392a5775d3ebbab14.png

0 1 2 3 4 5 6 7 8 9
1 1 0 0 0 0 0 0 1 0
2 0 0 0 0 0 0 0 0 0
3 0 0 0 1 0 0 0 0 0
4 1 0 0 0 1 1 0 0 0
5 0 0 0 0 0 1 0 0 0
6 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0
9 0 1 0 1 0 0 0 0 0


4.排除雷


void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)//排查雷
{
  int x, y;
  printf("输入要排查雷的坐标:>");
  scanf("%d%d", &x, &y);
  while (1)
  {
    if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
    {
      if (mine[x][y] == '1')
      {
        printf("很遗憾,你被炸死了,女朋友很伤心๐·°(৹˃̵﹏˂̵৹)°·๐");
        DisplayBoard(show, ROWS, COLS);
        break;
      }
      else
      {
        int count = GetMineCount(mine, x, y);
        show[x][y] = count+'0';
        DisplayBoard(show, ROWS, COLS);
        break;
      }
    }
    else
      printf("输入坐标非法,请重新输入");
  }


下图说明在2 5坐标的周围8个格子中一共有一个雷

cdeb6fe22a2b4247ae7aaacfa5305598.png


5.优化展示效果


(1)展开一片


如何实现这种可以展开一大片的效果呢?


规则:满足该坐标不是雷,并且周围8个位置也不是雷,就会展开一片

053729783d534e7b9402be241a66d204.png


声明:以下代码来自点击到空白格子时自动展开

//连续展开
void blankOpen(int r,int c)
{
//打开格子
  map[r][c] -= 20;
  count++;
  //点开后遍历九宫格
  for (int m=r-1;m<=r+1;m++)
  {
    for (int n=c-1;n<=c+1;n++)
    {
      if (m >= 1 && m <= ROW && n >= 1 && n <= COL)     //保证是游戏区
      {
        if (map[m][n] >= 19 && map[m][n] <= 28)       //必须为空白格
        {
          if (map[m][n]!=20)
          {
            map[m][n] -= 20;
            count++;
          }
          else
          {
            blankOpen(m,n);
          }
        }
      }
    }
  }
}


此时就需要用到递归了


(2)显示剩余的雷数

5e8dfad0751f4f28bfa5d296a6c56175.png


声明:以下代码来自关于显示剩余的雷数

int print()
{
  char num[MINE_NUM];
  int n = 0;
  for (int r = 1; r <= ROW; r++)
  {
    for (int c = 1; c <= COL; c++)
    {
      if (map[r][c] == 19 || map[r][c] == -1)
      {
        n++;
      }
    }
  }
  outtextxy(770, 200, "剩余的雷:");
  sprintf(num, "%02d", n);
  outtextxy(790, 230, num);
  printf("\n\n\n");
  printf("%02d",n);
}


6.最终展示结果


1.排雷失败:(1代表雷,0代表非雷)

639017666caa45fe85c03d42393b50a4.png

2.排雷成功

da63979766df4558a6f1dba270c7553c.png


最终的所有的代码如下:

我的gitee–和女朋友玩的扫雷小游戏

cd146abfb596402ea3f4bf9cd3b39332.jpg

相关文章
|
6月前
|
移动开发 前端开发 JavaScript
童年回忆——开心消消乐(内含源码inscode一键运行)
童年回忆——开心消消乐(内含源码inscode一键运行)
|
6月前
|
Java
普通玩家也能掌握的Java游戏加点系统,专业到让你无敌!
普通玩家也能掌握的Java游戏加点系统,专业到让你无敌!
37 1
|
前端开发
零基础都能拿捏的七夕浪漫代码,快去表白或去制造惊喜吧
零基础都能拿捏的七夕浪漫代码,快去表白或去制造惊喜吧
120 0
想过七夕?->女朋友陪你玩游戏(C)(上)
三子棋 七夕到了,没有女朋友怎么办?没事~ 写一个小游戏,让女朋友陪你玩三子棋~
想过七夕?->女朋友陪你玩游戏(C)(上)
想过七夕?->女朋友陪你玩游戏(C)(中)
在一定数值范围内,游戏随机生成一个数字,玩家输入比随机数大的数字时,程序会提醒,数值大于目标数,反之亦然。通过不断试错,最终找出目标数字。此游戏可以重复玩。
想过七夕?->女朋友陪你玩游戏(C)(中)
|
Unix 程序员 Windows
雷军回顾20年前自己的“程序人生”,还用吴奇隆的歌词文艺了一把
虎嗅注:今天,雷军在他的公众号里发了一篇他20年前写的帖子,那个时候还是1996年,是通过电话线拨号连接到西点BBS上飙帖子玩的年代。那是一个互联网混沌初开的年代,那是一个BBS和Email几乎主宰了全部互联网的年代,那是一个青春的理想和热血沸腾的年代。我是一个程序员,一个软件工程师。到今天,我也依然是一个程序员,一个软件工程师。 雷军在文章中说,本文是20年前我对程序人生的一点看法。20年后的今天,重读之后,这依然是我对程序人生的态度。 文末还引用了吴奇隆的《祝你一路顺风》中的歌词那一天知道你要走,我们一句话都没有说。真是文艺青年啊。下面是雷军20年前写的文章,虎嗅未做删减。 程序人生
524 0
|
云栖大会 云计算
大咖、颜值、逼格、礼物都齐了,只差一个你!
传说中,这是一个格子衬衫、双肩包、拖鞋的聚集地。 传说中,参加这个“集会”的人一言不合就会“噼噼啪啪”……敲代码。 传说中,这是一场烧脑盛宴,也是面基的好去处……
49399 0