xSapientia 2021-09-19 12:48 采纳率: 100%
浏览 33
已结题

扫雷代码鼠标事件没反应

帮忙看下原因,十分感谢

==================mineS.h==================
#ifndef __MINES_H__
#define __MINES_H__
#define NUM 10
#define SIZE 30

void initGame();
void imgLoad(IMAGE img[]);
void bombSet(int map[][NUM + 2]);
void numSet(int map[][NUM + 2]);
void drawMap(int map[][NUM + 2], IMAGE img[]);
void allZero(int map[][NUM + 2], int x, int y);
int mouseDown(int map[][NUM + 2]);

#endif
==================mineS.cpp==================
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#include"mineS.h"



/*
    函数名    游戏初始化
    参数表    无
    返回值    无

    修改者 xSapientia 2021/9/19
*/
void initGame()
{
    srand((unsigned)time(NULL));
    initgraph(SIZE * NUM, SIZE * NUM);
    int map[NUM + 2][NUM + 2] = { 0 };
    IMAGE img[14];

    imgLoad(img);
    bombSet(map);
    numSet(map);

    while (1)
    {
        drawMap(map, img);
        if (mouseDown(map) == 9)
        {
            drawMap(map, img);
            MessageBox(NULL, "菜!", "游戏结束", MB_OK);
        }
        else
        {
            drawMap(map, img);
        }

    }
}



/*
    函数名    贴图载入
    参数表    IMAGE 贴图组
    返回值    无

    修改者 xSapientia 2021/9/19
*/
void imgLoad(IMAGE img[])
{
    loadimage(&img[0], "./resource/0.jpg", SIZE, SIZE);
    loadimage(&img[1], "./resource/1.jpg", SIZE, SIZE);
    loadimage(&img[2], "./resource/2.jpg", SIZE, SIZE);
    loadimage(&img[3], "./resource/3.jpg", SIZE, SIZE);
    loadimage(&img[4], "./resource/4.jpg", SIZE, SIZE);
    loadimage(&img[5], "./resource/5.jpg", SIZE, SIZE);
    loadimage(&img[6], "./resource/6.jpg", SIZE, SIZE);
    loadimage(&img[7], "./resource/7.jpg", SIZE, SIZE);
    loadimage(&img[8], "./resource/8.jpg", SIZE, SIZE);
    loadimage(&img[9], "./resource/flag.jpg", SIZE, SIZE);
    loadimage(&img[10], "./resource/flag2.jpg", SIZE, SIZE);
    loadimage(&img[11], "./resource/bomb.jpg", SIZE, SIZE);
    loadimage(&img[12], "./resource/bomg0.jpg", SIZE, SIZE);
    loadimage(&img[13], "./resource/space.jpg", SIZE, SIZE);
}



/*
    函数名    随机设置雷
    参数表    int map[][NUM+2] 表示地图的数组
    返回值    无

    修改者 xSapientia 2021/9/19
*/
void bombSet(int map[][NUM + 2])
{
    for (int bomb = 0; bomb < NUM;)
    {
        int i = rand() % NUM + 1;
        int j = rand() % NUM + 1;

        if (map[i][j] == 0)
        {
            map[i][j] = -1;
            bomb++;
        }
    }
}



/*
    函数名    雷周围数值计算
    参数表    int map[][NUM + 2] 地图数组
    返回值    无

    修改者 xSapientia 2021/9/19
*/
void numSet(int map[][NUM + 2])
{
    for (int row = 1; row <= NUM; row++)
    {
        for (int col = 1; col <= NUM; col++)
        {
            if (map[row][col] != -1)
            {
                //判断非雷格周围雷数
                for (int srow = row - 1; srow <= row + 1; srow++)
                {
                    for (int scol = col - 1; scol <= col + 1; scol++)
                    {
                        //有一个雷则数字+1
                        if (map[srow][scol] == -1)
                        {
                            map[row][col]++;
                        }
                    }
                }
            }
        }
    }
}



/*
    函数名    绘制贴图
    参数表    int map[][NUM + 2] 地图数组
            IMAGE 贴图组
    返回值    无

    修改者 xSapientia 2021/9/19
*/
void drawMap(int map[][NUM + 2], IMAGE img[])
{
    for (int row = 1; row <= NUM; row++)
    {
        for (int col = 1; col <= NUM; col++)
        {
            if (map[col][row] > 20)
            {
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[9]);
            }
            switch (map[col][row])
            {
            case 10:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[0]);
                break;
            case 11:
                putimage(SIZE * (row - 1), SIZE * (col- 1), &img[1]);
                break;
            case 12:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[2]);
                break;
            case 13:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[3]);
                break;
            case 14:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[4]);
                break;
            case 15:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[5]);
                break;
            case 16:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[6]);
                break;
            case 17:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[7]);
                break;
            case 18:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[8]);
                break;
            case 9:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[11]);
                break;
            default:
                putimage(SIZE * (row - 1), SIZE * (col - 1), &img[13]);
                break;
            }
        }
    }
}



/*
    函数名    翻开所有附近的无效空格
    参数表    int map[][NUM + 2] 地图数组
            int x 所在数组列
            int y 所在数组行
    返回值    无

    修改者 xSapientia 2021/9/19
*/
void allZero(int map[][NUM + 2], int x, int y)
{
    map[y][x] = 10;
    int row = 0;
    int col = 0;
    for (row = y - 1; row <= y+1; row++)
    {
        for (col = x-1; col < x+1; col++)
        {
            if (row >= 1 && row <= NUM && col >= 1 && col <= NUM)
            {
                if (map[row][col] < 9)
                {
                    if (map[row][col] == 0)
                    {
                        allZero(map, col, row);
                    }
                    else
                    {
                        map[row][col] += 10;
                    }
                }
            }
        }
    }
    return;
}



/*
    函数名    鼠标事件
    参数表    int map[][NUM + 2] 地图数组
    返回值    无

    修改者 xSapientia 2021/9/19
*/
int mouseDown(int map[][NUM + 2])
{
    MOUSEMSG mouseAct;
    mouseAct = GetMouseMsg();
    while (1)
    {
        switch (mouseAct.uMsg)
        {
        case WM_LBUTTONDOWN:
            //翻开的为0
            if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]==0)
            {
                allZero(map, mouseAct.x, mouseAct.y);
            }
            //可以翻开
            else if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]<9)
            {
                map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1] += 10;
            }
            //不能翻开
            else
            {
                continue;
            }
            return map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1];
            break;

        case WM_RBUTTONDOWN:
            //已经标记
            if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]>20)
            {
                map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1] -= 30;
            }
            //已经翻开
            else if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]<9)
            {
                map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1] += 30; 
            }
            //可以标记
            else
            {
                continue;
            }
            return 0;
            break;
        }
    }
    
}
==================main.cpp==================
#include<stdio.h>
#include<graphics.h>
#include"mineS.h"


int main()
{
    while (1)
    {
        initGame();
        if (MessageBox(NULL, "再试试?","游戏结束", MB_YESNO)== IDNO)
        {
            break;
        }
    }

    closegraph();
    return 0;
}

  • 写回答

1条回答 默认 最新

  • xSapientia 2021-09-19 13:59
    关注

    emmm,试了半天,原来是由于在 mouseDown函数里加了循环的原因造成的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月27日
  • 已采纳回答 9月19日
  • 修改了问题 9月19日
  • 修改了问题 9月19日
  • 展开全部

悬赏问题

  • ¥15 DSP28335AD采集实验
  • ¥15 在winods上用C# 怎么编写CAN通信在linux运行
  • ¥15 关于螺旋焊缝的图像处理
  • ¥15 qt 散点图自定义图形
  • ¥100 将USDZ文件转化为带颜色的OBJ文件
  • ¥15 对象代号: , 表单: 不存在!
  • ¥15 WebSocket的问题
  • ¥15 centos上启动kylin后网页报错404
  • ¥20 使用hackrf进行信号收发时接收到的信号幅度太小
  • ¥15 WebSocket的问题