小白的第二个项目--扫雷游戏

简介: 小白的第二个项目--扫雷游戏

扫雷游戏规则

扫雷的规则我们随便点一个格子,方格即被打开并显示出方格中的数字,方格中数字则表示其周围的8个方格隐藏了几颗雷,点开的数字是几,则说明该数字旁边的8个位置中有几个雷,如果挖开的是地则会输掉游戏,重新开始,所以扫雷也有一定的运气成分

扫雷游戏分析

1.雷的信息需要数组来储存;

2.雷是1,非雷是0;

3.设置两个二维数组,一个储存布置雷的信息(雷在哪),一个储存排查雷的信息(选择的方格周围有几个雷);

4.为了防止统计坐标周围雷的个数时越界,将数组大小改为11*11的

游戏步骤

1.打印游戏界面

2.输入排查坐标,如果输了就打印布置雷的信息数组

反之则打印排查雷信息的数组

3.赢了就是只剩10个#号也就是十个雷

代码实现

1.game.h存放声明函数

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
//初始化数组
void chushihua(char arr[ROWS][COLS],int rows,int cols,char ch);
//打印棋盘
void dayin(char arr[ROWS][COLS], int row, int col);
//放置雷
void lei(char arr[ROWS][COLS], int row,int col);
//排查雷
void findMine(char arr[ROWS][COLS], char arr1[ROWS][COLS], int row, int col);

2.game.c实现声明的函数的功能

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void chushihua(char arr[ROWS][COLS], int rows, int cols, char ch) {
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      arr[i][j] = ch;
    }
  }
}
//打印棋盘
void dayin(char arr[ROWS][COLS], int row, int col) {
  printf("--------扫雷游戏--------\n");
  for (int i = 0; i <= row; 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 ", arr[i][j]);
    }
    printf("\n");
  }
}
void lei(char arr[ROWS][COLS], int row, int col) {
  int count = 0;
  for (;count<=9;) {
    int x = rand() % row + 1;
    int y = rand() % col + 1;
    if (arr[x][y] == '0') {
      arr[x][y] = '1';
      count++;
    }
  }
}
int getcount(char arr[ROWS][COLS], int row, int col, int x, int y) {
  int count = 0;
  int shu[3] = {1, -1,0};
  int shu1[3] = { -1, 1,0 };
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      count += arr[x + shu[i]][y + shu1[j]]-'0';
    }
  }
  return count;
}
void findMine(char arr[ROWS][COLS], char arr1[ROWS][COLS], int row, int col) {
  int x = 0;
  int y = 0;
  int sum = 0;
  do {
    printf("请输入你所要排查的坐标>:");
    scanf("%d %d", &x, &y);
    if (x <= 9 && x > 0 && y <= 9 && y > 0) {
      if (arr[x][y] == '1') {
        //输了就打印答案棋盘
        printf("你输了\n");
        dayin(arr, ROW, COL);
      }
      else {
        int count = getcount(arr, row, col,x,y);
        arr1[x][y] = count+'0';
        dayin(arr1, ROW, COL);
        sum++;
      }
    }
    else {
      printf("你输入的坐标为非法坐标");
    }
    if (sum == 9 * 9 - 10) {
      printf("你赢了\n");
      break;
  }
  } while (arr[x][y]!='1');
}

3.text.c作为主函数调用功能函数(游戏入口)

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu() {
  printf("*************************\n");
  printf("********1.开始游戏*******\n");
  printf("********0.停止游戏*******\n");
  printf("*************************\n");
  printf("*************************\n");
}
game() {
  //存放布置雷的数组
  char arr[ROWS][COLS];
  //存放周围雷有几个的数组
  char arr1[ROWS][COLS];
  //初始化
  chushihua(arr, ROWS, COLS,'0');
  chushihua(arr1, ROWS, COLS, '#');
  //打印棋盘
  dayin(arr1, ROW, COL);
  //放置雷
  lei(arr, ROW, COL);
  //玩家排查雷
  findMine(arr, arr1, ROW, COL);
}
int main() {
  int temp = 0;
  srand((unsigned int)time(NULL));
  do {
    menu();
    scanf("%d", &temp);
    switch (temp) {
    case 1:
      game();
      break;
    case 0:
      printf("游戏结束\n");
      break;
    default:
      printf("输入有错请重新输入\n");
      break;
    }
  }
  while (temp);
}
目录
相关文章
|
JavaScript 前端开发 图形学
WebGL 技术详解
【10月更文挑战第7天】
696 132
|
人工智能 API C++
【AI绘画大比拼】通义万相VS文心一格:探索十种风格下的绘画生成差异!
近日,通义大模型家族的新成员——通义万相已在人工智能大会上亮相。其中,通义万相的强大的“文生图”功能,不禁让我想到了去年八月由百度依托飞桨、文心大模型的技术创新推出的“AI作画”首款产品——文心一格。 那么,在类似的Prompt下,两款产品的表现将会如何呢?今天就让我们就十种风格下二者生成图像的表现力,来看看这两款产品的差异。
|
4月前
|
云安全 运维 安全
唯一全领域卓越级!阿里云飞天企业版通过安全水位最新认证
近日,阿里云与中国信息通信研究院携手,共同发布了行业首个《专有云安全水位评估》标准,为行业引入第一个专有云安全整体评估体系。在该标准指导下,阿里云以飞天企业版通过了专有云安全水位评估验证,是参评产品中唯一在全领域均取得卓越级的产品,将帮助客户实现从合规到卓越的安全能力跃迁。
170 0
|
人工智能 Cloud Native Java
从云原生视角看 AI 原生应用架构的实践
本文核心观点: • 基于大模型的 AI 原生应用将越来越多,容器和微服务为代表的云原生技术将加速渗透传统业务。 • API 是 AI 原生应用的一等公民,并引入了更多流量,催生企业新的生命力和想象空间。 • AI 原生应用对网关的需求超越了传统的路由和负载均衡功能,承载了更大的 AI 工程化使命。 • AI Infra 的一致性架构至关重要,API 网关、消息队列、可观测是 AI Infra 的重要组成。
53650 107
|
算法 调度 开发者
多线程编程核心:上下文切换深度解析
在多线程编程中,上下文切换是一个至关重要的概念,它直接影响到程序的性能和响应速度。本文将深入探讨上下文切换的含义、原因、影响以及如何优化,帮助你在工作和学习中更好地理解和应用多线程技术。
302 4
|
安全
Mac 使用 rar 命令行工具解压和压缩文件
Mac 使用 rar 命令行工具解压和压缩文件
698 1
Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
|
缓存 IDE 编译器
鲲鹏系列一: DevKit代码迁移工具技术要点总结
处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法、指令、函数和库文件支持情况。
847 0
鲲鹏系列一: DevKit代码迁移工具技术要点总结
|
计算机视觉 Python
openCV实践项目:拖拽虚拟方块
openCV实践项目:拖拽虚拟方块
openCV实践项目:拖拽虚拟方块
|
前端开发 JavaScript Shell
持续集成与部署(二):持续集成1-巧用 Github Actions
持续集成与部署(二):持续集成1-巧用 Github Actions
持续集成与部署(二):持续集成1-巧用 Github Actions