JS小游戏-仙剑翻牌
游戏介绍:
这是一个翻牌配对游戏,共十关。
1.游戏随机从42张牌中抽取9张进行游戏,每组为2张相同的牌,共18张牌。
2.连续翻到两张相同的为胜利,当9组全部翻到则过关。如不是翻到连续两张相同的,则需要重新翻。
3.游戏共有10关,在规定时间内通过为挑战成功。
4.如果某关在规定时间内没有通过,则会从当前关继续游戏。
5.游戏中的卡牌图片与音乐均为大宇公司所有。
6.需要支持html5的浏览器,chrome与firefox效果最好。
游戏图片:
源码下载地址:点击下载
Javascript部分:
/** 仙剑翻牌游戏* Date: 2013-02-24* Author: fdipzone* Ver 1.0*/window.onload = function(){ var gameimg = [ 'images/start.png', 'images/success.png', 'images/fail.png', 'images/clear.png', 'images/cardbg.jpg', 'images/sword.png' ]; for(var i=1; i<=card.get_total(); i++){ gameimg.push('images/card' + i + '.jpg'); } var callback = function(){ card.init(); } img_preload(gameimg, callback);}/** card class */var card = (function(total,cardnum){ var gametime = [0,65,60,55,50,45,40,35,30,25,20]; // 每关的游戏时间 var turntime = 8; // 观看牌时间 var level = 1; // 当前关卡 var carddata = []; // 记录牌的数据 var leveldata = []; // 当前关卡牌数据 var is_lock = 0; // 是否锁定 var is_over = 0; // 游戏结束 var first = -1; // 第一次翻开的卡 var matchnum = 0; // 配对成功次数 // 初始化 init = function(){ tips('show'); $('startgame').onclick = function(){ tips('hide'); start(); } } // 开始游戏 start = function(){ reset(); create(cardnum); show(); var curtime = turntime; setHtml('livetime', curtime); var et = setInterval(function(){ if(curtime==0){ clearInterval(et); turnall(); set_event(); message('start', process); return ; } if(curtime==turntime){ turnall(); } curtime--; setHtml('livetime', curtime); }, 1000) } // 随机抽取N张牌 create = function(n){ carddata = []; leveldata = []; // 创建所有牌 for(var i=1; i<=total; i++){ carddata.push(i); } // 抽取牌 for(var i=0; i<n; i++){ var curcard = carddata.splice(Math.random()*carddata.length, 1).pop(); leveldata.push({'cardno':curcard,'turn':0}, {'cardno':curcard,'turn':0}); } // 生成随机顺序游戏牌 leveldata = shuffle(leveldata); } // 生成牌 show = function(){ var cardhtml = ''; for(var i=0; i<leveldata.length; i++){ cardhtml += '<div class="cardplane">'; cardhtml += '<div class="card viewport-flip" id="card' + i + '">'; cardhtml += '<div class="list flip out"><img src="data:images/card' + leveldata[i]['cardno'] + '.jpg"></div>'; cardhtml += '<div class="list flip"><img src="data:images/cardbg.jpg"></div>'; cardhtml += '</div>'; cardhtml += '</div>'; } setHtml('gameplane', cardhtml); } // 全部翻转 turnall = function(){ for(var i=0; i<leveldata.length; i++){ turn_animate(i); } } // 翻转动画 turn_animate = function(key){ var obj = $_tag('div', 'card' + key); var cardfont, cardback; if(getClass(obj[0]).indexOf('out')!=-1){ cardfont = obj[0]; cardback = obj[1]; }else{ cardfont = obj[1]; cardback = obj[0]; } setClass(cardback, 'list flip out'); var et = setTimeout(function(){ setClass(cardfont, 'list flip in'); }, 225); } // 设置点击事件 set_event = function(){ var o = $_tag('div', 'gameplane'); for(var i=0,count=o.length; i<count; i++){ if(getClass(o[i])=='card viewport-flip'){ o[i].onclick = function(){ turn(this.id); } } } } // 计时开始 process = function(){ is_lock = 0; var curtime = gametime[level]; setHtml('livetime', curtime); var et = setInterval(function(){ if(matchnum==cardnum){ clearInterval(et); return ; } curtime--; setHtml('livetime', curtime); if(curtime==0){ clearInterval(et); is_over = 1; message('fail', start); } }, 1000); } // 游戏讯息动画 message = function(type, callback){ is_lock = 1; var message = $('message'); var processed = 0; var opacity = 0; var soundtime = { 'start': 1500, 'success': 4000, 'fail': 6000, 'clear': 4000 }; disp('message','show'); setClass(message,'message_' + type); setOpacity(message, opacity); setPosition(message, 'left', 0); setPosition(message, 'top', 390); if(type=='start'){ bgsound(type, true); }else{ bgsound(type); } var et = setInterval(function(){ var message_left = getPosition(message,'left'); processed = processed + 25; if(processed>=500 && processed<=750){ opacity = opacity+10; setPosition(message, 'left', message_left + 30); setOpacity(message, opacity); }else if(processed>=soundtime[type] && processed<=soundtime[type]+250){ opacity = opacity-10; setPosition(message, 'left', message_left + 35); setOpacity(message, opacity); }else if(processed>soundtime[type]+250){ disp('message','hide'); clearInterval(et); if(typeof(callback)!='undefined'){ callback(); } } },25); } // 翻牌 turn = function(id){ if(is_lock==1){ return ; } var key = parseInt(id.replace('card','')); if(leveldata[key]['turn']==0){ // 未翻开 if(first==-1){ // 第一次翻 turn_animate(key); first = key; leveldata[key]['turn'] = 1; }else{ // 第二次翻 turn_animate(key); leveldata[key]['turn'] = 1; check_turn(key); } } } // 检查是否翻牌成功 check_turn = function(key){ is_lock = 1; if(leveldata[first]['cardno']==leveldata[key]['cardno']){ // 配对成功 matchnum ++; if(matchnum==cardnum){ var et = setTimeout(function(){ message('success', levelup); }, 225); } first = -1; is_lock = 0; }else{ // 配对失败,将翻开的牌翻转 var et = setTimeout(function(){ turn_animate(first); leveldata[first]['turn'] = 0; turn_animate(key); leveldata[key]['turn'] = 0; first = -1; if(is_over==0){ is_lock = 0; } }, 300); } } // 过关 levelup = function(){ if(level<gametime.length-1){ level ++; setHtml('level', level); start(); }else{ clear(); } } // 全部通关 clear = function(){ level = 1; disp('levelplane','hide'); disp('process', 'hide'); setHtml('gameplane',''); message('clear',init); } // 音乐播放 bgsound = function(file, loop){ var id = 'audioplayer'; if(typeof(file)!='undefined'){ if(typeof(loop)=='undefined'){ loop = false; } var audiofile = []; audiofile['mp3'] = 'music/' + file + '.mp3'; audiofile['ogg'] = 'music/' + file + '.ogg'; audioplayer(id, audiofile, loop); }else{ audioplayer(id); } } // 游戏玩法 tips = function(type){ disp('tips', type); } // 获取牌总数 get_total = function(){ return total; } // 重置参数 reset = function(){ disp('levelplane','show'); setHtml('level', level); disp('process', 'show'); setHtml('livetime', ''); setHtml('gameplane', ''); is_lock = 1; is_over = 0; first = -1; matchnum = 0; } return this;})(42,9);
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
JS小游戏-仙剑翻牌相关推荐
- js小游戏 (飞行的小鸟--canvas)
js小游戏 (飞行的小鸟) 这个里面用到的主要是 canvas 绘图 <!DOCTYPE html> <html><head><meta charset=&q ...
- 是男人就要坚持30秒:原生JS小游戏
在继之前完成的数个JavaScript demo后,我发现我还没有写过JS小游戏,这次呢,我就来分享一个,非常经典的"是男人就要坚持30s"的小游戏.当然我肯定 is a man, ...
- 100行JS代码实现❤坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript )
坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript ) HTML5坦克大战网页小游戏,完美还原小霸王学习机效果,以坦克战斗及保卫基地为主题,属于策略型类游戏. ...
- js小游戏之经典炸弹人(1)--地图实现
前段时间,写了一款js小游戏--经典炸弹人,因为这是第一次写游戏,对很多东西都不是很熟悉.于是,疯狂的上网找资料,结果发现,关于经典炸弹人的js资料少的可怜.所以,很是头疼了一段时间.在写完经典炸弹人 ...
- js小游戏动物连连看代码
下载地址 js小游戏动物连连看代码,有多种语言切换,默认是中文.不用部署本地解压即可预览. dd:
- 糖果粉碎js小游戏代码
下载地址 糖果粉碎js小游戏代码,糖果消消乐小游戏源码下载. dd:
- 【JavaScript】(一)解读一个js小游戏
[前言] 离公司近的好处,就在于每天都能利用自己的下班时间,更好地查漏补缺,充实技能. 最近小编做的项目需要写js偏多,而我不擅长写前端js,利用工作之余,开始学习,下面通过一个成型的js小游戏,开始 ...
- js小游戏之经典炸弹人(2)--玩家的移动
在js小游戏之经典炸弹人(1)--地图实现这篇文章中,我们已经实现了地图的绘制,接下来就来谈谈玩家是如何移动的呢? 实现玩家的移动主要依靠的是键盘事件onkeypress,我们要通过操作键盘控制玩家的 ...
- JS小游戏 - 盖房子
写这个JS,源于CSDN上看到的一道思考题,挺有趣的一个算法,于是根据规则写了这个JS. < html > < head > < title > JS小游 ...
最新文章
- 单片机对于大学生难学吗?
- 内网访问不到内网网站问题和不用端口号访问网站问题
- error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”
- react方法返回html_React全家桶之React基础(推荐新手必看)
- vtk 转换视角_vtk使用基础[1]
- 华为机试HJ13:句子逆序
- windows c语言 socket通信
- Python-文件的管理
- 阿里云播放器SDK 不断读取播放事件【内部用】
- Qt界面程序中嵌入其他可执行exe程序
- 隐藏win11任务栏时间,开启专注模式
- Android如何修改手机文件名称
- 工会分销系统部署搭建维护定制工会分销高可用架构
- 使用cookie模拟登陆豆瓣影评
- python创建一个列表、用于存储同学姓名_python学习日记04,Python
- LeeCode 108 递归
- linux的帮助,帮助信息_Linux公社 - Linux系统门户网站
- factorytalk找不到OPC服务器,simatic net 做远程opc服务器问题
- 一寸Timing一寸金,寸金能买寸光阴——CCD
- 英特尔最新Xeon D-2100系列芯片,高能低耗瞄准边缘计算