JS小游戏-仙剑翻牌

html5+canvas+纯原生javascript+audio开发仙剑记忆力翻牌游戏 感觉又是在发小白文,没办法,我还在不断学习中。前端进阶计划再一次因为学习难度,项目经验而告吹。 好在,我在缓慢进步~ 文章内容来源我网络上看到别人用js和css3写的仙剑记忆力翻牌游戏,感觉自己可以学到些什么。所以就有了一天一夜的奋斗成果,写的过程,感觉好坎坷,又是查看canvas的API,又是设置相关变量,又得摸索坑爹费脑的游戏逻辑! 说实话,人家那个玩的挺爽,想过很炫。换成我做得,不说了 阅读详情

游戏介绍:

这是一个翻牌配对游戏,共十关。

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="images/card' + leveldata[i]['cardno'] + '.jpg"></div>';
            cardhtml += '<div class="list flip"><img src="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);

js实现翻牌游戏 js实现翻牌游戏呦 阅读详情

相关推荐

句子翻牌网页版小游戏:使用JavaScript实现

在本文章中,我将向您展示如何使用JavaScript创建一个句子翻牌的网页版小游戏。如果有两张卡片被翻开,函数将比较这两张卡片的句子内容。如果两张卡片的句子内容相同,表示找到了一对匹配的卡片,在游戏中,您可以点击卡片来翻转它们,并尝试找到匹配的句子。当您找到所有匹配的句子时,将会收到胜利的提示。如果两张卡片的句子内容不相同,函数将锁定游戏板,等待1秒后将卡片翻转回来,并重置。文件,并与之前的HTML文件一起在浏览器中打开,您就可以玩句子翻牌小游戏了!如果所有句子都被匹配成功,游戏结束,弹出胜利的提示。

CyberOI的博客 198

原生JS实现记忆翻牌小游戏

html代码 <div id="game"> <!-- div.block*16>div.pic --> </div> css代码 * { padding: 0; margin: 0; } #game { width: 600px; height: 600px; margin: 0 auto; } .block { ...

W Y L 1989

【扑克牌】翻牌游戏-微信小程序开发流程详解

还记得小时候玩过扑克牌游戏吗,这样的玩法可多了,除了玩过叠牌,还能玩翻牌,在这里把翻牌游戏给轻松实现了,适合新手做来玩玩很不错,能训练记忆,感兴趣的话来看看实现过程。

5397

js简易翻牌小游戏

js简易翻牌小游戏–学习练手 js: 将小图标存入数组中,一共8组。 //包含所有卡片的数组 var cardList = ['fa-diamond', 'fa-diamond', 'fa-paper-plane-o', 'fa-paper-plane-o', 'fa-anchor', 'fa-anchor', 'fa-bolt', 'fa-bolt', 'fa-cube', 'fa-cube...

weixin_44907289的博客 3279

js实现游戏(翻牌游戏)

js实现游戏(翻牌游戏) 运用了 数组(二维)的 重新 洗牌 setinterval 刷新技术

用js实现的翻牌游戏

完全用js实现的一个简单的翻牌游戏,不错的哦!

JavaScript小项目-翻卡牌小游戏(有完整代码)

一款由JavaScript制作的小游戏,适合初学者学习。感兴趣的可以自己添加小功能,提供难度。

lxl2092828212的博客 2323

html5+canvas+audio开发仙剑记忆翻牌小游戏

使用html5+canvas+纯原生javascript+audio音频开发,游戏有bug

经典小游戏

脚 本 之 家 www.jb51.net 脚本云 专题 素材下载 电子书 软件下载 源码下载 服务器常用软件 a5交易 网页制作 网络编程 脚本专栏 脚本下载 数据库 CMS教程 电子书籍 平面设计 媒体动画 操作系统 网站运营 网络安全 在线手册 JavaScript ASP.NET PHP编程 AJAX相关 正则表达式 ASP编程 JSP编程 编程100...

小屁孩大帅-保密的博客 807

纯html+js翻牌抽奖

纯html+js,九张牌 ,其中一张有奖,有翻牌效果动画,可以自行研究开发

js实现翻牌小游戏

主要为大家详细介绍了js实现翻牌小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

fedora中linux改成英文,Linux_fedora21系统怎么把英语改变中文?,相信大家用惯windows系统的朋友 - phpStudy...

fedora21系统怎么把英语改变中文?相信大家用惯windows系统的朋友们,刚接触linux系统,将会一头雾水。Ubuntu还好一点,但是fedora21,刚开始用就不会很好用,英文不好的,总是想把环境英语改成汉语1、首先,我们要先启动fedora21系统。启动方法很简单,和平常系统的启动没有区别2、这个就是fedora21的用户界面。空空如也对吧,我们经常点击的计算机图标没有了,回收站没有了...

weixin_39990410的博客 175

JS小游戏-翻牌

游戏介绍: 这是一个翻牌配对游戏,共十关。 1.游戏随机从42张牌中抽取9张进行游戏,每组为2张相同的牌,共18张牌。 2.连续翻到两张相同的为胜利,当9组全部翻到则过关。如不是翻到连续两张相同的,则需要重新翻。 3.游戏共有10关,在规定时间内通过为挑战成功。 4.如果某关在规定时间内没有通过,则会从当前关继续游戏。 5.需要支持html5的浏览器,chrome与firefox效果最好。

JavaScript小游戏--翻牌记忆游戏

翻牌记忆游戏源码 1.有8张图片,每张图片要放两次,生成如下数组,长为16,[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7] 其中两两相同的代表两张相同的图片,0对应文件夹image下的0.jpg,其余类似。 var randArr = []; for(var j = 0; j < 2;j++){ for ...

weixin_34293141的博客 1362

RedHat 9 替换yum源镜像

引言:我们个人通常使用的红帽系统yum源是需要注册付费的,所以在使用yum源安装一些软件时无法正常安装(例如:MySQL),这时我们就需要将yum源替换为CentOS对应的源,以实现在红帽系统中正常安装软件。

YUJIAOZHU666的博客 3738

Neo4j桌面版导入CVS文件

我们的relation.csv是这样的。

m0_53573725的博客 817

JavaScript 实战-翻牌游戏 - H5和CSS3 (1)

前言 有段子说学习xxx语言从入门到放弃,当然这只是一句调侃,说明学习的门槛还是存在的,比如底层的C和汇编,难度不小,要是不结合系统知识什么东西出来,的确学起来过于枯燥,有编程天赋的人除外。如果想学得有趣不乏味,语言能简单、容易上手,开发所用的工具也不复杂,那么JavaScript是一个不错的选择。JavaScript 从一款不受待见的“早产”编程语言,逐渐上升开发语言排行榜前列,正可谓时势造英雄,Java也从版本8开始吸取函数式编程语言的优秀特性引入了Lambda表达式。在这一系列文章中,我们使用Java

蒾途尐書瞳的专栏 5606

MDK5 Debug调试方法总结

MDK5 Debug调试方法总结

m0_70748084的博客 2万+

Js 简单实现翻牌小游戏

1.简介 非常简单的一个网络消消乐翻牌小游戏的实现,代码量较少,不过遇到的bug和自行开发的步骤十分有纪念意义。 2.核心代码块 生成随机数列,确定图片随机分布 function getImgIndex(is){ var index = parseInt(Math.random()*8)+1; if(is[index] < 2){ is[index]++; } else { index = getImgIndex(is); } return

siebo的博客 5057

阿里平头哥与华为芯片的比较

阿里平头哥与华为芯片代表了中国AI芯片领域的两种典型发展路径:平头哥通过兼容CUDA生态快速切入市场,以较低成本提供接近国际水平的AI算力;华为则坚持全栈自研路线,构建从芯片到框架的完整技术体系,更注重供应链安全和自主可控。从短期来看,平头哥PPU在单卡性能参数上全面超越昇腾910B,接近英伟达H20水平,且成本优势明显,有望在云服务和互联网应用领域取得更大市场份额。而华为昇腾则凭借全栈自研和端边云协同优势,在政企市场和科研领域更具竞争力。

shao.bing的专栏 3984

CocosCreator3.8实战指南:动态字体与位图字体性能优化技巧

本文深入解析CocosCreator3.8中系统字体、动态字体(TTF)与位图字体(FNT)的核心差异与性能表现。针对动态字体运行时解析开销大、内存占用高的痛点,提供了字体子集化、共享资源等优化技巧;同时详细介绍了位图字体制作流程及其在渲染速度、内存可控性上的绝对优势,并给出跨平台场景下的字体选型与优化策略,帮助开发者有效提升游戏性能。

weixin_29006701的博客 563
上一篇: php __call 与 __callStatic
下一篇: memcached 常用命令及使用说明
傲雪星枫
博客等级 码龄15年 2307粉丝 306原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值