#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;
}
一个填字游戏 最后的判断填了正确答案也显示错误
你搞错了行和列的关系。
在你的定义中:map[13][18],表示 13 行 18 列。
但是在代码中,x 表示列,y 表示行。
所以你的代码:map[m.x / 40][m.y / 40] = a[0]; 行和列写反了。