资源简介
[纯C语言 + Win32 API]一步一步写个围棋程序之十二:实现对弈
代码片段和文件信息
#include “GoBoard.h“
BOARDDATA g_BoardData[MAX_BOARDSIZE][MAX_BOARDSIZE]; //棋盘状态数据
STONEDATA g_StoneData[MAX_STONENUMBER]; //棋子信息数据
int g_iStoneNumber g_iShowStoneNumber; //棋子总手数、总显示数
unsigned char g_iBoardSize = 9; //棋盘线数
char g_cNextColor = BLACK; //下一手棋的颜色
static int g_haveCount[MAX_BOARDSIZE][MAX_BOARDSIZE]; //算气的方向标志
static int g_noLiberty[MAX_BOARDSIZE][MAX_BOARDSIZE]; //没气的标志
#define ClearHaveCount() ClearNoLibertyHaveCount((int **)g_haveCount)
#define ClearNoLiberty() ClearNoLibertyHaveCount((int **)g_noLiberty)
static void ClearNoLibertyHaveCount(int **p);
static int Count(int int int); //数气
static int CheckLastStone(void);
static void AddOneStone(int int int int);
static void DeleteLastStone();
//取得棋盘交叉点位置棋子颜色
//参数:x、y 交叉点坐标
extern int GetBoardCrossColor(int x int y)
{
return g_BoardData[x][y].c;
}
//取得总手数
extern int GetTotalStoneNumber()
{
return g_iStoneNumber;
}
//取得棋盘线数
extern unsigned char GetBoardSize()
{
return g_iBoardSize;
}
//取得下一手棋的颜色
extern char GetNextColor()
{
return g_cNextColor;
}
//设置下一手棋的颜色
extern char SetNextColor(char c)
{
if(c == BLACK || c == WHITE)
g_cNextColor = c;
return g_cNextColor;
}
//清空棋盘状态数据
extern void ClearBoardData()
{
int i j;
BOARDDATA **p;
p = (BOARDDATA **)g_BoardData;
g_iStoneNumber = g_iShowStoneNumber = 0;
g_cNextColor = BLACK;
//棋盘内数据全部归0
for(i=1; i<=g_iBoardSize; i++)
for(j=1; j<=g_iBoardSize; j++)
((BOARDDATA*)p+i*MAX_BOARDSIZE+j)->c = ((BOARDDATA*)p+i*MAX_BOARDSIZE+j)->n = EMPTY;
//棋盘外围颜色赋 -1
j = g_iBoardSize + 2;
for(i=0; i ((BOARDDATA*)p+i)->c = ((BOARDDATA*)p+j*MAX_BOARDSIZE+i)->c = ((BOARDDATA*)p+i*MAX_BOARDSIZE)->c = ((BOARDDATA*)p+i*MAX_BOARDSIZE+j)->c = GRAY;
}
//获得气
//参数:x y 棋盘的逻辑坐标,c 棋子颜色
//返回值:x y点所在C颜色棋块的气数
extern int GetLiberty(int x int y int c)
{
ClearHaveCount();
return Count(x y c);
}
//落下一手棋
//x y 棋盘逻辑坐标
//有效则返回吃子数,禁手(包括打劫)返回-1 ,当前点有子返回-2
extern int PlayStone(int x int y char c)
{
int i;
//点击非空位
if(g_BoardData[x][y].c > 0)
return -2;
//先增加一子
AddOneStone(x y c g_iStoneNumber);
//检查有效性(有效时已经更新数据 )
i = CheckLastStone();
if(i >= 0)
return i;
//无效再删掉
else
{
DeleteLastStone();
return -1;
}
}
//回退一步
//返回值:成功返回1,否则返回0
extern BOOL WithdrawOneStep(void)
{
if(g_iStoneNumber>0)
{
//把最后一子吃掉的棋还原
int i;
for(i=1; i if(g_StoneData[i].bk == g_iStoneNumber)
{
g_StoneData[i].bk = 0;
g_BoardData[g_StoneData[i].x][g_StoneData[i].y].n = g_StoneData[i].n;
g_BoardData[g_StoneData[i].x][g_StoneData[i].y].c = g_StoneData[
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8763 2012-09-02 07:39 TryHandTalk\GoBoard.c
文件 1492 2012-09-02 01:09 TryHandTalk\GoBoard.h
文件 17514 2012-09-02 01:07 TryHandTalk\main.c
文件 691254 2012-08-30 08:46 TryHandTalk\res\board.bmp
文件 201354 2012-07-11 18:39 TryHandTalk\res\Stone.bmp
文件 28866 2012-08-30 08:48 TryHandTalk\res\ToolbarDisable.BMP
文件 28866 2012-08-30 08:49 TryHandTalk\res\ToolbarHover.BMP
文件 28866 2012-08-30 08:49 TryHandTalk\res\ToolbarNormal.BMP
文件 1221 2012-09-01 13:05 TryHandTalk\Resource.h
文件 1595 2012-09-02 00:07 TryHandTalk\TryHandTalk.cbp
文件 865 2012-09-02 01:23 TryHandTalk\TryHandTalk.depend
文件 1063 2012-09-02 07:41 TryHandTalk\TryHandTalk.layout
文件 1256 2012-09-01 13:01 TryHandTalk\TryHandTalk.rc
目录 0 2012-09-01 21:51 TryHandTalk\res
目录 0 2012-09-02 07:41 TryHandTalk
----------- --------- ---------- ----- ----
1012975 15
相关资源
- 纯C语言+libjpeg实现最简单jpeg图片解码
- YUV合成 YUV裁剪 YUV_to_JPEG 纯c语言编写
- Windows下纯C语言Socket、smtp发送邮件,
- 纯C语言写的打字母游戏
- 纯C语言写的https模拟GET和POST
- 算术编码纯C语言实现
- tftp服务器源码,纯c语言
- 纯C语言写的hex转bin小工具
- 敢死队问题纯C语言编写
- [纯C语言 + Win32 API]一步一步写个围棋
- 纯C语言+libalsa实现最简单录音程序
- Linux下纯C语言 多线程 人机 贪吃蛇
- 五子棋纯c语言代码(测试完美)
- 纯C语言实现工资管理系统
- 纯C语言实现https的post和get不依赖任何
- c语言 根据坐标 截取yuv420p 区域 保存
- 纯C语言的串口YModem程序
- mpu9250九轴算法-纯c语言
-
纯C语言解析xm
l字符串 - 纯C语言写计算器界面源码
- 新编Windows API参考大全全中文、win32
-
纯C语言解析xm
l字符串含 - 纯c语言迷宫源码.zip
- 纯C语言 实现SVM,VS工程,亲测可用
- 最小生成树课程设计完美参照--本人倾
评论
共有 条评论