
定义canvas及黑白棋变量
<font color="#2f4f4f" face="微软雅黑" size="3">var canvas
var context
var isWhite = true//设置是否该轮到白棋
var isWell = false//设置该局棋盘是否赢了,如果赢了就不能再走了
var img_b = new Image()
img_b.src = "images/b.png"//白棋图片
var img_w = new Image()
img_w.src = "images/c.png"//黑棋图片</font>
为棋盘的二维数组用来保存棋盘信息
<font color="#2f4f4f" face="微软雅黑" size="3">var chessData = new Array(15)//初始化0为没有走过的,1为白棋走的,2为黑棋走的
for (var x = 0x <15x++) {
chessData[x] = new Array(15)
for (var y = 0y <15y++) {
chessData[x][y] = 0
}
}</font>
绘制棋盘的线
<font color="#2f4f4f" face="微软雅黑" size="3"> for (var i = 0i <= 640i += 40) {
context.beginPath()
context.moveTo(0, i)
context.lineTo(640, i)
context.closePath()
context.stroke()
context.beginPath()
context.moveTo(i, 0)
context.lineTo(i, 640)
context.closePath()
context.stroke()
}
}</font>
判断该棋局的输赢
<font color="#2f4f4f" face="微软雅黑" size="3">if (count1 >= 5 || count2 >= 5 || count3 >= 5 || count4 >= 5) {
if (chess == 1) {
alert("白棋赢了")
}
else {
alert("黑棋赢了")
}
isWell = true//设置该局棋盘已经赢了,不可以再走了
}</font>
html代码:
<font color="#2f4f4f" face="微软雅黑" size="3"><body onload="drawRect()">
<div>
<canvas width="640" id="canvas" onmousedown="play(event)" height="640">你的浏览器不支持HTML5 canvas ,请使用 google chrome 浏览器 打开.
</canvas>
</div>
</body></font>
好的程序还是很复杂的,一般的可以看flash格式的动画小游戏,把它拆了就可以了,技术好点就要去研究黑石的算法了,很复杂,逻辑+算法+拓扑+人工智能。网上的源代码还是很多,自己好好看看吧。
黑石计算很全面,当然10级很垃圾。你只要认真一点,战胜应该不是问题。
一般都用3dan。
所谓计算实际上是抽象记忆,你首先要在脑子里面形成一副图。黑棋走这里,白棋走哪里,然后黑棋又走哪里。。。。
计算得越多,计算的步数越远。
当然那只是单一变化,算完了,再算另一种变化,如果黑棋不走那里,那白棋有哪些点可走,每个点结果会怎么样。
这就是计算的过程。
五子棋很复杂的,努力吧。。
不见然是这样的
黑石的开局是逻辑+算法+拓扑+人工智能,
中盘一般是先判断优势区域,或者叫块,采用正负加和算法,
尽量做到多区域链接,
终盘,一般是反复的线性算法,做VCF,
整个过程有一定的棋谱支持,但人工智能不强,这方面不如fiver6,
估计五子棋的所有棋谱的坐标文件是2000TB,但有效下发在1TB左右,这是我个人估计,围棋由于可以反复,棋谱没有终结的,
所以,毕竟五子棋的每个棋子是永久放在棋盘上的,可以穷尽的
网上有很多棋谱的搜索引擎,黑石毕竟不是最强的,她的开局比较厉害,终盘的算法也还可以,但时间太长,但中盘的布局和谋虑不是很好,大局观就是没有人的好。
要编写一个优秀的软件,你首先必须是一个连珠高手,把人的智能转移到程序上
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)