読者です 読者をやめる 読者になる 読者になる

`(kakko ,man)

Find a guide into tomorrow by taking lessons from the past

Lisp Game Programming <Step15>

まだネタが残っていたので少々追加 Step15はパッケージ化 パッケージ化が必要かどうかはさておき、これまで作成したSTEP14までのプログラムstep14.lispをcommon-shooter.lispに変更し、common-shooter.asd、package.lispを作成する まずはpackage.lisp ⇒ ;;;…

Lisp Game Programming <Step14>

Step14はオープニングメッセージの表示 ;; Step14 <Start Game Message>;; -----------------------------------------------------------------------------------------------(defgeneric Game-start-message (pointer stage keystate)) (defmethod Game-start-message (pointe</start>…

Lisp Game Programming <Step13>

step13は難易度を上げるステージの設定 ;; Step13 <Stage Class>;; -----------------------------------------------------------------------------------------------(defclass stage () ((%stage-flag :initarg :stage-flag :initform t :accessor stage-flag) (%stag</stage>…

Lisp Game Programming <Step12-3>

ここまでのプログラムをまとめると以下なんとかgameの形になった ⇒ step12.lisp ;;;; The Common-Shooter ;;; step1 <Game Frame>;;; step2 <Audio>;;; step3 <Sprite Sheets> <Character Object> <Draw> <Initialize>;;; step4 <Scroll> <Scroll Counter>;;; step5 <Font> <Score Panel>;;; step6 <Key State>;;; step7 <Game Field>;;; step8 <Shot>;;…</shot></game></key></score></font></scroll></scroll></initialize></draw></character></sprite></audio></game>

Lisp Game Programming <Step12-2>

step12の2番目はenemyの爆発処理メインループを16回回ったら、enemyのstateを2(explosion)から0(dead)にする ;; Step12 <Explode enemy>;; -----------------------------------------------------------------------------------------------(defvar *enemybom-sound-flag*</explode>…

Lisp Game Programming <Step12-1>

step12の最初はEnemyにshotがhitしたかどうかを判断するプログラム enemyのstateを2(explosion)、shotのstateを0(dead)、爆発カウンターを0にセットして起動し、scoreを+100して、もしhighscoreよりscoreが大きくなったら、highscoreにscoreをセット ;; Step…

Lisp Game Programming <Step11-4>

Step11の最後はshipが全て無くなったときにメッセージを出して終了するプログラム ;; Step11 <Game Over Message>;; ----------------------------------------------------------------------------------------------- (defgeneric Game-over-message (score)) (defmethod Gam</game>…

Lisp Game Programming <Step11-3>

3番目は爆発したshipの復活処理で、リバイバルカウンターが200になったら、shipのstateを1(alive)に変更する ;; Step11 <Revive Ship>;; ----------------------------------------------------------------------------------------------- (defgeneric Revive-counter </revive>…

Lisp Game Programming <Step11-2>

2番目はshipの爆発処理のプログラム 爆発音を鳴らし、爆発カウンタが100になったらスコアボードのshipを1つ減らす shipが残っていたら、stateを3(revival)にしてshipを初期位置に戻し、revival-cntを0にしてリバイバルカウンターを起動する ;; Step11 <Explode Ship>;; -</explode>…

Lisp Game Programming <Step11-1>

Step11の最初はshipがenemy、enemy-shotと衝突した場合の処理プログラム 互いの位置が重なったかどうかで衝突を判断しているが、重なった場合、hitフラグをonにし、enemy、enemy-shotのstateを0(dead)にして、shipのstateを2(explode)に設定しつつ、explode-…

Lisp Game Programming <Step10-4>

ここまでのプログラムをまとめると以下 ⇒ step10.lisp ;;;; The Common-Shooter ;;; step1 <Game Frame>;;; step2 <Audio>;;; step3 <Sprite Sheets> <Character Object> <Draw> <Initialize>;;; step4 <Scroll> <Scroll Counter>;;; step5 <Font> <Score Panel>;;; step6 <Key State>;;; step7 <Game Field>;;; step8 <Shot>;;; step9 </shot></game></key></score></font></scroll></scroll></initialize></draw></character></sprite></audio></game>

Lisp Game Programming <Step10-3>

3番目はenemy-shotのstateが0(dead)になったものをenemy-shot-listからdeleteするプログラム ;; Step10 <Remove Dead Enemy Shot>;; -----------------------------------------------------------------------------------------------(defgeneric Remove-dead-enemy-shot (foe)) (</remove>…

Lisp Game Programming <Step10-2>

2番目は、enemyのstateが1(alive)で画面内に位置し(少しでもはみ出したら弾を発射しない)、出現してから64回移動したらenemy-shot(弾)を撃つプログラムshot位置はenemyの真ん中に設定し、移動方向はenemyの種類で異なる enemy1 ⇒ enemy-shotは真下に移動 e…

Lisp Game Programming <Step10-1>

enemy-shot-listに格納されているenemy-shotの移動のためのプログラム stateが1(alive)の時に移動するが、画面の外にでたらstateを0に設定 ;; Step10 <Move Enemy Shot>;; -----------------------------------------------------------------------------------------------</move>…

Lisp Game Programming <Step9-3>

3番目はenemyのstateが0になった場合にenemy-listからdeleteするプログラム ;; Step9 <Remove Dead Enemy>;; -----------------------------------------------------------------------------------------------(defgeneric Remove-dead-enemy (foe)) (defmethod Remove-dead-e</remove>…

Lisp Game Programming <Step9-2>

2番目はenemy1、enemy2、enemy3をランダムに発生させるプログラム enemy1はランダムに設定したウィンドウ上の位置から垂直に下降enemy2はランダムに設定したウィンドウ下の位置が真ん中より右の時は左上に上昇し、左の時は右上に上昇enemy3はランダムに設定…

Lisp Game Programming <Step9-1>

最初はクラスfoeを作成し、enemyの移動と種類による移動方向の設定をプログラム id2=enemy1、id3=enemy2、id4=enemy3 enemy1は下降した着地点がshipより右であれば左にー2、左であれば右に2上昇しながら移動するようにdx、dyを設定 enemy1、2、3、は画面の外…

Lisp Game Programming <Step8-2>

これまでのプログラムコードをまとめると以下 step4のscroll周りで設計の変更を実施した timingクラスを作成し、<Scroll Counter>を追加 ⇒ step8.lisp なお、ブログでは((を表示するためにエスケープ文字を使用していることから、このままcopy&pasteで実行するとエラーが発生</scroll>…

Lisp Game Programming <Step8-1>

shipのstateが爆発中の状態ではなく、且つshotがdeadの状態の時、zキーを押すとshotの発射位置を計算してshotのstateをaliveにし、shot音を出して16dotづつ移動するプログラム ;; step8 <Shot>;; --------------------------------------------------------------</shot>…

Lisp Game Programming <Step7>

ゲームフィールドクラスをつくり、shipがゲーム画面からはみ出さないようにするメソットを追加 ;; step7 <Game Field>;; -----------------------------------------------------------------------------------------------(defclass game-field () ((%field-x :initarg</game>…

Lisp Game Programming <Step6>

キー操作でshipを上下左右に動かすため、キーの状況を管理するクラスを作成 そして、shipを移動させるためのメソッドも作成する ↑↓→←zのどれかのキーが押されたら、keystateクラスのそれぞれにtがセットされる なお、Shipが移動できるのは、shipのstateがa…

Lisp Game Programming <Step5-2>

ゲームのスコアを表示させるパネルをウィンドウの右側に配置 追加するプログラムは以下 ;; step5 <Score panel>;; -----------------------------------------------------------------------------------------------(defvar *score* 0) ; score(defvar *highscore* 5000</score>…

Lisp Game Programming <Step5-1>

ゲームのタイトル表示のためのFontを準備 Windows 7のFontを指定して利用 タイトルFontは72、メニューFontは16のサイズで設定 ;; step5 <Font>;; -----------------------------------------------------------------------------------------------(defparameter </font>…

Lisp Game Programming <Step4>

64×64の大きさのmapchipを、(0,-64)の位置から横8個、縦に9個並べ、1dotずつ縦にスクロールさせていき、mapchipが96個分動いたら0にリセット 追加するプログラムは以下 ;; step 4 <Scroll>;; -------------------------------------------------------------------</scroll>…

Lisp Game Programming <Step3-5>

いままでのプログラムをまとめると以下のようになる ウィンドウを開いて左下方にShipを表示し、BGMを鳴らす ⇒ step3.lisp ;;;; The Common-Shooter;;; step1 <Game Frame>;;; step2 <Audio>;;; step3 <Sprite Sheets> <Character Object> <Draw> <Initialize> ;; step2 <Audio>;; --------------------------------------------------------</audio></initialize></draw></character></sprite></audio></game>…

Lisp Game Programming <Step3-4>

step3の4番目はクラスから生成したオブジェクトのイメージidからキャラクタidを指定しての描画 ;; step3 <Draw images>;; ----------------------------------------------------------------------------------------------- (defun Draw (obj) "character draw" (ecase </draw>…

Lisp Game Programming <Step3-3>

step3の3番目は設計したクラスのインスタンスの生成 ship ⇒ *image0* の0番目のデータをx:224、y:416の位置にstate(alive)で生成すると、以下のような形になる (defun Common-shooter () "main routine" ・・・・・・ ; step 3 (let ((ship (make-instance 'en…

Lisp Game Programming <Step3-2>

step3の2番目はクラスの設計 objectクラス ⇒ イメージデータのID番号 Imageid イメージデータ内のキャラクタデータのID番号 id キャラクタオブジェクトの位置 x キャラクタオブジェクトの位置 y キャラクタオブジェクトの長さ width キャラクタオブジェクト…

Lisp Game Programming <Step3-1>

step3の最初はイメージデータの読み込みとID番号の付与 3つのイメージデータを読み込んでそのデータそれぞれにidを付与し、またそのデータの中のキャラクタ個々にもidを付与する たとえば *image0* の中のキャラクタへidの付与は(0 0 32 32) ⇒ id 0, (32 0 …

Lisp Game Programming <Step2>

Step2はサウンド関係のプログラムを追加 ここを参照 https://github.com/skypher/lispbuilder/blob/master/lispbuilder-sdl-mixer/examples/mixer.lisp http://lispbuilder.sourceforge.net/lispbuilder-sdl-mixer.html Emacs+Slime上からSBCL、CCL、ECLを…

Lisp Game Programming <Step1>

ボケ予防にCommon Lispで簡単なゲームを作ってみることにした 分かりやすいサンプルゲームを見つけたので、作者に了承を得て移植してみる http://mclass13.web.fc2.com/hspstudy/shooter1.htm 但し、分かりやすさを重視してマクロは使用せず、後の楽しみに取…