骨髓小游戏

news2024/12/23 6:37:16

欢迎来到程序小院

骨髓

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

开始游戏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/

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

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

相关文章

利用爬虫技术自动化采集汽车之家的车型参数数据

导语 汽车之家是一个专业的汽车网站&#xff0c;提供了丰富的汽车信息&#xff0c;包括车型参数、图片、视频、评测、报价等。如果我们想要获取这些信息&#xff0c;我们可以通过浏览器手动访问网站&#xff0c;或者利用爬虫技术自动化采集数据。本文将介绍如何使用Python编写…

flutter开发实战-长按TextField输入框cut、copy设置为中文复制、粘贴

flutter开发实战-长按TextField输入框cut、copy设置为中文复制、粘贴 在开发过程中&#xff0c;需要长按TextField输入框cut、copy设置为中文“复制、粘贴”&#xff0c;这里记录一下设置的代码。 一、pubspec.yaml设置flutter_localizations 在pubspec.yaml中设置flutter_l…

教你制作简单的洪水淹没模型

制作思路&#xff1a; 利用GIS软件将地形图通过高程垂直夸大&#xff0c;显示出其地形地貌&#xff0c;绘制一个面&#xff0c;使面从下向上移动&#xff0c;因地形高程的不同&#xff0c;面穿过地形图的面积不同&#xff0c;从而视觉上模拟出了水淹没的过程。 前期准备&…

facechain环境部署

环境安装 # 创建虚拟环境facechain conda create -n facechain python3.8 conda activate facechain # 克隆 GIT_LFS_SKIP_SMUDGE1 git clone https://github.com/modelscope/facechain.git --depth 1 # 安装第三方库 cd facechain pip install -r requirements.txt pip insta…

【JavaEE】操作系统内核中的进程

文章目录 &#x1f490;什么叫做进程&#x1f490;进程在系统中是如何进行管理的&#x1f490;PCB中一些比较重要的属性&#x1f490;进程持有的CPU资源——进程调度&#x1f490;内存分配——内存管理 &#x1f490;什么叫做进程 进程概念&#xff1a;一个已经跑起来的程序就…

Scrum和Kanban方法的结合:Scrumban的实施指南

如果没有有效的项目管理&#xff0c;团队成员将不得不处理尽可能多的程序&#xff0c;而这种方法不会导致成功。有几种著名的项目管理方法&#xff0c;例如 Scrum 和看板。但是有一种方法可以结合他们的最佳实践。 Scrum 和看板的优势结合在称为 Scrumban 的混合方法中。它非常…

chales 重写/断点/映射/手机代理/其他主机代理

1 chales 安装和代理配置/手机代理配置/电脑代理配置 chales 安装和代理配置/手机代理配置/电脑代理配置 2 转载:Charles Rewrite重写(详解&#xff01;必懂系列) Charles Rewrite重写(详解&#xff01;必懂系列) 1.打开charles&#xff0c;点击菜单栏的Tools选中Rewrite2.…

企业架构LNMP学习笔记59

目录介绍&#xff1a; bin&#xff1a;存放的是启动和关闭tomcat的脚本文件&#xff1b; conf&#xff1a;存放tomcat服务器的各种全局配置文件&#xff0c;其中最重要的是server.xml和web.xml lib: 存放的是tomcat服务器所需要的各种jar文件。java打包类库。 logs&#xff…

区域图片上色

目录 下图中&#xff0c;记得点击Apply&#xff0c;然后再点击Symbology 实际选择的时候&#xff0c;不选1Categorized&#xff0c;因为其分段不方便。

js中如何判断两个对象是否相等?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浅相等&#xff08;Shallow Equality&#xff09;⭐ 深相等&#xff08;Deep Equality&#xff09;⭐ 自定义深相等函数⭐ 使用第三方库⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接…

电路原理图字母缩写表示什么?

很多小白问&#xff0c;电路原理图上这些字母缩写都是些啥玩意儿啊&#xff1f; &#xff08;一&#xff09;EN :Enable&#xff0c;使能&#xff0c;使芯片能够工作。要用的时候&#xff0c;就打开 en 脚&#xff0c;不用的时候就关闭。有些芯片是高使能&#xff0c;有些是低…

SQLSERVER 数据库恢复挂起的解决办法

USE master GO ALTER DATABASE KH_Curve SET SINGLE_USER GO ALTER DATABASE KH_Curve SET EMERGENCY GO DBCC CHECKDB(KH_Curve,REPAIR_ALLOW_DATA_LOSS) go ALTER DATABASE KH_Curve SET ONLINE GO ALTER DATABASE KH_Curve SET MULTI_USER GO

.Net IDE智能提示汉化(.Net6、AspNetCore)

先上现成的.net6汉化文件&#xff0c;可以手动下载后参照 如何为 .NET 安装本地化的 IntelliSense 文件 进行安装。或者使用后文的工具进行自动安装。 无对照英文在前中文在前 汉化内容来自 官方在线文档 &#xff0c;某些内容可能存在明显的机翻痕迹。 上一些效果图&#x…

destoon根据目录下的html文件生成地图索引

因为项目需要&#xff0c;destoon根据目录下的html文件生成地图索引&#xff0c;操作方法&#xff0c;代码如下&#xff1a; <?php $new_array array(); function loopDir($dir,&$new_array,$modurl) {$handle opendir($dir);header("Content-Type:text/xml&qu…

elasticsearch15-数据聚合

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

为什么日本的网站看起来如此不同

首发于公众号 大迁世界&#xff0c;欢迎关注。&#x1f4dd; 每周一篇实用的前端文章 &#x1f6e0;️ 分享值得关注的开发工具 &#x1f61c; 分享个人创业过程中的趣事 该篇文章讨论了日本网站外观与设计的独特之处。作者指出日本网站设计与西方设计存在明显差异。文章首先强…

CSS动效合集之实现气泡发散动画

前言 &#x1f44f;CSS动效合集之实现气泡发散动画&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 定义一个数组bubbles&#xff0c;用来存储气泡列表的基本新&#xff0c;w表示宽高&#xff0c;x表示绝对定位…

一篇关于vue的入门的详细介绍

目录 一.介绍 二.库和框架的区别 三.什么是MVVM模式 四.实例 4.1. Vue开发示例 4.2. 双向数据绑定 4.3. 生命周期 好啦&#xff0c;今天的分享就到这了&#xff0c;希望能够帮到你呢&#xff01;&#x1f60a;&#x1f60a; 一.介绍 Vue.js是一种流行的JavaScript框架&am…

【CNN-FPGA开源项目解析】01--floatMult16模块

文章目录 (基础)半精度浮点数的表示和乘运算16位半精度浮点数浮点数的乘运算 floatMult16完整代码floatMult16代码逐步解析符号位sign判断指数exponent计算尾数fraction计算尾数fraction的标准化和舍位整合为最后的16位浮点数结果[sign,exponent,fraction] 其他变量宽度表alway…

软件系统性能测试报告+测试策略

一、服务背景 性能测试主要是针对信息系统的应用性能指标制订性能测试方案&#xff0c;通过自动化的测试工具执行测试用例&#xff0c;模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,负载测试和压力测试都属于性能测试&#xff0c;两者可以结合进行。 通…