一,什么是TicTacToe(井字棋)

  本
游戏
为在下用lufylegend开发的第二款小游戏。此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎。可能我说了半天,对它名字不熟悉的朋友也不懂我在说神马。那没关系,我就引用Wiki(维基百科)的介绍作为大家对它名字的认识,顺便也勾起我们儿时的回忆:


  
井字棋,大陆、台湾又称为井字游戏、圈圈叉叉;另外也有打井游戏、OX棋的称呼,香港多称井字过三关、过三关,是种纸笔游戏。两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先以横、直、斜连成一线则为胜。如果双方都下得正确无误,将得和局。这种游戏实际上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。第一位玩家在角位行第一子的话赢面最大(见图一),第二位玩家若是在边,角位下子,第一位玩家就可以以两粒连线牵制着第二位玩家,然后制造“两头蛇”。

图一
二,游戏在哪里玩?


  相信大家看了介绍就对井字棋有了了解。现在我用
html
5配合开源游戏引擎lufylegend开发出了这一款游戏,并实现了人工智能(AI)确保游戏中玩家能棋缝对手。


  接下来是游戏在线试玩和下载源码的地址:


  
下载地址(含源):
http://files.cnblogs.com/ducle/Tic_Tac_Toe.rar


  
在线试玩地址:
http://www.shengshiyouxi.com
三,游戏截图

[color=ize:24px]四,游戏引擎


  


  
本游戏运用国产的lufylegend引擎,版本为1.6.1,如果大家感兴趣可以去官网看看:


  
http://lufylegend.com/lufylegend

上面有此引擎的下载和API介绍。关于用lufylegend开发游戏的其他文章:


  
[HTML5游戏开发]简单的《找不同汉字版》,来考考你的眼力吧

五,AI部分

本游戏最大的亮点就是人工智能,下面是ai代码:

function win(x,y){


if(Math.abs(matrix[x][0]+matrix[x][1]+matrix[x][2])==3){


  return true;


}


if(Math.abs(matrix[0][y]+matrix[1][y]+matrix[2][y])==3){


  return true;


}


if(Math.abs(matrix[0][0]+matrix[1][1]+matrix[2][2])==3){


  return true;


}


if(Math.abs(matrix[2][0]+matrix[1][1]+matrix[0][2])==3){


  return true;


}


return false;


}


function best(){


var bestx;


var besty;


var bestv=0;


for(var x=0;x<3;x++){


  for(var y=0;y<3;y++){


   if(matrix[x][y]==0){


    matrix[x][y] = 1;


    step++;


    if(win(x,y)){


     step--;


     matrix[x][y] = 0; 


     return {'x':x,'y':y,'v':1000};


    }else if(isEnd()){


     step--;


     matrix[x][y]=0; 


     return {'x':x,'y':y,'v':0};


    }else{


     var v=worst().v;


     step--;


     matrix[x][y]=0;


     if(bestx==null || v>=bestv){


      bestx=x;


      besty=y;


      bestv=v;


     }


    }


   }


  }


}


return {'x':bestx,'y':besty,'v':bestv};


}


function worst(){


var bestx;


var besty;


var bestv = 0;


for(var x=0;x<3;x++){


  for(var y=0;y<3;y++){


   if(matrix[x][y] == 0){


    matrix[x][y] = -1;


    step++;


    if(win(x,y)){


     step--;


     matrix[x][y] = 0; 


     return {'x':x,'y':y,'v':-1000};


    }else if(isEnd()){


     step--;


     matrix[x][y]=0; 


     return {'x':x,'y':y,'v':0};;


    }else{


     var v=best().v;


     step--;


     matrix[x][y]=0;


     if(bestx==null || v<=bestv){


      bestx=x;


      besty=y;


      bestv=v;


     }


    }


    


   }


  }


}


return {'x':bestx,'y':besty,'v':bestv};


}


  


  
若游戏异常,请及时联系我。谢谢大家的支持!

----------------------------------------------------------------


  
欢迎大家转载我的文章。


  
 游戏论坛:http://www.jiushun8.com


  
欢迎继续关注我的博客

最新文章

  1. (七)Transformation和action详解-Java&amp;Python版Spark
  2. BZOJ 2120 数颜色&amp;2453 维护队列 [带修改的莫队算法]【学习笔记】
  3. 原创jquery插件treeTable(转)
  4. 一看便知_linux安装redis和调试
  5. Gvr SDK for Unity 分析(二)
  6. jquery事件重复绑定解决办法
  7. hdu 4888
  8. 转:Android设置全局变量
  9. poj 2976 Dropping tests
  10. SSM(Maven集成)
  11. 201521123107 《Java程序设计》第12周学习总结
  12. mac os x下的一些小技巧
  13. VS Code中编写C
  14. LeetCode-7-反转数组-c#
  15. docker run 与docker start的区别
  16. Centos7 ssh配置RSA证书登录
  17. 迅为开发板4412开发板-ANROID系统的烧写方法分享
  18. 洛谷P3233 世界树
  19. Kosaraju算法、Tarjan算法分析及证明--强连通分量的线性算法
  20. C++:同名隐藏和赋值兼容规则

热门文章

  1. BZOJ 1261: [SCOI2006]zh_tree( 区间dp )
  2. 打包jar类库与使用jar类库
  3. (Problem 37)Truncatable primes
  4. synapse socket总结三:心跳(Heartbeat)
  5. Windows Phone 8初学者开发—第5部分:布局和事件基础
  6. oracle序列详解
  7. 在 Windows Azure 网站 (WAWS) 上对 Orchard CMS 使用 Azure 缓存
  8. Android自定义控件实战——水流波动效果的实现WaveView
  9. BZOJ 2599: [IOI2011]Race( 点分治 )
  10. 我的Python成长之路---第三天---Python基础(10)---2016年1月16日(雾霾)