当前位置: 首页 > article >正文

【C语言】扫雷游戏(一)

我们先设计一个简单的9*9棋盘并有10个雷的扫雷游戏。

1,可以用数组存放,如果有雷就用1表示,没雷就用0表示。

 

d9940bf2d0ffbfc98fd09dc29b13ddbf.png

2,排查(2,5)这个坐标时,我们访问周围的⼀圈8个位置黄色统计周围雷的个数是1。排查(8,6)这个坐标时,就会越界。只需要扩大一圈数组即可。

3b818fd4ccc36c6afa6b7c11435be1b7.png

一,游戏菜单的打印

利用函数与do while的知识

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu()
{
    printf("***********************\n");
    printf("***** 1. play *********\n");
    printf("***** 0. exit **********\n");
    printf("***********************\n");
}
int main()
{
    int input = 0;
    do
    {
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("开始\n");
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while (input);
    return 0;
}

在下一步可以将printf("开始\n");换为game(),整个扫雷游戏就是在这里运行的。game()就是我们写的函数,它的作用是把我们写的代码封装起来。
 

二,正片开始

1,棋盘

避免数据太多产生冲突,我们可以写两个数组存放信息。一个是雷的信息,一个是排查出的雷的信息。
1183d93cc2fe6de0e3d063ac0cd3c7af.png

a.雷的信息用char mine[11][11];来表示,1表示雷,0表示非雷。

b.排查出的雷的信息用char show[11][11];来表示,初始化为*。

void game()
{
    char mine[11][11];
    char show[11][11];
}

如果是其他行数的话,例如15或者20,改起来就比较麻烦了,这时候就需要优化一下代码。

在game.h文件中声明:

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

然后修改原来代码:

void game()
{
    char mine[ROWS][COLS];
    char show[ROWS]COLS];
}

2,初始化棋盘

game.h

void InitBoard(char arr[ROWS][COLS], int rows,int cols,\char set);

game.c

void InitBoard(char arr[ROWS][COLS], int rows, int cols,char set)
{
    int i = 0;
        for (i = 0; i <= ROWS; i++)
        {
            int j = 0;
            for (j = 0; j <= COLS; j++)
            {
                arr[i][j] = "set";
            }
        }
}

test.c

void game()
{
    char mine[ROWS][COLS];
    char show[ROWS][COLS];

    Initboard(mine, ROWS,COLS, "0");
    Initboard(show, ROWS,COLS, "*");
}

3,打印棋盘

game.h

void Displayboard(char arr[ROWS][COLS], int row, int col);

game.c

int i = 0;
for (i = 0; i <= ROW; i++)
{
    printf("%d", i);
}
printf("\n");

void Displayboard(char arr[ROWS][COLS], int row, int col)
{
    int i = 0;
    for (i = 1; i <= row; i++)
    {
        int j = 0;
        printf("%d", i);
        for (j = 1; j <= col; j++)
        {
            printf("%c", arr[i][j]);
        }
        printf("\n");
    }

test.c

Displayboard(show, ROW, COL);

Displayboard(mine, ROW, COL);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://www.kler.cn/a/418785.html

相关文章:

  • 单片机学习笔记 15. 串口通信(理论)
  • 记录OrangePi Kunpeng Pro烧录系统到固态硬盘并扩容流程
  • Tree搜索二叉树、map和set_数据结构
  • 入门数据结构JAVADS——如何构建一棵简单二叉排序树
  • sentinel使用手册
  • Mybatis:CRUD数据操作之删除一行数据
  • 火山引擎VeDI在AI+BI领域的演进与实践
  • Web开发基础学习——理解React组件中的根节点
  • 【计网不挂科】计算机网络——<34道经典简述题>特训
  • Vue.js 深入探索:自定义指令与插件开发
  • vscode远程连接ssh
  • React前端进阶面试(七)
  • 将面具贴到人脸上的过程
  • 【Axure高保真原型】视频列表播放器_横向翻页效果
  • PHP和GD库如何给图片添加反色效果
  • 如何在Solana链上开发Dapp?RPC节点的要求
  • 硬菜3道+馒头
  • 婚纱摄影管理系统|Java|SSM|VUE| 前后端分离
  • 自然语言处理基础概念
  • 给ThinkPHP添加接口Trace
  • jQuery九宫格抽奖,php处理抽奖信息
  • 如何解决服务器扫描出的ASP木马问题
  • C 运算符优先级
  • 李永平:以科技创新为引擎,驱动中国国际未来产业研究院不断前行
  • 【CSS】一篇掌握CSS
  • Git忽略文件