LoginSignup
1
0

More than 3 years have passed since last update.

FUZE BASICを触ってみる2(ゲームの入り口)

Last updated at Posted at 2019-08-22

今日やること

FUZE公式で配布されている、Worksheets(https://www.fuze.co.uk/worksheets-tutorials.html)
Coding Projects Book 1 - The Basics を斜め読みしてできるところまで進めてみます。

今回はProject: 5から。

アンカー

前の記事)FUZE BASICを触ってみる1(最初の一歩編)

Project: 5 "Analog World"

IOボードとの接続が主かと思ったら、結構いろいろな情報が。
👇ひどいサンプルだw

output.gif

image.png

  • CLS2 コマンドが使われている。以下が CLS との違い
    • CLS
      • スクリーンバッファのクリアと、画面への反映(UPDATE)を一度に行うコマンド。
    • CLS2
      • スクリーンバッファのクリアのみ。後述の UPDATE とセットで利用する。
    • UPDATE
      • CLS2 とセットで利用する。スクリーンバッファの内容を画面へ反映する。
  • GWIDTHGHEIGHTというシステム変数がある。それぞれ画面のサイズ(ピクセル)が取得できる
  • MOUSEXMOUSEYも使える。
  • CIRCLE命令の引数が調べたくてドキュメントを探した。

Project: 5b "Bear With Me"

今度もIOボードの例だけど、昔のXWindowを思い出すアレに変えてみよう。
と思ったけどなんだこれwwwうまく動かなくて恥ずかしいけどもう時間オーバー😇

なんかクリックし続けないと MOUSEX,MOUSEY が取れませんでした。

output2.gif

今回は長いのでコード貼り付けます。クソース(クソソース)をご堪能あれ。

CLS

center_x = GWIDTH / 2
center_y = GHEIGHT / 2
radius = GHEIGHT / 2 / 2

DIM ear_center(2, 2)
ear_center(0, 0) = center_x - radius
ear_center(0, 1) = center_y + radius
ear_center(1, 0) = center_x + radius
ear_center(1, 1) = center_y + radius

eye_radius = radius / 4

DIM eye_center(2, 2)
eye_center(0, 0) = center_x - eye_radius 
eye_center(0, 1) = center_y + eye_radius
eye_center(1, 0) = center_x + eye_radius
eye_center(1, 1) = center_y + eye_radius

LOOP
CLS2
    PROC DrawBar
    PROC DrawEyeBase
    PROC DrawEye
UPDATE
REPEAT

END

DEF FN GetRadian(x1, y1, x2, y2)
    radian = ATAN( ( y2 - y1 ) / ( x2 - x1 ) )
=radian

DEF PROC DrawBar
    COLOR = PINK
    CIRCLE ( center_x, center_y, radius, 1)
    CIRCLE ( ear_center(0, 0), ear_center(0, 1), radius / 2, 1)
    CIRCLE ( ear_center(1, 0), ear_center(1, 1), radius / 2, 1)
ENDPROC

DEF PROC DrawEyeBase
    COLOR = WHITE
    CIRCLE ( eye_center(0, 0), eye_center(0, 1) , eye_radius, 1)
    CIRCLE ( eye_center(1, 0), eye_center(1, 1),  eye_radius, 1)
ENDPROC

DEF PROC DrawEye
    radian1 = FN GetRadian(MOUSEX, MOUSEY, eye_center(0, 0), eye_center(0, 1))
    radian2 = FN GetRadian(MOUSEX, MOUSEY, eye_center(1, 0), eye_center(1, 1))

    COLOR = YELLOW
    CIRCLE ( eye_center(0, 0) + ( SIN(radian1) * eye_radius ) ,  eye_center(0, 1) + ( COS(radian1) * eye_radius ), radius / 10, 1)
    CIRCLE ( eye_center(1, 0) + ( SIN(radian2) * eye_radius ) ,  eye_center(1, 1) + ( COS(radian2) * eye_radius ), radius / 10, 1)
ENDPROC
  • FULLSCREEN 命令が使えるけど、VirtualBOX環境では画面がおかしくなったりするのえ使わないほうがいいです。
  • 暴走したらvagrantを起動した端末で subo reboot で逃げました。
  • 座標は左下が (0,0)。普通と逆でちょっとびっくりした。
  • FUNCTION の作り方、PROCEDURE の作り方がわかった
    • FUNCTIONPROCEDUREは実行できないので END 命令の後に書くのがポイント
  • 配列の持ち方がわかった

所感

  • 数学ヤバイ、全然忘れてる…
  • 明日きちんと動くようにしよう
  • グローバル変数使いまくりだなー
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0