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

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

扫雷游戏规则

扫雷的规则我们随便点一个格子,方格即被打开并显示出方格中的数字,方格中数字则表示其周围的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);
}
目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 算法
从人工决策到AI自主规划:2025物流配送管理工具的智能化升级
物流配送管理工具正经历技术革新,从手工调度1.0迈向数字孪生与AI驱动的4.0时代。新一代系统融合IoT、强化学习与路径优化算法,实现智能调度、实时执行与资源优化。多模态感知、自适应路由与弹性网络设计推动物流数字化转型。未来,量子计算、自主物流网络与认知型AI将重塑行业格局,助力物流向高效、绿色、韧性发展。
562 0
|
JavaScript 前端开发 图形学
WebGL 技术详解
【10月更文挑战第7天】
665 132
|
人工智能 API C++
【AI绘画大比拼】通义万相VS文心一格:探索十种风格下的绘画生成差异!
近日,通义大模型家族的新成员——通义万相已在人工智能大会上亮相。其中,通义万相的强大的“文生图”功能,不禁让我想到了去年八月由百度依托飞桨、文心大模型的技术创新推出的“AI作画”首款产品——文心一格。 那么,在类似的Prompt下,两款产品的表现将会如何呢?今天就让我们就十种风格下二者生成图像的表现力,来看看这两款产品的差异。
|
人工智能 Cloud Native Java
从云原生视角看 AI 原生应用架构的实践
本文核心观点: • 基于大模型的 AI 原生应用将越来越多,容器和微服务为代表的云原生技术将加速渗透传统业务。 • API 是 AI 原生应用的一等公民,并引入了更多流量,催生企业新的生命力和想象空间。 • AI 原生应用对网关的需求超越了传统的路由和负载均衡功能,承载了更大的 AI 工程化使命。 • AI Infra 的一致性架构至关重要,API 网关、消息队列、可观测是 AI Infra 的重要组成。
53427 114
|
11月前
|
算法 调度 开发者
多线程编程核心:上下文切换深度解析
在多线程编程中,上下文切换是一个至关重要的概念,它直接影响到程序的性能和响应速度。本文将深入探讨上下文切换的含义、原因、影响以及如何优化,帮助你在工作和学习中更好地理解和应用多线程技术。
280 4
|
机器学习/深度学习 自然语言处理
【AIGC】探索大语言模型中的词元化技术机器应用实例
【AIGC】探索大语言模型中的词元化技术机器应用实例
224 0
|
Cloud Native Java Nacos
云原生应用配置中心简述
【2月更文挑战第22天】
|
关系型数据库 MySQL 数据库
MySQL快速备份表
MySQL快速备份表
451 0
Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
|
前端开发 JavaScript Shell
持续集成与部署(二):持续集成1-巧用 Github Actions
持续集成与部署(二):持续集成1-巧用 Github Actions
持续集成与部署(二):持续集成1-巧用 Github Actions