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 相关文章推荐
javascript 命名空间以提高代码重用性
Nov 13 Javascript
javascript 获取表单file全路径
Dec 31 Javascript
JS正则表达式大全(整理详细且实用)
Nov 14 Javascript
setinterval()与clearInterval()JS函数的调用方法
Jan 21 Javascript
JQuery实现展开关闭层的方法
Feb 17 Javascript
简单实现js选项卡切换效果
Feb 03 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
vue2.0实现导航菜单切换效果
May 08 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
React中使用UEditor百度富文本的方法
Aug 22 Javascript
细说Vue组件的服务器端渲染的过程
May 30 Javascript
vue $set 给数据赋值的实例
Nov 09 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
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
JavaScript模板引擎用法实例
2015/07/10 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
angularjs自定义过滤器demo示例
2019/08/24 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
Vue实现todo应用的示例
2021/02/20 Vue.js
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Python的print用法示例
2014/02/11 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
python获取url的返回信息方法
2018/12/17 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
高中考试作弊检讨书
2014/01/14 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
初三学生评语大全
2014/04/24 职场文书
青年志愿者活动总结
2014/04/26 职场文书
局火灾防控工作方案
2014/05/25 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
公司合并协议书范本
2014/09/30 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
python中 Flask Web 表单的使用方法
2022/05/20 Python