プチコンで 3d ダンジョンゲームを作る(1)実行する画面(direct...
Post on 23-Apr-2020
5 Views
Preview:
TRANSCRIPT
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/1
プチコンで 3D ダンジョンゲームを作る(1) プチコンは、NINTENDO 3DSで BASIC(ベーシック)プログラムを作るソフトです。
●今回の目標
プチコンで 3D 表示のダンジョンゲームを作り
ます。
上画面にダンジョンの 3D ビュー、下画面にマ
ップが表示されます。ダンジョンを探検して、
敵と戦ったり、アイテムをゲットしたりして、出口
へ向かいます。
●プチコンの基本操作
3DSのメニューから、「プチコン 3号」を動かします。
ソフトが動くと、トップメニュー画面が表示さ
れます。
下画面の「SmileBASIC でプログラムを作る」
を選びます。
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/2
プログラムを実行する画面(DIRECT
モード)が表示されます。
上画面が実行画面、下画面がキーボ
ードです。
下画面でキーをタッチすると、上画面
にその文字が入力されます。
試しにいろいろな文字を打ってみまし
ょう。
キーボードで入力する文字の種類を変えるには、以下のようにします。
普通に打つ…大文字アルファベット「A B C」
SHIFTキーを押してから打つ…小文字アルファベット「a b c」
左下の文字きりかえキーで「♥」を押す…グラフィック文字が打てる。SHIFT キーでさらに
きりかえ。
左下の文字きりかえキーで「ア」を押す…カタカナ・ひらがな文字が打てる。SHIFT キー
でさらにきりかえ。
文字を消す時は、バックスペース(BS)キー またはデリート(DEL)キー を使いま
す。
バックスペースキー…カーソルの前の文字が消える
A| → |
デリートキー…カーソルの後ろの文字が消える
|A → |
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/3
●DIRECTモードでプログラムを動かす
まずは DIRECTモード画面で、かんたんなプログラムを打って、動かしてみましょう。
「PRINT」の後ろは、空白(スペース)を1文字空けます。
「コンニチハ」の両側は「"」(ダブルクォーテーション)で囲みます。
上のプログラムを打って、Enterキーを押すと、次の行に「コンニチハ」と表示されます。
「PRINT」(プリント)命令は、画面に文字を表示する命令です。
文字をいろいろ変えて、表示してみましょう。
PRINT命令では、計算もできます。
「PRINT」に続いて(1文字空白を入れて)計算式を書いて Enter キーを押すと、次の行に計
算の答えが表示されます。
いろいろな計算をしてみましょう。計算記号は以下のように書きます。
足し算…「+」 引き算…「-」 かけ算…「*」 わり算…「/」
画面に文字がいっぱいになったら、「ACLS」(エーシーエルエス)命令を使うと、画面がクリア
されます。
PRINT ”コンニチハ”
PRINT ”コンニチハ”
コンニチハ
ACLS
PRINT 1+1
2
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/4
●EDITモードで長いプログラムを作る
DIRECTモードでプログラムを書くと、1行しか書けません。
長いプログラムを作るには、以下の手順で行います。
① EDITモードでプログラムを書く
② DIRECTモードでプログラムを実行する
キーボードの「EDIT」ボタンをタッチしま
す。
上画面が EDITモードの画面になります。
画面左側に「1」「2」…と行番号が表示され
ます。
少し長いプログラムを書いてみましょう。
1行目で「コンニチハ」を表示、2行目で「コンバンハ」を表示するプログラムです。
まず、この 2行を編集モード画面で打ちます。
次に、キーボード画面左下にある「実行」ボタンをタッチして、実行モードにします。
実行モード画面で「RUN」(ラン)と打って Enter キーを押すと、プログラムが実行されて、2 行
の文字が表示されます。
プログラムは、基本的に上から下へ順番に実行されます。
何行かプログラムを打って、実行してみましょう。
※プログラムを実行する命令「RUN」は、キーボード画面の一番上にあるファンクションキー
の 5番に登録されています。これをタップすると一度に入力できます。
1 PRINT ”コンニチハ”
2 PRINT ”コンバンハ”
RUN
コンニチハ
コンバンハ
OK
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/5
●迷路を作る
プログラムの作り方の基本がわかった所で、いよいよ
ゲームのプログラムを作っていきます。
ダンジョンゲームなので、まずは迷路(ダンジョン)を
作りましょう。
迷路の作り方は数学の重要な問題で、昔からいろいろ研究されています。
「穴ほり法」「棒たおし法」などの方法がありますが、今回はプログラムがかんたんな「棒たお
し法」を使います。
★棒たおし法での迷路の作り方
(1) 迷路の外側のかべを作ります。
(2) 迷路の中に、1つおきに棒を立
てます。
かべ
道
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/6
(3) それぞれの棒を、上下左右どちらかにたおして、かべにします。
(4) 全部の棒をたおすと、迷路が
完成します。
※ただし、同じ場所に 2 本の棒を
重ねてたおさないようにします。
棒たおし法は、プログラムがかんたんで、短時間で迷路が作れます。
一方で、一直線の道ができやすい欠点があります。
今回はかんたんに迷路を作りたいので、棒たおし法を使います。
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/7
●迷路の外わくを作る
まず、迷路の外わくを作ります。以下のプログラムを入力してください。
プログラムを入力できたら、RUN命令で
実行してみましょう。
下画面の上側に、横一直線のかべが表
示されます。
以下、プログラムの内容を説明します。
1行目には、コメントでプログラムのタイトルを書いています。
コメントを書くには、先頭に「‘」(アポストロフィ)をつけます。
「‘」の後は、何を書いてもプログラムの実行には影響しません。
タイトル以外にも、ところどころでプログラムの説明を入れるといいでしょう。
1 ‘*** DANJON1 ***
2
3 ACLS
4 XSCREEN 3
5
6 ‘--- めいろ さくせい ---
7
8 ‘そとわく
9 DISPLAY 1
10 FOR X=0 TO 38
11 PRINT ”■”;
12 NEXT
13
14 WAIT 300
コメントでプログラムのタイトルを入れる
コメント
画面をクリア
スクリーンモードを、上下画面を使うようにする
コメント
下画面に表示
X座標を 0~38でくり返し
■を表示。セミコロン「;」で連続表示
くり返し
5秒待つ
1 ‘*** DANJON1 ***
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/8
3行目の「ACLS」(エーシーエルエス)は、画面をクリアする命令です。
4行目の「XSCREEN」(エックススクリーン)は、画面モードを設定する命令です。
XSCREEN 3 ,256 ,2
画面
モード
スプライト
割当数
BG
割当数
画面モード 0:上画面=3D、下画面=使用しない (標準ではこの設定)
1:上画面=2D、下画面=使用しない
2:上画面=3D、下画面=使用
3:上画面=2D、下画面=使用
4:上下結合(上と下がひと続きの画面になる)
スプライト割当数
(省略可能)
上画面に割り当てるスプライト数(0~512)。
下画面は 512-上画面割当数。
BG割当数
(省略可能)
上画面に割り当てる BGレイヤー数(0~4)。
下画面は 4-上画面割当数。
今回は「XSCREEN 3」として、「上画面=2D、下画面=使用」の設定にしています。
6行目、8行目はどちらもコメントです。プログラムをわかりやすくするために入れています。
9 行目「DISPLAY」(ディスプレイ)命令は、文字などを表示する画面の上下を切り替
えます。
DISPLAY 1
画面 ID
画面 ID 0:上画面 1:下画面
今回は「DISPLAY 1」として、以降の文字表示などを下画面にします。
3 ACLS
4 XSCREEN 3
6 ‘--- めいろ さくせい ---
7
8 ‘そとわく
9 DISPLAY 1
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/9
この 3行で、迷路の上側のわくを表示しています。
「FOR」(フォー)~「NEXT」(ネクスト)は、くり返しをする命令です。
FOR X=0 TO 38 STEP 1
ループ変数
の初期値
終値 増分
ループ変数の初期値 くり返しの中で変化させる変数(ループ変数)の最初の値。
終値 ループ変数の最後の値。
増分
(省略可能)
ループ変数を変化させる値。
STEP以下を省略すると 1ずつ増やす。
NEXT
変数(へんすう)は、算数で使う「□」(四角)と同じで、いろいろな数字を入れる箱のようなも
のです。 (中学の数学なら「x」や「a」などの文字と同じです)
今回は、FOR命令で変数「X」を 0~38 まで 1ずつ変化させています。
11行目では、PRINT命令で「■」を画面に表示しています。
最後に「;」(セミコロン)が付いています。こうすると「■」が横に続けて表示されます。
10 FOR X=0 TO 38
11 PRINT ”■”;
12 NEXT
11 PRINT ”■”;
くり返しの最後。ループ変数が終値になっていなければ FOR まで戻ります。
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/10
プチコンの画面の文字レイアウトは、以下のようになっています。
今回は下画面の一番上の行で、横方向に 39文字(X座標が 0~38)を表示しています。
(かべ・道・かべ・道……と並んで、最後はかべになるので、39文字までしか入らない)
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/11
14行目の「WAIT」(ウェイト)は、時間待ちをする命令です。
WAIT 300
待ち時間
待ち時間 60分の 1秒単位で指定。60で 1秒。
今回は、かべを表示した後、5秒間待ちます。
左右のかべと、下側のかべを表示するプログラムを追加します。
14 WAIT 300
1 ‘*** DANJON1 ***
2
3 ACLS
4 XSCREEN 3
5
6 ‘--- めいろ さくせい ---
7
8 ‘そとわく
9 DISPLAY 1
10 FOR X=0 TO 38
11 PRINT ”■”;
12 NEXT
13 FOR Y=1 TO 27
14 LOCATE 0,Y
15 PRINT ”■”
16 LOCATE 38,Y
17 PRINT ”■”
18 NEXT
19 FOR X=0 TO 38
20 PRINT ”■”;
21 NEXT
22
23 WAIT 300
一番下のかべを表示
カーソルを画面左はじにする
Y座標を 1~27でくり返し
■を表示
くり返し
カーソルを画面右はじにする
■を表示
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/12
プログラムを実行してみましょう。
迷路の外わくが表示されます。
追加したプログラムを説明します。
FOR~NEXTで、変数 Yを 1~27 まで変化させて、わくの左側と右側を表示しています。
新しく「LOCATE」(ローケート)命令が出てきます。これは文字の表示位置を指定する
命令です。
LOCATE 0 ,Y
x座標 y座標
以前出したように、下画面のレイアウトは
この図のようになっています。
LOCATE 命令で「0,Y」と座標を指定する
と、画面の左はじに文字が表示されま
す。
同じように、「38,Y」と指定すると、画面の
右はじに文字が表示されます。
Y を 1~27 まで変化させてくり返すので、
左はじと右はじに縦に「■」が続けて表示
されます。
この 3行で、迷路の下側のわくを表示しています。上側を表示した時と同じです。
13 FOR Y=1 TO 27
14 LOCATE 0,Y
15 PRINT ”■”
16 LOCATE 38,Y
17 PRINT ”■”
18 NEXT
19 FOR X=0 TO 38
20 PRINT ”■”;
21 NEXT
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/13
●棒を立てる
迷路の外わくができたので、次に迷路の中に1つおきに棒を立てます。
以下のプログラムを追加します。
プログラムを実行してみましょう。
迷路の中に、1つおきに棒が表示され
ます。
6 ‘--- めいろ さくせい ---
7
8 ‘そとわく
(中略)
19 FOR X=0 TO 38
20 PRINT ”■”;
21 NEXT
22
23 ‘ぼう
24 FOR Y=2 TO 26 STEP 2
25 FOR X=2 TO 36 STEP 2
26 LOCATE X,Y
27 PRINT ”■”
28 NEXT
29 NEXT
30
31 WAIT 300
カーソルを座標(X,Y)に移動
Yを 2~26で 1つおきにくり返し
■を表示
Xをくり返し
Xを 2~36で1つおきにくり返し
Yをくり返し
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/14
今回追加した部分は、FOR~NEXTのくり返しが二重になっています。
24行目で、Yを 2~26 まで増分 2でくり返しを指定しています(Y=2,4,6…26)
25行目で、Xを 2~36 まで増分 2でくり返しを指定しています(X=2,4,6…36)
次の 26 行目で、LOCATE 命令で表示位置を指定していますが、X,Y の値は以下のように
変化します。
これによって、棒が1つおきに表示されます。
24 FOR Y=2 TO 26 STEP 2
25 FOR X=2 TO 36 STEP 2
26 LOCATE X,Y
27 PRINT ”■”
28 NEXT
29 NEXT
Xのくりかえし Yのくりかえし
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/15
●棒をたおす
棒を立てることができたので、次にその棒を上下左右どち
らかにたおします。
まず、たおす 4方向に対して、以下のように数字を割り当て
ます。
上=0
下=1
左=2
右=3
この 4方向のどれかをえらぶのに、乱数(らんすう)を使います。
乱数は、毎回ちがう値が出てくる数です。
乱数を出すのに、RND(ランダム)関数を使います。
今回はプログラムを実行しても、内部で乱数を出しただけなので、見た目は変化しません。
RND( 4)
最大値
最大値 0~最大値-1 までの乱数が出てくる。
「R=RND(4)」とすると、0,1,2,3のどれかの数が変数 Rに入ります。
この時の「=」は、「RND(4)の結果を Rへ入れる(代入する)」という意味です。
「R と RND(4)が等しい」という意味ではないので、注意してください。
これで変数 Rに、棒をたおす方向が 0~3の数字で入ります。
(前略)
23 ‘ぼう
24 FOR Y=2 TO 26 STEP 2
25 FOR X=2 TO 36 STEP 2
26 LOCATE X,Y
27 PRINT ”■”
28 R=RND(4)
29 NEXT
30 NEXT
31
32 WAIT 300
たおす方向 Rを、乱数で 0~3のどれかにする
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/16
次に棒をたおすプログラムを考えると、例えば
座標(2,2)にある棒をたおす場合、
R=0→上にたおす→(2,1)をかべにする
R=1→下にたおす→(2,3)をかべにする
R=2→左にたおす→(1,2)をかべにする
R=3→右にたおす→(3,2)をかべにする
と、R の値によって 4 通りの処理をすることにな
ります。
プログラムを実行してみましょう。
棒がたおされて、迷路ができます。
0 1 3 2
1
2
3
→X座標
↓Y座標
(前略)
23 ‘ぼう
24 FOR Y=2 TO 26 STEP 2
25 FOR X=2 TO 36 STEP 2
26 LOCATE X,Y
27 PRINT ”■”
28 R=RND(4)
29 IF R==0 THEN X2=X:Y2=Y-1
30 IF R==1 THEN X2=X:Y2=Y+1
31 IF R==2 THEN X2=X-1:Y2=Y
32 IF R==3 THEN X2=X+1:Y2=Y
33 LOCATE X2,Y2
34 PRINT ”■”
35 NEXT
36 NEXT
37
38 WAIT 300
Rの値によって、たおす座標 X2,Y2 を設定
たおした棒(かべ)を表示
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/17
追加したプログラムを説明します。
新しく「IF」(イフ)~「THEN」(ゼン)命令が出てきました。
これは「もし~なら」という条件判断(じょうけんはんだん)をする命令です。
IF R==0 THEN X2=X:Y2=Y-1 ELSE ~
条件式 条件が成り立つ時に
実行する命令
条件が成り立たない
時に実行する命令
条件式 判断する条件の式を書く。式の例は以下のとおり。
「A==0」…Aが 0に等しい
「A<0」…Aが 0 より小さい(0はふくまれない)
「A>0」…Aが 0 より大きい(0はふくまれない)
「A<=0」…Aが 0以下(0 もふくまれる)
「A>=0」…Aが 0以上(0 もふくまれる)
「A!=0」…Aが 0に等しくない
THEN ~ 条件が成り立った時に実行する命令を書く。
ELSE ~ 条件が成り立たない時に実行する命令を書く。
ELSE以下は省略可能。
例えば 29行目は「もし Rが 0なら、X2を Xにする・Y2を Y-1にする」となります。
「:」(コロン)で区切ると、続けて命令を書くことができます。
30~32行目も同様で、Rの値によって、棒をたおす座標 X2,Y2を設定しています。
設定した座標 X2,Y2に棒をたおして、「■」を表示します。
29 IF R==0 THEN X2=X:Y2=Y-1
30 IF R==1 THEN X2=X:Y2=Y+1
31 IF R==2 THEN X2=X-1:Y2=Y
32 IF R==3 THEN X2=X+1:Y2=Y
33 LOCATE X2,Y2
34 PRINT ”■”
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/18
今のプログラムは、「既に棒がたおれている所には、重ねてたおさない」というルールが入っ
ていません。そのルールを追加します。
まず 28行目に、もどるためのラベル「@TAOSU」を入れます。
そして 34 行目で、座標(X2,Y2)が道かかべかをチェックします。画面に表示されている文字
をチェックするには、CHKCHR(チェックキャラクター)関数を使います。
CHKCHR( X2 ,Y2)
x座標 y座標
x座標 画面上の x座標
y座標 画面上の y座標
関数が返す値 画面に表示されている文字コード(0~255)
座標(X2,Y2)が道(空白)だったら、文字コードは0になります。
IF 命令で文字コードが0かどうかを判断して、もし道でなければ(=かべだったら)、GOTO
(ゴートゥー)命令で@TAOSUの行(28行目)へもどります。
GOTO @TAOSU
ラベル
ラベル ジャンプする先のラベル
(前略)
23 ‘ぼう
24 FOR Y=2 TO 26 STEP 2
25 FOR X=2 TO 36 STEP 2
26 LOCATE X,Y
27 PRINT ”■”
28 @TAOSU
29 R=RND(4)
30 IF R==0 THEN X2=X:Y2=Y-1
31 IF R==1 THEN X2=X:Y2=Y+1
32 IF R==2 THEN X2=X-1:Y2=Y
33 IF R==3 THEN X2=X+1:Y2=Y
34 IF CHKCHR(X2,Y2)>0 THEN GOTO @TA
OSU
35 LOCATE X2,Y2
36 PRINT ”■”
(後略)
もどるためのラベル
もし(X2,Y2)が道ではなかったら、@TAOSUにもどる
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/19
今のままだと、輪になった道
ができたり、閉じ込められた
道ができたりしてしまいま
す。
例えば 4 本の棒が立っていて、それぞれ→・
↓・←・↑に倒すと、閉じ込められた道ができ
てしまいます。
倒す方向が全くランダムなので、こうしたことが
起きてしまいます。
これをさける方法はいくつか考えられますが、今回はこのようにします。
① 一番上の 1行(Y座標=2)の棒は、4方向にランダムに倒す。
② 2行目(Y座標=4)の棒からは、上には倒さずに、下と左右の3方向にだけ倒す。
こうすると、閉じ込められた道はできなくなります。
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/20
棒をたおすプログラムを、以下のように改造します。
プログラムを実行してみましょう。
閉じ込められた道などが無くなって、正解
が 1通りの迷路ができます。
今回は、30行目で棒を上へたおす部分を改造しています。
AND(アンド)を使って、「R が 0、かつ、Y が 2 だったら」と、2 つの条件が両方とも成り立った
時に、X2,Y2をセットして棒をたおします。
※この「~、かつ~」は、中学の数学の「集合」で習います。
(前略)
23 ‘ぼう
24 FOR Y=2 TO 26 STEP 2
25 FOR X=2 TO 36 STEP 2
26 LOCATE X,Y
27 PRINT ”■”
28 @TAOSU
29 R=RND(4)
30 IF R==0 AND Y==2 THEN X2=X:Y2=Y-1
31 IF R==1 THEN X2=X:Y2=Y+1
32 IF R==2 THEN X2=X-1:Y2=Y
33 IF R==3 THEN X2=X+1:Y2=Y
34 IF CHKCHR(X2,Y2)>0 THEN GOTO @TAO
SU
35 LOCATE X2,Y2
36 PRINT ”■”
(後略)
Yが 2の時(=1行目の棒)だけ、上に棒をたおす
30 IF R==0 AND Y==2 THEN X2=X:Y2=Y-1
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/21
●プログラムを保存する
このままだと、プチコンを終了させるとせっかく打ったプログラムが消えてしまいます。
保存をしておきましょう。
保存するには、DIRECTモードの画面で、「SAVE」(セーブ)命令を使います。
入力すると、下画面に確認画面が表示さ
れます。
「はい」をタッチすると、プログラムが保存
されます。
プログラムが保存されたかどうかは、「FILES」(ファイルズ)命令で確認できます。
保存したプログラムは、「LOAD」(ロード)命令で呼び出せます。
FILES、LOAD、SAVE の各命令は、キーボードの上にあるファンクションキーの 1 番~3 番
に登録されているので、ワンタッチで入力できます。
SAVE ”DANJON1”
LOAD ”DANJON1”
FILES
*DANJON1
上田市マルチメディア情報センター
プチコンで 3Dダンジョンゲームを作る(1)/22
●プログラムの改造
できる人は試してみてください。
迷路のかべは「■」で表示していますが、PRINT 命令の表示文字を変えると、かべの文
字が変わります。違う文字にしてみましょう。「外わくだけ違う文字にする」などもできます。
迷路の大きさは、画面サイズに合わせて横 39 文字×縦 29 文字にしています。FOR 命
令の初期値や終値、LOCATE 命令の座標などを変えると、迷路の位置や大きさが変わ
ります。
top related