ニャオニャオ21世紀

レトロゲーム(MSX、PCエンジン、セガサターン)と、MSXぽいアプリ開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

WebMSXでMSX BASIC の自作ゲーム作成!第一弾。キャラを動かすプログラムを書きました(URLクリックで実行できます)






MSXマシン語は一度置いておいて、まずはBASICで自作ゲームを

作成することにします。

BASICの一部に、マシン語を使うゲームもありましたよね。

まずは、そこまで出来るようになりたいです。

そのあとはフルマシン語で作りたいですね〜。

 

WebMSXでスプライトをカーソルで動かす

BASICプログラムを作ってみました。(魔城伝説1のポポロンくんをモデルにしました)

このURLで実行できます。

http://webmsx.org/?DISKA_URL=http://goods.heteml.jp/msx/samp (2).dsk

 
webmsx.org

 

f:id:nyaonyaokun:20180220084553p:plain

上下左右に動きます。

左右にはウォーキングのアニメーションが入ります。

ソースコードを書きます。

WebMSXの使い方はこちらへどうぞ

www.nyaonyao21.com

 

ではソースコードを、

シンプルな方のソースコードも書いておきます。

10 SCREEN1,2,0:DEFINTA-Z:KEYOFF:
WIDTH32: COLOR15,1,5
20 H2 = 1:X=128:Y=80
30 FOR J=0 TO 7:S$="":FOR I=1 TO32:READD$:S$=S$+CHR$(VAL("&H"+D$
)):NEXT:SPRITE$(J)=S$:NEXT

40 S=STICK(0)

50 IF S=3 THEN X=X+4

60 IF S=7 THEN X=X-4

70 IF S=1 THEN Y=Y-4

80 IF S=5 THEN Y=Y+4

90 PUTSPRITE 0,(X,Y),7,H

100 PUTSPRITE 1,(X,Y),11,H+2

110 FOR N=0 TO 80:NEXT
120 H2 = -H2
130 IF S=3 AND H2=1 THEN H=0
140 IF S=3 AND H2=-1 THEN H=4
150 IF S=7 AND H2=1 THEN H=1
160 IF S=7 AND H2=-1 THEN H=5
170 GOTO 40
500 DATA 2E,2D,67,7E,78,7C,38,06,16,17,0F,14,1D,07,0F,0F,

                 F0,F8,80,00,00,00,00,00,E0,70,70,20,50,80,80,E0
510 DATA 0F,1F,01,00,00,00,00,00,07,0E,0E,04,0A,01,01,07,

                 74,B4,E6,7E,1E,3E,1C,60,68,E8,F0,28,B8,E0,F0,F0
520 DATA 10,10,18,00,01,01,01,00,00,00,00,03,00,00,00,00,

                 00,00,10,50,D8,F0,E0,00,00,00,00,00,00,00,00,00
530 DATA 00,00,08,0A,1B,0F,07,00,00,00,00,00,00,00,00,00,

                 08,08,18,00,80,80,80,00,00,00,00,C0,00,00,00,00
540 DATA 00,1E,5D,4B,7E,78,7C,38,06,0D,1D,0D,16,2B,38,1E,

                 00,E0,F8,80,00,00,00,00,00,E0,F0,30,20,D4,3C,38
550 DATA 00,07,1F,01,00,00,00,00,00,07,0F,0C,04,2B,3C,1C,

                 00,78,BA,D2,7E,1E,3E,1C,60,B0,B8,B0,68,D4,1C,78
560 DATA 00,20,20,30,00,01,01,01,00,00,00,00,00,00,00,00,

                 00,00,00,10,50,D8,F0,E0,00,00,00,C0,C0,00,00,00
570 DATA 00,00,00,08,0A,1B,0F,07,00,00,00,03,03,00,00,00,

                 00,04,04,0C,00,80,80,80,00,00,00,00,00,00,00,00

  

解説:

30行はスプライトを読み込んで定義しています。(8枚)

 

40行 S=STICK(0)はカーソルキーの入力に必要な宣言

上を押すとSに1が入り、

右を押すとSに3が入り、

下を押すとSに5が入り

左を押すとSに7が入ります。

              1

              ↑         

7 ←      →3

              ↓         

              5

40 S=STICK(0)

50 IF S=3 THEN X=X+4

60 IF S=7 THEN X=X-4

70 IF S=1 THEN Y=Y-4

80 IF S=5 THEN Y=Y+4

  

90、100行は2枚のスプライトを重ねて表示しています。

PUT SPRITE<スプライト番号>,(x,y),<カラーコード>,<スプライトパターン番号>

 

90 PUTSPRITE 0,(X,Y),7,H

青い鎧の絵

100 PUTSPRITE 1,(X,Y),11,H+2

肌色の絵

 

120行は

120 H2 = -H2

歩くアニメーションをするときに、1と-1を交互に定義し使います。

H2 = -H2は、

H2が1のときは-1になり、

H2が-1のときは1となります。

 

110行は時間稼ぎです。アニメーションが早すぎるので。

110 FOR N=0 TO 80:NEXT

 

130,140,150,160行は歩きのアニメーションをするために

スプライトパターン番号を条件で変えます。

 

スプライトパターンを定義して、

表示するときにスプライトパターン番号を変えてやればアニメーションします。

(スプライトパターン:SPRITE$(番号)に定義します) 

 

SPRITE$(0) に 右向きに止まっている絵

SPRITE$(4)   に 右向きに足を一歩出している絵

を定義して、

PUT SPRITEのスプライトパターン番号を0と4を交互に入れ替えてやれば

歩くアニメーションができます。

H=0 右向きの鎧の絵

H=1 左向きの鎧の絵

H=2 右向きの肌色の絵

H=3 左向きの肌色の絵

H=4 右向きの鎧の(足を出してる)

H=5 左向きの鎧の絵(足を出してる)

H=6 右向きの肌色の絵(足を出してる)

H=7 左向きの肌色の絵(足を出してる)

 

130 IF S=3 AND H2=1 THEN H=0
140 IF S=3 AND H2=-1 THEN H=4
 S=3は右入力のときで、

①H2=1のとき、

スプライトパターン番号を0(右向きの鎧の絵)に。(H=0)

②H2=-1のとき、

スプライトパターン番号4(右向きの鎧の絵 足を出してる)に。(H=4)

 

150 IF S=7 AND H2=1 THEN H=1
160 IF S=7 AND H2=-1 THEN H=5

S=7は左入力のときで、

①H2=1のとき、

プライトパターン番号を1(左向きの鎧の絵)するために。(H=1)

②H2=-1のとき、

プライトパターン番号を5(左向きの鎧の絵 足を出してる)するために。(H=5 )

 

500行以降はDATA文です。

1行につきスプライト1枚の16進数のデータです。

500行 右向きの鎧の絵

510行 左向きの鎧の絵

520行 右向きの肌色の絵

530行 左向きの肌色の絵

540行 右向きの鎧の(足を出してる)

550行 左向きの鎧の絵(足を出してる)

560行 右向きの肌色の絵(足を出してる)

570行 左向きの肌色の絵(足を出してる)

 

スプライトの絵を描くのに便利なサイトを貼っておきますね。

TinySprite 0.4.7 - MSX Sprite Editor

 

プログラムをRUNしてから、ストップさせるのは、

Macですと、

control + F9で止まります。

 

 

 

最近、MSX FANを読んだので、面白くて、

ちょっとややこしいけど短いのを書きます。

10 SCREEN1,2,0:DEFINTA-Z:KEYOFF:
WIDTH32: COLOR15,1,5
20 H2 = 1:X=128:Y=80
30 FOR J=0 TO 7:S$="":FOR I=1 TO
32:READD$:S$=S$+CHR$(VAL("&H"+D$
)):NEXT:SPRITE$(J)=S$:NEXT
40 S=STICK(0):X=X+(S=7)*4-(S=3)*
4:Y=Y+(S=1)*4-(S=5)*4
50 FOR K=0 TO 1:PUTSPRITEK,(X,Y)
,7+4*K,H+2*K:NEXT
60 H2 = -H2
70 IF S=3  THEN H=0:IF H2=-1 THEN H=4
80 IF S=7  THEN H=1:IF H2=-1 THEN H=5

90 GOTO 40
500 DATA 2E,2D,67,7E,78,7C,38,06,16,17,0F,14,1D,07,0F,0F,

                 F0,F8,80,00,00,00,00,00,E0,70,70,20,50,80,80,E0
510 DATA 0F,1F,01,00,00,00,00,00,07,0E,0E,04,0A,01,01,07,

                 74,B4,E6,7E,1E,3E,1C,60,68,E8,F0,28,B8,E0,F0,F0
520 DATA 10,10,18,00,01,01,01,00,00,00,00,03,00,00,00,00,

                 00,00,10,50,D8,F0,E0,00,00,00,00,00,00,00,00,00
530 DATA 00,00,08,0A,1B,0F,07,00,00,00,00,00,00,00,00,00,

                 08,08,18,00,80,80,80,00,00,00,00,C0,00,00,00,00
540 DATA 00,1E,5D,4B,7E,78,7C,38,06,0D,1D,0D,16,2B,38,1E,

                 00,E0,F8,80,00,00,00,00,00,E0,F0,30,20,D4,3C,38
550 DATA 00,07,1F,01,00,00,00,00,00,07,0F,0C,04,2B,3C,1C,

                 00,78,BA,D2,7E,1E,3E,1C,60,B0,B8,B0,68,D4,1C,78
560 DATA 00,20,20,30,00,01,01,01,00,00,00,00,00,00,00,00,

                 00,00,00,10,50,D8,F0,E0,00,00,00,C0,C0,00,00,00
570 DATA 00,00,00,08,0A,1B,0F,07,00,00,00,03,03,00,00,00,

                 00,04,04,0C,00,80,80,80,00,00,00,00,00,00,00,00

 

解説:

40行 S=STICK(0)はカーソルキーの入力に必要な宣言

上を押すとSに1が入り、

右を押すとSに3が入り、

下を押すとSに5が入り

左を押すとSに7が入ります。

              1

              ↑         

7 ←      →3

              ↓         

              5

 

X=X+(S=7)*4-(S=3)*4

X座標を動かすのですが、普通は右ならX=X+1となりますが、

この一行で左右の動きをします。

( )だけで条件式になります。(これは知らなかった)

(S=7)は、S=7ならば、真(-1)となります。

(S=3)は、S=3ならば、真 (-1)。

違っていると0が入ります。

 

仮に右カーソルを押すと、

Sに3が入り、

X=X+(0)*4 -(-1)*4

となり、

X=X+4と同じです。(4ドット移動です)

 

Y=Y+(S=1)*4-(S=5)*4

は上下の移動です。

 (ただ処理が遅いとのこと。普通にIF文とかで書いた方がいいかも)

 

50行

50 FOR K=0 TO 1:PUTSPRITE K,(X,Y),7+4*K,H+2*K:NEXT

 

PUT SPRITE<スプライト番号>,(x,y),<カラーコード>,<スプライトパターン番号>

 PUTSPRITE K,(X,Y),7+4*K,H+2*K

この場合

スプライトパターン番号(このプログラムの時はH+2*Kのところです)

           が0の時、右向きの鎧の絵

スプライトパターン番号が1の時、左向きの鎧の絵

スプライトパターン番号が2の時、右向きの肌色の絵

スプライトパターン番号が3の時、左向きの肌色の絵

が定義されています。

 

右向きのときはH=0で、

PUT SPRITE 0のとき(K=0)はスプライトパターンが0

PUT SPRITE 1のとき(K=1)はスプライトパターンが2

(H+2*Kなので 0+2*1で2)

になります。

 

 面白いですね〜。

次はジャンプとかやってみたいです。

 

 

最後に、

iphoneとandroidでアプリを作っております。

MSXっぽいアプリで、横スクロールランアクションゲームです。

8ドットカクカクスクロールです!

 

8bit run run go

8bit run run go

  • nao21
  • ゲーム
  • 無料

  

play.google.com

 

www.nyaonyao21.com

 

 こちらもよろしく、です!

 

次のページ 

www.nyaonyao21.com

 

 

 

では〜。

 

 


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください