Comments
Description
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