`(kakko ,man)

Find a guide into tomorrow by taking lessons from the past

Lisp Game Programming 2 <Stage 13-1 Structure>

参考にしているサイトのショットパターンをそのまま利用するのが近道と判断し、それをLispで記述した。 当初考えたとおり、ショットパターンの構造体を作りそれを配列にしてみた。 なお、HSPでは360度を256分割した数値で表現しているため、それを考慮して数…

Lisp Game Programming 2 <Stage 12>

Stage12では、shipが敵や敵弾と衝突したときのプログラムを組みこんでみる。 また、STAGEが切り替わるためには、デカキャラを倒す必要があり、普通の敵より激しい爆発として作成したのが以下のプログラム。 これで「ほぼ」完成!(弾幕を除き) ;; Step12 <Ship Hit P> ;;</ship>…

Lisp Game Programming 2 <Stage 11>

Stage11では、左Shiftキーを押すと敵と敵の弾が全て破壊され、爆発するような関数を組み込むことにする。以下のプログラムでは、bomb-managerクラスの作成と、shipが爆発中でなく且つボムが残っていて爆発中でない時に左Shiftキーを押すと、ボムが爆発してボ…

Lisp Game Programming 2 <Stage 10-2 Program>

まだ、衝突判定やオプションのボムを組み込んでいないが、一旦プログラムの全体像を見てみる。 ※OSが7から10に変わったことで、それまでemacs+slimeで動作の検証に使っていたCCLが起動しなくなった。 こんな感じ! Can't allocate required TLS indexes. Fir…

Lisp Game Programming 2 <Stage 10-1 Audio>

そろそろサウンドのプログラムを組み込んでおかないと、後から追加するのは面倒っぽいので、ゲームで使うサウンドを組み込むこととする。 Lisp Game Programmingで作ったプログラムをパッケージ化して流用。 audio-list.lisp⇒ (defpackage :audio-list (:use…

Lisp Game Programming 2 <Stage 9>

前回ではオプションを取ると自分の周りをバルーンが回るように設定したが、敵も弾をださないとつまらないので以下のプログラムを作ってみた。敵が発射する弾は1方向のみだが、自分の移動先をめがけて撃ってくる。 これを実現するために、Lispのsqrt関数を使…

Lisp Game Programming 2 <Stage 8>

マップ上に登場する敵以外のもので「オプション」と「ボム」のアイテムがあるが、どのように処理しているのかざっと見てみると、こんな感じの動作をしている オプション → 取ると、自分の周りを回転するバルーンが1個ずつ増え、最大は2個まで。 それ以上取…

Lisp Game Programming 2 <Stage 7>

マップスクロール、スタート&ゲームオーバー画面、敵の出現と作ってきたのでプログラムが長くなり、読みにくくなったため、表示方法を変更することとした。 ※実はWeb系はまったくの苦手で、CSSって言葉を今回初めて知った。 Stage7では、マップと敵の出現…

Lisp Game Programming 2<Stage 6-2>

<Stage 6-1>で作った,enemy-map-list.lispとmove-pattern.lispを読み込むテストプログラムを作ってみた。 画面イメージのidを使用しているため、敵の画像が回転したりするとidが切り替わる仕様のため、かなりゴチャゴチャしたプログラムとなってしまった。 たとえば、敵</stage>…

Lisp Game Programming 2 <Stage 6-1>

敵のいないシューティングゲームなんて、「○○の入らないコーヒーみたい」(このフレーズを知っている人は相当なオジサン)なので、オリジナルのサイトをまねてやってみた。かなり汚いコードになったが、動けばヨシと割り切る。 まずは、8つの敵の配置データ…

Lisp Game Programming 2 <Stage 5 Information>

ちょっと補足。 プログラムを見れば一目瞭然だけど、メニュー画面では、UP・DOWNキーを押すことでポインターが動き、メニューを指し示すことができる。 また、左のSHIFTキーを押すことで、スクリーンをFULLSCREENかWINDOWに切り替えることができ、STARTやEXI…

Lisp Game Programming 2 <Stage 5>

3面切り替えのスクロールができたので、ここも一気にスタートメニューからゲームオーバーのメッセージまで作成。 ここでの工夫は、画面のモードの切り替え方法。 https://github.com/jueqingsizhe66/lispbuilder-1/blob/master/lispbuilder-sdl/examples/pa…

Lisp Game Programming 2 <Stage 4>

せっかく3面のマップを用意したのだから、stage1→stage2→stage3と切り替わっていくプログラムとする。 まずは font ;; step1 <Fix Ship Position>;; ----------------------------------------------------------------------------------------------- ・・・・・・・・・・・</fix>…

Lisp Game Programming 2 <Stage 3>

さて、スクロールのテスト開始。 スクロール用のプログラムを以下のように追加(青字)して、CL-USER>(common-abogadro)を実行すると、想定どおりにスクロールした。 なお、赤字の*map1*を*map2*や *map3*に変更するとそれぞれのマップが表示される。 ab-sta…

Lisp Game Programming 2 <Stage 2>

参考にさせていただいたサイトのリストを見たところ、キャラクタのidをリストにしていた。 これを参考に、先のプログラムで読み込んだid番号と比べてみたらこんなmap用のプログラムができた。 3面のmapを以下に用意したけど、スクロールの仕方はこんな感じ…

Lisp Game Programming 2 <Stage 1>

mapchipが1つだとスクロールが簡単に実現できた。 http://tomekame0126.hatenablog.com/entry/2014/07/03/055411 でも、地図のようなものはmapchipの組み合わせでできているため、Lispではどのようにスクロールを実現(市販のゲームのようなイメージ)でき…

Lisp Game Programming <Step17 Information>

クラスをマクロ化していく中で、工夫が必要な点がでた ;; Step13 <Stage Class> <----------- step 14 correct;; ----------------------------------------------------------------------------------------------- ;(defclass stage (); ((%stage-flag :initarg :stage</stage>…

Lisp Game Programming <Step17>

そういえば「楽しみ」のマクロが残っていた。 step3でクラスを作ったが、もっとカッコよくするには? ;;step3 <Character object>;; -----------------------------------------------------------------------------------------------(defclass object () ((%imageid :initar</character>…

Lisp Game Programming <Step16 Information>

このシューティングゲームの完成形はこんな感じ 初めてCommon Lispでプログラムを作ったため、やっつけ仕事感ありありだけど、とりあえず動けば目的達成! common-shooter.lisp ⇒ ;;;; The Common-Shooter ;;; step1 <Game Frame>;;; step2 <Audio>;;; step3 <Sprite Sheets> <Character Object> <Draw Images> <Initialize>;;; step4 <Scroll> <Scroll Counter>;;; </scroll></scroll></initialize></draw></character></sprite></audio></game>…

Lisp Game Programming <Step16>

Step16はスタンドアローンの実行ファイルの作成 プログラム(common-shooter.lisp)に以下を追加 ;;; step1 <Game Frame>;;; step2 <Audio>;;; step3 <Sprite Sheets> <Character Object> <Draw Images> <Initialize>;;; step4 <Scroll> <Scroll Counter>;;; step5 <Font> <Score Panel>;;; step6 <Key State>;;; step7 <Game Field>;;; step8 <Shot>;;; ste…</shot></game></key></score></font></scroll></scroll></initialize></draw></character></sprite></audio></game>

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-…