|
#include <graphics.h>
#include<cstdio>
#define Row 15
#define Col 15
int board[Row][Col]; //棋盘
int player=2; //当前玩家
PIMAGE pimgs[3]; //棋盘图片
mouse_msg msg; //鼠标
void loadImage()//图片载入
{
char path[100]; //加载图片路径
for(int i=0;i<3;i++)
{
pimgs[i]=newimage(); //向计算机申请一个图片空间
sprintf(path,"image/%d.jpg",i);//拼接图片相对路径
getimage(pimgs[i],path);//将系统中的图片数据存入pimgs
}
}
void draw()//图形绘制
{
for(int i=0;i<Row;i++)
for(int j=0;j<Col;j++)
putimage(i*25,j*25,pimgs[board[i][j]]);
}
bool IsFull()
{
for (int i = 0; i < Row; i++)
for (int j = 0; j < Col; j++)
{
if (board[i][j] == 0)
{
return false;
}
}
//棋盘没有空位置了还没有判断出输赢,则平局
return true;
}
int gameover()
{
int i = 0;
int j = 0;
// 横线上五子连成一线,赢家产生
for (i = 0; i < Row; i++)
for (j = 0; j < Col - 4; j++)
{
if (board[i][j] == board[i][j + 1]&& board[i][j + 1] == board[i][j + 2]&&
board[i][j + 2] == board[i][j + 3]&& board[i][j + 3] == board[i][j + 4]&&
board[i][j] != 0)
return board[i][j];
}
// 竖线上五子连成一线,赢家产生
for (j = 0; j < Row; j++)
for (i = 0; i < Col - 4; i++)
{
if (board[i][j] == board[i+1][j]&& board[i+1][j] == board[i+2][j]&&
board[i+2][j] == board[i+3][j]&& board[i+3][j] == board[i+4][j]&&
board[i][j] != 0)
return board[i][j];
}
// 斜线上五子连成一线,赢家产生
for(i = 0; i < Row - 4; i++)
for(j = 0; j < Col - 4; j++)
{
if (board[i][j] == board[i+1][j+1]&& board[i+1][j+1] == board[i+2][j+2]&&
board[i + 2][j + 2] == board[i + 3][j + 3]&& board[i + 3][j + 3] == board[i + 4][j + 4]
&& board[i][j] != 0)
return board[i][j];
if (board[i][j+4] == board[i+1][j+3]&& board[i+1][j+3] == board[i+2][j+2]
&& board[i + 2][j + 2] == board[i + 3][j + 1]&& board[i + 3][j + 1] == board[i + 4][j]
&& board[i][j + 4] != 0)
return board[i][j+4];
}
//游戏平局
if (IsFull()) return 3;
//游戏结束
return 0;
}
void start()//初始化
{
//关闭窗口不强制退出程序,以便进行游戏保存工作
// setinitmode(INIT_RENDERMANUAL | INIT_NOFORCEEXIT, 100, 50);
initgraph(Row*25,Col*25);//图形初始化
setcaption("五子棋"); //设置程序标题
setbkcolor(WHITE);
loadImage();//图片载入
setcolor(BLACK);
setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}
int main()
{
start();
while(1)
{
while(mousemsg())
{
msg=getmouse();
int x=msg.x/25,y=msg.y/25;
if(msg.is_down())
{
if(board[x][y]==0) //判断当前格子是否可以落子
{
board[x][y]=player; //改变当前棋盘格子状态
if(player==1) player=2; //换手
else player=1;
}
}
}
draw(); //更新棋盘
if(gameover()==1) {xyprintf(150,150,"白方获胜"); break;}
else if(gameover()==2) {xyprintf(150,150,"黑方获胜"); break;}
else if(gameover()==3) {xyprintf(150,150,"平局"); break;}
else ;
delay_fps(60);
}
getch();
return 0;
} |
|