「日記2010年10月その1」の編集履歴(バックアップ)一覧はこちら
日記2010年10月その1 - (2010/10/11 (月) 17:16:57) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
*2010/10/10
自作ミニゲーム プログラム制作日記。
HTML5.0+JScript5.5
固定画面に次々と現れる雑魚敵を倒す超古典ゲーム。
var KeyBuffer;//キー入力バッファ
var e_manage=new Array()//マップ上にいる敵データを管理する配列
var myUnit//自機の管理
var x_position=new Array()//敵味方の大雑把な位置を表現する
var eBullet_manage=new Array();//敵の弾を管理する配列
var myBullet_manage=new Array();//自機の弾を管理する配列。
var map;//画面マップ
var mapHeightDates=new Array()//地面の凸凹を現す変数データ、地面は1次元の折れ線として表現される、当たり判定がめんどくさくなる理由の王様;
function eCannon(x,y,hp,timer,rndTimer) {
//大砲を表現するクラス
this.x = x;
this.y = y;
this.hp= hp;//ヒットポイント
this.bmp = new Image("e_CannonBody.jpg");//キャノン本体の画像jscriptは久しぶりなのでこれでよかったかちょっと記憶が、、、、
this.Cannon = new Image("e_Cannon.jpg");キャノンの砲身
this.AttackTimer= timer;//攻撃間隔
this.rndTimer = rndTimer;//攻撃間隔のランダムな揺らぎのサイズ
this.state=0;//0なら稼働中、1なら爆発エフェクト中
this.round=0;//大砲の砲身の角度を表す変数
this.nextAttackTimer=0;//fps計算一回ごとに1引かれる変数、これが0以下になると弾発射処理が行われ、nextAttackTimerは再セットされる。
this.attack = function() {
//放物線を描いて飛ぶ大砲の弾。これを発射しeBullet_manageに弾を登録するメソッド;
//弾の移動は全てeBullet_manageから取り出しmoveメソッドで行う。jscriptではスタックに複数の型を混在させることが出来たか記憶があいまい、混在出来るいい意味でいい加減な言語だったと思うけど?
}
this.raunchingR_Set=function(){
// 主人公機と自機のX,Y座標の差分にあわせて、大砲の砲身の角度を設定する関数。this.roundを設定。
//this.roundに合わせてキャノンの角度を変更する
//微分と2次曲線の性質なんて何て懐かしい
}
this.nextAttackCheck=function(){
//
}
}
function CannonBullet(x,y,xSpeed,ySpeed){
//大砲から発射される弾を表現するデータ、弾は大地と接触する、もしくは画面の右端、左端に到達するまで放物線を描いて飛び、到達、着弾と同時に画面から消失する
//誤差が出て困る計算なわけもなく座標は折れ線で近似計算する
this.x=x;
this.y=y;
this.xSpeed=xSpeed;
this.ySpeed=ySpeed;
this.state=0//大砲の弾の状態、0なら移動中、1なら着弾し爆発エフェクト
this.nextCalcCount=10;//ここで指定した数nだけ、nFPS過ぎるまで直線移動で近似
this.explosionTimer=10;//爆発の持続時間
this.explosionSize=10;//爆発時のサイズ,ゲーバラとあわせてよく考える必要あり
this.nextX;//弾の移動後の位置
this.nextY;//弾の移動後の位置
this.move=founction (){
//弾の移動state=0なら移動処理;
//state=1なら爆発アニメ,explosionTimeを1減らし、これが0以下になるまでは爆発効果
//計算により弾が地面とぶつかることが判明した場合、state=1に変更、弾を爆発させる。
}
}
*2010/10/10
自作ミニゲーム プログラム制作日記。
HTML5.0+JScript5.5
固定画面に次々と現れる雑魚敵を倒す超古典ゲーム。
var KeyBuffer;//キー入力バッファ
var e_manage=new Array()//マップ上にいる敵データを管理する配列
var myUnit//自機の管理
var x_position=new Array()//敵味方の大雑把な位置を表現する
var eBullet_manage=new Array();//敵の弾を管理する配列
var myBullet_manage=new Array();//自機の弾を管理する配列。
var map;//画面マップ
var mapHeightDates=new Array()//地面の凸凹を現す変数データ、地面は1次元の折れ線として表現される、当たり判定がめんどくさくなる理由の王様;
var g=9.8//重力の値、必要に応じて変更予定
function eCannon(x,y,hp,timer,rndTimer,BulletSpeed) {
//大砲を表現するクラス
this.x = x;
this.y = y;
this.hp= hp;//ヒットポイント
this.bmp = new Image("e_CannonBody.jpg");//キャノン本体の画像jscriptは久しぶりなのでこれでよかったかちょっと記憶が、、、、
this.Cannon = new Image("e_Cannon.jpg");キャノンの砲身
this.AttackTimer= timer;//攻撃間隔
this.rndTimer = rndTimer;//攻撃間隔のランダムな揺らぎのサイズ
this.BulletSpeed=BulletSpeed;//弾速
this.state=0;//0なら稼働中、1なら爆発エフェクト中
this.round=0;//大砲の砲身の角度を表す変数
this.nextAttackTimer=0;//fps計算一回ごとに1引かれる変数、これが0以下になると弾発射処理が行われ、nextAttackTimerは再セットされる。
this.attack = function() {
//放物線を描いて飛ぶ大砲の弾。これを発射しeBullet_manageに弾を登録するメソッド;
//弾の移動は全てeBullet_manageから取り出しmoveメソッドで行う。jscriptではスタックに複数の型を混在させることが出来たか記憶があいまい、混在出来るいい意味でいい加減な言語だったと思うけど?
}
this.raunchingR_Set=function(){
// 主人公機と自機のX,Y座標の差分にあわせて、大砲の砲身の角度を設定する関数。this.roundを設定。
//this.roundに合わせてキャノンの角度を変更する
//微分と2次曲線の性質なんて何て懐かしい
var x1=myUnit.x-this.x;
var y1=myUnit.y-this.y;
var k=0.5*g*x1*x1/this.BulletSpeed;
var d=x1*x1-4*k*(k+y1);
//弾が届く位置に敵がいたらd>0となるので発射
if(d>0){
var s=(x1+Math.SQRT2(d))/2*k;
var t=Math.SQRT2(1+s*s);
var cb=CannonBullet(this.x,this.y,this.BulletSpeed/t,this.BulletSpeed*s/t);
//弾を生成したので、弾を管理するデータ型に管理させる。これはサブルーチンに渡して処理を行う。
//ホテルの空き部屋を探すのと同じ処理でまず空いてる場所を探す
}
}
this.nextAttackCheck=function(){
//
}
}
function CreateMyUnit(x,y){
var this.x=x;
var this.y=y;
}
function CannonBullet(x,y,xSpeed,ySpeed){
//大砲から発射される弾を表現するデータ、弾は大地と接触する、もしくは画面の右端、左端に到達するまで放物線を描いて飛び、到達、着弾と同時に画面から消失する
//誤差が出て困る計算なわけもなく座標は折れ線で近似計算する
this.x=x;
this.y=y;
this.xSpeed=xSpeed;
this.ySpeed=ySpeed;
this.state=0//大砲の弾の状態、0なら移動中、1なら着弾し爆発エフェクト
this.nextCalcCount=10;//ここで指定した数nだけ、nFPS過ぎるまで直線移動で近似
this.explosionTimer=10;//爆発の持続時間
this.explosionSize=10;//爆発時のサイズ,ゲーバラとあわせてよく考える必要あり
this.nextX;//弾の移動後の位置
this.nextY;//弾の移動後の位置
this.move=founction (){
//弾の移動state=0なら移動処理;
//state=1なら爆発アニメ,explosionTimeを1減らし、これが0以下になるまでは爆発効果
//計算により弾が地面とぶつかることが判明した場合、state=1に変更、弾を爆発させる。
}
}