sampleGame.js

var PLAYER_VX=0.2;
var PLAYER_AX=0.03;
var PLAYER_VY=-0.5;
var WALL_VY=-0.2;
var AY=0.03;

var WORLD_COUNT=1;
var FIELD_COUNT=5;

var STATE_DEAD=99;
var STATE_CLEAR=100;
var STATE_GRAND_CLEAR=101;
var STATE_PLAYER_ALIVE=0;
var STATE_PLAYER_DEAD=1;
var STATE_KURI_ALIVE=2;
var STATE_KURI_DEAD=3;
var STATE_WALL=4;
var STATE_POLE=5;
var STATE_HATENA_HATENA=6;
var STATE_HATENA_BLOCK=7;
var STATE_KAKUSHI=8;
var STATE_BND_ALIVE=9;
var STATE_TTR_ALIVE=10;
var STATE_TTR_DEAD=11;

var CELL_VOID=0;
var CELL_WALL=1;
var CELL_PLAYER=2;
var CELL_KURI=3;
var CELL_POLE=4;
var CELL_FLOOR=5;
var CELL_HATENA=6;
var CELL_KAKUSHI=7;
var CELL_BND=8;
var CELL_TTR=9;

var playerBodyHit;
var playerHeadHit;
var playerFootHit;
var poleHit;

var game;
var player;
var kuri;
var bnd;
var ttr;
var wall;
var hatena;
var kakushi;
var floor;
var pole;
var field;
var fieldCell;
var stageIndex;
var kuriIndex;
var bndIndex;

var playerRunAnim_right;
var playerRunAnim_left;
var wallAnim;
var hatenaAnim;
var kakushiAnim;
var vanishAnim;
var titleAnim;

var gx,gy;

    function Player(x,y){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(playerRunAnim_right);
       obj.sprite.initHit(playerBodyHit);
       obj.sprite.setState(STATE_PLAYER_ALIVE);
       obj.sprite.setXY(x,y);
       obj.vx=0;
       obj.vy=0;
       obj.jump=true;
       obj.muteki=false;
       obj.mutekiCount=0;
       obj.sprite.onUpdate=function(){
          if (game.state!=GS_GAME) return;
          switch (obj.sprite.getState()) {
             case STATE_PLAYER_ALIVE: obj.alive(); break;
             case STATE_PLAYER_DEAD: obj.dead(); break;
             case STATE_CLEAR: obj.clear(); break;
             case STATE_GRAND_CLEAR: obj.grandClear(); break;
          }
       }
       obj.alive=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          var i,j;
          if (!obj.jump) {
             obj.vy=0;
             if (game.isKey(KEY_UP)) {
                obj.vy=PLAYER_VY;
                obj.jump=true;
             }
             if (game.isKey(KEY_LEFT) || game.isKey(KEY_RIGHT)) {
                if (game.isKey(KEY_LEFT)) {
                   obj.vx-=PLAYER_AX;
                   if (obj.vx<-PLAYER_VX) {
                      obj.vx=-PLAYER_VX;
                   }
                   else if (obj.vx>0) {
                      obj.vx=0;
                   }
                   if (obj.sprite.getAnim()!=playerRunAnim_left) {
                      obj.sprite.initAnim(playerRunAnim_left);
                   }
                }
                if (game.isKey(KEY_RIGHT)) {
                   obj.vx+=PLAYER_AX;
                   if (obj.vx>PLAYER_VX) {
                      obj.vx=PLAYER_VX;
                   }
                   else if (obj.vx<0) {
                      obj.vx=0;
                   }
                   if (obj.sprite.getAnim()!=playerRunAnim_right) {
                      obj.sprite.initAnim(playerRunAnim_right);
                   }
                }
             }
             else {
                if (obj.vx>0) {
                   obj.vx-=PLAYER_AX/2;
                }
                else if (obj.vx<0) {
                   obj.vx+=PLAYER_AX/2;
                }
                if (obj.vx>-PLAYER_AX && obj.vx<PLAYER_AX) {
                   obj.vx=0;
                }
             }
             if (obj.vx!=0) {
                obj.sprite.stepAnim();
             }
             else {
                obj.sprite.animIndex=0;
             }
          }
          else {
             obj.sprite.animIndex=2;
             if (game.isKey(KEY_UP)) {
                obj.vy+=AY;
             }
             else {
                obj.vy+=1.75*AY;
             }
             if (obj.vy>-PLAYER_VY) {
                obj.vy=-PLAYER_VY;
             }
             if (game.isKey(KEY_LEFT) || game.isKey(KEY_RIGHT)) {
                if (game.isKey(KEY_LEFT)) {
                   obj.vx-=PLAYER_AX;
                   if (obj.vx<-PLAYER_VX) {
                      obj.vx=-PLAYER_VX;
                   }
                   else if (obj.vx>0) {
                      obj.vx=0;
                   }
                   if (obj.sprite.getAnim()!=playerRunAnim_left) {
                      obj.sprite.initAnim(playerRunAnim_left);
                   }
                }
                if (game.isKey(KEY_RIGHT)) {
                   obj.vx+=PLAYER_AX;
                   if (obj.vx>PLAYER_VX) {
                      obj.vx=PLAYER_VX;
                   }
                   else if (obj.vx<0) {
                      obj.vx=0;
                   }
                   if (obj.sprite.getAnim()!=playerRunAnim_right) {
                      obj.sprite.initAnim(playerRunAnim_right);
                   }
                }
             }
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
          obj.sprite.onHitSprite=function(spr){
             obj.bodyHit(spr);
          }
          game.testHitSprite(obj.sprite);
          if (obj.vy<0) {
             obj.sprite.setXY(x+obj.vx,y+obj.vy);
             obj.sprite.initHit(playerHeadHit);
             obj.sprite.onHitSprite=function(spr){
                obj.headHit(spr);
             }
                game.testHitSprite(obj.sprite);
          }
          else {
             obj.sprite.setXY(x+obj.vx,y+obj.vy);
             obj.jump=true;
             obj.sprite.initHit(playerFootHit);
             obj.sprite.onHitSprite=function(spr){
                obj.footHit(spr);
             }
             game.testHitSprite(obj.sprite);
          }
          x+=obj.vx;
          if (x<gx) {
             x=gx;
          }
          y+=obj.vy;
          obj.sprite.setXY(x,y);
          obj.sprite.initHit(playerBodyHit);
          if (x>gx+XMAX/3) {
             gx=x-XMAX/3;
          }
          if (gx>field.getXCount()-XMAX-1) {
             gx=field.getXCount()-XMAX-1;
          }
          game.setViewXY(gx,gy);
          if (obj.muteki) {
             obj.mutekiCount++;
             if (obj.mutekiCount>5) {
                obj.mutekiCount=0;
                obj.muteki=false;
             }
          }
          for (i=0;i<field.getYCount();i++) {
             if (field.getCell(gx+XMAX+1,i)==CELL_KURI) {
                kuri[kuriIndex]=new Kuri();
                kuri[kuriIndex].init(gx+XMAX+1,i);
                kuriIndex++;
                field.setCell(gx+XMAX+1,i,CELL_VOID);
             }
             if (field.getCell(gx+XMAX+1,i)==CELL_BND) {
                bnd[bndIndex]=new Bnd();
                bnd[bndIndex].init(gx+XMAX+1,i);
                bndIndex++;
                field.setCell(gx+XMAX+1,i,CELL_VOID);
             }
          }
          if (y>field.getYCount()+5) {
             obj.sprite.setState(STATE_PLAYER_DEAD);
             obj.sprite.initAnim(vanishAnim);
          }
       }
       obj.bodyHit=function(spr){
          switch (spr.getState()) {
             case STATE_WALL:
             case STATE_HATENA_HATENA:
             case STATE_HATENA_BLOCK:
                obj.vx=0;
                break;
             case STATE_POLE:
                obj.sprite.setState(STATE_CLEAR);
                obj.vx=0;
                obj.vy=-PLAYER_VY/2;
                break;
          }
       }
       obj.headHit=function(spr){
          switch (spr.getState()) {
             case STATE_HATENA_HATENA:
             case STATE_KAKUSHI:
                spr.stepAnim();
                spr.setState(STATE_HATENA_BLOCK);
                spr.item();
             case STATE_WALL:
             case STATE_HATENA_BLOCK:
                obj.vy=0;
                break;
          }
       }
       obj.footHit=function(spr){
          switch (spr.getState()) {
             case STATE_WALL:
             case STATE_HATENA_HATENA:
             case STATE_HATENA_BLOCK:
                if (obj.jump) {
                   obj.vy=(spr.getY()-1)-(obj.sprite.getY()-obj.vy);
                   obj.jump=false;
                }
                break;
          }
       }
       obj.dead=function(){
          obj.sprite.stepAnim();
          if (obj.sprite.isAnimOver()) {
             game.setScore(game.getScore()-100);
             game.state=GS_CONTINUE;
          }
       }
       obj.clear=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          if (x>gx+XMAX+1) {
             game.state=GS_CLEAR;
          }
          if (obj.vy==0) {
             obj.vx=PLAYER_VX/2;
          }
          if (obj.vx!=0) {
             obj.sprite.stepAnim();
          }
          if (obj.vy>0) {
             obj.sprite.setXY(x,y+obj.vy);
             obj.sprite.initHit(playerFootHit);
             obj.sprite.onHitSprite=function(spr){
                if (spr.getState()==STATE_WALL) {
                   obj.vy=0;
                   y=spr.getY()-1;
                }
             }
             game.testHitSprite(obj.sprite);
             obj.sprite.initHit(playerBodyHit);
          }
          x+=obj.vx;
          y+=obj.vy;
          if (y<2) {
             obj.vy=-obj.vy;
             y=2;
          }
          obj.sprite.setXY(x,y);
          game.addScore(Math.abs(Math.floor(obj.vy*20)));
       }
       obj.grandClear=function() {
          game.state=GS_GRANDCLEAR;
       }
    }

    function Wall(x,y){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(wallAnim);
       obj.sprite.setState(STATE_WALL);
       obj.sprite.setXY(x,y);
       if (stageIndex==2 || stageIndex==4) {
          obj.sprite.animIndex=1;
       }
    }

    function Floor(x,y){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initHit(new Array(0, 0, 1, field.getYCount()-y+1));
       obj.sprite.setState(STATE_WALL);
       obj.sprite.setXY(x,y);
    }

    function Hatena(x,y){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(hatenaAnim);
       obj.sprite.setState(STATE_HATENA_HATENA);
       obj.sprite.setXY(x,y);
       obj.sprite.item=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          switch (stageIndex) {
             case 1:
                kuri[kuriIndex]=new Kuri();
                kuri[kuriIndex].px=1;
                kuri[kuriIndex].init(x,y-1);
                kuriIndex++;
                break;
             case 2:
             case 3:
             case 4:
                bnd[bndIndex]=new Bnd();
                bnd[bndIndex].px=1;
                bnd[bndIndex].init(x,y-1);
                bndIndex++;
                break;
          }
       }
    }

    function Kakushi(x,y){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(kakushiAnim);
       obj.sprite.setState(STATE_KAKUSHI);
       obj.sprite.setXY(x,y);
       obj.sprite.item=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          switch (stageIndex) {
             case 1:
                kuri[kuriIndex]=new Kuri();
                kuri[kuriIndex].px=1;
                kuri[kuriIndex].init(x,y-1);
                kuriIndex++;
                break;
             case 2:
             case 3:
             case 4:
                bnd[bndIndex]=new Bnd();
                bnd[bndIndex].px=1;
                bnd[bndIndex].init(x,y-1);
                bndIndex++;
                break;
          }
       }
    }

    function Pole(x,y){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initHit(poleHit);
       obj.sprite.setState(STATE_POLE);
       obj.sprite.setXY(x,y);
    }

    function nextStage(index){
       var x,y,i,j,k,l;
       game.clear();
       field=game.createField();
       if (index==1 || index==3) {
          field.initCellImage(new Array(
          "image/darkblue.png","image/darkblue.png","image/darkblue.png",
          "image/darkblue.png","image/darkpole.png","image/darkfloor.png",
          "image/darkblue.png","image/darkblue.png","image/darkblue.png",
          "image/darkblue.png",
          "image/darkfloor.png","image/leaf.png","image/cloudleft.png",
          "image/cloudright.png","image/mt1.png","image/mt2.png",
          "image/mt3.png","image/mt4.png","image/mt5.png",
          "image/mt6.png","image/mt7.png","image/mt8.png",
          "image/pole1.png","image/darkwall.png"
          ));
       }
       else {
          field.initCellImage(new Array(
          "image/skyblue.png","image/skyblue.png","image/skyblue.png",
          "image/skyblue.png","image/pole0.png","image/floor.png",
          "image/skyblue.png","image/skyblue.png","image/skyblue.png",
          "image/skyblue.png",
          "image/floor.png","image/leaf.png","image/cloudleft.png",
          "image/cloudright.png","image/mt1.png","image/mt2.png",
          "image/mt3.png","image/mt4.png","image/mt5.png",
          "image/mt6.png","image/mt7.png","image/mt8.png",
          "image/pole1.png","image/darkwall.png"
          ));
       }
       field.initCell(fieldCell[0][index]);
       wall=new Array();
       floor=new Array();
       hatena=new Array();
       kakushi=new Array();
       kuri=new Array();
       kuriIndex=0;
       bnd=new Array();
       bndIndex=0;
       for (i=0,j=0,k=0,l=0,y=0;y<field.getYCount();y++) {
          for (x=0;x<field.getXCount();x++) {
             switch (field.getCell(x,y)) {
                case CELL_PLAYER:
                   player=new Player(x,y);
                   break;
                case CELL_WALL:
                   wall[i]=new Wall(x,y);
                   i++;
                   break;
                case CELL_KURI:
                   if (x<=XMAX+2) {
                      kuri[kuriIndex]=new Kuri();
                      kuri[kuriIndex].init(x,y);
                      field.setCell(x,y,CELL_VOID);
                      kuriIndex++;
                   }
                   break;
                case CELL_BND:
                   if (x<=XMAX+2) {
                      bnd[bndIndex]=new Bnd();
                      bnd[bndIndex].init(x,y);
                      field.setCell(x,y,CELL_VOID);
                      bndIndex++;
                   }
                   break;
                case CELL_FLOOR:
                   floor[k]=new Floor(x,y);
                   k++;
                   break;
                case CELL_HATENA:
                   hatena[l]=new Hatena(x,y);
                   l++;
                   break;
                case CELL_KAKUSHI:
                   kakushi[j]=new Kakushi(x,y);
                   j++;
                   break;
                case CELL_POLE:
                   pole=new Pole(x,y);
                   break;
                case CELL_TTR:
                   ttr=new Ttr(x,y);
                   break;
             }
          }
       }
       gx=0;
       gy=field.getYCount()-YMAX-1.75;
       game.setViewXY(gx,gy);
       splash=game.createSplash();
       splash.setSize(CELL_XCOUNT,CELL_YCOUNT);
       splash.setState(STATE_SPLASH);
    }

    function init(){
       var x,y,i,j,k,l;
       game.clear();
       game.setScore(0);
       field=game.createField();
       field.initCellImage(new Array(
       "image/skyblue.png","image/skyblue.png","image/skyblue.png",
       "image/skyblue.png","image/pole0.png","image/floor.png",
       "image/skyblue.png","image/skyblue.png","image/skyblue.png",
       "image/skyblue.png",
       "image/floor.png","image/leaf.png","image/cloudleft.png",
       "image/cloudright.png","image/mt1.png","image/mt2.png",
       "image/mt3.png","image/mt4.png","image/mt5.png",
       "image/mt6.png","image/mt7.png","image/mt8.png",
       "image/pole1.png","image/darkwall.png"
       ));
       stageIndex=0;
       field.initCell(fieldCell[0][stageIndex++]);
       wall=new Array();
       floor=new Array();
       hatena=new Array();
       kakushi=new Array();
       kuri=new Array();
       kuriIndex=0;
       bnd=new Array();
       bndIndex=0;
       for (i=0,j=0,k=0,l=0,y=0;y<field.getYCount();y++) {
          for (x=0;x<field.getXCount();x++) {
             switch (field.getCell(x,y)) {
                case CELL_PLAYER:
                   player=new Player(x,y);
                   break;
                case CELL_WALL:
                   wall[i]=new Wall(x,y);
                   i++;
                   break;
                case CELL_KURI:
                   if (x<=XMAX+2) {
                      kuri[kuriIndex]=new Kuri();
                      kuri[kuriIndex].init(x,y);
                      field.setCell(x,y,CELL_VOID);
                      kuriIndex++;
                   }
                   break;
                case CELL_BND:
                   if (x<=XMAX+2) {
                      bnd[bndIndex]=new Bnd();
                      bnd[bndIndex].init(x,y);
                      field.setCell(x,y,CELL_VOID);
                      bndIndex++;
                   }
                   break;
                case CELL_FLOOR:
                   floor[k]=new Floor(x,y);
                   break;
                case CELL_HATENA:
                   hatena[l]=new Hatena(x,y);
                   l++;
                   break;
                case CELL_KAKUSHI:
                   kakushi[j]=new Kakushi(x,y);
                   j++;
                   break;
                case CELL_POLE:
                   pole=new Pole(x,y);
                   break;
                case CELL_TTR:
                   ttr=new Ttr(x,y);
                   break;
             }
          }
       }
       gx=0;
       gy=field.getYCount()-YMAX-1.75;
       game.setViewXY(gx,gy);
       splash=game.createSplash();
       splash.setSize(CELL_XCOUNT,CELL_YCOUNT);
       splash.setState(STATE_SPLASH);
    }

    function main(){
       var i;
       game=new Game();
       game.onUpdate=function() {
          switch (game.state) {
             case GS_TITLE:
                initTitle();
                game.state=GS_TITLE2;
             case GS_TITLE2:
                title.stepAnim();
                if (game.isKey(KEY_ENTER)) {
                   init();
                   game.state=GS_READY;
                }
                break;
             case GS_READY:
                initSplash("image/ready.png");
                game.time=0;
                game.state=GS_READY2;
             case GS_READY2:
                game.time++;
                if (game.time==20) {
                   initSplash("image/void.png");
                   game.state=GS_GAME;
                }
                break;
             case GS_CLEAR:
                initSplash("image/clear.png");
                game.time=0;
                game.state=GS_CLEAR2;
             case GS_CLEAR2:
                game.time++;
                if (game.time==20) {
                   initSplash("image/void.png");
                   if (stageIndex<FIELD_COUNT) {
                      nextStage(stageIndex++);
                   }
                   game.state=GS_READY;
                }
                break;
             case GS_CONTINUE:
                initSplash("image/continue.png");
                game.state=GS_CONTINUE2;
             case GS_CONTINUE2:
                if (game.isKey(KEY_ENTER)) {
                   initSplash("image/void.png");
                   nextStage(stageIndex-1);
                   game.state=GS_READY;
                }
                if (game.isKey(KEY_ESC)) {
                   initSplash("image/void.png");
                   game.state=GS_GAMEOVER;
                }
                break;
             case GS_GAMEOVER:
                initSplash("image/gameover.png");
                game.time=0;
                game.state=GS_GAMEOVER2;
             case GS_GAMEOVER2:
                game.time++;
                if (game.time==20) {
                   initSplash("image/void.png");
                   game.state=GS_TITLE;
                }
                break;
             case GS_GRANDCLEAR:
                initSplash("image/grandClear.png");
                game.time=0;
                game.state=GS_GRANDCLEAR2;
             case GS_GRANDCLEAR2:
                game.time++;
                if(game.time==200) {
                   initSplash("image/black.png");
                   game.state=GS_TITLE;
                }
                break;
          }
       }
       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"
       );
       wallAnim=new Array("image/wall.png","image/darkwall.png");
       hatenaAnim=new Array("image/hatenablock1.png","image/hatenablock2.png");
       kakushiAnim=new Array("image/void.png","image/hatenablock2.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"
       );
       titleAnim=new Array("image/title2.png");
       playerBodyHit=new Array(0.1, 0.1, 0.9, 0.8);
       playerHeadHit=new Array(0.1, 0.3, 0.9, 0.4);
       playerFootHit=new Array(0.1, 1, 0.9, 1.1);
       poleHit=new Array(0.2, 0.1, 0.8, 9);
       fieldCell=new Array();
       for (i=0;i<WORLD_COUNT;i++) {
          fieldCell[i]=new Array(FIELD_COUNT);
       }
       fieldCell[0][0]=new Array(
       "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
       "000000000cd00000000000000000000cd0000000000000000000000000cd00000000000000000000000cd00000000000000000cd0000000000000000",
       "0000cd0000000000000000cd000000000000000000cd0000000000000000000cd000000000000cd0000000000000000000cd00000000000000400000",
       "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000m00000",
       "00000000016100000000cd00000000000000000000000000000cd0000000000000000000000000000000000000000000000000000000000000m00000",
       "000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000003330000000m00000",
       "000000000300000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000055500000m00000",
       "0000000161616100030000000000000001111111111000000000000000000000011111100000000000000000000111000000000005aaa00000m00000",
       "000000000000000000000000000000000000000000000000000070001100000000000000000000000000000000000000000000005aaaa00000m00000",
       "00000000000efg003000000000000000000efg00000000000000000000000000000000000000000000000000000000000efg0005aaaaa00000m00000",
       "002000bb00hijkl300bb00000000000000hijkl00bbb0003000000000000000000000000bb3030300000000000000bbbhijkl05aaaaaa0bb00m00000",
       "555555555555555555555550000555555555555555555555555500000000055555555555555555555555000055555555555555aaaaaaa55555555555",
       "aaaaaaaaaaaaaaaaaaaaaaa0000aaaaaaaaaaaaaaaaaaaaaaaaa000000000aaaaaaaaaaaaaaaaaaaaaaa0000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
       );
       fieldCell[0][1]=new Array(
       "000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000",
       "111111111111111111111111111111111111111111111100111111111111111111001111111111111111111110000000000111111111111111111111",
       "100200000000000000000000000000000000000000000000000000000000000800000000000000000000000000000011000000000000000000000001",
       "100000000000003000000000000000000000000000000000000000000000000000000000000000000000000000700000011000000000000000000001",
       "100000000000000000000000011100000000000000000000000000011100000000000000000000000000000000000000000000000000000000000001",
       "100000000000030000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000000001",
       "100000000000300000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000040",
       "100000000011111100000000161610000000005000050000000000000000000000000000000000001110000007000000000555555555555555555555",
       "10000000000000000000000000000000000050a0000a5000000000000000000000000000000000000000000000000000000aaaaaaaaaaaaaaaaaaaaa",
       "100000000000000000000000000000003050a0a0000aa500000000000000000500005000000000000000000300000000000aaaaaaaaaaaaaaaaaaaaa",
       "1000000000000000000000000000000050a0a0a0000aaa50000000000000005a0000a500000000000000003000000000000aaaaaaaaaaaaaaaaaaaaa",
       "55555555555555555555555555555555a0a0a0a0000aaaa555555555555555aa0000aa55555555555555555550000000000aaaaaaaaaaaaaaaaaaaa5",
       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0a0a0a0000aaaaaaaaaaaaaaaaaaaaa0000aaaaaaaaaaaaaaaaaaaaa0000000000aaaaaaaaaaaaaaaaaaaaa"
       );
       fieldCell[0][2]=new Array(
       "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000",
       "000000000cd0000000000000000cd0000000cd000000000cd000000000cd00000000000000cd0000000000000000000cd001110000100000cd000000",
       "000cd00000000000000cd000000000000000000000000000000000cd000000cd000000000000000000000000000cd0000000000cd000000004000000",
       "000000000000000cd00000000000303000000000cd0000000000000000000000000000300000000000cd00000000000000000000000000000m000000",
       "00000000610000000000000000001110000000000000000000000000000000000000000000111000000000000100011100000000000000000m000000",
       "00000000000000000000000000000000000000000000000000000010000000000000030000000000000000000000000000000000000000000m000000",
       "00000000030000000000000000000000000000000000000000000000000000000000300000000000000011000000000000000000000000000m000000",
       "00000001111100000110000111110000000000000000000110000000000000001111111100000000000000000000000000001110000000000m000000",
       "00000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000m000000",
       "00000000efg00000000000000000000000000efg00000000000000000000000000000000000100000000000000000efg00efg000000000000m000000",
       "00200bbhijkl0000000bb000000000000000hijklbb0000000000000000000bbb0000bb000000000000000000000hijklhijkl0bbb0000000m000000",
       "555555555555000000555500000000055555555555550000000000000005555555555555000000005550000555555555555555555555500005555555",
       "aaaaaaaaaaaa000000aaaa000000000aaaaaaaaaaaaa000000000000000aaaaaaaaaaaaa00000000aaa0000aaaaaaaaaaaaaaaaaaaaaa0000aaaaaaa"
       );
       fieldCell[0][3]=new Array(
       "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
       "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111",
       "100200000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000001",
       "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000001",
       "100000000000000161000000000000000000011100000000000000000001111100000000000000000000000000000000000000000000000000000001",
       "100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001",
       "100000000000000000003000000000000000000000000000000000000000000000000111000011100011100000000000000000000000000000000001",
       "100000000000111111111000001100001100000000000111111111001100000000007000000000000000000001111000011110000007000000000001",
       "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
       "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
       "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040",
       "555555555555000000000000000000000000555555550000000000000000000055550000000000000000000000000000000000555555555555555555",
       "aaaaaaaaaaaa000000000000000000000000aaaaaaaa00000000000000000000aaaa0000000000000000000000000000000000aaaaaaaaaaaaaaaaaa"
       );
       fieldCell[0][4]=new Array(
       "5020000000000905",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a00000000000000a",
       "a55555555555555a",
       "aaaaaaaaaaaaaaaa"
       );
       game.state=GS_TITLE;
       game.time=0;
    }



enemy.js


var KURI_SPEED=0.03;
var BND_SPEED=0.03;
var TTR_SPEED=0.04;
var TTR_VY=-0.8;
var TTR_HP=10;

var kttr=new Array();
var KTTR_COUNT=10;

var enemyBodyHit=new Array(0.1, 0.1, 0.9, 0.8);
var enemyFootHit=new Array(0.1 ,1, 0.9, 1.1);
var ttrBodyHit=new Array(0.1, 0.1, 1.9, 1.8);
var ttrFootHit=new Array(0.1 ,2, 1.9, 2.1);
var kuriAnim=new Array(
"image/zako2.png","image/zako2.png",
"image/zako3.png","image/zako3.png"
);
var bndLeftAnim=new Array(
"image/bnd00.png","image/bnd01.png","image/bnd02.png",
"image/bnd03.png","image/bnd02.png","image/bnd01.png","image/bnd00.png"
);
var bndRightAnim=new Array(
"image/bnd10.png","image/bnd11.png","image/bnd12.png",
"image/bnd13.png","image/bnd12.png","image/bnd11.png","image/bnd10.png"
);
var ttrLeftAnim=new Array("image/ttr0.png");
var ttrRightAnim=new Array("image/ttr1.png");

    function Kuri(){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(kuriAnim);
       obj.sprite.setState(STATE_DEAD);
       obj.sprite.setXY(-3,-3);
       obj.vx=0;
       obj.px=-1;
       obj.vy=0;
       obj.jump=false;

       obj.init=function(x,y){
          obj.sprite.setXY(x,y);
          obj.sprite.initAnim(kuriAnim);
          obj.sprite.setState(STATE_KURI_ALIVE);
          obj.vx=obj.px*KURI_SPEED;
          obj.vy=0;
          obj.jump=false;
       }

       obj.sprite.onUpdate=function(){
          if (game.state!=GS_GAME) return;
             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();
          obj.sprite.stepAnim();
          if (x<gx-2) {
             obj.sprite.setState(STATE_KURI_DEAD);
          }
          if (!obj.jump) {
             obj.vy=0;
          }
          else {
             obj.vx=0;
             obj.vy+=AY;
             if (obj.vy>-PLAYER_VY) {
                obj.vy=-PLAYER_VY;
             }
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
          obj.sprite.initHit(enemyBodyHit);
          obj.sprite.onHitSprite=function(spr){
             switch (spr.getState()) {
                case STATE_WALL:
                case STATE_HATENA_HATENA:
                case STATE_HATENA_BLOCK:
                   obj.px*=-1;
                   obj.vx=obj.px*KURI_SPEED;
                   break;
                case STATE_PLAYER_ALIVE:
                case STATE_CLEAR:
                   if (player.vy>obj.vy) {
                      obj.sprite.setState(STATE_KURI_DEAD);
                      obj.sprite.initAnim(vanishAnim);
                      player.vy=PLAYER_VY;
                      player.jump=true;
                      player.muteki=true;
                      game.addScore(10);
                   }
                   else {
                      if (player.muteki) {
                         obj.sprite.setState(STATE_KURI_DEAD);
                         obj.sprite.initAnim(vanishAnim);
                         player.vy=PLAYER_VY;
                         player.jump=true;
                         game.addScore(10);
                      }
                      else {
                         spr.setState(STATE_PLAYER_DEAD);
                         spr.initAnim(vanishAnim);
                      }
                   }
                   break;
             }
          }
          game.testHitSprite(obj.sprite);
          if (obj.vy>=0) {
             obj.sprite.setXY(x+obj.vx,y+obj.vy);
             obj.jump=true;
             obj.sprite.initHit(enemyFootHit);
             obj.sprite.onHitSprite=function(spr){
                if (spr.getState()==STATE_WALL || spr.getState()==STATE_HATENA_HATENA || spr.getState()==STATE_HATENA_BLOCK) {
                   if (obj.jump) {
                      obj.vy=(spr.getY()-1)-(obj.sprite.getY()-obj.vy);
                      obj.jump=false;
                      if (obj.vx==0) {
                         obj.vx=obj.px*KURI_SPEED;
                      }
                   }
                }
             }
             game.testHitSprite(obj.sprite);
          }
          if (y>field.getYCount()+5) {
             obj.sprite.setState(STATE_DEAD);
             obj.sprite.setXY(-3,-3);
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
       }
       obj.dead=function(){
          obj.sprite.stepAnim();
          if (obj.sprite.isAnimOver()) {
                obj.sprite.setXY(-3,-3);
             obj.sprite.setState(STATE_DEAD);
          }
      }
    }

    function Bnd(){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(bndLeftAnim);
       obj.sprite.setState(STATE_DEAD);
       obj.sprite.setXY(-3,-3);
       obj.vx=0;
       obj.px=-1;
       obj.vy=0;
       obj.jump=false;
       obj.boundFrag=false;

       obj.init=function(x,y){
          obj.sprite.setXY(x,y);
          obj.sprite.initAnim(bndLeftAnim);
          obj.sprite.setState(STATE_BND_ALIVE);
          obj.vx=obj.px*BND_SPEED;
          obj.vy=0;
          obj.jump=false;
          obj.boundFrag=false;
       }

       obj.sprite.onUpdate=function(){
          if (game.state!=GS_GAME) return;
          switch (obj.sprite.getState()) {
             case STATE_BND_ALIVE: obj.alive(); break;
          }
       }
       obj.alive=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          if (x<gx-2) {
             obj.sprite.setState(STATE_DEAD);
             obj.sprite.setXY(-3,-3);
          }
          if (!obj.jump) {
             obj.vy=0;
          }
          else {
             obj.vx=0;
             obj.vy+=AY;
             if (obj.vy>-PLAYER_VY) {
                obj.vy=-PLAYER_VY;
             }
          }
          if (obj.boundFrag) {
             obj.bound();
          }
          if (obj.vx<0 && obj.sprite.getAnim()!=bndLeftAnim) {
             obj.sprite.initAnim(bndLeftAnim);
          }
          if (obj.vx>0 && obj.sprite.getAnim()!=bndRightAnim) {
             obj.sprite.initAnim(bndRightAnim);
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
          obj.sprite.initHit(enemyBodyHit);
          obj.sprite.onHitSprite=function(spr){
             switch (spr.getState()) {
                case STATE_WALL:
                case STATE_HATENA_HATENA:
                case STATE_HATENA_BLOCK:
                   obj.px*=-1;
                   obj.vx=obj.px*BND_SPEED;
                   break;
                case STATE_PLAYER_ALIVE:
                case STATE_CLEAR:
                   if (player.vy>obj.vy) {
                      obj.boundFrag=true;
                      player.muteki=true;
                   }
                   else if (!obj.boundFrag) {
                      if (player.muteki) {
                         obj.boundFrag=true;
                      }
                      else {
                         spr.setState(STATE_PLAYER_DEAD);
                         spr.initAnim(vanishAnim);
                      }
                   }
                   break;
             }
          }
          game.testHitSprite(obj.sprite);
          if (obj.vy>=0) {
             obj.sprite.setXY(x+obj.vx,y+obj.vy);
             obj.jump=true;
             obj.sprite.initHit(enemyFootHit);
             obj.sprite.onHitSprite=function(spr){
                if (spr.getState()==STATE_WALL || spr.getState()==STATE_HATENA_HATENA || spr.getState()==STATE_HATENA_BLOCK) {
                   if (obj.jump) {
                      obj.vy=(spr.getY()-1)-(obj.sprite.getY()-obj.vy);
                      obj.jump=false;
                      if (obj.vx==0) {
                         obj.vx=obj.px*BND_SPEED;
                      }
                   }
                }
             }
             game.testHitSprite(obj.sprite);
          }
          if (y>field.getYCount()+5) {
             obj.sprite.setState(STATE_DEAD);
             obj.sprite.setXY(-3,-3);
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
       }
       obj.bound=function(){
          obj.sprite.stepAnim();
          player.vy=2*PLAYER_VY;
          player.jump=true;
          if (obj.sprite.isAnimOver()) {
             obj.boundFrag=false;
          }
       }
    }

    function Ttr(x,y){
       var obj=this;
       var i;
       obj.sprite=game.createSprite();
       obj.sprite.initAnim(ttrLeftAnim);
       obj.sprite.setState(STATE_TTR_ALIVE);
       obj.sprite.setXY(x,y);
       obj.sprite.setSize(2,2);
       obj.vx=-TTR_SPEED;
       obj.vy=0;
       obj.HP=TTR_HP;
       obj.jump=true;
       obj.frag=0;
       obj.time=0;
       for (i=0;i<KTTR_COUNT;i++) {
          kttr[i]=new Kttr();
       }
       obj.sprite.onUpdate=function(){
          if (game.state!=GS_GAME) return;
          switch (obj.sprite.getState()) {
             case STATE_TTR_ALIVE: obj.alive(); break;
             case STATE_TTR_DEAD: obj.dead(); break;
          }
       }
       obj.alive=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          obj.time++;
          if (obj.time==100) {
             obj.time=0;
             for (i=0;i<KTTR_COUNT;i++) {
                if (kttr[i].sprite.getState()==STATE_DEAD) {
                   kttr[i].init(player.sprite.getX(),1);
                   break;
                }
             }
          }
          if (obj.vx<0 && obj.sprite.getAnim()!=ttrLeftAnim) {
             obj.sprite.initAnim(ttrLeftAnim);
          }
          if (obj.vx>0 && obj.sprite.getAnim()!=ttrRightAnim) {
             obj.sprite.initAnim(ttrRightAnim);
          }
          if (!obj.jump) {
             var r=Math.random();
             obj.vy=0;
             if (obj.vx!=0) {
                if (r<0.01) {
                   obj.vx=0;
                }
                else if (r<0.02) {
                   obj.vx*=-1;
                }
                else if (r<0.03) {
                   obj.vy=TTR_VY;
                   obj.jump=true;
                }
             }
             else {
                if (r<0.02) {
                   obj.vx=TTR_SPEED;
                }
                else if (r<0.04) {
                   obj.vx=-TTR_SPEED;
                }
             }
          }
          else {
             obj.vy+=AY;
             if (obj.vy>-TTR_VY) {
                obj.vy=-TTR_VY;
             }
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
          obj.sprite.initHit(ttrBodyHit);
          obj.sprite.onHitSprite=function(spr){
             switch (spr.getState()) {
                case STATE_WALL:
                case STATE_HATENA_HATENA:
                case STATE_HATENA_BLOCK:
                   obj.vx*=-1;
                   break;
                case STATE_PLAYER_ALIVE:
                case STATE_CLEAR:
                   if (player.vy>obj.vy) {
                      if (obj.frag>=5) {
                         obj.HP-=1;
                         game.addScore(10);
                      }
                      obj.vy=0;
                      if (obj.HP==0) {
                         obj.sprite.setState(STATE_TTR_DEAD);
                         obj.sprite.initAnim(vanishAnim);
                      }
                      player.vy=PLAYER_VY;
                      player.jump=true;
                      player.muteki=true;
                   }
                   else {
                      if (player.muteki) {
                         player.vy=PLAYER_VY;
                         player.jump=true;
                      }
                      else {
                         spr.setState(STATE_PLAYER_DEAD);
                         spr.initAnim(vanishAnim);
                      }
                   }
                   break;
             }
          }
          game.testHitSprite(obj.sprite);
          if (obj.vy>=0) {
             obj.sprite.setXY(x+obj.vx,y+obj.vy);
             obj.jump=true;
             obj.sprite.initHit(ttrFootHit);
             obj.sprite.onHitSprite=function(spr){
                if (spr.getState()==STATE_WALL || spr.getState()==STATE_HATENA_HATENA || spr.getState()==STATE_HATENA_BLOCK) {
                   if (obj.jump) {
                      obj.vy=(spr.getY()-2)-(obj.sprite.getY()-obj.vy);
                      obj.jump=false;
                   }
                }
             }
             game.testHitSprite(obj.sprite);
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
       }
       obj.dead=function(){
          obj.sprite.stepAnim();
          if (obj.sprite.isAnimOver()) {
             obj.sprite.setXY(-3,-3);
             obj.sprite.setState(STATE_DEAD);
             player.sprite.setState(STATE_GRAND_CLEAR);
          }
       }
    }

    function Kttr(){
       var obj=this;
       obj.sprite=game.createSprite();
       obj.sprite.setState(STATE_DEAD);
       obj.sprite.setXY(-3,-3);
       obj.vx=0;
       obj.vy=0;
       obj.jump=true;
       obj.init=function(x,y){
          obj.sprite.initAnim(ttrLeftAnim);
          obj.sprite.setState(STATE_TTR_ALIVE);
          obj.sprite.setXY(x,y);
          obj.vx=0;
          obj.vy=0;
          obj.jump=true;
       }
       obj.sprite.onUpdate=function(){
          if (game.state!=GS_GAME) return;
          switch (obj.sprite.getState()) {
             case STATE_TTR_ALIVE: obj.alive(); break;
             case STATE_TTR_DEAD: obj.dead(); break;
          }
       }
       obj.alive=function(){
          var x=obj.sprite.getX();
          var y=obj.sprite.getY();
          if (obj.vx<0 && obj.sprite.getAnim()!=ttrLeftAnim) {
             obj.sprite.initAnim(ttrLeftAnim);
          }
          if (obj.vx>0 && obj.sprite.getAnim()!=ttrRightAnim) {
             obj.sprite.initAnim(ttrRightAnim);
          }
          if (!obj.jump) {
             var r=Math.random();
             obj.vy=0;
             if (obj.vx!=0) {
                if (r<0.01) {
                   obj.vx=0;
                }
                else if (r<0.02) {
                   obj.vx*=-1;
                }
                else if (r<0.03) {
                   obj.vy=TTR_VY/2;
                   obj.jump=true;
                }
             }
             else {
                if (r<0.02) {
                   obj.vx=TTR_SPEED;
                }
                else if (r<0.04) {
                   obj.vx=-TTR_SPEED;
                }
             }
          }
          else {
             obj.vy+=AY;
             if (obj.vy>-TTR_VY/2) {
                obj.vy=-TTR_VY/2;
             }
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
          obj.sprite.initHit(enemyBodyHit);
          obj.sprite.onHitSprite=function(spr){
             switch (spr.getState()) {
                case STATE_WALL:
                case STATE_HATENA_HATENA:
                case STATE_HATENA_BLOCK:
                   obj.vx*=-1;
                   break;
                case STATE_PLAYER_ALIVE:
                case STATE_CLEAR:
                   if (player.vy>obj.vy) {
                      obj.vy=0;
                      obj.sprite.setState(STATE_TTR_DEAD);
                      obj.sprite.initAnim(vanishAnim);
                      player.vy=PLAYER_VY;
                      player.jump=true;
                      player.muteki=true;
                      ttr.frag++;
                   }
                   else {
                      if (player.muteki) {
                         obj.vy=0;
                         obj.sprite.setState(STATE_TTR_DEAD);
                         obj.sprite.initAnim(vanishAnim);
                         player.vy=PLAYER_VY;
                         player.jump=true;
                         ttr.frag++;
                      }
                      else {
                         spr.setState(STATE_PLAYER_DEAD);
                         spr.initAnim(vanishAnim);
                      }
                   }
                   break;
             }
          }
          game.testHitSprite(obj.sprite);
          if (obj.vy>=0) {
             obj.sprite.setXY(x+obj.vx,y+obj.vy);
             obj.jump=true;
             obj.sprite.initHit(enemyFootHit);
             obj.sprite.onHitSprite=function(spr){
                if (spr.getState()==STATE_WALL || spr.getState()==STATE_HATENA_HATENA || spr.getState()==STATE_HATENA_BLOCK) {
                   if (obj.jump) {
                      obj.vy=(spr.getY()-1)-(obj.sprite.getY()-obj.vy);
                      obj.jump=false;
                   }
                }
             }
             game.testHitSprite(obj.sprite);
          }
          obj.sprite.setXY(x+obj.vx,y+obj.vy);
       }
       obj.dead=function(){
          obj.sprite.stepAnim();
          if (obj.sprite.isAnimOver()) {
             obj.sprite.setXY(-3,-3);
             obj.sprite.setState(STATE_DEAD);
          }
       }
    }



gamen.js


var GS_TITLE=0;
var GS_TITLE2=1;
var GS_READY=2;
var GS_READY2=3;
var GS_GAME=4;
var GS_CLEAR=5;
var GS_CLEAR2=6;
var GS_CONTINUE=7;
var GS_CONTINUE2=8;
var GS_GAMEOVER=9;
var GS_GAMEOVER2=10;
var GS_GRANDCLEAR=11;
var GS_GRANDCLEAR2=12;

var title;
var splash;

var STATE_SPLASH=-1;

    function initTitle() {
       game.clear();
       game.setViewXY(0,0);
       title=game.createSprite();
       title.initAnim(titleAnim);
       title.setSize(CELL_XCOUNT,CELL_YCOUNT);
    }

    function initSplash(image) {
       splash.setXY(game.getViewX(), game.getViewY());
       splash.initAnim(new Array(image));
    }