一,什么是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


  
欢迎继续关注我的博客

[HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢的更多相关文章

  1. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】

    一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...

  2. Pascal小游戏 井字棋

    一个很经典的井字棋游戏 Pascal源码Chaobs奉上 注意:1.有的FP版本不支持汉语,将会出现乱码.2.别想赢电脑了,平手不错了. 井字过三关: program TicTacToe; uses ...

  3. Java 小游戏 - 井字棋 v1.0 (初步完成) (2018.4.16更新)

      井字棋游戏初步完成 实现功能:输入位置数据->打印棋盘->判断是否胜利->继续游戏/退出游戏 缺点:没有清屏函数   判断胜利方法太过无脑    package MYGAME; ...

  4. C++小游戏——井字棋

    #include<cstdio> #include<windows.h> #include<ctime> int main() { srand(time(NULL) ...

  5. python 游戏(井字棋)

    1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...

  6. 井字棋小游戏(C语言)

    最近沉迷于<NetHack>.<DCSS>等字符游戏,对其很感兴趣,于是用C语言写了个字符界面的井字棋小游戏.欢迎大家指教. 编写时遇到了一些问题,我原先准备用循环,直到读取到 ...

  7. 井字棋游戏升级版 - TopTicTacToe项目 简介

    一.游戏简介 井字棋是一款世界闻名的游戏,不用我说,你一定知道它的游戏规则. 这款游戏简单易学,玩起来很有意思,不过已经证明出这款游戏如果两个玩家都足够聪明的话, 是很容易无法分出胜负的,即我们得到的 ...

  8. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  9. [C++] 井字棋游戏源码

    TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ...

随机推荐

  1. php怎样求一个数组中最长的

    <?php $arr = array( 0 => 'd', 1 => '68b3', 2 => 'a86', 3 => 'c9aa97b23b71d5c', 4 => ...

  2. r语言之散点图类型type参数

    type参数用来控制所生成散点图的类型,有如下几个选项: type=“p”表示绘制单独的点 type=“l”表示绘制点连成的折线 type=“b”表示有线连接的点 type=“o”表示将点绘在线上 t ...

  3. Visual Studio调试技巧 -- Attach to Process #Reprinted#

    from:http://www.cnblogs.com/lyosaki88/p/3481338.html 一般写完代码时,我们通常会启动调试运行一下看看是否正确,启动运行的方式无非是F5-- Star ...

  4. BZOJ 1756: Vijos1083 小白逛公园

    题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 856  Solved: 264[Submit][Sta ...

  5. 周根项《一分钟速算》全集播放&amp;下载地址

    点击图片就可以观看 ↓↓↓↓↓↓↓↓ 第1章:指算法 周根项<一分钟速算>第1章:指算法 第一节 对手的认识 周根项<一分钟速算>第1章:指算法 第二节 个位数比十位数大1乘以 ...

  6. Android利用ViewFlipper实现屏幕切换动画效果

    1.屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面:一个个性化设置页面. 2.介绍ViewFilpper类 Vie ...

  7. BZOJ 1978: [BeiJing2010]取数游戏 game( dp )

    dp(x)表示前x个的最大值,  Max(x)表示含有因数x的dp最大值. 然后对第x个数a[x], 分解质因数然后dp(x) = max{Max(t)} + 1, t是x的因数且t>=L -- ...

  8. 启用nginx status状态详解

    nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助.为了后续的zabbix监控,我们需要先了解nginx状态页是怎么回事. 1. 启用nginx s ...

  9. ECSHOP常用函数

    lib_time.php gmtime() #获得当前格林威治时间的时间戳 /$0 server_timezone() #获得服务器的时区 /$0 local_mktime($hour = NULL ...

  10. 【集训笔记】二分图及其应用【HDOJ1068【HDOJ1150【HDOJ1151

    匈牙利算法样例程序 格式说明 输入格式: 第1行3个整数,V1,V2的节点数目n1,n2,G的边数m 第2-m+1行,每行两个整数t1,t2,代表V1中编号为t1的点和V2中编号为t2的点之间有边相连 ...