不java围棋源代码C语言代码

打ctf需要c语言基础吗? - 知乎19被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答97 条评论分享收藏感谢收起62 条评论分享收藏感谢收起纯C语言 + Win32 API]一步一步写个围棋程序_百度知道
纯C语言 + Win32 API]一步一步写个围棋程序
有人推荐这个,但搜索后发现这个太多了,而且也没找到第一,不知道有没有人能打包分享一下,感谢
我有更好的答案
这么说吧,首先完整的一个易懂的包基本下不到。另外就算是有,你仍然是看不懂的,那可不是简单的一个Hello World,你没有基础知识,没有遇到过相应的问题你是不会知道为什么要那么做的。人家推荐你写这个,是让你以最终写出围棋程序作为目标,不是让你找个围棋程序看一看就行了。你不是自己从头到尾做的,你是一定不会懂得,一定不会。其实围棋是个不错的目标,这个是很难很难的,估计你从C语言开始学,得有一年半到两年的苦心学习才能做出来一个可以玩的围棋,这还不包括人机对弈和网络对战。首先围棋的规则你要实现出来,其次如何支持局域网对战?网络又够你学半年(基础)。如何和电脑对战?AI又是个大难点。围棋的AI非常非常难,没有坚实的数据结构和算法的基础和AI相关算法的深刻理解你是写不出来好的AI的。另外为了AI的反应速度加快,你后期可能为了项目的深度会使用多线程减少AI思考的时间等等等等。还有跨平台等等。还有复盘啊,局势判断啊之类的功能。可以扩展的东西非常非常多。所以我说是个很不错的目标。目测没有两年半以上的潜心钻研你是做不出样子的。怎样?看到我以上说的话,你觉得你从网上下一个什么围棋源码有用吗?里面用到的数据结构和算法你看的懂吗?里面的网络编程你懂吗?里面用到的tricks和优化你懂吗?里面用到的设计模式你懂吗?源码放在你面前你依然不懂。所以不要找了,不要想一步登天。这是很多新手的通病。能静下来心就从基础开始学起,到时候量变产生质变你都不需要问这个问题了,因为你懂得多了你自己就对这些问题有理解了,你再来看你这个问题就会发现自己当初很幼稚了。所以,学起来吧。善于搜索,善于动手实践,少问,多做。你要真能把一个围棋游戏写的很完善,特别是AI功能和网络对战。那你就能秒杀很多人了。
醍醐灌顶 可不可以私个QQ或者什么,希望以后有些疑惑可以讨教,当然不方便就不用了:)
采纳率:32%
为您推荐:
其他类似问题
win32的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。用c语言编写围棋程序时如何得出棋的死活,如何得出目的数量? - 知乎9被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答06 条评论分享收藏感谢收起1添加评论分享收藏感谢收起写回答[纯C语言 + Win32 API]一步一步写个围棋程序之十一:完善功能之一
编辑:www.fx114.net
本篇文章主要介绍了"[纯C语言 + Win32 API]一步一步写个围棋程序之十一:完善功能之一",主要涉及到[纯C语言 + Win32 API]一步一步写个围棋程序之十一:完善功能之一方面的内容,对于[纯C语言 + Win32 API]一步一步写个围棋程序之十一:完善功能之一感兴趣的同学可以参考一下。
正式下棋之前,还是先把部分菜单、按钮的功能完善吧,下棋的时候有个好的体验。
先说菜单:
1、最简单处理的一类菜单是只需要反转选中状态的,菜单只是做个辨识开关用。
落子音效IDM_SET_WAVE_SOUND:选中了落子时声音,没选中落子时不发声音。
怎么反转菜单项的选中状态呢?
先取得当前选中状态
GetMenuState(h, id, MF_BYCOMMAND);
有对勾的去掉对勾,没对勾的就打上对勾。
CheckMenuItem(h, id, GetMenuState(h, id, MF_BYCOMMAND) == MF_UNCHECKED ? MF_CHECKED : MF_UNCHECKED);
2、稍微复杂点的菜单项除了做开关,还要在选中状态改变后重绘客户区。
棋盘图片背景 IDM_SET_BMP_BOARD
图片棋子 IDM_SET_BMP_STONE
棋子上显示手数 IDM_SET_SHOW_STONENUMBER
棋盘线路坐标 IDM_SET_SHOW_BOARDCOORDINATE
这类也很简单,同上面一样反选菜单对勾,然后重绘客户区就行
InvalidateRect(hwnd, NULL, TRUE);
还有开启新局的菜单:把棋盘状态数据清空,然后重画客户区
& & & & case IDM_GAME_NEW:
ClearBoardData();
InvalidateRect(hwnd, NULL, TRUE);
3、第三类就比较复杂了,需要调整客户区绘图尺寸。
主要是工具栏和状态栏,他们是否显示调整后棋盘尺寸需要重新计算
同第一类一样,先反选菜单对勾状态
然后将窗口隐藏或者显示出来
ShowWindow(g_hwndToolbar, b ? SW_SHOW : SW_HIDE);
ShowWindow(g_hwndStatusbar, b ? SW_SHOW : SW_HIDE);
再根据是否隐藏刷新保存其高度的全局变量
g_htToolbar = b ? GetWndHeight(g_hwndToolbar)-1 : 0;
g_htStatusbar = b ? GetWndHeight(g_hwndStatusbar) : 0;
还要记得刷新保存棋盘线参数的全局变量
RefreshBoardSizeData(hwnd);
最后再重绘客户区
4、最复杂的是 “最后落子闪烁提示” 菜单,这需要定义一个 TIMER,先放一放,以后再说。
再说工具栏按钮:
前3个不用管,只是作为开关使用,每次响应鼠标左键点击落子时判断其状态确定落子颜色即可。
(SendMessage(g_hwndToolbar, TB_GETSTATE, IDT_TOOLBAR_BLACK, 0) & TBSTATE_CHECKED) == TBSTATE_CHECKED
(SendMessage(g_hwndToolbar, TB_GETSTATE, IDT_TOOLBAR_WHITE, 0) & TBSTATE_CHECKED) == TBSTATE_CHECKED
(SendMessage(g_hwndToolbar, TB_GETSTATE, IDT_TOOLBAR_TURN, 0) & TBSTATE_CHECKED) == TBSTATE_CHECKED
注意这里有个按位与的技巧:判断一个状态参数是否包含某个状态的方法,就是用那状态参数与待判断的状态按位与,得到的&#20540;等于待判断的状态,就说明状态参数包含这个状态。
这里还有个宏,反转棋子颜色(白变黑,黑变白)
#define OtherColor(c) &(BLACK &#43; WHITE - c)
比较复杂的是第四个:悔棋按钮
1、首先在鼠标左键点击函数里,如果有成功落子,即棋盘上有棋子的话,就要调整悔棋按钮可用
& & if(GetTotalStoneNumber()&0)
& & & & SendMessage(g_hwndToolbar, TB_SETSTATE, IDT_TOOLBAR_RESTRACT, TBSTATE_ENABLED);
2、然后在响应新局菜单里使其不可用
SendMessage(g_hwndToolbar, TB_SETSTATE, IDT_TOOLBAR_RESTRACT, 0);
3、在其自身函数里一样要判断:如果悔到最后没棋子了也要禁用
至于说怎么实现悔棋?其实很简单:
棋盘上如果有棋子,就删掉最后下的那一个
//回退一步
//返回&#20540;:成功返回1,否则返回0
extern BOOL WithdrawOneStep(void)
& & if(g_iStoneNumber&0)
& & & & //把最后一子吃掉的棋还原
& & & & for(i=1; i&g_iStoneN i&#43;&#43;)
& & & & & & 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[i].c;
& & & & & & }
& & & & //删掉最后一子
& & & & DeleteLastStone();
& & & & //重新设定下一手棋的颜色
& & & & g_cNextColor = (g_iStoneNumber&0 ? OtherColor(g_StoneData[g_iStoneNumber].c) : BLACK);
& & & & return TRUE;
& & return FALSE;
//删除最后一子
static void DeleteLastStone()
if(g_StoneData[g_iStoneNumber].sn&0) g_iShowStoneNumber--;
g_BoardData[g_StoneData[g_iStoneNumber].x][g_StoneData[g_iStoneNumber].y].c = g_BoardData[g_StoneData[g_iStoneNumber].x][g_StoneData[g_iStoneNumber].y].n = 0;
g_StoneData[g_iStoneNumber].x = g_StoneData[g_iStoneNumber].y = g_StoneData[g_iStoneNumber].c = g_StoneData[g_iStoneNumber].n = g_StoneData[g_iStoneNumber].ko = g_StoneData[g_iStoneNumber].bk = 0;
g_StoneData[g_iStoneNumber].sn = -1;
g_iStoneNumber--;
现在实现了所有工具栏按钮的功能(汗!~!就一个需要实现的)和部分菜单项(工具栏状态栏的隐藏,图片棋盘棋子)
今天的代码:http://download.csdn.net/detail/whoozit/4542029
今天的关键字:GetMenuState,CheckMenuItem,TB_GETSTATE,TB_SETSTATE
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:阿尔法狗 围棋用c语言_百度知道
阿尔法狗 围棋用c语言
阿尔法狗 围棋用c语言
我有更好的答案
都没人搭理你,我跟你说说吧。alphaGo里面图形处理用到的是MATLAB。具体怎么实现的要是真有人能回答你就奇怪了。该项目耗费4亿英镑,岂是简简单单几句话就能说明白的。
采纳率:48%
来自团队:
这个肯定不会公开了,另外一般的机器算力不够,阿尔法狗是用的分布式计算机,一步棋,费用3000元。
不存在的,C语言是底层语言,很复杂,不太可能用来做阿尔法狗吧
都没人搭理你,我跟你说说吧。alphaGo里面图形处理用到的是MATLAB。具体怎么实现的要是真有人能回答你就奇怪了。该项目耗费4亿英镑,岂是简简单单几句话就能说明白的。
不会的,只不过人类多了一个辅助工具罢了,象棋,国际象棋,五子棋都是如此。计算器比人计算的又快又准,你看小学生还的按步就班一点一点学习加减乘除。
这个东西不是一般人可以的
其他3条回答
为您推荐:
其他类似问题
围棋的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 python 围棋代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信