一个填字游戏 最后的判断填了正确答案也显示错误

0
#include<graphics.h>
#include<conio.h>
#include<iostream>
#include<windows.h>
#include<cstdio>
using namespace std;
void print(char map[13][18])
{
	for (int i = 0; i <= 12; i++)
	{
		for (int j = 0; j <= 17; j++)
		{
			if (map[i][j] != '0')
			{
				fillrectangle(40 * j, 40 * i, 40 * j + 40, 40 * i + 40);
			}
		}
	}//画白格
	setcolor(BLACK);
	BeginBatchDraw();
	for (i = 0; i <= 720; i += 40)
	{
		line(i, 0, i, 520);
		FlushBatchDraw();
	}
	EndBatchDraw();//画竖线
	BeginBatchDraw();
	for (int j = 0; j <= 520; j += 40)
	{
		line(0, j, 720, j);
		FlushBatchDraw();
	}
	EndBatchDraw();//画横线
}//画地图
void judge(char map[13][18])
{
	
	if (map[1][5] == 'p' && map[1][6] == 'e' && map[1][7] == 'n' && map[2][5] == 'r' && map[3][5] == 'o' && map[4][5] == 'v' && map[5][5] == 'i' && map[6][5] == 'n' && map[7][5] == 'c' && map[8][5] == 'e' &&
		map[3][2] == 'b' && map[3][3] == 'e' && map[3][4] == 'l' && map[3][6] == 'w' && map[4][1] == 'b' && map[5][1] == 'a' && map[6][1] == 's' && map[7][1] == 'i' && map[8][1] == 'c' && map[8][2] == 'h'
		&& map[8][3] == 'o' && map[8][4] == 'k' && map[6][6] == 'o' && map[6][7] == 't' && map[6][8] == 'e' && map[6][9] == 'b' && map[6][10] == 'o' && map[6][11] == 'o' && map[6][12] == 'k' && map[3][11] == 'a'
		&& map[4][11] == 'b' && map[5][11] == 'r' && map[7][11] == 'a' && map[8][11] == 'd' && map[3][12] == 'd' && map[3][13] == 'v' && map[3][14] == 'a' && map[3][15] == 'n' && map[3][16] == 'c'
		&& map[3][17] == 'e' && map[7][8] == 'x' && map[8][8] == 'c' && map[9][8] == 'u' && map[10][8] == 's' && map[11][8] == 'e' && map[11][7] == 'g' && map[11][6] == 'a')
	{
		MessageBox(GetForegroundWindow(), " You WIN ! ", "PUZZLE", MB_OK);
		
	}
	else
	{
		MessageBox(GetForegroundWindow(), "有错误,再试一次" , "PUZZLE", MB_RETRYCANCEL);
		print(map);
	}
}//判断是否正确
int main()
{
	char map[13][18] =
	{
		{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'},
		{'0','0','0','0','0','1','1','1','0','0','0','0','0','0','0','0','0','0'},
		{'0','0','0','0','0','1','0','0','0','0','0','0','0','0','0','0','0','0'},
		{'0','0','1','1','1','1','1','0','0','0','0','1','1','1','1','1','1','1'},
		{'0','1','0','0','0','1','0','0','0','0','0','1','0','0','0','0','0','0'},
		{'0','1','0','0','0','1','0','0','0','0','0','1','0','0','0','0','0','0'},
		{'0','1','0','0','0','1','1','1','1','1','1','1','1','0','0','0','0','0'},
		{'0','1','0','0','0','1','0','0','1','0','0','1','0','0','0','0','0','0'},
		{'0','1','1','1','1','1','0','0','1','0','0','1','0','0','0','0','0','0'},
		{'0','0','0','0','0','0','0','0','1','0','0','0','0','0','0','0','0','0'},
		{'0','0','0','0','0','0','0','0','1','0','0','0','0','0','0','0','0','0'},
		{'0','0','0','0','0','0','1','1','1','0','0','0','0','0','0','0','0','0'},
		{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'},
	};
	initgraph(720, 520, EW_DBLCLKS);
	print(map);
	MOUSEMSG m; // 定义鼠标消息
	while (true)
	{
		// 获取一条鼠标消息
		m = GetMouseMsg();
		
		switch (m.uMsg)
		{
		case WM_LBUTTONDOWN:
			if (m.mkCtrl)
				judge(map);
			else
			{
				char a[1];
				InputBox(a, 2,"请输入字母");
				map[m.x / 40][m.y / 40] = a[0];
				setcolor(BLACK);
				setbkmode(TRANSPARENT);
				outtextxy(m.x, m.y, map[m.x / 40][m.y / 40]);
			}//显示输入字母
			break;
			
		case WM_RBUTTONUP:
			print(map);
			break;
		}
	}
	_getch();
	closegraph();
	return 0;
}
0

你搞错了行和列的关系。

在你的定义中:map[13][18],表示 13 行 18 列。

但是在代码中,x 表示列,y 表示行。

所以你的代码:map[m.x / 40][m.y / 40] = a[0]; 行和列写反了。

ava
慢羊羊

2020-8-10

技术讨论社区