“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

124.HSPでゲームを作ろう:シューティングゲームっぽい何か その1

標準スプライトの学習を兼ねて作ったのが、あれっぽいあれwだったのは、「シューティングゲームっぽい何か」を作るアイデアが浮かんだからだった。
イデアの大筋から、細かな仕様を固めて作る前に、シューティングゲームの基礎である、自機の移動と自弾の発射処理を作ることにした。

移動処理自体はすでに作っているので、自弾の発射処理を作っていく。
オーソドックスな作りなら、スペースキーをショットキーにするのだが、3つ以上のキー同時押しに対応できないことが多いので、Zキーをショットキーにした。

で、JStickであれば、ボタン1が同時に検出できて好都合。

だけど、動作確認に使っているメガドラミニの6BPADは、ちょっと変態さんな並びのようで、Yボタンがボタン1になる。

「PAD設定さん」では、そのあたりをコンフィグできるのだが、まだあとで対応する。
とりあえず、Aボタンがボタン3なので、ボタン1と3をショットキーになるようにした。この副産物として、Cキーもショットキーになった。

弾は画面外に出たら勝手に消えてくれるように、便利な命令es_areaで、画面サイズの座標値を指定した。

ショットキーを押したら、自弾を処理するサブルーチンに飛ばす。es_exnewでスプライトの空きを調べて、空いてたらスプライトのセット、タイプ番号の設定、そして、es_adirで、自動的に移動するようにした。

#include "hsp3dish.as"
#include "m_joystick.hsp"

  screen 0,800,600,0
  title "シューティングっぽい何か(仮称)"

  es_ini ;スプライト初期化

  buffer 2
  picload "bg.png" ;仮背景画像

  buffer 3 ;バッファを作成
  picload "player.png" ;自機画像を読み込み
  es_size 64,64,1 ;パターンサイズ、ヒット領域1%で
  es_pat 0,0,0 ;パターンを読み込み

  buffer 4 ;バッファを作成
  picload "shot.png" ;ショット画像を読み込み
  es_size 64,64,20
  es_pat 1,0,0

  gsel 0 ;操作バッファを0に戻す

  px=300:py=200 ;自機のXY座標
  es_set 0,px,py,0,0,1 ;自機のスプライトをセット
  gamecnt=0

  es_area 0,0,800,600 ;スプライトの領域設定
  moveangle=2 ;自機の弾の方向

*main
  redraw 0
  sht=0 ;ショットボタンフラグ
  JStick key,1+2+4+8
  if key&1 : px=px-5 : ix=0 ;カーソル左
  if key&4 : px=px+5 : ix=2 ;カーソル右
  if key&2 : py=py-5 : iy=0 ;カーソル上
  if key&8 : py=py+5 : iy=2;カーソル下
  if (key&2048) or (key&8192) : sht=1 ;ボタンZ、Cとボタン1、ボタン3(6BパッドのA)

  px=limit(px,0,800-64)
  py=limit(py,0,600-64)
  
  if key&128 : end ;ESCでゲーム終了(暫定)

  pos 0,0
  gcopy 2,0,0,800,600 ;背景画像のコピー
  color 255,0,0:gmode 2
  gamecnt++
  es_pos 0,px,py ;自機スプライトの位置変更

  gosub *shoot ;自弾の発射
  es_draw 

  redraw 1
  await 1000/60
  goto *main

*shoot
  if sht=1 {
    es_exnew snum,100,101,1 ;ショットは画面内に最大2発
    if snum>0 { ;ショットの空きがあれば
      es_set snum,px,py,1
      es_type snum,2 ;弾はタイプ2
      es_adir snum,2*8,1000 ;方向はとりあえず前方。
    }
  }

return

そして、これを動かしてみたのがこれ。うん。雰囲気は出てくるね。
youtu.be

自機のグラフィックがダサいのは、ご愛敬ということでw
これからもう少しマシに見えるように頑張って描いて行くつもり。