...

プチコンでダンジョンゲームを作る(1)

by user

on
Category: Documents
12

views

Report

Comments

Transcript

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