[HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
一,什么是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才能赢的更多相关文章
- 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】
一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...
- Pascal小游戏 井字棋
一个很经典的井字棋游戏 Pascal源码Chaobs奉上 注意:1.有的FP版本不支持汉语,将会出现乱码.2.别想赢电脑了,平手不错了. 井字过三关: program TicTacToe; uses ...
- Java 小游戏 - 井字棋 v1.0 (初步完成) (2018.4.16更新)
井字棋游戏初步完成 实现功能:输入位置数据->打印棋盘->判断是否胜利->继续游戏/退出游戏 缺点:没有清屏函数 判断胜利方法太过无脑 package MYGAME; ...
- C++小游戏——井字棋
#include<cstdio> #include<windows.h> #include<ctime> int main() { srand(time(NULL) ...
- python 游戏(井字棋)
1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...
- 井字棋小游戏(C语言)
最近沉迷于<NetHack>.<DCSS>等字符游戏,对其很感兴趣,于是用C语言写了个字符界面的井字棋小游戏.欢迎大家指教. 编写时遇到了一些问题,我原先准备用循环,直到读取到 ...
- 井字棋游戏升级版 - TopTicTacToe项目 简介
一.游戏简介 井字棋是一款世界闻名的游戏,不用我说,你一定知道它的游戏规则. 这款游戏简单易学,玩起来很有意思,不过已经证明出这款游戏如果两个玩家都足够聪明的话, 是很容易无法分出胜负的,即我们得到的 ...
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...
- [C++] 井字棋游戏源码
TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ...
随机推荐
- HDU 4548 美素数(打表)
HDU 4548 美素数(打表)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88159#problem/H 题目 ...
- C++改变编程入口为main函数
1, 你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain. 2. 你用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是m ...
- java多线程——同步块synchronized详解
Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) 实例方法同步 静 ...
- openstack、kvm CentOS升级内核
openstack平台需要使用各种Linux发行版镜像,其制作方法主要有两种,要么是基于各大Linux发行版ISO光盘手动制作,要么是使用官方提供的制作好镜像进行修改 问题 FATAL: Module ...
- sublime2/3自总结经常使用快捷键(2的居多)
Ctrl+D 选词 (重复按快捷键,就可以继续向下同一时候选中下一个同样的文本进行同一时候编辑) Ctrl+鼠标左键 能够同一时候选择要编辑的多处文本 Shift+鼠标右键(或使用鼠标中键)能够用鼠标 ...
- 一行JavaScript代码获取页面中的所有超链接地址
因为我喜欢收集Web开发类的网址,平时对网址就很敏感. 我总结了一下我收集网址的几个阶段: 1.纯手工阶段,傻傻的阶段. 在这个阶段,主要是收集一些在页面中展现出来的网址,就是说,如果网址出现在HTM ...
- 解析带有命名空间问题web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...
- AFNetworking3.0的基本使用方法
前一段时间在做项目的时候发现AFNetworking3.0已经被大众所接受,所以以后肯定会有很多程序猿朋友必须了解和转移至3.0了,这是我这段时间使用和学习总结出来的一些常用的知识点,希望对大家有用. ...
- C# 继承细节
假定没有为类定义任何显式的构造函数,这样编译器就会为所有的类提供默认的构造函数,在后台会进行许多操作,编译器可以很好地解决层次结构中的所有问题,每个类中的每个字段都会初始化为默认值.但在添加了一个我们 ...
- Python监控网站运行状况
利用python便捷的类库,可以方便快速实现对网站运行状况的监控,主要包括对80端口(即网站运行端口),其它tcp服务等端口的监控就可以了解服务器大概的一个运行状况,使用的库主要为urllib2及so ...