View
12
Download
0
Category
Preview:
Citation preview
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/1
プチコンでダンジョンゲームを作る(1)
プチコンは、NINTENDO DSi/3DSで BASIC(ベーシック)プログラムを作るソフトです。
●今回の目標
今回は、ダンジョン(迷宮)ゲームを作ります。
下画面にダンジョンのマップ、上画面にプレイヤー
の画面を表示して、十字キーでプレイヤーを操作し
て、出口へ向かいます。
●プチコンの操作
3DSのメニューから、ソフト「プチコン mkII」(マークツー)を動かします。
ソフトが動くと、最初のメニュー画面が表示されます。
「何をしたいのじゃ?」と聞かれるので、下画面のメニューか
ら「プログラムを作る」を選びます。
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/2
プログラムを作る画面が表示されます。
上画面が実行・表示画面、下画面がキーボードです。
下画面でキーをタッチすると、上画面にその文字が入
力されます。
キーボードで入力する文字の種類を変えるには、以下
のようにします。
普通に打つ…大文字アルファベット「A B C」
SHIFT キーを押してから打つ…小文字アルファベ
ット「a b c」
左下の文字きりかえキーで「♥」を押す…グラフィッ
ク文字が打てる。SHIFTキーでさらにきりかえ。
左下の文字きりかえキーで「ア」を押す…カタカナ
文字が打てる。SHIFTキーでさらにきりかえ。
試しにいろいろな文字を打ってみましょう。
打ってある文字を消す時は、バックスペースキー またはデリートキー を使います。
バックスペースキー…カーソルの前の文字が消える
A_ → _
デリートキー…カーソルの後ろの文字が消える
_A → _
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/3
●実行モードでプログラムを動かす
まずは実行モード画面で、かんたんなプログラムを打って、動かしてみましょう。
「PRINT」の後ろは、空白(スペース)を1文字空けます。
「コンニチハ」の両側は「"」(ダブルクォーテーション)で囲みます。
上のプログラムを打って、Enterキーを押すと、次の行に「コンニチハ」と表示されます。
「PRINT」(プリント)命令は、画面に文字を表示する命令です。
文字をいろいろ変えて、表示してみましょう。
PRINT命令では、計算もできます。
「PRINT」に続いて(1文字空白を入れて)計算式を書いて Enter キーを押すと、次の行に計
算の答えが表示されます。
いろいろな計算をしてみましょう。計算記号は以下のように書きます。
足し算…「+」
引き算…「-」
かけ算…「*」
わり算…「/」
画面に文字がいっぱいになったら、「ACLS」(エーシーエルエス)命令を使うと、画面がクリア
されます。
PRINT ”コンニチハ”
PRINT ”コンニチハ”
コンニチハ
ACLS
PRINT 1+1
2
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/4
●編集モードで長いプログラムを作る
実行モードで直接プログラムを書くと、1行しか書けません。
長いプログラムを作るには、以下の手順で行います。
① 編集モードでプログラムを書く
② 実行モードでプログラムを実行する
キーボード画面の「編集」ボタンをタッチして、編
集モードに移ります。
上の画面が、編集モードの画面になります。
画面左側に「1」「2」…と行番号が表示されます。
少し長いプログラムを書いてみましょう。
1行目で「コンニチハ」を表示、2行目で「コンバンハ」を表示するプログラムです。
まず、この 2行を編集モード画面で打ちます。
次に、キーボード画面左下にある「実行」ボタンをタッチして、実行モードにします。
実行モード画面で「RUN」(ラン)と打って Enter キーを押すと、プログラムが実行されて、2 行
の文字が表示されます。
プログラムは、基本的に上から下へ順番に実行されます。
何行かプログラムを打って、実行してみましょう。
※プログラムを実行する命令「RUN」は、キー
ボード画面の上にあるファンクションキーの 5
番に登録されています。これをタップすると一
度に入力できます。
※START ボタンでも、プログラムを実行できます。
1 PRINT ”コンニチハ”
2 PRINT ”コンバンハ”
コンニチハ
コンバンハ
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/5
●文字の表示
それでは、ダンジョンゲームのプログラムを作り始めます。
編集モードの画面で、以下のプログラムを最初から打ってみましょう。
まず 1行目。先頭に「’」をつけた行は「コメント」とみなされて、何も実行しません。
「’」の後は自由に文字を書くことができます。
ここでは、プログラムのタイトル「DANJON1」を書いています。
「*」(アスタリスク)は、タイトルを目立たせるために使っています。
2行目は、Enterキーを押して 1行空けます。プログラムを見やすくするためです。
3行目の「CLEAR」(クリア)は、プログラムで使うデータをクリアする命令です。
4行目の「ACLS」は、実行モードでも使った、画面をクリアする命令です。
この「CLEAR」「ACLS」の 2つは、まずプログラムの最初に書くことが多いです。
5行目は、Enterキーを押して 1行空けます。
6行目の「SC=0」は、「SC」という変数(へんすう)を「0」にする、という意味です。
変数とは、数字などを入れる入れ物、箱のようなものだと思ってください。
(小学校の算数で使う□、中学校の数学で使う xのようなものです)
ここでは、ゲームのスコアを入れる変数 SCを用意して、最初なので「0」に設定しています。
プログラムの世界では、「SC=0」は「SC と 0が等しい」という意味では無く、「SCを 0にする」
(数学の言い方では「SCへ 0を代入する」)という意味になります。
1 ’*** DANJON1 ***
2
3 CLEAR
4 ACLS
5
6 SC=0
7 LOCATE 0,0
8 PRINT ”SCORE ”;SC
カーソルを(0,0)(画面左上)へ移動
点数を表示
コメントでタイトルを書く
変数・データをクリア
画面をクリア
スコアを 0にする
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/6
7行目では、「LOCATE」(ローケート)命令が出てきます。これは文字を表示する位置(カーソ
ルの位置)を指定する命令です。
LOCATE 0, 0
x座標 y座標
プチコンの画面の文字表示は、横方
向がx座標(0~31)、縦方向がy座標
(0~23)になっています。
「LOCATE 0,0」で、文字を表示する
カーソルを、画面左上(0,0)へ移動し
ます。
8行目の PRINT命令で、カーソルの位置(0,0)から文字が表示されます。
まず「SCORE 」を表示して、「;SC」で、続けて変数 SCの内容(今は 0)を表示します。
PRINT命令の中で「;」(セミコロン)を使うと、その後の内容を続けて表示します。
プログラムを実行してみましょう。
上画面の左上に「SCORE 0」と表示されます。
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/7
スコアと同じように、プレイヤーの HP(体力)を設定し
て、表示してみましょう。
以下のプログラムを追加します。
プログラムを実行してみましょう。
画面の上の中央に、HPの値が表示されます。
1 ’*** DANJON1 ***
2
3 CLEAR
4 ACLS
5
6 SC=0
7 LOCATE 0,0
8 PRINT ”SCORE ”;SC
9
10 HP=50
11 LOCATE 16,0
12 PRINT ”HP ”;HP
カーソルを(16,0)へ移動
HPを表示
HPを 0にする
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/8
●プログラムを保存する
作ったプログラムは、このままだとプチコンを終了すると消えてしまいます。
消えてしまうと困るので、保存しましょう。
プログラムを保存するには、実行モードの画面に移って、「SAVE」(セーブ)命令を使います。
SAVE命令の文法は以下のとおりです。
SAVE "DANJON1"
ファイル名
SAVE に続けて、「"」(ダブルクォーテーション)
で囲んで保存するファイル名を指定します。
Enter キーを押すと、下画面に確認が表示され
ます。「了解」ボタンで元に戻ります。
なお、キーボード上のファンクションキーの 3番に「SAVE」が設定されているので、これをタッ
プすると一度に入力できます。
ファイルがちゃんと保存されているか、確認しましょう。
保存されたファイルを一覧で見る「FILES」(ファイルズ)命令を使います。
「FILES」と打って Enterキーを押すと、保存されているファイルが一覧で表示されます。
プログラムファイルは「PRG:」に続いてファイル名が表示されます。
なお、ファンクションキーの 1番に「FILES」が設定されているので、これをタップすると一度に
入力できます。
★保存したプログラムを読み込む
保存してあるプログラムを読み込むには、「LOAD」(ロード)命令を使います。
LOAD "DANJON1"
ファイル名
ファンクションキーの2番に「LOAD」が設定されているので、使ってください。
FILES
PRG:DANJON1
OK
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/9
●迷路全体のデザイン
ダンジョンゲームなので、ダンジョン(迷路)を作るプログラムを作ってみましょう。
今回の迷路は、以下のような条件で作ります。
さて、こうした迷路をどうやって作ればいいでしょうか?
迷路を作る方法は、数学の重要な問題の1つで、昔から研究されています。
「穴掘り法」「棒倒し法」などの作り方がありますが、今回はわかりやすい「穴掘り法」をやって
みます。最初に全部かべの状態にして、穴を掘って道を作っていく方法です。
右下がゴール 正解の道は 1通りしかない。他の道は行き止まり。
左上がスタート 道とかべの幅は同じ(1:1)
プレイする度に新しい迷路になる。
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/10
迷路は 3DSの下画面で作ります。
まずは下画面を、かべでうめてみます。プログラムを追加します。
プログラムを実行してみましょう。
下画面に白いかべが一面に表示されます。
Aボタンを押すと、プログラムが終了します。
プログラムの中身を説明します。
下画面に文字を表示するには、キーボードを消さないといけないので、PNLTYPE(パネルタ
イプ)命令を使います。
PNLTYPE "OFF"
スイッチ
今回はスイッチを「OFF」にして、キーボードを消します。
1行分の「■」を表示
y座標をくり返し
y座標を 0~22 までくり返し
Aボタンが押されるまで待つ
○スイッチ
OFF パネルなし
PNL キーボードなし(ボタンのみ表示)
KYA 英語のキーボード表示
KYM 記号のキーボード表示
KYK カナのキーボード表示
10 HP=50
11 LOCATE 16,0
12 PRINT ”HP ”;HP
13
14 ’--- メイロ ヅクリ ---
15
16 PNLTYPE ”OFF”
17 FOR MY=0 TO 22
18 PNLSTR 0,MY,”■”*31
19 NEXT MY
20
21 @TEISI
22 IF BUTTON()!=16 THEN @TEISI
コメント
下画面のキーボードを消す
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/11
下画面に文字を表示するのは、PRINT命令ではなくPNLSTR(パネルストリング)命令を使い
ます。(19行目)
PNLSTR 0, MY, “■”*31
x座標 y座標 表示する文字
ここでは、変数 MY を使って、表示する座標を指定しています。
表示する文字は「“■”*31」として、「■」を 31個(1行分)表示しています。
★くり返し
かべを一面に表示するために、くり返し命令「FOR」(フォー)、「NEXT」(ネクスト)命令を使っ
て、PNLSTR命令をくり返し実行します。
「FOR」「NEXT」命令の文法は、以下のとおりです。
FOR MY =0 TO 22 STEP 1
変数 最初の値 最後の値 変化量
指定した変数を、最初の値~最後の値まで変化させて、対応する NEXTまでのプログラムを
くり返します。STEP は変化させる量で、プラスの値を指定すると増え、マイナスの値だと減っ
ていきます。STEPを省略した場合は1ずつ増やします。
NEXT MY
変数
くり返しの最後を表します。FOR命令に対応した変数を指定します。
今回は、かべを一面に表示するために、y座標を 0(上)~22(下)までくり返しています。
最後の 2行
は、Aボタンが押されるまでそこで待つプログラムです。
それぞれの命令については、後で詳しく説明します。
ここではとりあえずそのまま打ってください。
23 @TEISI
24 IF BUTTON()!=16 THEN @TEISI
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/12
スタート地点(迷路の左上)を道にします。
プログラムを実行してみましょう。
スタート地点が道になります。
同じように、右下のゴール(出口)を作りましょう。
ドアの文字は、キーボードをグラフィックモード(а)にするとあります。
プログラムを実行してみましょう。
ゴール地点にドアが表示されます。
14 ’--- メイロ ヅクリ ---
15
16 PNLTYPE ”OFF”
17 FOR MY=0 TO 22
18 PNLSTR 0,MY,”■”*31
19 NEXT MY
20
21 ’スタート チテン
22 PNLSTR 1,1,” ”
23
24 @TEISI
25 IF BUTTON()!=16 THEN @TEISI
スタート地点に空白(道)を表示
21 ’スタート チテン
22 PNLSTR 1,1,” ”
23
24 ’ゴール チテン
25 PNLSTR 29,22,”Щ”
26
27 @TEISI
28 IF BUTTON()!=16 THEN @TEISI
ゴール地点にドアを表示
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/13
★途中に新しい行を 1行入れる
スタート地点を道にするなど、プログラムの途中に新しい行を入れるには以下のようにしま
す。
① 「@TEISI」の行の先頭にカーソルを持っていきます。
② Enterキーを何度か押して、改行を入れます。
③ 十字キーでカーソルを上に移動します。
④ 新しい行を入力します。
19 NEXT MY
20
21 @TEISI
19 NEXT MY
20
21
22
23
24 @TEISI
19 NEXT MY
20
21
22
23
24 @TEISI
19 NEXT MY
20
21 ’スタート チテン
22
23
24 @TEISI
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/14
●迷路を掘る
スタート地点から、迷路を掘って道を作っていきましょう。
まず、「道を掘る人」がいると仮定して、その人の座標を変数 X、Y を使って、スタート地点
(1,1)に設定します。
さて、スタート地点から迷路をどうやって掘っていくかです。
最初の「迷路の条件」にあるように、道とかべは同じ幅(1:1)になるので、一度に2ブロックず
つ道を掘っていきます。
★方向の設定
道を掘る方向を決めるために、上下左
右の方向を右の図のように番号を設定
します。
プチコンの画面は、左上が原点(0,0)
で、右方向がx座標、下方向が y 座標
になっています。
例えば方向が「1」(上)の時は、一歩進
むと、x座標はそのまま、y座標が-1(1
減る)になります。
24 ’ゴール チテン
25 PNLSTR 29,22,”Щ”
26
27 X=1
28 Y=1
29
30 @TEISI
31 IF BUTTON()!=16 THEN @TEISI
「掘る人」の座標(X,Y)を(1,1)に設定
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/15
方向設定を元に、いくつか新しい変数を決めます。
★方向による座標変化量 DX,DY
4方向へ進んだ時の座標 X,Yの変化量を、配列(はいれつ)変数 DX,DYに設定します。
配列変数というのは、同じ名前で、番号で区別していくつも使える変数です。
配列変数を使うには、まず「DIM」(ディム、ディメンジョンの略)命令で、使いたい配列変数を
設定します。
DIM命令の文法は以下のとおりです。
DIM DX(5), DY(5)
配列変数名1
(配列の個数)
配列変数名 2
(配列の個数)
配列の個数 例えば DX(5)と指定すると、DX(0)~DX(4)の 5個の配列変数が使える。
()内の数字(添そ
え字)は必ず 0から始まる。
複数の配列変数を使いたい時は、「,」(カンマ)で区切って書く。
その後、32~35行で、1~4の 4方向の DX,DYの値を設定しています。
例えば方向が1(上)の時は、x方向の変化量 DX(1)は 0(変化無し)、y方向の変化量 DY(1)
は-1(1減らす)です。
x方向の値とy方向の値を設定する命令を、「:」(コロン)でつなげて書いています。
コロンでつなげると、2つ以上の命令を続けて書くことができます。
使う配列変数を設定
上・下・左・右方向の
x座標の変化量 DX、
y座標の変化量 DYを設定
27 X=1
28 Y=1
29
30 ’アナホリ ジュンビ
31 DIM DX(5),DY(5)
32 DX(1)=0:DY(1)=-1
33 DX(2)=0:DY(2)=1
34 DX(3)=-1:DY(3)=0
35 DX(4)=1:DY(4)=0
36
37 @TEISI
38 IF BUTTON()!=16 THEN @TEISI
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/16
★行のコピー・ペースト
似たプログラムの行をいくつも打つ時は、前に打ってある
行をコピーすると楽です。
行をコピーするには、キーボード右下の「コピー」「ペース
ト」キーを使います。
(表示されていない時は▲▼ボタンをタッチしてください)
① 十字キーでカーソルを移動して、コピーしたい行にカーソルが点滅した状態にする。
DX(1)=0:DY(1)=-1
② 「コピー」キーをタッチする。
③ 十字キーでカーソルを下へ移動して、新しい行の場所へ持っていく。
④ 「ペースト」キーをタッチすると、行がコピーされて貼りつきます。
⑤ DX(1)=0:DY(1)=-1
⑥ 行の内容を書き換えます。
⑦ DX(2)=0:DY(2)=1
このようにコピー・ペースト機能を使うと、入力の手間が最小限ですみます。
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/17
★道を 1回掘る
乱数を出す「RND」(ランダム)関数で方向をランダムに決めて、その方向へ道を掘ります。
RND関数は、実行する度に違う数字(乱数)が出てきます。
RND( 4)
最大値
今回は方向の数字が1~4 なので、「RND(4)+1」として、1~4 までの乱数を出しています。そ
の方向の値を、変数 Dに入れています。
次の行で、ランダムに決まった方向の D を使って、「X=X+DX(D)」「Y=Y+DY(D)」とすることで、
その方向へ X,Yを進めます。
14 ページで書いたように、一度に 2 ブロックずつ道を掘るので、道を掘る処理を 2 回やりま
す。
プログラムを実行してみましょう。
1回だけ道が掘られます。
実行する度に、違う方向へ道ができます。
30 ’アナホリ ジュンビ
31 DIM DX(5),DY(5)
32 DX(1)=0:DY(1)=-1
33 DX(2)=0:DY(2)=1
34 DX(3)=-1:DY(3)=0
35 DX(4)=1:DY(4)=0
36
37 ’アナホリ
38 D=RND(4)+1
39 X=X+DX(D)
40 Y=Y+DY(D)
41 PNLSTR X,Y,” ”
42 X=X+DX(D)
43 Y=Y+DY(D)
44 PNLSTR X,Y,” ”
45
46 @TEISI
掘る方向 Dを 1~4でランダムに決める
X、YをDの方向へ進めて、空白を表示
X、YをDの方向へ進めて、空白を表示
0~(最大値-1)までの乱数が出てくる。
この例なら 0~3の 4種類のどれか。
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/18
★はみ出しの判断(条件判断)
今のままだと、乱数の値によっては、道が迷路の
外へはみ出してしまいます。
それでは困るので、迷路の外へはみ出そうな時は
道を掘らず、改めて乱数を出し直すようにしましょう。
はみ出すかどうかは、座標 X、Yの
値で判断します。
迷路で道を作る範囲は、
X座標=1~29
Y座標=1~21
になります。
例えば、X=1の時は、左(D=3)へ
道を掘るとはみ出してしまいます。
そちらへは道を掘らないようにしま
す。
このように条件判断をする時は、「IF」(イフ)~「THEN」(ゼン)~「ELSE」(エルス)命令を使い
ます。
まず、やり直すための戻り先の「ラベル」を作ります。(38行目)
ラベルは「@」(アットマーク)に続けてアルファベットや数字で指定します。
36
37 ’アナホリ
38 @ANAHORI
39 D=RND(4)+1
40 IF X==1 AND D==3 THEN @ANAHORI
41 IF X==29 AND D==4 THEN @ANAHORI
42 IF Y==1 AND D==1 THEN @ANAHORI
43 IF Y==21 AND D==2 THEN @ANAHORI
44
45 X=X+DX(D)
46 Y=Y+DY(D)
47 PNLSTR X,Y,” ”
戻り先のラベル
IF命令ではみ出しチェック。
はみ出したら@ANAHORIへ戻る。
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/19
★穴掘りをくり返す(ループ)
今は 1回しか道を掘らないので、くり返し掘っていくようにしましょう。
1回掘った後で、最初の@ANAHORIへ戻すようにします。
この 2行は削除して、
代わりに上のように「GOTO @ANAHORI」と入力します。
「GOTO」(ゴートゥー)命令は、プログラムの実行をジャンプさせる命令です。
文法は以下のとおりです。
GOTO @ANAHORI
ジャンプ先ラベル
36
37 ’アナホリ
38 @ANAHORI
39 D=RND(4)+1
40 IF X==1 AND D==3 THEN @ANAHORI
41 IF X==29 AND D==4 THEN @ANAHORI
42 IF Y==1 AND D==1 THEN @ANAHORI
43 IF Y==21 AND D==2 THEN @ANAHORI
44
45 X=X+DX(D)
46 Y=Y+DY(D)
47 PNLSTR X,Y,” ”
48 X=X+DX(D)
49 Y=Y+DY(D)
50 PNLSTR X,Y,” ”
51
52 GOTO @ANAHORI
戻り先のラベル
@ANAHORIへもどる
52 @TEISI
53 IF BUTTON()!=16 THEN @TEISI
この 2行は削除
ICTジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(1)/20
プログラムを実行すると、いろいろな方向へ道を掘っていきます。
プチコンの速度は速いので、あっという間に全部道が掘られて、碁盤の目のようになります。
放っておくといつまでもプログラムが止まらないので、「SELECT」ボタンを押して止めましょ
う。
★時間待ち(ウェイト)
あまりに速く道を掘ってしまうと、プログラムが実行されていく様子がよくわからないので、ウェ
イト(時間待ち)を入れて遅くします。(後で迷路のプログラムが完成したら削除します)。
「WAIT」(ウェイト)命令の文法は、以下のとおりです。
WAIT 1
待ち時間
待ち時間…60分の 1秒単位で指定します。60=1秒です。
プログラムを実行してみましょう。
動きがゆっくりになるので、道が掘られていく様子がよくわかります。
碁盤の目に道ができてしまうと、1 回曲がるだけで出口へ行けてしまうので、迷路になりませ
ん。
迷路になるように道を掘らないといけないのですが、それは次回に。
48 X=X+DX(D)
49 Y=Y+DY(D)
50 PNLSTR X,Y,” ”
51
52 WAIT 1
53 GOTO @ANAHORI
Recommended