骨髓小游戏

2023-10-27

欢迎来到程序小院

骨髓

玩法:
骨髓推塔小游戏,敌方士兵进入到我方高塔会毁坏建筑,我方可派兵前去迎战,我方:骑兵、长枪兵、弓兵、敌法:骷髅骑兵、骷髅长枪兵、
骷髅弓兵,快去消灭敌人吧^^。

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

html

<div id="game"></div>

css

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

js

var startText;
var restartText;
var welcome;
var gameover;
var isWin = true;

var bootState = function(game){
    this.preload=function(){
        game.load.image('loading','/default/game/gusui/loading.jpg');
    };
    this.create=function(){
        game.state.start('loader');
    };
}

var loaderState=function(game){
    var progressText;
    this.init=function(){
        var sprite=game.add.image(game.world.centerX,game.world.centerY,'loading');
        sprite.anchor={x:0.5,y:0.5};
        progressText=game.add.text(game.world.centerX,game.world.centerY+30,'0%',
        {fill:'#fff',fontSize:'16px'});
        progressText.anchor={x:0.5,y:0.5};
    };
    this.preload=function(){
        game.load.image('back','/default/game/gusui/backgrounds/back.png');//背景
        game.load.image('sky','/default/game/gusui/backgrounds/sky.png');
        game.load.image('rock','/default/game/gusui/backgrounds/rock.png');
        game.load.spritesheet('tower','/default/game/gusui/backgrounds/tower.png',139,261.5);
        game.load.spritesheet('stones','/default/game/gusui/backgrounds/stones.png',170,128);
        双方士兵
        for(var i=1; i<=18; i++) {
            game.load.image('m1_' + i,'/default/game/gusui/sprites/m1/' + i + '.png');
            game.load.image('m2_' + i,'/default/game/gusui/sprites/m2/' + i + '.png');
            game.load.image('m3_' + i,'/default/game/gusui/sprites/m3/' + i + '.png');
            game.load.image('s1_' + i,'/default/game/gusui/sprites/s1/' + i + '.png');
            game.load.image('s2_' + i,'/default/game/gusui/sprites/s2/' + i + '.png');
            game.load.image('s3_' + i,'/default/game/gusui/sprites/s3/' + i + '.png');
        }

        game.load.spritesheet('buttons','/default/game/gusui/buttons/buttons.png',50,50);
        game.load.spritesheet('buttons2','/default/game/gusui/buttons/buttons2.png',300,113);

        game.load.onFileComplete.add(function(progress){
            progressText.text=progress+'%';
        });

    };
    this.create=function(){
        if (progressText.text=="100%") {
            game.state.start('welcome');
        }
    };
}

var welcomeState = function(game){
    this.create=function(){
        var back = game.add.image(0,0,'back');
        back.width=512;
        back.height=256;
        startText=game.add.text(game.world.centerX,game.world.centerY,'Click anywhere on the 
        screen to start',{fill:'#000',fontSize:'21px'});
        startText.anchor={x:0.5,y:0.5};
        game.input.onDown.addOnce(Down, this);
    };
}
var gameoverState = function(game){
    this.create=function(){
        var back = game.add.image(0,0,'back');
        back.width=512;
        back.height=256;
        var imgLost = game.add.sprite(0,0,'buttons2');
        imgLost.x = game.world.centerX;
        imgLost.y = game.world.centerY;
        imgLost.anchor={x:0.5,y:0.5};
        imgLost.alpha = 0;
        var imgWin = game.add.sprite(0,0,'buttons2');
        imgWin.frame = 1;
        imgWin.x = game.world.centerX;
        imgWin.y = game.world.centerY;
        imgWin.anchor={x:0.5,y:0.5};
        imgWin.alpha = 0;
        if (isWin) {imgWin.alpha = 1;} else {imgLost.alpha = 1;} //可以在背景加上双方领地破败
        // restartText=game.add.text(game.world.centerX,game.world.centerY,
        'Click anywhere on the screen to restart',{fill:'#fff',fontSize:'16px'});
        // restartText.anchor={x:0.5,y:0.5};
        game.input.onDown.addOnce(reDown, this);
    };
}

var gameState = function(game){

    var tower;//我方高塔
    var nest;//怪物巢穴
    var rock;
    var walking = true;//是否行走
    var walkmoving = true;//是否播放动态图
    var m1;//我方骑兵
    var m2;//我方长枪兵
    var m3;//我方弓兵
    var s1;//骷髅骑兵
    var s2;//骷髅长枪兵
    var s3;//骷髅弓兵

    var m1_count = 0;//我方士兵限制出兵数量 防止程序出错 \\^_^//
    var m2_count = 0;
    var m3_count = 0;

    var s_m_i=0;//骑兵接触

    var m1_=[];
    var m2_=[];
    var m3_=[];
    ///
    var s1_=[];
    var s2_=[];
    var s3_=[];
    //
    var s_f;
    this.create=function(){
        for(var i=0; i<18; i++) {
            m1_[i]= game.add.sprite(-100,0,'m1_' + (i+1));
            m2_[i]= game.add.sprite(-100,0,'m2_' + (i+1));
            m3_[i]= game.add.sprite(-100,0,'m3_' + (i+1));
            s1_[i]= game.add.sprite(-100,0,'s1_' + (i+1));
            s2_[i]= game.add.sprite(-100,0,'s2_' + (i+1));
            s3_[i]= game.add.sprite(-100,0,'s3_' + (i+1));
        }

        var sky = game.add.tileSprite(0, 0, 335, 87, 'sky').autoScroll(9,0);//天空动态

        var back = game.add.image(0,0,'back');//战场背景
        back.width=512;
        back.height=256;

        tower = game.add.sprite(0,0,'tower');// frame = 0 //我方高塔
        tower.scale.setTo(.9);
        tower.x = 330;

        rock = game.add.image(0,0,'rock');
        rock.scale.setTo(.9);
        rock.x=260;
        rock.y=-10;
        nest = game.add.sprite(0,0,'stones');//怪物巢穴
        nest.scale.setTo(.9);
        nest.x=150;
        nest.y=-15;

        创建士兵组群
        m1=game.add.group();
        m1.enableBody=true;

        m2=game.add.group();
        m2.enableBody=true;

        m3=game.add.group();
        m3.enableBody=true;
        ///
        s1=game.add.group();
        s1.enableBody=true;

        s2=game.add.group();
        s2.enableBody=true;

        s3=game.add.group();
        s3.enableBody=true;

//创建士兵
        var btn_m1 = game.add.sprite(0,0,'buttons');
        btn_m1.frame=0;//骑兵图标
        btn_m1.scale.setTo(.8);
        btn_m1.x = game.width - btn_m1.width;
        btn_m1.y = game.height - btn_m1.height;
        btn_m1.inputEnabled = true;
        btn_m1.events.onInputDown.add(function(){
            //这里创建骑兵
            if (m1_count > 1) {return false;}//当骑兵数量为2 则不可再生成骑兵
            var m1_m=m1.create(400,0,'m1_1');
            m1_count++;//骑兵数量累加1
            for (var i = 0; i < m1.length; i++) {
                m1.getChildAt(i).y = game.height - 40 - m1.getChildAt(i).height;
                m1.getChildAt(i).scale.x = -1;
                m1.getChildAt(i).texture = m1_[0].texture;
            }
        },this);

        var btn_m2 = game.add.sprite(0,0,'buttons');
        btn_m2.frame=1;//长枪兵图标
        btn_m2.scale.setTo(.8);
        btn_m2.x = game.width - btn_m1.width*2;
        btn_m2.y = game.height - btn_m2.height;
        btn_m2.inputEnabled = true;
        btn_m2.events.onInputDown.add(function(){
            //这里创建长枪兵
            if (m2_count > 1) {return false;}
            var m2_m=m2.create(400,0,'m2_1');
            m2_count++;
            for (var i = 0; i < m2.length; i++) {
                m2.getChildAt(i).y = game.height - 40 - m2.getChildAt(i).height;
                m2.getChildAt(i).scale.x = -1;
                m2.getChildAt(i).texture = m2_[0].texture;
            }
        },this);

        var btn_m3 = game.add.sprite(0,0,'buttons');
        btn_m3.frame=2;//弓兵图标
        btn_m3.scale.setTo(.8);
        btn_m3.x = game.width - btn_m1.width*3;
        btn_m3.y = game.height - btn_m3.height;
        btn_m3.inputEnabled = true;
        btn_m3.events.onInputDown.add(function(){
            //这里创建弓兵
            if (m3_count > 1) {return false;}
            var m3_m=m3.create(400,0,'m3_1');
            m3_count++;
            for (var i = 0; i < m3.length; i++) {
                m3.getChildAt(i).y = game.height - 40 - m3.getChildAt(i).height;
                m3.getChildAt(i).scale.x = -1;
                m3.getChildAt(i).texture = m3_[0].texture;
            }
        },this);

        s_f=Array(50,170);//楼层数据

        // 随机时间随机创建敌对兵种
        game.time.events.repeat(Phaser.Timer.SECOND * game.rnd.between(2,4), 100, function(){

            var r = game.rnd.between(1,3);
            //document.title = r;
            var s_sk;
            var s_sk_ = [];
            var s_name = "";
            switch(r)
            {
                case 1:
                    s_name = "s1_1";
                    s_sk = s1;
                    s_sk_ = s1_;
                    break;
                case 2:
                    s_name = "s2_1";
                    s_sk = s2;
                    s_sk_ = s2_;
                    break;
                default:
                    s_name = "s3_1";
                    s_sk = s3;
                    s_sk_ = s3_;
            }

            var skeleton=s_sk.create(30,50,s_name);
            skeleton.scale.x = -1;
            skeleton.texture = s_sk_[0].texture;
            skeleton.f_i=0;
            skeleton.i=0;

        }, this);//此处创建一百个敌对士兵

//
//     //m1.y=170; 正常公式
//     //alert(game.height-m1.height-170); 40 == 底部距离
//
    };
    var dt=0;
    var m1_i=0;
    var m2_i=0;
    var m3_i=0;
    var m1_m_i=5;//动画
    var m2_m_i=5;
    var m3_m_i=5;
    var s1_m_i=5;//动画
    var s2_m_i=5;
    var s3_m_i=5;
    var m1_d_i=14;//死亡
    var m2_d_i=14;
    var m3_d_i=14;
    var s1_d_i=14;//死亡
    var s2_d_i=14;
    var s3_d_i=14;
    var s1_i=0;
    var s2_i=0;
    var s3_i=0;
    var t_hp = 5;
    var n_hp = 10;
    this.update=function(){

        if (m1_count < 0) {m1_count=0;}
        if (m2_count < 0) {m2_count=0;}
        if (m3_count < 0) {m3_count=0;}

        for (var i = 0; i < m1.length; i++) {//骑兵进入怪物巢穴
            if (walking) m1.getChildAt(i).x--;
            if (m1.getChildAt(i).x < 0) {
                n_hp--;
                nest.frame++;
                m1.getChildAt(i).destroy();
                m1_count--;
            }
        }
        for (var i = 0; i < m2.length; i++) {//长枪兵进入怪物巢穴
            if (walking) m2.getChildAt(i).x--;
            if (m2.getChildAt(i).x < 0) {
                n_hp--;
                nest.frame++;
                m2.getChildAt(i).destroy();
                m2_count--;
            }
        }
        for (var i = 0; i < m3.length; i++) {//弓兵进入怪物巢穴
            if (walking) m3.getChildAt(i).x--;
            if (m3.getChildAt(i).x < 0) {
                n_hp--;
                nest.frame++;
                m3.getChildAt(i).destroy();
                m3_count--;
            }
        }
        //双方士兵进入敌方领地
        for (var i = 0; i < s1.length; i++) {//骷髅骑兵进入我方防御塔
            if (walking) s1.getChildAt(i).x++;
            if (s1.getChildAt(i).x >= rock.x && s1.getChildAt(i).y == s_f[0]-15) {
                s1.getChildAt(i).i++;
                if (s1.getChildAt(i).i==1) {s1.getChildAt(i).f_i++}
                s1.getChildAt(i).x = 25;
                s1.getChildAt(i).y = s_f[s1.getChildAt(i).f_i]-15;
            }
            if (s1.getChildAt(i).x > tower.x+75) {
                t_hp--;
                tower.frame++;
                s1.getChildAt(i).destroy();
            }
        }
        for (var i = 0; i < s2.length; i++) {//骷髅长枪兵进入我方防御塔
            if (walking) s2.getChildAt(i).x++;
            if (s2.getChildAt(i).x >= rock.x && s2.getChildAt(i).y == s_f[0]) {
                s2.getChildAt(i).i++;
                if (s2.getChildAt(i).i==1) {s2.getChildAt(i).f_i++}
                s2.getChildAt(i).x = 25;
                s2.getChildAt(i).y = s_f[s2.getChildAt(i).f_i];
            }
            if (s2.getChildAt(i).x > tower.x+75) {
                t_hp--;
                tower.frame++;
                s2.getChildAt(i).destroy();
            }
        }
        for (var i = 0; i < s3.length; i++) {//骷髅弓兵进入我方防御塔
            if (walking) s3.getChildAt(i).x++;
            if (s3.getChildAt(i).x >= rock.x && s3.getChildAt(i).y == s_f[0]) {
                s3.getChildAt(i).i++;
                if (s3.getChildAt(i).i==1) {s3.getChildAt(i).f_i++}
                s3.getChildAt(i).x = 25;
                s3.getChildAt(i).y = s_f[s3.getChildAt(i).f_i];
            }
            if (s3.getChildAt(i).x > tower.x+75) {
                t_hp--;
                tower.frame++;
                s3.getChildAt(i).destroy();
            }
        }
        /双方领地败亡

        if (n_hp==0) {isWin=true;game.state.start("gameover");}
        if (t_hp==0) {isWin=false;game.state.start("gameover");}

        game.physics.arcade.collide(s1, m1, function(s1,m1){//骑兵同归于尽
            s1.destroy();
            m1.destroy();
            m1_count--;
            s_m_i++;
            document.title = s_m_i;
            document.title = m1_count;
        }, null, this);
        game.physics.arcade.collide(s2, m2, function(s2,m2){//长枪同归于尽
            s2.destroy();
            m2.destroy();
            m2_count--;
            document.title = m2_count;
        }, null, this);
        game.physics.arcade.collide(s3, m3, function(s3,m3){//弓兵同归于尽
            s3.destroy();
            m3.destroy();
            m3_count--;
            document.title = m3_count;
        }, null, this);

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

骨髓小游戏 的相关文章

随机推荐

  • 聊一聊.NET的网页抓取和编码转换

    在本文中 你会了解到两种用于 HTML 解析的类库 另外 我们将讨论关于网页抓取 编码转换和压缩处理的知识 以及如何在 NET 中实现它们 最后进行优化和改进 文章目录 1 背景 2 网页抓取 3 编码转换 4 网页压缩处理 5 代码优化
  • ElasticSearch+Kibana on K8s 讲解与实战操作(版本7.17.3)

    文章目录 一 概述 二 ElasticSearch 节点类型与作用 三 K8s 集群部署 四 ElasticSearch on K8s 开始部署 1 下载安装包 2 构建镜像 3 修改yaml编排 4 开始部署 5 测试 6 elastic
  • 5. 筛选和过滤

    文章目录 筛选和过滤 条件筛选 提取 抽样 最值 Index np argmax argmin np argsort 筛选和过滤 这小节与索引和切片有点类似 但倾向于从 整体 中统一筛选出 符合条件 的内容 而索引和切片更多的是依照 某种方
  • C++编译警告:warning C4305: 'initializing' : truncation from 'const double' to 'float'

    float a 4 14E 3 float a 3 1 类似的语句在编译的时候 会产生如下警告 warning C4305 initializing truncation from const double to float 虽然说不会导致
  • Apriori算法详解之【一、相关概念和核心步骤】

    感谢红兰整理的PPT 简单易懂 现在将其中精彩之处整理 与大家分享 一 Apriori算法简介 Apriori算法是一种挖掘关联规则的频繁项集算法 其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集 Apriori 先验的
  • 36奇迹发布网_8点1氪:王思聪已被取消限制消费令;拼多多大跌近23%,下一季度会继续“百亿补贴”;苹果发布千元iPhone11智能手机壳...

    11月20晚间 查询中国执行信息公开网发现 王思聪已不在限制消费人员名单之中 文 梦想家菜菜 邹黄晶 整理 Kr Lab 点击上方 36氪随声听 一键收听大公司热门新闻 听完音频记得添加进入 我的小程序 中哟 蜗牛移动 据IPO早知道 蜗牛
  • C++:auto&decltype

    auto用法 总述 C 11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型 类似的关键字还有decltype 举个例子 auto的作用就是为了简化变量初始化 如果这个变量有一个很长很长的初始化类型 就可以用au
  • CAN学习笔记3:STM32 CAN控制器介绍

    STM32 CAN控制器 1 概述 STM32 CAN控制器 bxCAN 支持CAN 2 0A 和 CAN 2 0B Active版本协议 CAN 2 0A 只能处理标准数据帧且扩展帧的内容会识别错误 而CAN 2 0B Active 可以
  • BTC-数据结构

    哈希指针 hash pointers 普通的指针存储的是某个数据在内存中的首地址 哈希指针不仅要保存地址 还要保存数据的哈希值 通过哈希指针不仅能找到数据的位置 还能检测出数据有没有被篡改 因为保存了哈希值 区块链 比特币的基本数据结构即区
  • 泰勒图(Taylor diagram)

    感谢大家的收藏 我会继续完善这篇博客的 文章目录 定义 例子 拓展 英文原版定义 python绘图方法 定义 泰勒图 泰勒图1常用于评价模型的精度 常用的精度指标有相关系数 标准差以及均方根误差 RMSE 一般而言 泰勒图中的散点代表模型
  • PySpark环境配置

    首先 要知道PySpark是Spark为Python提供的API库 因此使用 pip install pyspark 下载pyspark不等于下载了spark 因此 配置pyspark环境 首先需要下载spark 1 linux下载spar
  • Android设备启动时出现pop音

    Android设备启动时出现pop音 Android设备启动时出现pop音 环境介绍 原因定位 Android混音 TEE SINK Android HAL层文件 异常原因 解决方案 解决方案应用 Android设备启动时出现pop音 针对
  • 使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试

    文章目录 1 环境准备 2 CLion创建项目 3 编写测试用例 4 复杂测试用例 1 环境准备 注意版本匹配 我本地是g 8 1 0 的 最开始装了GoogleTest最新版1 10 0结果发现不能用 又回去下载旧的版本 g 8 1 0
  • opkg 不能更新和安装openwrt软件的方法

    首先 将所有的IPK 放在自己的虚拟HTTP服务器上 2 用Telnet进入路由器 使用VI编辑器 编程Opkg conf 命令 vi etc opkg conf3 修改文件 将第一行HTTP后面的部分 修改为第二步中查看到的IP地址 如果
  • c++ 泛型

    目录 1 什么是泛型 2 为什么需要泛型 3 泛型如何用 参考 泛型是什么 C 泛型编程又是什么 1 什么是泛型 泛型是什么 C 泛型编程又是什么 泛型 实质上就是不使用具体数据类型 例如 int double float 等 而是使用一种
  • 不同的子序列 -- 动规

    115 不同的子序列 class NumDistinct 115 不同的子序列 https leetcode cn problems distinct subsequences description def solution1 self
  • QT移植步骤

    1 在开发板的跟目录下新建两个目录 mkdir mini2440 mkdir tslib 2 拷贝相关的文件 2 1把PC机下面的 usr local Trolltech QtEmbedded 4 6 3 arm lib目录下面的所有文件全
  • 游戏开发unity xlua框架知识系列:obj引用分析

    参考 xLua的obj引用分析
  • 【论文笔记】ERNIE: Enhanced Representation through Knowledge Integration

    ERNIE Enhanced Representation through Knowledge Integration Created time July 26 2021 1 50 PM Last edited time July 30 2
  • 骨髓小游戏

    欢迎来到程序小院 骨髓 玩法 骨髓推塔小游戏 敌方士兵进入到我方高塔会毁坏建筑 我方可派兵前去迎战 我方 骑兵 长枪兵 弓兵 敌法 骷髅骑兵 骷髅长枪兵 骷髅弓兵 快去消灭敌人吧 开始游戏https www ormcc com play g