ニャオニャオ21世紀

雑記と、MSXぽいアプリ開発と、ゲーム関係、ビジネスほか雑記を綴っています

WebMSXでBASICのゲームを作ろう!第三弾。VRAMを弄ってブロックの形へ(URLクリックで実行できます)

WebMSXでBASICのゲームを作ろう!第三弾。

VRAMを弄ってブロックの絵にしたいと思います。

とりあえず簡単な2色です。

カラフルな多色刷りはまた今度ということで。

VRAMには様々な絵に関するデータが入っています。

文字の形や、文字の色、スプライトデータとか、画面上の文字だとか。

その各アドレスに8bit(2進数で8文字 00000000とか)のデータが

入っていて、それらに直接アクセスし、データを書き換えることで

文字の形などを変えてやるというものです。

このURLクリックで、今回のプログラムがWebMSXで

実行できます。

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

 

f:id:nyaonyaokun:20180222065757p:plain

 

ソースコードを。


10 SCREEN1,2,0:DEFINTA-Z:KEYOFF:
WIDTH32: COLOR15,5,1
20 H2 = 1:X=128:Y=160
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 A=ASC("A"):D$=" ":RESTORE 100
0
50 FOR I=0 TO 7
60 READ D$
70 VPOKE A*8+I,VAL("&B"+D$)
80 NEXT
90 VPOKE &H2000+A¥8,&H1D
100 LOCATE 0,22
110 G$="AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAA":PRINT G$
120 S=STICK(0):TG=STRIG(0)
130 IF S=3 THEN X=X+4
140 IF S=7 THEN X=X-4
150 IF S=1 THEN Y=Y-4
160 IF S=5 THEN Y=Y+4
170 H2=-H2:IF JF=1 THEN H2=-1
180 IF S=3 AND H2=1 THEN H=0
190 IF S=3 AND H2=-1 THEN H=4
200 IF S=7 AND H2=1 THEN H=1
210 IF S=7 AND H2=-1 THEN H=5
220 IF X<0 THEN X=0
230 IF X>240 THEN X=240
240 IF JF=1 THEN 270
250 IF TG=0 THEN 330
260 JF=1:JY=-8:JC=6
270 IF JC=0 THEN 300
280 IF TG=0 THEN JC=0:GOTO 300
290 JC=JC-1
300 IF JC=0 AND JY<8 THEN JY=JY+
2
310 Y=Y+JY
320 IF Y>160 THEN Y=160:JF=0
330 PUTSPRITE 0,(X,Y),7,H
340 PUTSPRITE 1,(X,Y),11,H+2
350 GOTO 120
500 DATA 2E,2D,67,7E,78,7C,38,06
,16,17,0F,14,1D,07,0F,0F,F0,F8,8
0,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,E
6,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,1
0,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,1
8,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,F
8,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,B
A,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,0
0,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,0
4,0C,00,80,80,80,00,00,00,00,00,
1000 DATA 10000001
1010 DATA 10000001
1020 DATA 11111111
1030 DATA 11111111
1040 DATA 00011000
1050 DATA 00011000
1060 DATA 11111111
1070 DATA 11111111

 

今回の追加は

40 A$=ASC("A"):D$=" ":RESTORE 100
0
50 FOR I=0 TO 7
60 READ D$
70 VPOKE A$*8+I,VAL("&B"+D$)
80 NEXT
90 VPOKE &H2000+A$¥8,&H1D
100 LOCATE 0,22
110 G$="AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAA":PRINT G$

 

と、

1000 DATA 10000001
1010 DATA 10000001
1020 DATA 11111111
1030 DATA 11111111
1040 DATA 00011000
1050 DATA 00011000
1060 DATA 11111111
1070 DATA 11111111

です。

一番シンプルでわかりやすくなっていますので、

データは2進数になっております。

 

40行

40 A$=ASC("A"):D$=" ":RESTORE 1000

文字Aのアスキーコードを取得しています。

文字にはすべて番号がついております。

今回はAの文字の形をブロックに変えます。

Aの文字がVRAMのどのアドレスにはいっているかを知るために

アスキーコードが知りたかったのです。

 

RESTORE 1000

はDATA文を1000行目から読んでねというものです。

 

50~80行目は、

50 FOR I=0 TO 7
60 READ D$
70 VPOKE A*8+I,VAL("&B"+D$)
80 NEXT

 

READ文でDATA文の横一列のデータを読みます。

今回は、DATA 10000001の

8文字です。

 

VPOKEは、VRAMの指定したアドレスのデータを書き換えます。

VPOKE アドレス,データ

A$*8+Iは、

ある文字のアスキーコード*8で、その文字が入っているアドレスがわかります。

その先頭アドレスから、8つ分で一文字ですね。

文字は8x8ドットで定義されていますので、1バイトに横一列分のデータ(8ドット分)が

入っています。

(VRAMの一番最初の方のアドレスには、文字の形のデータが入っています。)

VALは文字を数字に直す命令。

&Bは2進数を表します。先頭につけないと、2進数か10進数か、16進数かわからない

ですよね。ちなみに16進数は&Hです。10進数はつけなくてもかまいません。

 

90行は

90 VPOKE &H2000+A$¥8,&H1D

文字の色を変えます。

文字の色は、&H2000のアドレス以降に入っています。

SCREEN1では、8文字ごとに色が変えることができます。

色を変えると8文字いっぺんに変わってしまいます。

+A$¥8では、文字Aのカラーコードのアドレスを指定しています。

¥は、16¥2なら、値が8となります。

     17¥2でも値は8です。余は捨てられます。

+A$¥8なのは、8文字で1つの色なので。入っているアドレスも8で割った商です。

 

後半の&H1Dは文字の色です。16進数です。

color 1 黒とcolor D 紫(color 13)です。

1000 DATA 10000001
1010 DATA 10000001
1020 DATA 11111111
1030 DATA 11111111
1040 DATA 00011000
1050 DATA 00011000
1060 DATA 11111111
1070 DATA 11111111

1が黒で、0が紫ですね。

 

ブロックの表示は一番簡単な方法で、

100 LOCATE 0,22
110 G$="AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAA":PRINT G$

LOCATE 0,22は文字表示の位置を指定するものです。

もうちょっといい風にしたいですが。

 

まだブロックとの当たり判定はいれていません。

ちょっと当たり判定をやってみたのですが、かなり遅くなってしまうのですよね〜

今は、

IF Y>160 THEN Y=160

という軽くてシンプルな方法です。

 

ブロックのデータの読み込みを16進数に変えるのは、

70 VPOKE A*8+I,VAL("&H"+D$)

&Bの2進数だったところを、&Hの16進数に変えるだけです。

 

1000 DATA 7E,7E,00,00,E7,E7,00,00
データは1行になります。

2進数から16進数への変換は、今はツールがあるので、探してみてください。

ちなみに私は、

TinySprite 0.4.7 - MSX Sprite Editor

で8x8ドットだけドットを打って、コピペしています。

16x16ドット用なので使い勝手が悪いですがw

 

ちょっと絵を描けばこのくらいの感じになります。

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

 

f:id:nyaonyaokun:20180222090911p:plain

 

ブロックとの当たり判定を入れたら、あとはマップと、敵を入れたら

ゲームっぽくなりますね。

今はまだいいですが、やっぱりスピードが足りないです。

一部でマシン語を使いたくなります。

がんばるか〜w

 

WebMSXでBASICのゲームを作ろう!第二弾。ジャンプ処理(URLクリックで実行できます)

 

WebMSXでBASICのゲームを作ろう!第二弾。

今日はジャンプをやりたいと思います。

このジャンプ処理はMSX MAGAZINE 永久保存版2に

記載されていたものです。

詳しくは本をご購入ください^^

MSX MAGAZINE 永久保存版 2
MSX MAGAZINE 永久保存版 2
posted with amazlet at 18.02.20

アスキー
売り上げランキング: 563,356

スペースキーを押す長さによって、ジャンプの高さが

変わります。

こちらのURLをクリックすると、実行結果を試せます。

 

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

 

WebMSXで作品公開する方法は、

WebMSXで作ったDiskイメージファイルをどこかにアップロードして、

そのURLを、

http://webmsx.org/?DISKA_URL=

のあとに繋げてリンクを貼ればOKです。

 

 

それではソースコードを。 

10 SCREEN1,2,0:DEFINTA-Z:KEYOFF:
WIDTH32: COLOR15,1,5
20 H2 = 1:X=128:Y=160
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):TG=STRIG(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 H2=-H2:IF JF=1 THEN H2=-1
100 IF S=3 AND H2=1 THEN H=0
110 IF S=3 AND H2=-1 THEN H=4
120 IF S=7 AND H2=1 THEN H=1
130 IF S=7 AND H2=-1 THEN H=5
140 IF X<0 THEN X=0
150 IF X>240 THEN X=240
160 IF JF=1 THEN 190
170 IF TG=0 THEN 250
180 JF=1:JY=-8:JC=6
190 IF JC=0 THEN 220
200 IF TG=0 THEN JC=0:GOTO 220
210 JC=JC-1
220 IF JC=0 AND JY<8 THEN JY=JY+
2
230 Y=Y+JY
240 IF Y>160 THEN Y=160:JF=0
250 PUTSPRITE 0,(X,Y),7,H
260 PUTSPRITE 1,(X,Y),11,H+2
270 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

 

前回のプログラムに追加しています。

www.nyaonyao21.com

 

 

前回と違うのは、PUT SPRITEを下の方に移動しております。

それと時間稼ぎのFOR NEXT文を取り除きました。

 

40,90,140~240行を追加しています。

 

40 S=STICK(0):TG=STRIG(0)

TG=STRIG(0)は、

スペースキーを押したかどうかを知るための宣言です。

 

90 H2=-H2:IF JF=1 THEN H2=-1

JF=1はジャンプフラグです。

ジャンプしている時は、足を開いたスプライトを表示します。

 

140 IF X<0 THEN X=0
150 IF X>240 THEN X=240

はマイキャラのX座標の移動範囲を。X座標が、0~240まで。

端から端までです。

 

160 IF JF=1 THEN 190

JF=1はジャンプしているとき。そのときは190行へとびます。

 

170 IF TG=0 THEN 250

TG=0は、スペースキーを押していないときです。

250行へとびます。

250行はPUT SPRITEで、180~240行のジャンプ処理をまるまる飛び越えて

います。なにもしないということです。

 

180 JF=1:JY=-8:JC=6

JF=1は、ジャンプフラグです。

JY=-8は、最初にスペースキーを押したときは、Y座標を-8移動させるということ。

毎回、Y座標を、-8ドットづつしていきます。(スペースキーを押している間)

JCの説明を。

スペースキーを押している間は、-8ドットづつ上へ上がりますが、

それの上限を設けなければいけません。そうしないと永遠に上に飛んで行ってしまう

ので。そこでカウンターを入れます。

最初は6です。そこから後の行で-1づつしていきます。

160行でジャンプフラグが立っている時は、この行は飛ばされています。

 

190 IF JC=0 THEN 220

JC=0のとき、220行へ飛びます。


200 IF TG=0 THEN JC=0:GOTO 220

スペースキーが離されたら、JC=0とします。

そして1行飛ばして、220行へ。

 

210 JC=JC-1

ジャンプカウンターを-1づつしていきます。

 

220 IF JC=0 AND JY<8 THEN JY=JY+2

初期値がJC=6で、ジャンプの上限か、スペースキーを離した時に

JC=0となっていました。

JY<8となっていますが、ジャンプなので、上へ上がったら、下へも降りてこないと

いけません。その移動量の上限が+8です。

JYに2づつ足していきます。

JYは、この処理を何回か通ることで、

-8,-8,-8,-8,-8,-8,-6,-4,-2,0,2,4,6,8,8,8,8,8,8

となっていきます。

擬似的に重力加速度を意識したような動きになっています。

 

230 Y=Y+JY

Y座標に移動量を足していきます。


240 IF Y>160 THEN Y=160:JF=0

Y座標の地面がY=160となっています。

ここは、いずれゲームを作っていくときには変えていかないといけません。

 

優秀なジャンプ処理ですね。

シンプルですけど高さ調整もできるし。

今、MSX BASICをやると資料が豊富にあるので、楽に作ることができるのが

いいですね〜。

このプログラムはジャンプカウンターJCを いれるところがキモですね。

もし自分でプログラムを考えるとすると、

まず、JY=-8と初期設定し、毎回、JY=JY+2するというのはすぐわかると

思います。

そこにジャンプカウンター JC=6として、JC=0となるまでは、

JY=-8がしばらく続かせると考えていくのでしょうか。

-8,-6,-4,-2,0,2,4,6,8

-8,-8,-8,-8,-8,-8,-6,-4,-2,0,2,4,6,8,8,8,8,8,8

にしていく処理を考えます。

 

そんなところでしょうか。

次回は地面にブロックを敷き詰めたいと思います。

とりあえず、カラフルな多色刷りはやめておいて、2色のブロックにすると

思います。

それでもVRAMを弄らないといけないですからね。

そのうちカラフルな多色刷りもやりたいと思います。

 

では~。

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

 


WebMSXでBASICのゲームを作ろう!第一弾。

MSXマシン語は一度置いておいて、まずはBASICでゲームを作ることにします。

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

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

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

 

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

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

この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)

になります。

 

 面白いですね〜。

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

 

では〜。

 

 

WebMSXの基本的な使い方を調べてみました

 

WebMSXの使い方を少し調べてみました。

http://webmsx.org/

 

まず文字入力。

文字入力の仕方

右下の歯車をクリック。

f:id:nyaonyaokun:20180219163807p:plain

 

その中のHelp&Settingsをクリックすると、

 

f:id:nyaonyaokun:20180219163859p:plain

 

マウスカーソルを合わせると、どのキーがどの文字に対応しているか、

知ることができます。

 

MacでBASICをやろうとしているのですが、うまく文字入力が対応していない場合が

多いです。

そんな時は、

alt+ B で文字を入力できます。

f:id:nyaonyaokun:20180219164316p:plain

このテキストボックスの中に、普通に文字を入力したり、

コピペしたりして、OKをクリック。

そうすると、MSX画面の方にもその文字が入力されます!

(これを使えば、プログラム雑誌をスキャンして、OCRで文字にして、

プログラムを走らせることができます。)

 

MSX BASICのプログラムの保存の仕方

BASICの保存

左下のディスクのアイコンをクリックします。

f:id:nyaonyaokun:20180219165117p:plain

その中の、Blank 720KB Diskをクリックすると、

MSXに空のフロッピーディスクを挿入したことになります。(そういうイメージ)

その状態で、Save Disk Fileをクリックすると、

Macのフォルダにファイルが保存できます。

 

MSX BASICのプログラムを打ったら、

SAVE"sample.bas"

とでも打ち込んで、プログラムを保存しましょう。

(追記)

そして、SAVE FILE DISKをクリックしてください。

これをしないとmacのファイルには保存されないみたい。

もっといい方法があるのだろうか。よくわかりません。ごめんなさい;

 

なお読み出す時は、

Load From Filesをクリックして、ファイルを選択してから、

LOAD"sample.bas"と打ち込んでください。

 

なおこの時に、ファイル名を

AUTOEXEC.BASとすると

runと打ち込まなくても自動でプログラムが動きます。

save"AUTOEXEC.BAS"

 

(大文字しかダメのよう)

ファイルを自分のサーバーにアップロードして、URLをクリックするだけで、

ゲームを走らせる時には必要なことです。

 

とりあえず、これぐらい知っていれば、WebMSXでプログラムを

打ち込むことができそうです。

 

おまけ

webで公開されているMSXのスプライトエディタのご紹介。

TinySprite 0.4.7 - MSX Sprite Editor

 

ドットを打ち込んで、歯車のアイコンをクリックし、Codeをクリックすると

スプライトが16進数で表示されます。

1色づつ16進数で表示されるので非常に使い勝手がいいですね!

 

とりあえず、カーソルキーでスプライトを動かすことからしたいと思います。

 

 

 

 

 

 

e-sportsをオリンピック競技にするのは、賛成?反対?

 

e-sportsをオリンピックの競技にするかで色々と議論が

あるようです。

長年ゲームをやってきた者としては、ゲームがオリンピック?

なんか違和感がある!と思ってしまいます。

ゲームは、最近のe-sportsの盛り上がりをみていると競技としては

面白いのかもしれません。

反射神経を使うし、団体戦などはスポーツのそれと

違わないかもしれません。

でもなんか違うかなぁ〜。

ゲームは娯楽であって欲しいかなぁ。

 

 

でもスポーツでも、娯楽の面と競技の面があるので、

両立するのかな。

確かに、e-sportsとしてオリンピックの競技となれば、

社会的にもある一定の地位を得ることになるのかもしれません。

格がワンランク上がるというか。

 

それにゲーム業界ももっと盛り上がってくるかもしれません。

それに対する期待の方が一番大きいかな。

ゲーム人口も増えるだろうし、様々な企業がもっと参入してくるかもしれません。

テレビでもどんどん取り上げられて、バーチャロンのようなゲームが

アーケードでどんどんでてきて、ってなるかも。

 

オリンピック競技としては、なにか違和感がありますが、

ゲーム業界が盛り上がるのならば賛成かな〜。

 

成り行きを見守っていきたいとおもいます^^

高岡英夫氏の提唱する身体意識とはどういうものかご紹介。

 

身体意識というのをご存知でしょうか?

高岡英夫さんという運動科学研究者の提唱するものなのですが、

私はこれが非常に好きなのです。

身体意識とはなんであるかといいますと、 身体をどう意識しているか、

というもので、例えば、へそ下2センチのところにある丹田を

意識するというのも身体意識です。

丹田は最近有名になってきているので知っている方も多いと思います。

武道などで特に有名ですね。

 

身体意識というのはもう少し幅が広くて、身体の中心に軸の意識が通っているとか

太ももの裏側に意識があるかとか、色々あるわけです。

 

日常生活でも身体意識というのはでてくると思います。

例えば、筋肉トレーニングで、どこそこの筋肉を意識してくださいというのが

あると思いますが、その意識した筋肉が動くというのも身体意識の一種だと思います。

意識があるだけでそこの筋肉を使います。

 

ということは、身体にどういう意識があるかで、身体の使い方が変わってきます。

 

私は、最近、硬い床で寝てしまっていることが多かったので、肩から腕にかけて

身体の外側(床に面していたから)に意識がいくようになってしまい、

腕が筋肉痛になってしまいました。

(普段、使っていない筋肉だからかなぁ)

ある意味、怖くもありますねぇ。

 

どういう意識があれば、どんなスポーツに役立つか、などは高岡英夫さんの

著書をみてください。

究極の身体 (講談社+α文庫)
高岡 英夫
講談社
売り上げランキング: 7,428

 

とても奥の深い世界を知ることとなると思います。

過去の有名な達人がどんな身体意識をもっていたかの研究もあって、

非常にユニークです。

ゲームに活かせないかなぁなんて考えてしまいますw

イチローであったり、宮本武蔵であったり。

スティーブ・ジョブズの身体意識なんていうものもありますw

 

学生時代に知っていれば良かったのになぁと後悔しています。

体育や部活もワンランク上にいけたはず。

今となっては、生活の質の向上をはかるためだけにしか使えませんが;

 

 

身体意識は、身体の筋肉の使い方だけではなくて、

意識する場所によっては精神的な能力にも影響を与えます。

この辺りは、チャクラとか、丹田とか気功とかと似てくるのかもしれません。

 

日本には身体言葉というものがあります。

腹がたつとか、頭にくるとか。

そのことからも、身体と精神との繋がりがあることがわかると思います。

身体にどういう意識があるかで、精神が変わってくるのも面白いですね〜。

 

 

 

現在、私が意識しているのは、

頭・胸・腹についてです。

上丹田・中丹田・下丹田と言い換えてもいいかもしれません。

人間には、知・情・意というものがあり(夏目漱石の小説にもでてきますが)、

 

それぞれ、

知は頭、

情は胸、

意は腹

に対応していると言われています。

(知性、感情、意思のことです)

 

 

いまのところ、あまり使いこなせていないですね〜。

 

腹に意識があると、意欲に関係していたり、落ち着いたりというのは

わかる気がします。

最近では、腹に意識が行き過ぎて、その他のことがおろそかになってしまってダメだなぁと感じています。

頭・胸・腹と、うまく使いこなせると、アプリ開発などにも良い影響がでるかもしれませんね。

う〜ん、仕事や日常生活に役立てたいですね〜。

まだ色々と研究中です!

 

楽しんでやるのが一番だと思いますので、まったりと進んでいきたいと

思いますw

 

では〜。

 

MSXドット絵研究 その3"白い主人公"

 

今回はMSXではハイドライドで有名な”白い主人公”です。

結構いるんじゃないのかなぁと思っています。

白くて2色の縛りで!

それでは、始めましょう!

 

ハイドライド1

白い主人公で一番有名ではないでしょうか?

みんな大好きジムくんです〜。

f:id:nyaonyaokun:20180216174138p:plain  

f:id:nyaonyaokun:20180216174304p:plain

 完全な縁取りではないんですね〜。

正面がイカス!

 

ハイドライドⅡ

 ハイドライドⅡの主人公です。

名前はなんだったかな〜。あったっけ?

f:id:nyaonyaokun:20180216174634p:plain

 

7・3分けがなんともいえません!

こちらは完全縁取り。影もついているんですね〜。

装備をつけると画像も変わっていきます。

 

 

ハイドライド3

 ゲームとしては一番面白かったですが、主人公の画像は

ハイドライドシリーズの中で一番地味です。

頭が小さくてリアル志向なんですね。

f:id:nyaonyaokun:20180216175121p:plain

やや上から見た感じとなっています。

 

 

魔城伝説Ⅱ ガリウスの迷宮

ポポロンくん!

横画像では一番のイケメンかもしれません。

鼻がいいですよね〜。

透けているイメージの強いデザインでした。

でも、かっこいい〜。

前作は青でしたが、今回は白い鎧です。

f:id:nyaonyaokun:20180216175502p:plain

 

 

ザナドゥ

 ザナドゥです。

他とは少しテイストが違うデザインです。

それが独特の個性となっている感じがします。

品があるというか。

f:id:nyaonyaokun:20180216175724p:plain

 

 

 

ボルフェスと5人の悪魔

 こちらのゲームも名作と名高いのですが、残念ながらやったことが

ありません;

いつかやりたいですね〜。

主人公はマントに包まっているのでしょうか。

帽子も被っていますね。

f:id:nyaonyaokun:20180216180020p:plain

 

天才ラビアン大奮戦

前作はやったことがあるのですが、こちらは未プレイです。

キャラの絵が変わっていますが、こちらの作品のみの掲載で。

可愛いですよね。

MSXの架空の動物キャラでも1.2を争うデザインではないでしょうか?

 

f:id:nyaonyaokun:20180216180133p:plain

 

 

アンティ

 シロアリだったかな。

可愛いですよね。

なかなか大胆なデザインです。

触覚が片方、体についていないんですね〜。

なるほど。それでもおかしくないですね。

f:id:nyaonyaokun:20180216180828p:plain

 

 

ぶた丸パンツ

 タイトルが堪らない作品です。

友達が持ってました。シンプルですが今でも覚えています。

なかなか可愛いですよね〜

HAL研究所の名作です。

f:id:nyaonyaokun:20180216181330p:plain

 

 

まとめ

 ざっとみてきましたが意外に少ないですね。

まだ他にもあるかもしれませんが。

ロマンシアなんかはグレー色だったし、SASAは白かグレーか迷いました。

色が変わるんでしょうか?はて?

デザイン的に好きなのはガリウスの迷宮のポポロンですかね〜。

この顔の感じは色々と参考にできそうです。

コナミはやっぱりすごいですね!

今回はここまでです。

他の主人公の研究もしたいですね。

 

では〜。

 

ドット絵職人―すべてのパソコンに入っている「ペイント」ツールでつくる (MdN books)
Suguru.T
エムディエヌコーポレーション
売り上げランキング: 243,044

 

ドット絵講座
ドット絵講座
posted with amazlet at 18.02.16
R研究所
毎日コミュニケーションズ
売り上げランキング: 381,934

 

ドット絵工房―誰でも使えるドット絵テクニックが満載!! (X‐media Graphic Library)
鯖戸 昭史
エクスメディア
売り上げランキング: 415,540

 

FF DOT. -The Pixel Art of FINAL FANTASY-

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

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