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 相关文章推荐
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
Mar 23 Javascript
Js判断CSS文件加载完毕的具体实现
Jan 17 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
Dec 13 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
深入浅析JavaScript中的作用域和上下文
Mar 26 Javascript
整理关于Bootstrap警示框的慕课笔记
Mar 29 Javascript
详解webpack异步加载业务模块
Jun 23 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
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中的reflection反射机制测试例子
2014/08/05 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP中的表达式简述
2016/05/29 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
js DOM的学习笔记
2011/12/22 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
vuex的使用和简易实现
2021/01/07 Vue.js
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
python实现中文输出的两种方法
2015/05/09 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
python调用摄像头的示例代码
2020/09/28 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
学生处主任岗位职责
2013/12/01 职场文书
简历的自我评价
2014/02/03 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
十周年庆典策划方案
2014/06/03 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
大学生操行评语大全
2014/12/31 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技