【プチコン4講座】きこりゲームの土台を作っていこう

プチコン4

きこりの与作 プチコン4

こんにちは。なおキーヌです。

ブログ毎日更新は280日目になります。

カセットビジョンのゲーム「きこりの与作」を再現してみようの続きの記事になります。

上記は予備知識になりますので、本記事から始めても問題なく作り進められます!

本講座では、きこりの与作(原作名:与作)は商標登録されています(おそらく)ので木こりゲームと称します。

まぁ、作っていくのはきこりの与作のコピーなのですが(笑)

流石にカセットビジョンの見た目を作るのは逆に面倒くさいので、
プチコン4のスプライトと衝突判定をふんだんにつかっていきます。

それでは木こりゲーム作り第1回目、始めていきましょう。

  1. 全体の構想を考えよう
  2. マップを表示してみよう
  3. スプライトを出して動かしてみよう
  4. 斧を振ってみよう

全体の構想を考えよう

基本的にはきこりの与作のクローンになります。

一応、構成とかシステムを箇条書きしてみましょう。

  • 通常移動は左右のみ
  • ジャンプは垂直飛びオンリー
  • 1ミスでライフ1つへる
  • 特殊な障害物に触れると身動きがとれなくなる
  • 斧を振って敵や木を倒すことが出来る
  • フィールドにある木をすべて倒すとゲームクリア

原作は開始音と死亡音と効果音ぐらいしかなかったので、
折角なので用意されたBGMとかをふんだんにつかっていきましょう。

マップを表示してみよう

ステージを描写します。

カセットビジョン版のきこりの与作はべたぬりが基本でしたが、
プチコン4は美麗なドット絵が用意されていますので贅沢にも使っていきます。

早速コードを書いていきましょう。

ACLS

' ループ用変数
VAR G_I = 0

' 青空ぽい背景描写
FOR I=0 TO 240
  GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT

とりあえず背景はGLINEをFORで回しててきとうに青空を作っておきましょう。

与作っぽいものが映ってますが気にしないでください(笑)

前回のSSを取るためにGFILLで書いただけです。

それではここに地面を配置していきます。

ACLS

' ループ用変数
VAR G_I = 0

' 青空ぽい背景描写
FOR G_I=0 TO 240
  GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT

' 地面を描写
FOR G_I = 0 TO 24
  TPUT 0, G_I, 14, &HECC2
  TPUT 0, G_I, 14, &HED02
  TPUT 0, G_I, 14, &HED02
NEXT

いい感じですね。

地面はテキストスクリーン(TPUT)を使って描写してます。

いかにも横スクロールアクションゲームぽい風貌になりました。

まぁこのゲームは一切スクロールしませんが。

スプライトを出して動かしてみよう

私の画面には与作の亡霊がいますが、皆さんは背景と地面しかないと思うので
プレイヤーキャラクターとしてスプライトを用意しましょう。

ACLS

' ループ用変数
VAR G_I = 0

' スプライト定義
SPSET 0, 1432
SPSET 1, 1436
SPSET 2, 1438
SPSET 3, 1442

SPOFS 0, 35,160
SPOFS 1, 200,160
SPOFS 2, 100,200
SPOFS 3, 300,50

' 青空ぽい背景描写
FOR G_I=0 TO 240
  GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT

' 地面を描写
FOR G_I = 0 TO 24
  TPUT 0, G_I, 14, &HECC2
  TPUT 0, G_I, 14, &HED02
  TPUT 0, G_I, 14, &HED02
NEXT

プチコン4 きこりの与作

ハカセを主人公

ワンパク君をイノシシ役

インテリを鳥

神崎はヘビに認定しました。

狂気じみたきこりゲーが想像できますねこれは……

にすることにしました。

とりあえずハカセを前後に動かせるようにしてみましょう。

全員顔だけですが、某ゆっくりみたいなもんです。

ACLS

' ループ用変数
VAR G_I = 0

' スプライト定義
SPSET 0, 1432
SPVAR 0, "X", 35
SPVAR 0, "Y", 160
SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")


SPSET 1, 1436
SPSET 2, 1438
SPSET 3, 1442

SPOFS 1, 200,160
SPOFS 2, 100,200
SPOFS 3, 300,50

' 青空ぽい背景描写
FOR G_I=0 TO 240
  GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT

' 地面を描写
FOR G_I = 0 TO 24
  TPUT 0, G_I, 14, &HECC2
  TPUT 0, G_I, 14, &HED02
  TPUT 0, G_I, 14, &HED02
NEXT

LOOP
  D_CONTROLLER
ENDLOOP


' コントローラー関数
'───────────────────────────────
DEF D_CONTROLLER
  ' 0番目のコントローラー(つまり1コン)の押されているボタンを取得
  VAR B = BUTTON(0)

  ' 左ボタン処理
  IF (B AND 1 << #B_LLEFT) != 0 THEN
    SPVAR 0, "X", SPVAR(0,"X")-1
  ENDIF

  ' 右ボタン処理
  IF (B AND 1 << #B_LRIGHT) != 0 THEN
    SPVAR 0, "X", SPVAR(0,"X")+1
  ENDIF

  SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")
ENDIF

コントローラー関数の説明は省きます。

コントローラーに関しては、下記で詳しく紹介しているので余裕があればみてください!

【プチコン4講座】プレイヤーをコントロールしてみよう

ハカセを左右に動かすことが出来たので、次は斧を振れるようにしてみましょう。

斧あったかな?プチコン4

……ありました! スプライト番号161ですね。

それでは早速斧スプライトを作りましょう。

斧を振ってみよう

このハカセは手がないので、口から斧を出せばよさそうですね。

動きとしては、Yボタンを押したらはかせが口を開けて斧が出現して少し回転する。

指定度の回転が終わったら斧が消えてハカセは口を閉じる。

これでいきましょう!

ACLS

' ループ用変数
VAR G_I = 0

' スプライト定義
SPSET 0, 1432
SPVAR 0, "X", 35
SPVAR 0, "Y", 160
SPVAR 0, "DIRECT" , #FALSE
SPVAR 0, "SWING" , #FALSE
SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")

' 斧スプライト定義(非表示にしておく)
SPSET 100, 161, 0
SPVAR 100, "ROTATE", 0



' その他スプライト定義
SPSET 1, 1436
SPSET 2, 1438
SPSET 3, 1442

SPOFS 1, 200,160
SPOFS 2, 100,200
SPOFS 3, 300,50

' 青空ぽい背景描写
FOR G_I=0 TO 240
  GLINE 0,I,400,I,RGB(I/2, 125+ROUND(I/2), 255)
NEXT

' 地面を描写
FOR G_I = 0 TO 24
  TPUT 0, G_I, 14, &HECC2
  TPUT 0, G_I, 14, &HED02
  TPUT 0, G_I, 14, &HED02
NEXT

LOOP
  D_CONTROLLER
ENDLOOP


' コントローラー関数
'───────────────────────────────
DEF D_CONTROLLER
  ' 0番目のコントローラー(つまり1コン)の押されているボタンを取得
  VAR B = BUTTON(0)


  ' 斧を振っていなかったら
  IF SPVAR(0,"SWING") == #FALSE THEN
    ' 左ボタン処理
    IF (B AND 1 << #B_LLEFT) != 0 THEN
      SPVAR 0, "X", SPVAR(0,"X")-1
    ENDIF

    ' 右ボタン処理
    IF (B AND 1 << #B_LRIGHT) != 0 THEN
      SPVAR 0, "X", SPVAR(0,"X")+1
    ENDIF

    ' 移動処理
    SPOFS 0, SPVAR(0,"X"), SPVAR(0,"Y")
    ' 斧も一緒に移動
    SPOFS 100, SPVAR(0,"X")+32, SPVAR(0,"Y")+12

    ' Yボタン処理
    IF (B AND 1 << #B_LRIGHT) != 0 THEN
      ' 振った音を鳴らす
      BEEP 100
      ' ハカセのグラを変更
      SPCHR 0, 1433
      ' 斧振りフラグON
      SPVAR 0,"SWING", #TRUE
    ENDIF

  ELSE
    D_SWING_AXE
  ENDIF



ENDIF


' 斧振り関数
'───────────────────────────────
DEF D_SWING_AXE
  IF SPVAR(0,"SWING") == #TRUE THEN
    ' 斧を出現させる
    SPSHOW 100
    ' 斧を指定位置まで回転させる
    IF SPVAR(100, "ROTATE") > -90 THEN
      SPVAR 100, "ROTATE", SPVAR(100, "ROTATE")-5
      SPROT 100, SPVAR(100, "ROTATE")
    ELSE
      SPHIDE 100
      SPCHR 0, 1432
      SPVAR 100, "ROTATE", 0
      SPROT 100, SPVAR(100, "ROTATE")
      SPVAR 0,"SWING", #FALSE
    ENDIF

  ENDIF
END

斧のスプライトは基本的にはかせの位置に追従する形にしています。

そしてボタンは斧を振っていない時だけ動かすようにして、
斧は一度振ったらフラグをONにして連続して振らせないようにしています。

斧を振ったらはかせの顔グラを変更して、斧が指定位置の度になったら色々リセットという感じですね。

ちょっと駆け足でしたが、1つ1つ何をしているのかをしっかりと見ておきましょう。

こんな感じになればOKです。

色々と雑いところがありますが、クオリティアップは後で問題ありません!

ここで細かいところを直そうとする人は挫折しやすいタイプです。

過去の私ですね!(自戒

とりあえず基本的な所を作り上げてしまいましょう!

それでは!