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 相关文章推荐
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
May 03 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
jQuery选择器全面总结
Jan 06 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
7个有用的jQuery代码片段分享
May 19 Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 Javascript
JS简单实现点击复制链接的方法
Aug 03 Javascript
Angular路由简单学习
Dec 26 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
Jul 19 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
Aug 07 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
PHP采集腾讯微博的实现代码
2012/01/19 PHP
php中memcache 基本操作实例
2015/05/17 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
node.js中的path.sep方法使用说明
2014/12/08 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
python中Genarator函数用法分析
2015/04/08 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
python实现雨滴下落到地面效果
2018/06/21 Python
利用python循环创建多个文件的方法
2018/10/25 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python主要用于哪些方向
2020/07/05 Python
Python 实现一个简单的web服务器
2021/01/03 Python
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
四个太阳教学反思
2014/02/01 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
python实现socket简单通信的示例代码
2021/04/13 Python
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL