用C语言编程 在屏幕上显示围棋棋盘

用C语言编程 在屏幕上显示围棋棋盘,第1张

--

以怎么不用 MS VC++6 ??

编C语言一般都用啊

还有\xCD是C语言

Ascii代码 表示一个图形

用循环语句啊!

等我一下 晚上写出来 贴上哦

晚上10:00 上完课回来

呵呵 分给不给 随便 你的问题让我熟练了许多

分不重要了

我终于写出来了

调试了30分钟啊!

纯粹的循环 + 判断

-- 我就这点水平了 算法可能不好

如果有更好的告诉我 上QQ 或发百度消息给我

百度的显示有问题 最好

用源代码格式化工具格式化一下 百度有搜

#include <stdio.h>

void main()

{

int n,m,x,y,temp,j=0,i=0

printf("输入棋盘的横格数,竖格数:\n")

scanf("%d,%d",&x,&y)

printf("%d,%d\n",x,y)

n=2*x+1

m=2*y+1

printf("%d,%d\n",n,m)

while(j<m)

{

j++

temp=j%2

i=0

if(j==1)

{

while(i<n)

{

i++

if(i==1)

{

printf("\xC9")

continue

}

if(n==i)

{

printf("\xBB\n")

continue

}

if(i%2!=0)

{

printf("\xCB")

continue

}

if(i%2==0)

{

printf("\xCD\xCD\xCD")

continue

}

}

continue

}

if(m==j)

{

while(i<n)

{

i++

if(i==1)

{

printf("\xC8")

continue

}

if(n==i)

{

printf("\xBC\n")

continue

}

if(i%2!=0)

{

printf("\xCA")

continue

}

if(i%2==0)

{

printf("\xCD\xCD\xCD")

continue

}

}

continue

}

if(temp==0)

{

while(i<n)

{

i++

if(i%2!=0)

{

printf("\xBA")

if(n==i)printf("\n")

continue

}

if(i%2==0)

{

printf(" ")

continue

}

}

continue

}

if(temp!=0&&j!=1)

{

while(i<n)

{

i++

if(i==1)

{

printf("\xCC")

continue

}

if(n==i)

{

printf("\xB9\n")

continue

}

if(i%2!=0)

{

printf("\xCE")

continue

}

if(i%2==0)

{

printf("\xCD\xCD\xCD")

continue

}

}

continue

}

}

}

100%编译通过

可以画出任意大小的棋盘

如 5*3 5*5

只要你的屏幕能够显示

以上是用图像库画的棋盘

下面是用 __ 和 |

画的棋盘 其实很简单 替换一下就可以了

#include <stdio.h>

void main()

{

int n,m,x,y,temp,j=0,i=0

printf("输入棋盘的横格数,竖格数:\n")

scanf("%d,%d",&x,&y)

printf("%d,%d\n",x,y)

n=2*x+1

m=2*y+1

printf("%d,%d\n",n,m)

while(j<m)

{

j++

temp=j%2

i=0

if(j==1)

{

while(i<n)

{

i++

if(i==1)

{

printf("__")

continue

}

if(n==i)

{

printf("__\n")

continue

}

if(i%2!=0)

{

printf("__")

continue

}

if(i%2==0)

{

printf("__")

continue

}

}

continue

}

if(m==j)

{

while(i<n)

{

i++

if(i==1)

{

printf("__")

continue

}

if(n==i)

{

printf("__\n")

continue

}

if(i%2!=0)

{

printf("__")

continue

}

if(i%2==0)

{

printf("__")

continue

}

}

continue

}

if(temp==0)

{

while(i<n)

{

i++

if(i%2!=0)

{

printf("|")

if(n==i)printf("\n")

continue

}

if(i%2==0)

{

printf("")

continue

}

}

continue

}

if(temp!=0&&j!=1)

{

while(i<n)

{

i++

if(i==1)

{

printf("__")

continue

}

if(n==i)

{

printf("__\n")

continue

}

if(i%2!=0)

{

printf("__")

continue

}

if(i%2==0)

{

printf("__")

continue

}

}

continue

}

}

}

我个人觉得象棋好编一些,我正准备做一个象棋的,用AS3。。不过说算法就跟哪个语言无关了。。以前也用C++的,好久不用忘得差不多了。。

理由就是象棋的博弈复杂度比较低,一个固定的棋局顶多只有几十种“下一步”走法,而围棋是19*19数量级的,且象棋越到后面越简单,围棋越到后面越复杂。。

算法嘛,我也不是很清楚,很久以前只做过一个五子棋的,就穷举,算分,比最大。。

可以去网上看看别人的源码。。

最近看了一些关于alphago围棋对弈的一些人工智能的文章,尤其是美国人工智能方面教授的文章,发现此前媒体宣传的东西几乎都是错的,都是夸大了alpha狗。我做了一个阅读心得摘要。

首先是对媒体错误宣传的更正:

1.alphago可以说里程碑式开创了历史,但是他并没有作出任何非常创新的技术,而deep mind只是将早已经存在的一些人工智能技术(尤其是机器辨认图片技术运用到下棋上)之前没有人想过能这样做,这种尝试是一种创新。

2.alphago并没有真正的棋感,实际也不懂得思考并作出策略,围棋解说把alphago当人来看待是错误的。alpha只是不停问自己我下这一步我胜率提高多少。

3.alphago并没有强大学习能力,达到现在棋力是基于接近1亿次棋局的模仿和推测出来的,一开始alphago只学习了16万棋局时它的棋力很弱。他不但比人学习效率差而且比马戏团的动物学习效率更差。所以说跟李对局每一局都在进步是不可能的,一局的经验对alpha go没什么影响。

4.alphago其实也是基于蛮力穷举下法,只不过运用新的机器学习方法。穷举法和机器学习不矛盾

5.之前看到文章说alpha速度没深蓝快,其实alpha是深蓝的5万倍。今天用的iPhone6s计算能力都是深蓝的几十倍。

6.说人脑计算速度慢是错误的,和计算机计算速度相对应的应该是人脑神经元计算速度,保守估计人脑计算速度是每秒1000万亿次,计算能力是深蓝的10万倍。

7.alpha并不是完全学习的,首先底层需要人编程围棋规则,其次基础的下期原则也是人为输入的

简单总结一下阅读心得:首先包括alpha围棋程序和深蓝的象棋都是蛮力搜索法。也就是

1.考虑所有未来可能变化,

2.计算走法未来多少步的胜率,

3.选择走法。但是围棋每走一步比国际象棋变化更大,步数更多,可能变化种类超过宇宙原子总和。其实这对于象棋也是如此。深蓝雇佣大量职业象棋选手设定一个积分法,比如一个兵值多少分,吃对手一个车胜率提升多少,这个评分体系很准确,深蓝思考范围被压缩成十几步。

但是围棋无法如此评估,之前围棋程序是简单的人手输入,见到什么情况如何走,所以很死板。这些程序棋力大概是400。

2006年一种叫做蒙特卡洛树的搜索法被发明,它使用概率模拟方法(类似模拟投掷骰子)只需要判断终盘胜负,弥补了围棋不能设定确定走法函数的缺陷。(alpha go也是使用蒙特卡洛树方法)但是这方法要展开到终盘计算量太大,所以需要让围棋专家协助制定行棋规则,减少计算量。此方法可使人工智能棋力提升到业余5段。

但是十年来电脑棋力进展令人悲观,直到alphago。它在此基础上引入深度人工网络。神经网络已经发明50年,适合编写一些不直观因果关系的事物,并且软件可以自主学习调整。但是编程太难,加上以前计算能力问题一直不受重视。

6年前开始,技术上能达到10层神经元,神经网络开始兴起。结合大数据和云计算技术,神经网络开始吃香。图像处理和人脸识别这类程序很难直观的由编程员编程,神经网络在此有用武之地,其中深度卷积网络技术称霸。alpha狗团队创新之处在于意识到可以将图像识别的这项技术用于下棋。alpha狗团队将神经网络升级到13层,预测人类棋手走法。

首先它学习了围棋对战平台的3千万业余高段位的对局记录,作为让alpha狗猜人类走法的正确答案。也就是说alpha一开始是在模仿业余高手平均玩法。同时团队人工输入围棋知识。alpha是神经网络加手工编程混合物。

这个预测人类玩法被叫做策略网络,此时alpha叫做rp版。根据alpha狗团队的论文把策略网络加入业余3段棋力的围棋程序,其棋力能达到业余6段。棋力提高950分达到2600(棋力分每相差230分双方5局三胜比赛的胜率为高分者95%胜率)此时alpha已经成为世界最强围棋程序。

为了减少计算量,alpha狗使用一个叫价值网络的深层卷积网络作为评估函数,使用alpha的预测结果和实际展开结果的平均值作为胜率参考信息。加入此功能的alpha狗叫做完整版。其棋力提高了450分。达到3100。

(大家要知道棋力相差500的选手之间,棋力低者想赢一盘棋都很难的,相差1000的话,棋力低者胜率几乎为0)

首先刚刚入门只懂得规则的玩家棋力是0。

手写下棋规则类围棋程序的棋力大概是400多。也就是程序是当对手下什么子,程序应该怎么走,这种纯靠手工编程软件的棋力。

业余棋手最低级别(1段)的棋力是1000左右。

加入神经网络的alpha go棋力是1500。相当于业余4段。此时的aloha go也是程序规则软件,只不过靠神经网络训练加入围棋知识而已。

r版alpha go棋力1700。相当于业余5段。此时alpha go加入蒙特卡洛树搜索功能,但是主要靠手写程序为基础。

和r版alpha go类似的程序zen棋力是2200。相当于业余7段。

rp版的alpha go棋力是2700。和r版相比rp版的改进是在手工编程最基础的围棋策略基础上,加入“策略网络”该功能是一个预测对手落子位置的神经网络。因此alpha go棋力大增接近1000棋力。已经成为世界最强围棋软件。这个棋力大概是最低级别的职业选手(职业1段)的棋力。

2015年下半年被alpha go横扫的欧洲冠军樊麾的棋力是2900左右。相当于职业2段和3段之间水平。

完整版alpha go的棋力是3100多(2015年底时)。这个版本alpha go比之前增加了一个“价值网络”的深层卷积网络DCNN。他可以在不将牌局演算到终局就评估出双方胜率也就是上一篇文章所说的大幅度减化了计算。这种技术本来是用在识别图像技术上的。

此时李世石棋力是3500多。相当于超出最高段位(职业9段)水平。

柯洁的棋力是3600左右。

其实宣布挑战李世石时alpha go棋力落后李400左右。它是通过自己和自己大量对局来提升棋力的。(战胜樊麾时它是通过观摩人类业余高段位对战历史数据学习,为了击败更强对手只能向更高技术的选手学习,就是自己了)。在不断对局中程序棋力不断提高,而提高的棋力自我对阵时产生更高水平的下棋数据。

虽然凌哥没看到战胜李世石时alpha go的棋力但是我简单算一下推测出2016年3月战胜李时alpha go棋力大概是3800左右。(因为差230分五局三胜95%胜率可以推算单局胜率80%再低一些。李是3530左右棋力)所以当时柯洁已经不是alpha go的对手了。

现在alpha go挑战各位围棋高手60连胜(唯一一次平局是人类棋手掉线)至于现在棋力应该是没办法评估吧。因为一场都不输的话根本不知道棋力是多少。按照棋力计算方法应该是棋力无限大了,也就是七龙珠漫画里面的战斗力爆表了。至少输一场才能估算出其实际棋力。

其他:

说到alpha没有期感,和人类下棋不一样。只要是因为人类学习下棋,是通过总结棋局规则和下法,分析因果关系和其中逻辑关系的,而alpha go只是推算走这一步它的胜率提高多少(这方面和深蓝没区别只是评估方式不同)它并不是真的有智慧懂得各种谋略。

alpha go学习方式只是像训练动物一样。走对了给予奖赏鼓励以后以更高概率走这步,走错了就惩罚。而且这个效率很低,其实它的高水平是通过每天学习普通职业选手一辈子也不止的时间来学习下棋得来的。

而且这个学习过程“没有高层思维和概念”,只是一个搜索过程。

上文说道alpha go学习效率很低。因为alpha go学习了3000万盘棋局时面对新局面应变能力很差,分析发现这些棋局很多都是冗余的只相当于16万棋局。而几十万局棋对训练alpha go是不够的,它需要千万级别的棋局训练。所以电视里职业棋手解说说alpha go在每局都从李世石身上学到新技能是不可能的,一两局对alpha go是没用的。而李世石反而是从alpha go身上学到东西利用创新下法战胜alpha go。人类这种能力是人工智能不具备的。

人工智能专家认为现在人工智能其实并不是真正的智能。alpha go只是下棋能力强的软件,IBM的沃森只是智力答题能力强的机器。真正的人工智能是让一个白板人工智能机器见到围棋,自己学习下棋规则,自己通过推理推断怎么下棋。(现在的alpha go的围棋规则和基础下棋策略都是人手编程的)deep mind致力于开发真正的人工智能程序。近期目标是玩几百种游戏都能战胜人类。这是向真正人工智能迈步。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11724883.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存