C语言实现扫雷(下)

简介: 笔记

四、微小优化


11.png

在电脑布雷的时候我们定义了count,让他等于10,

12.png

玩家输入坐标并判断输赢时候,我们也用到了数字10


我们为了方便,在game.h里可#define COT 10


到时候可以直接用COT来代替10


五、测试


5.1排完雷结果测试

由于有10个雷,71个空格我们一一排查需耗费大量时间,所以我们将雷设置为80,此时只有一个位置没有雷,这时候我们选中这个位置

13.png

此时7,7这个地方没有雷,当我们选中时,告诉我们排雷成功


5.2踩到雷结果测试

将雷数量重新设置回10

14.png

此时踩到了雷,宣布被炸死


5.3未踩到雷结果测试

15.png

4,4坐标显示没有雷,但其周围8个地方又有2个雷,此时4,4位置打印数字2


六、待优化


待优化点:点开一个不是雷的地方开铺开一大片显示没雷的地方


七、代码部分


game.h

#pragma once
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define COT 10
#define COLS COL+2
#define ROWS ROW+2
Itnboard(char board[ROWS][COLS], int rows, int cols, char set);
Displayboard(char board[ROWS][COLS], int row, int col);
ComputerSet(char board[ROWS][COLS], int row, int col);
Playmove(char board[ROWS][COLS],char mine[ROWS][COLS], int row, int col);//玩家排雷

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
  printf("**********************************\n");
  printf("***********1.play*****************\n");
  printf("***********0.exit*****************\n");
  printf("**********************************\n");
}
void game()
{
  char board[ROWS][COLS] = { 0 };
  char mine[ROWS][COLS] = { 0 };
  Itnboard(board, ROWS, COLS, '0');
  Itnboard(mine, ROWS, COLS, '*'); //初始化棋盘
  Displayboard(mine, ROW, COL);//打印棋盘
  ComputerSet(board,ROW,COL);
  Playmove(board,mine, ROW, COL);
}
int main()
{
  srand((unsigned int)time(NULL));
  int input;
  while (1)
  {
  menu();
  printf("请选择:");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
    printf("扫雷游戏:\n");
    game();
    break;
  case 0:
    printf("退出菜单");
    break;
  default:
    printf("输入错误请重新输入:");
  }
  }
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
Itnboard(char board[ROWS][COLS], int rows, int cols, char set)
{
  int i;
  int j;
  for (i = 0; i < rows; i++)
  for (j = 0; j < cols; j++)
    board[i][j] = set;
}
int fun(char board[ROWS][COLS], int x, int y)
{
  return board[x - 1][y - 1] +
  board[x - 1][y] +
  board[x - 1][y + 1] +
  board[x][y - 1] +
  board[x][y + 1] +
  board[x + 1][y - 1] +
  board[x + 1][y] +
  board[x + 1][y + 1] - 8 * '0';
}
Displayboard(char board[ROWS][COLS], int row, int col)
{
  int i;
  int j;
  printf("---------------- 扫雷游戏----------------------\n");
  for (i = 0; i <=row; i++)
  printf("%d ", i);
  printf("\n");
  for (i = 1; i <=row ; i++)
  {
  printf("%d ", i);
  for (j = 1; j <=col ; j++)
  {
    printf("%c ", board[i][j]);
  }
  printf("\n");
  }
  printf("---------------- 扫雷游戏----------------------\n");
}
Playmove(char board[ROWS][COLS],char mine[ROWS][COLS], int row, int col)
{
  int x;
  int y;
  int count=0;
  while (count< row*col- COT)
  {
  printf("请输入坐标:");
  scanf("%d%d", &x, &y);
  if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
  {
    if (board[x][y] == '1')
    {
    printf("你被炸死了:");
    break;
    }
    else
    {    
    int ch = fun(board, x, y);
    mine[x][y] = ch + '0';
    Displayboard(mine,row,col);
    count++;
    }
  }
  else
  {
    printf("输入错误,请重新输入");
  }
  }
  if (count == row * col - COT)
  printf("恭喜你,排雷成功");
}
ComputerSet(char board[ROWS][COLS], int row, int col)
{
  int x;
  int y;
  int count = COT;
  while(count)
  {
  x = rand() % row + 1;
  y = rand() % col + 1;
  if (board[x][y] == '0')
  {
    board[x][y] = '1';
    count--;
  }
  }
  Displayboard(board, row, col);
}
相关文章
|
6天前
|
C语言
C语言 扫雷详解
C语言 扫雷详解
|
6天前
|
C语言
C语言-------扫雷游戏的代码实现
C语言-------扫雷游戏的代码实现
29 0
|
6天前
|
算法 C语言 C++
【C语言-扫雷游戏全功能详解】
【C语言-扫雷游戏全功能详解】
41 1
|
6天前
|
C语言
C语言之详解数组【附三子棋和扫雷游戏实战】(二)
C语言之详解数组【附三子棋和扫雷游戏实战】(二)
|
1天前
|
C语言
C语言初阶⑤(数组)扫雷游戏(分步实现+效果图)
C语言初阶⑤(数组)扫雷游戏(分步实现+效果图)
7 1
|
5天前
|
C语言
C语言扫雷代码(蹦蹦炸弹)(下)
C语言扫雷代码(蹦蹦炸弹)(下)
5 0
|
5天前
|
存储 C语言
关于我在C语言中玩扫雷(上)
关于我在C语言中玩扫雷(上)
5 0
|
6天前
|
C语言
以c语言为基础实现的简易扫雷游戏(游戏代码附在文章最后,如有需要请自取)
以c语言为基础实现的简易扫雷游戏(游戏代码附在文章最后,如有需要请自取)
55 1
|
6天前
|
C语言
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
|
6天前
|
编译器 定位技术 C语言
【C语言实战项目】扫雷游戏
【C语言实战项目】扫雷游戏
28 0