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 asp.net 用json格式返回自定义对象
Apr 07 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
Aug 04 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
Oct 11 Javascript
Angular2学习笔记——详解NgModule模块
Dec 02 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
Jan 04 Javascript
JS库之ParticlesJS使用简介
Sep 12 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
Vue波纹按钮组件制作
Apr 30 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
Vue实例的对象参数options的几个常用选项详解
Nov 08 Javascript
在pycharm中开发vue的方法步骤
Mar 04 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
详解JavaScript的变量
2019/04/04 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python实现顺时针打印矩阵
2019/03/02 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
网络方面基础面试题
2012/11/16 面试题
文秘专业个人求职信
2013/12/22 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
感恩节活动策划方案
2014/05/16 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
记者节感言
2015/08/03 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
Java中的随机数Random
2022/03/17 Java/Android