五子棋算法:判断禁手

xsir317 2010-05-21 01:17:10
ForbiddenPointFinder.h

#if !defined(FORBIDDENPOINTFINDER_H_INCLUDED_)
#define FORBIDDENPOINTFINDER_H_INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ForbiddenPointFinder.h : header file
//

#include <afxwin.h>

#define BOARDSIZE 15
#define BLACKSTONE 'X'
#define WHITESTONE 'O'
#define EMPTYSTONE '.'
#define BLACKFIVE 0
#define WHITEFIVE 1
#define BLACKFORBIDDEN 2

class CForbiddenPointFinder
{
public:
int nForbiddenPoints;
CPoint ptForbidden[BOARDSIZE * BOARDSIZE];

private:
char cBoard[BOARDSIZE+2][BOARDSIZE+2];

public:
CForbiddenPointFinder();
virtual ~CForbiddenPointFinder();

void Clear();
int AddStone(int x, int y, char cStone);

private:
void SetStone(int x, int y, char cStone);
BOOL IsFive(int x, int y, int nColor);
BOOL IsOverline(int x, int y);
BOOL IsFive(int x, int y, int nColor, int nDir);
BOOL IsFour(int x, int y, int nColor, int nDir);
int IsOpenFour(int x, int y, int nColor, int nDir);
BOOL IsOpenThree(int x, int y, int nColor, int nDir );
BOOL IsDoubleFour(int x, int y);
BOOL IsDoubleThree(int x, int y);

void FindForbiddenPoints();
};

#endif // !defined(FORBIDDENPOINTFINDER_H_INCLUDED_)
...全文
1257 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
dugufengwu 2010-12-10
  • 打赏
  • 举报
回复

void CForbiddenPointFinder::FindForbiddenPoints()//对盘面上所有能落子的点,查看其是否是禁手点,并标注。
{
nForbiddenPoints = 0;
for (int i=0; i<BOARDSIZE; i++)
{
for (int j=0; j<BOARDSIZE; j++)
{
if (cBoard[i+1][j+1] != EMPTYSTONE)
continue;
else
{
if (IsOverline(i, j) || IsDoubleFour(i, j) || IsDoubleThree(i, j))
{
ptForbidden[nForbiddenPoints].x = i;
ptForbidden[nForbiddenPoints].y = j;
nForbiddenPoints++;
}
}
}
}
}


好吧,我只是试一下怎么发代码,看下效果。
xll906 2010-12-09
  • 打赏
  • 举报
回复
cpp(49) : fatal error C1083: Cannot open include file: 'ForbiddenPointFinder.h': No such file or directory
- 1 error(s), 0 warning(s)
sjhcsdn 2010-12-06
  • 打赏
  • 举报
回复
代码党,好烦 这么长代码 谁看得懂啊。。真是杯具

还优雅,叫我说,那叫吓人

判断个禁手 写这么长,那你写完个五子棋AI得多长了,

还有楼主晓得 现在五子棋 禁手规则吗? 禁黑,双3,433,长联,44 你都考虑了吗?

此爱天下无双 2010-12-05
  • 打赏
  • 举报
回复
楼主辛苦了,代码真的很beautiful
bobo98405208 2010-12-04
  • 打赏
  • 举报
回复
学习下!!!!!
longwin798 2010-12-04
  • 打赏
  • 举报
回复
全是代码,看不下去。。如果给的是算法或思路,或许会更好
do__i 2010-12-03
  • 打赏
  • 举报
回复
代码就是漂亮,我喜欢!!
figo1688 2010-12-02
  • 打赏
  • 举报
回复
比较强,学习学习
qq120848369 2010-12-01
  • 打赏
  • 举报
回复
此贴太坟了,竟然有我的回帖.
AAA20090987 2010-12-01
  • 打赏
  • 举报
回复
mark......
xsir317 2010-11-30
  • 打赏
  • 举报
回复
http://blog.renjustudio.com/?p=28

放在我自己的博客上了。。。

至于运行,其实现在的renlib等程序都是用这个的。。。
bhw98 2010-11-30
  • 打赏
  • 举报
回复
不错,看着挺舒服的
futuresj 2010-05-21
  • 打赏
  • 举报
回复
运行的了吗,谁试过吗??
qq120848369 2010-05-21
  • 打赏
  • 举报
回复
优雅!
toplinq 2010-05-21
  • 打赏
  • 举报
回复
代码就像书法,看得让人很舒服
zeroieme 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xinzaiyiqi 的回复:]

晒代码?
[/Quote]
同问
xinzaiyiqi 2010-05-21
  • 打赏
  • 举报
回复
晒代码?
FrankArmageddon 2010-05-21
  • 打赏
  • 举报
回复
我喜欢,mark了~
pmars 2010-05-21
  • 打赏
  • 举报
回复
mark
superzbo 2010-05-21
  • 打赏
  • 举报
回复
晕……什么东西这么长啊
加载更多回复(4)
【项目标题】:采用C++编程语言构建具备禁手规则的五子棋对弈系统【程序设计课程实践】 【目标用户】:适合有意探索多样化技术方向的新手或具备一定基础的学习者。可应用于毕业设计、课程作业、综合实践、工程训练或项目启动阶段。 【系统概述】: - **Game(游戏控制模块)**:负责管理整体对局进程,指导用户进行交互操作,包括模式选择、先行方设定及对局启动等功能。 - **Checkerboard(棋盘数据模块)**:存储棋盘状态信息,提供落子功能与棋盘可视化接口。 - **ChessPiece(棋子实体模块)**:定义棋子的基本属性与行为逻辑。 - **Judge(规则裁判模块)**:实现五连珠胜利条件判定与禁手规则检测机制。 - **Player(真人交互模块)**:处理人类玩家的操作输入与决策流程。 - **Machine(智能对手模块)**:模拟计算机对手的自动化决策与落子行为。 本项目通过模块化设计实现了经典五子棋游戏的完整逻辑框架,重点强化了禁手规则的算法实现与用户交互的稳定性。系统采用面向对象编程范式构建各功能单元,确保代码结构清晰且易于扩展。棋盘状态管理采用二维数组结构,辅以动态坐标校验机制;禁手判定算法综合分析了双活三、冲四等多种复杂棋形,并通过递归搜索优化判断效率。人机对弈模式集成基础博弈树评估算法,支持可调节的难度层级。整体设计注重程序健壮性与执行效率,为学习者提供兼具理论深度与实践价值的编程范例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

33,029

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧