`

告诉你什么是优雅的代码(11)----html5 之XXOO棋

 
阅读更多

 

 

项目结项后的一星期又两天后,我又有了写些优雅代码的欲望。在我的记忆中, AI,在这个领域,我已近乎白痴,剪枝与寻路两种剑法,就在我离开校园之后,连同那蓝天碧草,相忘于江湖。江湖中只有 SSH, 只有 SQL,只有汽车尾气,只有路人甲

 

在计算机语言的圣经中,hello world 永远写在第一页。如果没有翻开过这一页,就如少男没有翻开过少女的裙子一样充满好奇,困惑。我难以忍受这种无知,于是我的剑出鞘,翻开AI的圣经,在屏幕上刻下 XXOO 四个字。

 

 

 

XXOO ,又称井字棋 。三子相连者胜 ,四子相连 ...是不可能的。

 

算法就如剑法,速度,力度都要有良好的把握。理解剑法,需要口诀。算法亦然。

 

以下为负值最大函数的伪代码:

 

    int NegaMax(int depth) {
     int best = -INFINITY;
     if (depth <= 0) {
      return Evaluate();
     }
     GenerateLegalMoves();
     while (MovesLeft()) {
      MakeNextMove();
      val = -NegaMax(depth - 1); // 注意这里有个负号。
      UnmakeMove();
      if (val > best) {
       best = val;
      }
     }
     return best;
    }
 

理解了这个伪代码,也就明白了我的代码:

 

this.getPos = function(depth){
		var best = -Chess.MAX-1;
		var index = -1;		
		var val = 0;		
		for (var i = 0 ;i < board.length; i++) {
	    	   if(board[i] == 0){   
	    		   board[i] = aiChess;  
	    		   val = -negaMax(depth -1,personChess);
	    		   board[i] = 0;
	    		   if(val > best){
	    			   best = val;
	    			   index = i;
	    		   }
	    	   }
	     }
		 return index;
	}
 	function negaMax(depth,chess) {	
 	   var best = -Chess.MAX;     
       if (depth <= 0) {
    	   return evaluate(chess);
       }
       var val = 0;
       for ( var i = 0 ;i < board.length; i++) {
    	   if(board[i] == 0){
    		   
    		   board[i] = chess;  
    		   val = -negaMax(depth -1,chess==Chess.X?Chess.O:Chess.X);
    		   board[i] = 0;
    		   if(val > best){
    			   best = val;
    			  
    		   }
    	   }
       }	       
       return best;		
	      		
	}
		function evaluate(chess) {
			var xMark = 0;
			var oMark = 0;
			var X = Chess.X;
			var O = Chess.O;
			var f = chess == X?1:-1;
			for (i = 0; i < 8; i++) {
				var sum = board[pos[i][0]] + board[pos[i][1]] + board[pos[i][2]];
				if(sum == 3*X)
					return f*Chess.MAX;
				if(sum == 3*O)
					return -f*Chess.MAX;
				if(sum < O)
					xMark++;
				if(sum % O == 0)
					oMark++;
			}
			return f*(xMark - oMark);
		}

 

 

附件有完整的代码,可直接开启你的XXOO。

 

 

 

 

分享到:
评论
6 楼 恒之疆 2015-09-03  
无敌模式有问题
5 楼 windshome 2014-10-22  
泰山北斗 写道
讨论代码优雅的基本都是刚入流的小孩,老手都在整个设计的优雅,架构的优雅。


没有优雅的架构,光有优雅的代码,艺术的基础是不存在的,实际的价值是打折扣的。

架构师骨架,代码是皮肤。

我的看法,优雅是额外要求,逻辑上清晰的代码是一个coder的终极追求目标,看上去这个要求很简单,但做到也很难。
4 楼 yangguo 2011-11-27  
泰山北斗 写道
讨论代码优雅的基本都是刚入流的小孩,老手都在整个设计的优雅,架构的优雅。


您老人家除了到处吹牛皮外,也没见谈谈你那优雅的设计。
3 楼 泰山北斗 2011-11-27  
讨论代码优雅的基本都是刚入流的小孩,老手都在整个设计的优雅,架构的优雅。
2 楼 yangguo 2011-11-25  
请选到弱智级别。无敌级别出了些问题。
1 楼 iecel1990 2011-11-25  
电脑不智能啊,

相关推荐

    微信HTML5在线朋友圈游戏源码带安装部署教程-xxoo游戏.zip

    本源码包“微信HTML5在线朋友圈游戏源码带安装部署教程-xxoo游戏.zip”提供了一个具体的游戏开发实例,名为“xxoo游戏”,这将帮助开发者深入理解如何利用HTML5技术和微信平台创建互动游戏。 首先,我们需要了解...

    html5微信小游戏-xxoo游戏.zip

    "xxoo游戏"可能指的是一个特定的HTML5游戏,但由于隐私和规范原因,我们无法提供具体游戏的详细名称或内容。 HTML5是超文本标记语言的最新版本,它引入了许多新特性,如语义化元素、离线存储、拖放功能、媒体元素、...

    微信HTML5在线朋友圈游戏源码带安装部署教程-xxoo游戏.rar

    "微信HTML5在线朋友圈游戏源码带安装部署教程-xxoo游戏.rar" 这个标题提到了几个关键概念。首先,“微信HTML5在线朋友圈游戏”表明这是一款基于HTML5技术开发的游戏,设计用于在微信的社交环境中分享和游玩。HTML5是...

    xxoo-1.0.0.RELEASE(原xml和JAVA对象转换 simple-xml2object)

    xxoo(取x2o和o2x之意)是simple-xml2object的一个RELEASE版本,博主修复了一些bug,源码已在github以apacheV2协议开源,地址https://github.com/xiaolongzuo/xxoo。 简介:xxoo是一个简单实用的xml和JAVA对象转换...

    H5游戏源码 xxoo游戏.zip

    如果“xxoo游戏”有联网功能,这部分代码会尤为关键。 最后,优化是H5游戏不可忽视的一环。源码中会包含性能优化策略,如减少DOM操作、使用requestAnimationFrame进行动画渲染、预加载资源等,以确保游戏在各种设备...

    xxoo-gcc-rpm.tar

    gcc环境所有的rpm包 一键安装 rpm -ivh *

    基于EasyX实现的三子棋游戏

    【基于EasyX实现的三子棋游戏】 在IT领域,编程是创造各种应用程序的基础,而游戏开发则是其中极具挑战性和趣味性的一部分。本项目“基于EasyX实现的三子棋游戏”采用C语言编写,利用EasyX图形库来创建用户界面,为...

    jrebel6.2.0xxoo

    5. **框架支持**:此版本对各种流行框架如Spring、Hibernate、Struts等的支持更加完善,确保了框架组件的热部署效能。 ### 安装与配置 要将JRebel集成到IDEA中,首先需要下载`jr-ide-idea-6.2.0-idea-13-14.zip`...

    JavaScript应用实例-UI画时钟作者xxoo.js

    JavaScript应用实例-UI画时钟作者xxoo.js

    一个MFC写的XXOO的游戏-

    MFC写的,还有些功能未实现,可以XXOO了~

    xxoo-game:一个简单的游戏

    xxoo 游戏一个简单的游戏。 我写这个是为了用练习 JavaScript 单元测试。运行游戏 bower installopen index.html运行测试 open test/run_test.html

    AutoJs源码-UI画时钟作者xxoo

    AutoJs源码-UI画时钟作者xxoo。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己...

    ant 元素介绍XXOO

    这篇名为"ant 元素介绍XXOO"的博文可能详细介绍了Ant构建文件中的各种元素及其用途,但由于描述部分为空,我们将基于Ant的一般知识进行扩展。 Ant的核心概念是任务(Task),这些任务是构建过程中执行的操作,如...

    2021年最新100款经典H5小游戏源码zip包下载

    在IT行业中,HTML5(H5)是一种广泛用于创建网页和游戏的技术,它极大地扩展了HTML的潜力,使得开发者能够创建交互性强、图形丰富的在线内容。2021年,随着移动互联网的发展,H5小游戏成为了热门的娱乐形式,它们...

    免费仿爱奇艺官网影视网站模板html

    &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;meta charset="UTF-8"&gt; 爱奇艺-中国领先的视频门户,高清影视剧,网络视频在线观看 &lt;div class="layer"&gt;&lt;/div&gt; 爱情保卫战" /&gt;

    jiandan-xxoo-crawler:用来搜寻jiandan的mm图片的小工具

    剑丹XXOO履带###在jiandan.net的xxoo url中爬行图片的小工具###仅用于学习,不可用于其他用途。 这是用python写的,包括一个处理XML处理器的模块lxml。 提供了一个配置文件来修改存储图像的目录路径,并且可以修改...

    AutoJs源码-百度ocr图片文字识别修改开始按钮,作者xxoo

    AutoJs源码-百度ocr图片文字识别修改开始按钮,作者xxoo。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则...

    女孩网站全站程序

    “全站代码”标签明确了这是一个包含所有网站代码的集合,不仅有用户可以看到的网页部分,还有服务器处理请求和存储数据的部分。全站代码通常包括但不限于以下几个方面: 1. **前端代码**:HTML用于结构化内容,CSS...

Global site tag (gtag.js) - Google Analytics