[Canvas绘图] 第31节 藏图阁(11) AlphaGo与李世石的围棋大战之第一局

本节讲述了通过Canvas技术解析AlphaGo与李世石围棋大战的第一局,展现了人工智能在围棋领域的惊人表现。
本节目标:
借着AlphaGo与李世石的围棋大战的话题正风靡互联网的时机,回味一下以前下棋时的
一些往事。曾经有一段时间,阿伟也对围棋着迷过,棋书棋谱看了不少,各种围棋网站也
常常光临,但可惜实在忍受不住一局优秀对局的超长耗时,因此从来没有突破过业余十八级
的搞笑棋力层次,后来对围棋也就渐渐失去兴趣了。
那时还看了一部动漫《棋灵王》,当时感觉很有意思,甚至想把剧中的对局棋谱录下来,
但后来意识到那只是些并不存在的对局而已,只是剧情需要而展现出来的一鳞半爪,当不得真。
现在也就只记得两个主角星野光,塔矢亮,以及那个喜欢用“秀策尖”的棋灵而已,其它细节
再也想不起来了。
而今天,阿伟就要来讲这个AlphaGo和李世石围棋大战的故事,娱乐到死的年代,向来都

是语不惊人死不休的,各种无厘头尚且层出不穷,何况是真人真事呢!







<span style="font-size:18px;">/**
* @usage   围棋打谱
* @author  mw
* @date    2016年03月14日  星期一  08:06:31 
* @param   棋谱字符串.sgf格式: ...;B[nq];W[kc]...
* @return
*
*/
/*
棋谱	[qí pǔ]
[释义]	chess manual;
围棋	[wéi qí]
[释义]	go; weiqi, a game played with black and white pieces on a board of 361 crosses; I-go; the game of go;
*/
function Go() {
	this.play = function(GoManual, GoStep) {
		//主打谱函数,调用入口
		//传入参数为棋谱字符串,以及需要显示到的步数
		var s = GoManual;
		
		var resolveString = 'abcdefghijklmnopqrs';
		
		var array = s.split(';');	
		//用了split函数,array[0]好像是''的
		if (array[0] == '') {
			array.shift();
		}
		var len = array.length;
		var step = 0;
		//棋盘每格的大小
		var r = 20;
		var x=0, y=0;
		var player;
		//棋子位置矩阵
		var posArray = this.genIdleArray();
		//每手棋按顺序
		var seqArray = new Array(0);

		
		if (GoStep > len) {
			step = len;
		}
		else {
			step = GoStep;
		}	
		
		//到指定步数为止
		for (var i = 0; i < step; i++) {
			if (array[i] != '') {
				//格式:B[pd]
				x = resolveString.indexOf(array[i][2]);
				y = resolveString.indexOf(array[i][3]);
				
				player = array[i][0];
				if (player == 'B') {
					posArray[x][y] = 1;
				}
				else if (player == 'W') {
					posArray[x][y] = -1;
				}
				
				this.eatDeal(posArray, [x, y]);
				
				len = seqArray.length;
				for (var i = 0; i < len; i++) {
					if (seqArray[i][0] == x && seqArray[i][1] == y) {
						//此处经过提子重放
						seqArray[i][0] = -1;
						seqArray[i][1] = -1;
					}
				}
				seqArray.push([x, y, i+1]);
			}
		}
		
		//棋盘九星
		var star = [[0,0], [6, 6], [-6, 6], [6, -6], [-6, -6], 
					[0, 6], [0, -6], [-6, 0], [6, 0]]; 
		
		plot.save();
		plot.setGlobalAlpha(0.5);
		plot.setFillStyle('orange');
		shape.fillRect(0, 0, 20*r, 20*r);	

		plot.setFillStyle('yellow')
		shape.fillRect(0, 0, 18*r, 18*r);
		plot.setStrokeStyle('red')
			.setLineWidth(3);
		shape.strokeRect(0, 0, 18*r, 18*r);
		plot.setFillStyle('red');
		for (var i = 0; i < 9; i++) {
			shape.fillCircle(star[i][0]*r, star[i][1]*r, r/4);
		}
		plot.setGlobalAlpha(1.0);
		
		var x, y;
		for (var row = 0; row < 19; row++) {
			for (var col = 0; col < 19; col++) {
				x = (row-9)*r;
				y = (col-9)*r;

				if (posArray[row][col] == 1) {
					shape.sphere([x, y], r/2, 'black');
				}
				else if (posArray[row][col] == -1) {
					shape.sphere([x, y], r/2, '#AAAAAA');
				}

			}
		}
		
		plot.setFillStyle('red');
		plot.fillText('第'+step.toFixed(0)+'手', -200, -185, 100);
		
		len = s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值