目录
三子棋/Test.cpp · 孙鹏宇/孙鹏宇的第一个仓库 - 码云 - 开源中国 (gitee.com)
思路
我们遵循先框架,后思路得的思路
框架
首先是读取操作:
读取操作
读取鼠标单击之后的信息
接下来是数据操作:
数据操作
我们只需要对游戏胜负进行判断
胜的清空:一条线三颗棋子都一样
平的情况:棋格全部填满还未分出胜负。
游戏结束时使用弹出告诉玩家游戏结果,然后退出主循环。
绘制画面
我们使用line函数绘制一个3*3的棋盘格:
x玩家时使用line函数对角线画两个线,轮到O玩家落子时时使用cirlce函数画个圆:
游戏的数据结构
用二维数组来模拟棋盘格
棋盘内容为字符串,初始化为‘-'
赢的情况
我们对赢得情况进行穷举:
一共有八种
平局情况
如果9个网格均被棋子填满却没有获胜的一方,那么就是平局:
Code
写代码同样遵循先框架再细节的原则:
我们先把上面的内容转化为代码:
框架:
#include<easyx.h>
#include<iostream>
using namespace std;
//处理数据
//
//检测玩家是否赢了
bool Checkwin(char str)
{
}
//检测是否平局
bool Checkavg(char str)
{
}
//绘制图像
//
//绘制棋盘格
void DrawBorad()
{
}
//绘制棋子
void DrawPiece()
{
}
//绘制提示信息
void DrawTipText()
{
}
int main()
{
initgraph(60,600);//绘制窗口
bool flag = true;//退出主循环的标识列
ExMessage msg;//存储消息
BeginBatchDraw();//渲染缓冲区
//主循环
while (flag)
{
//读取操作
while(peekmessage(&msg))//读取消息
{
//读取到的细节如何处理稍息再说
}
cleardevice();//清屏
//重新绘图
DrawBorad();
DrawPiece();
DrawTipText();
FlushBatchDraw();//刷新缓冲区
}
EndBatchDraw();//刷新缓冲区
return 0;
}
代码细节部分
如果 x玩家赢了,我们可以用MessageBox()函数弹出了一个框,显示x玩家赢了:
代码如下:
同样的,O玩家获胜的情况和平局的情况也写一下: