javascript和HTML5利用canvas构建猜牌游戏实现算法


Posted in Javascript onJuly 17, 2013

让我猜猜你心中的牌,先随机生成27张牌,不能重复列出三列牌,然后记住其中一张,然后点击牌所在的列,多次就可以猜出你想的牌。
如果是9张只要猜2次,如果是27张就是猜3次。

实现方法(27张):
如果点击了第三列,那就是说牌一定在这9张里面,就把第三列的9张牌平均给每列分3张,假设编号为123,456,789
再点击一次,如果点击第二列,那么猜的牌就在456里面,再分到三列,4,5,6
再点击一次,就可以知道牌是哪个了。

实现算法:
我是使用一维数组实现,第一次猜第三列就把第三列的数据和0,1,2,3,4,5,6,7,8替换,
那么所猜的数就在前面9个,第二次猜第二列就把所在列的三个和0,1,2替换,那么就在前面三个了。
输出按照三列输出, 不过有个问题是,这样后面的牌就不会乱了,别人就知道你为什么猜到的了
所以在输出的时候就要乱序输出,只能够上下乱序输出,不能左右乱序
var random = new Array(5);//自定义二维乱序表
random[0] = [5, 2, 8, 7, 1, 3, 4, 6, 0];
random[1] = [2, 5, 8, 0, 4, 6, 3, 7, 1];
random[2] = [6, 7, 2, 8, 0, 1, 5, 3, 4];
random[3] = [2, 1, 6, 3, 5, 4, 7, 0, 8];
random[4] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
更多请查看:www.shengshiyouxi.com
javascript和HTML5利用canvas构建猜牌游戏实现算法 

< !DOCTYPE html> 
< html xmlns="http://www.w3.org/1999/xhtml"> 
< head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 
<script type="text/JAVAscript"> 
var data = new Array(27); 
var canvas; 
var context; 
var time = 0; 
var random = new Array(5);//自定义二维乱序表 
random[0] = [5, 2, 8, 7, 1, 3, 4, 6, 0]; 
random[1] = [2, 5, 8, 0, 4, 6, 3, 7, 1]; 
random[2] = [6, 7, 2, 8, 0, 1, 5, 3, 4]; 
random[3] = [2, 1, 6, 3, 5, 4, 7, 0, 8]; 
random[4] = [0, 1, 2, 3, 4, 5, 6, 7, 8]; 
function start() { 
var guess = new Array(); 
var count = 0; 
while (count < 27) {//生成随机的27张牌 
var temp = parseInt(Math.random() * 54) + 1; 
for (var i = 0; i < count + 1; i++) { 
if (temp == guess) {//如果重复就不要 
temp = 100; 
break; 
} 
} 
if (temp != 100) { 
guess[count] = temp; 
data[count] = new Image(); 
data[count].src = "images/" + temp + ".gif"; 
count++; 
} 
} 
} 
function draw() { 
canvas = document.getElementById("canvas"); 
context = canvas.getContext("2d"); 
var temp1 = parseInt(Math.random() * 5); 
var temp2 = parseInt(Math.random() * 5); 
var temp3 = parseInt(Math.random() * 5); 
for (var i = 0; i < 9; i++) {//乱序排序方法 
context.drawImage(data[random[temp1] * 3 + 0], 20, i * 30 + 40); 
context.drawImage(data[random[temp2]* 3 + 1], 20 + 100, i * 30 + 40); 
context.drawImage(data[random[temp3]* 3 + 2], 20 + 200, i * 30 + 40); 
} 
} 
function play(index) { 
if (time >= 3) 
alert("请点击再来一次"); 
for (var i = 0; i < (3 - time) * 3; i++) { 
var temp = data; 
data= data[i * 3 + index - 1]; 
data[i * 3 + index - 1] = temp; 
} 
time++; 
if (time >= 3) { 
context.drawImage(data[0], 400, 50); 
return; 
} 
draw(); 
} 
start(); 
</script> 
<style type="text/css"> 
input { 
margin-right: 60px; 
} 
</style> 
< /head> 
< body> 
<p> 
让我猜猜你心中的牌<br /> 
首先从列表中选择一张你心目中的牌,并且记住它,然后选择它所在的列,点击三次我将会猜出你心目中的牌。<br /> 
来试试吧,我懂你的!<br /> 
如果遇到牌无法显示,或者显示不全,请刷新.如果你的浏览器不支持HTML5,请更换浏览器,例如chrome,火狐等 
</p> 
<canvas width="700" height="400" id="canvas">你的浏览器不支持HTML5,请更换浏览器,例如chrome,火狐等</canvas> 
<br /> 
<input type="button" value="第一列" /> 
<input type="button" value="第二列" /> 
<input type="button" value="第三列" /> 
<input type="button" value="再来一次" /> 
< /body> 
< /html>
Javascript 相关文章推荐
新浪刚打开页面出来的全屏广告代码
Apr 02 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
Jun 02 Javascript
简单几行JS Code实现IE邮件转发新浪微博
Jul 03 Javascript
深入理解javascript严格模式(Strict Mode)
Nov 28 Javascript
JavaScript常用函数工具集:lao-utils
Mar 01 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
Jul 01 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
浅谈Koa服务限流方法实践
Oct 23 Javascript
10行原生JS实现文字无缝滚动(超简单)
Jan 02 Javascript
js删除数组中的元素delete和splice的区别详解
Feb 03 Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 Javascript
js中如何把字符串转化为对象、数组示例代码
Jul 17 #Javascript
js函数setTimeout延迟执行的简单介绍
Jul 17 #Javascript
JavaScript地图拖动功能SpryMap的简单实现
Jul 17 #Javascript
js导出格式化的excel 实例方法
Jul 17 #Javascript
js检查页面上有无重复id的实现代码
Jul 17 #Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
Jul 17 #Javascript
jcrop基本参数一览
Jul 16 #Javascript
You might like
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
js获取单选按钮的数据
2006/11/27 Javascript
Javascript与flash交互通信基础教程
2008/08/07 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python函数装饰器实现方法详解
2018/12/22 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
澳洲的服装老品牌:SABA
2018/02/06 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
北大自主招生自荐信
2013/10/19 职场文书
中专毕业生自我鉴定
2013/11/21 职场文书
机关门卫岗位职责
2013/12/30 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
阳光体育活动总结
2014/04/30 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
Oracle中日期的使用方法实例
2022/07/07 Oracle