废柴勇士(据说没有人能坚持37秒)

news2024/9/20 22:42:52

欢迎来到程序小院

废柴勇士

玩法:点击屏幕下方左右按键击杀怪物,怪物会在左右方向同时来袭,快速点击按钮进行击杀怪物,看您能够坚持多少秒,
据说还没有能够坚持37秒,快去击杀怪物挑战吧^^。

开始游戏icon-default.png?t=N7T8https://www.ormcc.com/play/gameStart/194

html

<canvas id="gameCanvas" width="480" height="800"></canvas>

css

h2.title{
  display: block;
  margin: 50px auto;
  text-align: center;
}

js

var heroLayer = null;
var monsterLayer = null;
var explosionLayer = null;

var isFirstPlay = true; //是否第一次玩这个游戏
var prepareMonsterArr = [];//即将出现的怪物数组
var monsterArray = [];//已经出现的怪物
var monsterShadowArray = [];//所有已出现的怪物的影子
var delArray = [];//被砍死的怪物,准备删除
var touchLocationX = null;//触摸的X坐标位置
var positionY = null;//怪物和hero的Y坐标
var bgSprite = null; //背景图片
var shadowBatchNode = null;
var heroSprite = null; //主角
var heroShadow = null;//主角的影子
var targetX = 0;//怪物要到达的X坐标
var durationLabel = null;//时间标签
var duration = 0;//游戏坚持的时间
var hpMax = 3;
var hpLabel = null;//血量标签
var hpProgress = null;
var hp = 0;//血量
var hpNode = null;
var scoreLabel = null;//分数标签
var score = 0;//分数
var isGameOver = false;//游戏是否结束
var coolDowan = 0;//冷却时间
var skillProgress = null;//技能冷却进度条

var isSkillPeriod = false; //是否在释放技能期间
var attackDir = 0;//hero攻击的方向,0表示不再攻击,1表示向左攻击,2表示向右攻击
var response = null;
var responsefailedLabel;//请求网络失败时显示的内容
var isSharelayer = false;//是否是分享界面

var BgLayer = cc.Layer.extend({
    ctor:function(){
        this._super();
        bgSprite = cc.Sprite.create(res.bg1_jpg);
        bgSprite.setPosition(cc.p(240,400));
        bgSprite.setScale(1.6);
        this.addChild(bgSprite);
    }
});
/**
 * 第一次游戏时的引导过程
 */
guidePrecess:function(){
    var noticeNode = cc.Node.create();
    var noticeSprite = cc.Sprite.create(res.notice_board_png);
    noticeSprite.setPosition(cc.p(240,840));//提示窗初始化在屏幕上方
    noticeNode.addChild(noticeSprite);

    noticeSprite.runAction(cc.Sequence.create(cc.MoveTo.create(0.3,cc.p(240,400)),
        cc.MoveTo.create(0.05,cc.p(240,420)),
        cc.MoveTo.create(0.05,cc.p(240,400))));//提示窗口移动到屏幕中间

    //添加一个巫妖精灵
    var lichSprite = cc.Sprite.create(res.monster6_1_png);
    lichSprite.setPosition(cc.p(-lichSprite.getContentSize().width/2,450));//初始位置在屏幕中间左侧外
    noticeNode.addChild(lichSprite);
    this.addChild(noticeNode,3);

    var lichMoveTo = cc.moveTo(0.2,cc.p(lichSprite.getContentSize().width/2,450));
    var lichAnim = cc.Animation.create();
    for(var i = 1; i <= 4; i++){
        var frame = "/default/game/fcys/res/monster6_" + i + ".png";
        lichAnim.addSpriteFrameWithFile(frame);
    }
    lichAnim.setDelayPerUnit(0.15);
    lichSprite.runAction(cc.RepeatForever.create(cc.Animate.create(lichAnim)));//播放帧动画
    lichSprite.runAction(cc.Sequence.create(cc.DelayTime.create(0.4),
    lichMoveTo,cc.CallFunc.create(noticeCallback)));//移动到屏幕左侧内,回调noticeCallback函数
}
//定时更新函数,更新游戏坚持时间、冷却时间、准备出现的怪物
updateDuration:function(dt){
    duration += dt;
    coolDowan += dt;
    if(coolDowan <= 30){
        //var to = cc.ProgressTo.create(0.01, (30 - coolDowan) / 30 * 100);
        //skillProgress.runAction(to);
    }else{
        coolDowan = 30;
    }

    var tempArr = [];
    for(var i = 0; i < prepareMonsterArr.length; i++){
        if(prepareMonsterArr[i].time <= duration){
            tempArr.push(prepareMonsterArr[i]);//即将出现的怪物的属性添加到tempArr数组中
        }else{
            break;
        }
    }

    for(var i = 0; i < tempArr.length; i++){
        this.createMonster(tempArr[i]);//创建即将出现的怪物
    }
    deleteChildFromArray(prepareMonsterArr,tempArr);//从prepareMonsterArr中删除已创建的怪物
    if(duration >= 88){
        gameOver();
    }
}
/**
 * 创建怪物
 * @param monsterData 怪物的属性
 */
createMonster:function(prepareMonsterData){
    var monsterSprite = cc.Sprite.create("/default/game/fcys/res/monster" + 
    prepareMonsterData.type + "_1.png");//根据类型选择对应的图片
    monsterSprite.setScale(1.0/0.8);
    monsterSprite.setAnchorPoint(cc.p(0.5, 0));
    var dir = Math.random();
    if(Math.random() < prepareMonsterData.direction){
        targetX = 180;
        monsterSprite.setPosition(cc.p(-30,positionY - 55));
    }else{
        targetX = 300;
        monsterSprite.setPosition(cc.p(510,positionY - 55));
        monsterSprite.setFlippedX(true);//右边出现的怪物镜像显示
    }
    /*if(prepareMonsterData.direction == 0){//如果怪物出现的方向是随机的,则产生一个1或2的随机数,
    1表示左边,2表示右边
        prepareMonsterData.direction = Math.floor(Math.random() * 10 % 2 + 1);
    }
    if(prepareMonsterData.direction == 1){//从左边出现的怪物
        targetX = 180;
        monsterSprite.setPosition(cc.p(-30,positionY - 65));
    }else if(prepareMonsterData.direction == 2){//从右边出现的怪物
        targetX = 300;
        monsterSprite.setPosition(cc.p(510,positionY - 65));
        monsterSprite.setFlippedX(true);//右边出现的怪物镜像显示
    }*/


    monsterArray.push(monsterSprite);//已出现的怪物添加到monsterArray数组中

    monsterLayer.getChildByTag(prepareMonsterData.type).addChild(monsterSprite,1,
    prepareMonsterData.type);//添加怪物到Layer上,TAG即为怪物的类型
    //不同的怪物类型初始化不同的血量
    if(prepareMonsterData.type == 1 || prepareMonsterData.type ==3
        || prepareMonsterData.type == 4 || prepareMonsterData.type == 5){
        monsterSprite.setUserData(monsterUserData(1,1));
    }else{
        monsterSprite.setUserData(monsterUserData(2,2));
    }
    var walkLine = createMonsterWalkLine(prepareMonsterData.type,prepareMonsterData.rampageProb);

    //根据怪物类型设置怪物的行走路线和Action
    if(prepareMonsterData.type ==1 || prepareMonsterData.type == 2
        || prepareMonsterData.type == 5 || prepareMonsterData.type == 6){
        monsterSprite.runAction(createMonsterWalkAnimate(prepareMonsterData.type));
        monsterSprite.runAction(cc.Sequence.create(walkLine, cc.CallFunc.create(monsterAttackCallback)));
    }else if(prepareMonsterData.type ==3 || prepareMonsterData.type ==4){
        monsterSprite.runAction(walkLine);
    }
}

源码icon-default.png?t=N7T8https://www.ormcc.com/

需要源码请关注添加好友哦^ ^

转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1132756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宏集案例 | Panarama SCADA平台在风电场测量的应用,实现风电场的高效管理!

文章来源&#xff1a;宏集工业物联网 阅读原文&#xff1a;https://mp.weixin.qq.com/s/MLYhBWiWx7qQSApx_3xhmA 宏集Panorama SCADA平台在风电场测量的应用 宏集方案 01应用背景 随着煤碳、石油等能源的逐渐枯竭&#xff0c;人类越来越重视可再生能源的利用。风能作为一种…

【电路笔记】-平均电压和均方根电压(RMS Voltage)

平均电压和均方根电压&#xff08;RMS Voltage&#xff09; 文章目录 平均电压和均方根电压&#xff08;RMS Voltage&#xff09;1、概述2、平均电压3、均方根电压&#xff08;RMS Voltage&#xff09;4、总结 1、概述 在 DC 状态下&#xff0c;只能对电压值进行一种定义&…

javascript原生态xhr上传多个图片,可预览和修改上传图片为固定尺寸比例,防恶意代码,加后端php处理图片

//前端上传文件 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml" lang"UTF-8"></html> <html><head><meta http-equiv"Content-Type" content"text/html;charsetUTF-8;"/><title…

微信小程序通过获取键盘高度解决键盘弹出挡住输入框问题

我在这里写了个输入名称的头 在电脑上看着这输入效果还是挺优秀的 但当真的运行在手机上时 就会发现 这键盘一弹出来 就挡住我们的输入框了 这里 我们可以这样实现 在data中定义一个数值类型 叫 focusHeight 然后 给我们弹层 加上一个固定定位 然后 通过 focusHeight来控制…

【MySQL】用户与权限管理

文章目录 一、用户管理1、用户信息表2、创建用户3、删除用户4、修改用户密码 二、权限管理1、MySQL 权限2、给用户授权3、回收用户权限 一、用户管理 之前为了方便&#xff0c;我们学习 MySQL 时统一使用的都是 root 账号进行登录&#xff0c;但在实际的开发场景中必然是需要进…

基于SpringBoot的水果销售网站

基于SpringBootVue的水果销售网站系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven角色&#xff1a;管理员、商家、用户 系统展示 主页 水果详情 可直接购买&#xff0c;…

【Overload游戏引擎细节分析】standard材质Shader

提示&#xff1a;Shader属于GPU编程&#xff0c;难写难调试&#xff0c;阅读本文需有一定的OpenGL基础&#xff0c;可以写简单的Shader&#xff0c;不适合不会OpenGL的朋友 一、Blinn-Phong光照模型 Blinn-Phong光照模型&#xff0c;又称为Blinn-phong反射模型&#xff08;Bli…

鸡尾酒学习——长岛冰茶

长岛冰茶 1、材料&#xff1a;冰块&#xff08;或者雪莲&#xff09;、白朗姆、伏特加、龙舌兰、金酒、柠檬、君度或者白兰地、可乐&#xff1b; 2、口感&#xff1a;酸甜苦口味&#xff0c;酒的苦涩较为明显&#xff08;怀疑是自己放了过多的柠檬汁导致苦涩感明显&#xff09…

CrossOver 23.6 让Mac可以运行Windows程序的工具

在当今数字化时代&#xff0c;虚拟机技术被广泛应用于软件开发、系统测试、网络安全等领域。虚拟机提供了一个隔离的虚拟环境&#xff0c;使得我们能够在一台物理计算机上同时运行多个操作系统和应用程序。下面我们就来看虚拟机软件怎么安装&#xff0c;虚拟机怎么使用吧&#…

强制指定变量地址与局部优化

目录 一、强制编译器将变量分配到指定地址1. 编译器AC5.0与AC6.0有区别 二、 Keil/IAR局部优化1 IAR2.Keil AC5.03.Keil AC6.0 三 arm-none-eabi-gcc 下指定固定地址 一、强制编译器将变量分配到指定地址 1. 编译器AC5.0与AC6.0有区别 二、 Keil/IAR局部优化 1 IAR #pragma …

RTL SDR的PYTHON开发环境搭建

不得不说RTL SDR真是神器&#xff0c;直接把SDR的入门门槛拉低到了几十块钱。对于RTL SDR的学习开发&#xff0c;有大佬写的《Software_Defined_Radio_using_MATLAB_Simulink_and_the_RTL-SDR》&#xff0c;另外&#xff0c;除了MATLAB&#xff0c;近些年爆火的PYTHON当然也是可…

电厂数据可视化三维大屏展示平台加强企业安全防范

园区可视化大屏是一种新型的信息化手段&#xff0c;能够将园区内各项数据信息以图像的形式直观呈现在大屏幕上&#xff0c;便于管理员和员工进行实时监控、分析和决策。本文将从以下几个方面介绍园区可视化大屏的作用和应用。 VR数字孪生园区系统是通过将实际园区的各种数据和信…

2023年【起重信号司索工(建筑特殊工种)】试题及解析及起重信号司索工(建筑特殊工种)操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重信号司索工(建筑特殊工种)试题及解析根据新起重信号司索工(建筑特殊工种)考试大纲要求&#xff0c;安全生产模拟考试一点通将起重信号司索工(建筑特殊工种)模拟考试试题进行汇编&#xff0c;组成一套起重信号司索…

leetcode 503. 下一个更大元素 II、42. 接雨水

下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&…

EMC简述01

电磁兼容性&#xff08;EMC&#xff1a;Electromagnetic Compatibility&#xff09; 电磁兼容性&#xff08;EMC&#xff09;主要分为两种 一种是设备本身的电磁噪声对其他设备或人体带来的影响&#xff08;电磁干扰&#xff0c;EMI&#xff1a;Electromagnetic Interference…

我们在 Linux 环境中用 C 编程时,如果对文件读写,Linux 会自动给文件加锁嘛?以及怎么加文件锁?

task1: 验证Linux不会自动给文件加锁 先说结论&#xff0c;结论是不会 我写了一个这样的程序 #include <stdio.h> #include <unistd.h>int main() {const char* pathname "your_file_pathname.txt";FILE* file NULL;int count 100;if(access(pathn…

Linux 网络巨型帧设置方法

1.指令设置 sudo ifconfig eth0 mtu 8192 2.修改系统文件 sudo vim /etc/dhcp/dhclient.conf

Linux创建临时文件mkstemp()tmpfile()

有些程序需要创建一些临时文件&#xff0c;仅供其在运行期间使用&#xff0c;程序终止后即行删除。 很多编译器程序会在编译过程中创建临时文件。GNU C 语言函数库为此而提供了一系列库函数。&#xff08;之所以有“一系列”的库函数&#xff0c;部分原因是由于这些函数分别继…

opencalib中lidar2camera安装记录

目录 一、opencalib安装 二、lidar2camera的安装 三、测试运行 四、出现过的问题 一、opencalib安装 代码地址&#xff1a;https://github.com/PJLab-ADG/SensorsCalibration/blob/master/README.md # pull docker image sudo docker pull scllovewkf/opencalib:v1 # Aft…

DBOW概要理解与记录

前言 DBOW作为一种视觉回环技术被广泛应用在各类VSLAM框架中&#xff0c;之前的经验主要集中在使用和抽象理解层面&#xff0c;近期花了一些时间仔细阅读了相关论文和源码&#xff0c;这里做一些记录。 两个关键概念 Vocabulary 通过预先训练得到的词汇库&#xff0c;以树状…