今天还是搞的项目,很烦今天弄得很少很少,晚上选修课考试又是三个小时浪费掉了,首先的话就是避免了一种状况,就是以防下一次下棋时,将已经下过的棋子覆盖,这么一种情况,这种的其实很好处理,就先将整个棋盘遍历一遍
void qinkong()
{
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
board[i][j] = 0;
}
}
}
赋为0,再在鼠标按下那个函数里面的定义一下只要按下就在按下坐标赋值为1
void mousepressmeg(ExMessage* msg) //鼠标按下
{
//左键就下棋
if (msg->message == WM_LBUTTONDOWN&&board[pos.r][pos.c]==0)
{
board[pos.r][pos.c] = 1;
board[pos.r][pos.c] = pos.player;
//判断输赢
if (judge(pos.r, pos.c))
{
if (winner() == Black)
{
MessageBox(GetHWnd(), "黑棋赢", "hit", MB_OK);
exit(1);
}
else
{
MessageBox(GetHWnd(), "白棋赢", "hit", MB_OK);
exit(1);
}
}
//切换棋手
pos.player =(pos.player== Black?White:Black);
}
}
然后再判断输赢方面的话也加了一项判断白棋还是黑棋赢,根据不同的winner状态输出谁赢
int winner() //判断胜者是谁
{
int i, j;
int who = pos.player;
for (i = 0; i < 15; i++)
{
for (j = 0; j < b_wide - 4; j++) {
if (board[i][j] == who && board[i][j + 1] == who &&
board[i][j + 2] == who && board[i][j + 3] == who && //横向遍历
board[i][j + 4] == who) {
return board[i][j];
}
}
}
for (i = 0; i < b_wide - 4; i++) {
for (j = 0; j < b_wide; j++) {
if (board[i][j] == who && board[i + 1][j] == who &&
board[i + 2][j] == who && board[i + 3][j] == who && //纵向遍历
board[i + 4][j] == who) {
return board[i][j];
}
}
}
for (i = 0; i < b_wide - 4; i++) {
for (j = 0; j < b_wide - 4; j++) {
if (board[i][j] == who && board[i + 1][j + 1] == who &&
board[i + 2][j + 2] == who && board[i + 3][j + 3] == who && //右斜向遍历
board[i + 4][j + 4] == who) {
return board[i][j];
}
}
}
for (i = 0; i < b_wide - 4; i++) {
for (j = 4; j < b_wide; j++) {
if (board[i][j] == who && board[i + 1][j - 1] == who &&
board[i + 2][j - 2] == who && board[i + 3][j - 3] == who && //左斜向遍历
board[i + 4][j - 4] == who) {
return board[i][j];
}
}
}
return 0;
}
在判断赢家的函数中,其实就是和判断是否五子的函数一模一样,就是把返回值变成棋盘状态,
进行判断。
今天还弄了个悔棋的框框和字,但是这个东西弄了我很久很久,也是个恶心东西,单独放在一个函数里面他就弄不出来字样和框框,但是放在draw函数绘制棋盘函数里一起用就可以,很恶心的东西,折磨了我很久,下一些杂七杂八的东西,差点把vs搞崩了幸好在晚上还是弄好了。
setlinecolor(BLACK);
rectangle(550, 300, 450, 260); //设置的悔棋图标
settextstyle(25, 0, _T("宋体"));
// 计算文本输出位置
int x = (550 + 450) / 2 -16*2;
int y = (300 + 260) / 2 -8;
outtextxy(x, y, _T("悔"));
outtextxy(x + 16 * 2, y, _T("棋"));
就这么简单几行代码就折磨了.................久明天的就要将几个框框同时做好并且实现鼠标点击使用的功能。