sskshoot.js



var PLAYER_VX=0.2;
var PLAYER_VY=-1.0;
var PLAYER_AY=0.1;
var KURI_SPEED=0.05;
var FIRE_SPEED=0.4;
var STATE_PLAYER_ALIVE=0;
var STATE_PLAYER_DEAD=1;
var STATE_KURI_ALIVE=2;
var STATE_KURI_DEAD=3;
var STATE_FIRE_ALIVE=4;
var STATE_FIRE_DEAD=5;
var KURI_COUNT=10;
var FIRE_COUNT=5;
var game;
var player;
var kuri;
var fire;
var playerRunAnim_right;
var playerRunAnim_left;
var kuriAnim;
var fireAnim_right;
var fireAnim_left;
var vanishAnim;
var playerHit;
var kuriHit;
var fireHit;
var charaCount=0;

    function Player(){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(playerRunAnim_right);
       obj.sprite.initHit(playerHit);
       obj.sprite.setXY(0,YMAX);
       obj.vy=0;
       obj.jump=false;
       obj.sprite.setState(STATE_PLAYER_ALIVE);
       obj.spaceKey=true;
       obj.sprite.onUpdate=function(){
          switch (obj.sprite.getState()) {
             case STATE_PLAYER_ALIVE: obj.alive(); break;
             case STATE_PLAYER_DEAD: obj.dead(); break;
          }
       }
       obj.alive=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          var vy=obj.vy;
          if (game.isKey(KEY_LEFT)) {
             x-=PLAYER_VX;
          }
          if (game.isKey(KEY_RIGHT)) {
             x+=PLAYER_VX;
          }
          if (x<0) x=0;
          if (x>XMAX) x=XMAX;
          if (!obj.jump) {
             if (game.isKey(KEY_UP)) {
                vy=PLAYER_VY;
                obj.jump=true;
             }
             if (x!=obj.sprite.getX()) {
                obj.sprite.stepAnim();
                if (game.isKey(KEY_LEFT) && obj.sprite.getAnim()!=playerRunAnim_left) {
                   obj.sprite.initAnim(playerRunAnim_left);
                }
                else if (game.isKey(KEY_RIGHT) && obj.sprite.getAnim()!=playerRunAnim_right) {
                   obj.sprite.initAnim(playerRunAnim_right);
                }
             }
             else {
                obj.sprite.animIndex=0;
             }
          }
          else {
             y+=vy;
             vy+=PLAYER_AY;
             obj.sprite.animIndex=2;
             if (y>=YMAX) {
                y=YMAX;
                obj.jump=false;
             }
          }
          obj.sprite.setXY(x,y);
          obj.vy=vy;
          if (!obj.spaceKey && game.isKey(KEY_SPACE)) {
             for (i=0;i<fire.length;i++) {
                if (fire[i].sprite.getState()==STATE_FIRE_DEAD) {
                   if (obj.sprite.getAnim()==playerRunAnim_left) {
                      fire[i].sprite.initAnim(fireAnim_left);
                      fire[i].init(x,y,-1,0);
                      break;
                   }
                   else {
                      fire[i].sprite.initAnim(fireAnim_right);
                      fire[i].init(x,y,1,0);
                      break;
                   }
                }
             }
          }
          obj.spaceKey=game.isKey(KEY_SPACE);
       }

       obj.dead=function(){
          obj.sprite.stepAnim();
          if (obj.sprite.isAnimOver()) {
             init();
          }
       }
    }

    function Fire(){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(fireAnim_right);
       obj.sprite.initHit(fireHit);
       obj.sprite.setXY(-1,-1);
       obj.vx=0;
       obj.vy=0;
       obj.sprite.setState(STATE_FIRE_DEAD);
       obj.init=function(x,y,dx,dy){
          obj.sprite.setXY(x,y);
          obj.vx=dx*FIRE_SPEED;
          obj.vy=dy*FIRE_SPEED;
          obj.sprite.setState(STATE_FIRE_ALIVE);
       }
       obj.sprite.onUpdate=function(){
          if (obj.sprite.getState()!=STATE_FIRE_ALIVE) {
             return;
          }
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          x+=obj.vx;
          y+=obj.vy;
          obj.sprite.setXY(x,y);
          obj.sprite.stepAnim();
          if (x<-1 || x>XMAX+1 || y<-1 || y>YMAX+1) {
             obj.sprite.setState(STATE_FIRE_DEAD);
          }
       }
    }

    function Kuri(){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initHit(kuriHit);
       obj.init=function(){
          obj.sprite.initAnim(kuriAnim);
          obj.sprite.setXY(randFroat2(XMAX+1,XMAX*2),randFroat(YMAX));
          obj.sprite.setState(STATE_KURI_ALIVE);
          obj.vx=-KURI_SPEED;
          obj.vy=randFroat(1)*KURI_SPEED;
       }
       obj.init();
       obj.sprite.onUpdate=function(){
          switch (obj.sprite.getState()) {
             case STATE_KURI_ALIVE: obj.alive(); break;
             case STATE_KURI_DEAD: obj.dead(); break;
          }
       }
       obj.alive=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          var vx=obj.vx;
          var vy=obj.vy;
          x+=obj.vx;
          y+=obj.vy;
          if (x!=obj.sprite.getX() || y!=obj.sprite.getY()) {
             obj.sprite.stepAnim();
          }
          if (y<0 || y>YMAX) {
             obj.vy*=-1;
          }
          if (x<-1) {
             player.sprite.setState(STATE_PLAYER_DEAD);
          }
          obj.sprite.setXY(x,y);
          game.testHitSprite(obj.sprite);
       }
       obj.sprite.onHitSprite=function(spr){
          switch (spr.getState()) {
             case STATE_PLAYER_ALIVE:
                spr.initAnim(vanishAnim);
                spr.setState(STATE_PLAYER_DEAD);
                break;
             case STATE_FIRE_ALIVE:
                spr.setXY(-1,-1);
                spr.setState(STATE_FIRE_DEAD);
                obj.sprite.initAnim(vanishAnim);
                obj.sprite.setState(STATE_KURI_DEAD);
                game.addScore(10);
                break;
          }
       }
       obj.dead=function(){
          obj.sprite.stepAnim();
          if (obj.sprite.isAnimOver()) {
             obj.init();
          }
       }
    }

    function init(){
       var i;
       game.clear();
       game.setScore(0);
       player=new Player();
       fire=new Array();
       for (i=0;i<FIRE_COUNT;i++) {
          fire[i]=new Fire();
       }
       kuri=new Array();
       for (i=0;i<KURI_COUNT;i++) {
          kuri[i]=new Kuri();
       }
    }

    function main(){
       game=new Game();
       playerRunAnim_right=new Array(
       "image/ssk00.png","image/ssk00.png",
       "image/ssk01.png","image/ssk01.png",
       "image/ssk02.png","image/ssk02.png",
       "image/ssk01.png","image/ssk01.png",
       "image/ssk00.png","image/ssk00.png",
       "image/ssk03.png","image/ssk03.png",
       "image/ssk04.png","image/ssk04.png",
       "image/ssk03.png","image/ssk03.png"
       );
       playerRunAnim_left=new Array(
       "image/ssk10.png","image/ssk10.png",
       "image/ssk11.png","image/ssk11.png",
       "image/ssk12.png","image/ssk12.png",
       "image/ssk11.png","image/ssk11.png",
       "image/ssk10.png","image/ssk10.png",
       "image/ssk13.png","image/ssk13.png",
       "image/ssk14.png","image/ssk14.png",
       "image/ssk13.png","image/ssk13.png"
       );
       fireAnim_right=new Array(
       "image/sskfire00.png","image/sskfire00.png",
       "image/sskfire01.png","image/sskfire01.png"
       );
       fireAnim_left=new Array(
       "image/sskfire10.png","image/sskfire10.png",
       "image/sskfire11.png","image/sskfire11.png"
       );
       kuriAnim=new Array(
       "image/zako2.png","image/zako2.png",
       "image/zako3.png","image/zako3.png"
       );
       vanishAnim=new Array(
       "image/void.png","image/vanish8.png","image/vanish6.png",
       "image/vanish4.png","image/vanish2.png","image/vanish0.png",
       "image/vanish1.png","image/vanish2.png","image/vanish3.png",
       "image/vanish4.png","image/vanish5.png","image/vanish6.png",
       "image/vanish7.png","image/vanish8.png","image/void.png"
       );
       playerHit=new Array(0.25,0.25,0.75,0.75);
       kuriHit=new Array(0.25,0,0.75,1);
       fireHit=new Array(0,0.25,1,0.75);
       init();
    }