Comments
Description
Transcript
テキスト(PDF)
ICT ジュニア(上田パソコンクラブ) プチコンでレースゲームを作る(2) プチコンで作るレースゲームに、背景(コース)を追加してみましょう。 ●背景を表示する これまではキャラクターだけを画面に表示してい ましたが、背景(コース)を表示してみましょう。 外側の芝生と、中央のコース(道路)があります。 ★BG 画面に芝生をしきつめる プチコンの画面には、背景用の「BG 画面」が 2 枚あります。 プチコンでレースゲームを作る(2)/1 ICT ジュニア(上田パソコンクラブ) まず、プログラムのタイトルを「RACE3」に 1 ’*** RACE3 変えましょう。 2 3 ’--- サイショ *** --- 「サイショ」の初期設定の後に、コースを表示するプログラムを追加します。 まず、背景に芝生を表示してみましょう。 10 SPOFS 0,X,Y 11 12 ’--- コース --- 13 上画面の BG 画面を操作する指定 14 BGPAGE 0 15 BGPUT 16 17 ’--- 1,10,10,33,8,0,0 画面の座標(10,10)に芝生の BG キャラを表示 イドウ --- BG 画面を使うには、まず BGPAGE(ビージーページ)命令で、DS の上画面/下画面のどち らで BG 面を操作するかを設定します。 BGPAGE 0 上画面の BG 面を操作 BGPAGE 1 下画面の BG 面を操作 今回は上画面で使うので、BGPAGE 0 を指定します。 次に、BGPUT(ビージープット)命令で、BG キャラクターを画面に表示します。 BGPUT 1 表示する BG 画面 0=手前 1=奥 ,10 x 座標 ,10 ,33 ,8 y 座標 BG キ ャ カラー ラ番号 パレット ,0 横反転 0=なし 1=反転 ,0 縦反転 0=なし 1=反転 プログラムを実行してみましょう。 芝生の BG キャラが1個表示されます。 BGPUT 命令の x 座標、y 座標をいろいろ変 えて、違う位置に芝生を表示させてみましょ う。 プチコンでレースゲームを作る(2)/2 ICT ジュニア(上田パソコンクラブ) BGキャラクターが画面に 表示される範囲は、x=0~ 31、y=0~23 です。 今回のレースゲームの場合、背景全体に芝生をしきつめます。 BGPUT 命令で1個1個芝生を表示させると大変なので、広い範囲に BG キャラをしきつめる BGFILL(ビージーフィル)命令を使います。 BGPUT 命令の行を消して、BGFILL 命令に変えます。 10 SPOFS 0,X,Y 11 12 ’--- コース --- 13 画面全体に芝生の BG キャラをしきつめる 14 BGPAGE 0 15 BGFILL 1,0,0,31,23,33,8,0,0 16 17 ’--- イドウ --- プログラムを実行してみましょう。 芝生が画面全体にしきつめられます。 プチコンでレースゲームを作る(2)/3 ICT ジュニア(上田パソコンクラブ) BGFILL 命令の文法は以下のとおりです。 BGFILL 1 表示する BG 画面 ,0 ,0 ,31 ,23 ,33 左上 左上 右下 右下 BG x 座標 y 座標 x 座標 y 座標 キャラ 番号 ,8 カラー パレット ,0 ,0 横 縦 反転 反転 左上座標・右下座標を変 えると、芝生をしきつめる 範囲が変わります。 数字をいろいろ変えて試 してみましょう。 ★中央の道路の表示 芝生と同じように、BGFILL 命令で、中央の道路を表示します。 道路の BG キャラは 13 番(灰色の四角)を使います。 あとで道路の位置を変えるので、道路の中央の位置を表す変数 COX を使って、BGFILL 命 令で道路を表示します。 10 SPOFS 0,X,Y 11 12 ’--- コース --- 13 14 BGPAGE 0 15 16 17 18 19 BGFILL COX=16 BGFILL ’--- 1,0,0,31,23,33,8,0,0 道路の中央のx座標を 16 に 1,COXー8,0,COX+7,23,13,0,0,0 イドウ --- 道路の BG キャラをしきつめる プチコンでレースゲームを作る(2)/4 ICT ジュニア(上田パソコンクラブ) プログラムを実行してみましょう。 中央に真っ直ぐ道路が表示されます。 今は道路の中央のx座標 COX を 16(画面の中心)に、道路の幅を 16 に(中央から左右に 8 ずつ)にしています。 これらの数字を変えると、道路の位置や幅が変わります。試してみてください。 プログラムを「RACE3」のファイル名で、SAVE してください。 プチコンでレースゲームを作る(2)/5 ICT ジュニア(上田パソコンクラブ) ●コースをスクロールさせる 背景のコースを上から下へスクロールさせて、自分が走っているように見せましょう。 プチコンの BG 画面は、実は表示画面よりもかなり広くなっています。 BG 画面全体は、縦・横とも BG キャラクター64 個分の大きさがあります。 実際に画面に表示できるのは、そのうちの横 32 個・縦 24 個分です。 BG 画面全体のどこを画面に表示するかは、表示する原点(左上)を BGOFS(ビージーオフ セット)命令で指定します。 今回のレースゲームでは、自 分のキャラクターが上へ走って いきます。 BGの表示領域を上へ変えて いけば、背景のコースが下へ 流れていくように見えます。 プチコンでレースゲームを作る(2)/6 ICT ジュニア(上田パソコンクラブ) プログラムの最初で、BG表示領域の左上のy座標を表す変数 BGY を設定します。 1 ’*** RACE4 *** タイトルを「RACE4」に変える (中略) 10 SPOFS 0,X,Y 11 BGY=0 12 13 ’--- コース --- 最初に BGY を 0 にする 自分のキャラクターを移動する所で、BGの表示領域を変えてみましょう。 コースをスクロールさせる部分をサブルーチンにして、呼び出すようにします。 20 21 22 23 24 25 26 27 ’--- イドウ @MOVE --- 28 29 30 31 32 33 34 35 36 37 38 SPOFS VSYNC 0,X,Y 1 GOSUB @CSCROLL ’ジュウジ キー B=BUTTON() IF B==4 AND IF B==8 AND GOTO X>0 THEN X=X-2 X<239 THEN X=X+2 サブルーチン CSCROLL を 呼び出す @MOVE ’--- コース @CSCROLL スクロール BGY を 8 減らす BGY=BGYー8 39 IF BGY<0 THEN 40 BGOFS 1,0,BGY 41 RETURN --- BGY がマイナスになったら 512 を足してもどす BGY=BGY+512 BG の表示領域を変更 移動のプログラムへもどる プチコンでレースゲームを作る(2)/7 ICT ジュニア(上田パソコンクラブ) プログラムを実行してみましょう。 背景のコースが上から下へ流れます。 今は画面の大きさ分しかBGキャラを並べ ていないので、それ以外の背景は真っ黒 です。 BGOFS 命令の文法は以下のとおりです。 BGOFS 1 操作する BG 画面 ,0 左上 x 座標 ,BGY 左上 y 座標 このプログラムでは変数 BGY を使って、BG 表示領域を上へ変更しています。 先に書いたように、BG 画面全体は BG キャラで縦横 64 個分あります。 BG キャラはドット数で 8×8 ドットのサイズがあるので、ドット数で数えると BG 画面全体は 512×512 ドットあります。 このプログラムでは、変数 BGY を 8 ずつ減らして、コースを上へ 8 ドットずつ動かしています。 BGY がマイナスの値になると、BGOFS 命令でエラーになってしまいます。なので、IF 命令で 条件判断して、BGY がマイナスになったら 512 を足してもどしています。 プチコンでレースゲームを作る(2)/8 ICT ジュニア(上田パソコンクラブ) ★サブルーチンの呼び出し 今回、コースをスクロールさせるプログラムを、メインのプログラムとは別の「サブルーチン」に しています。 プログラムの中で何度も同じ処理をする場合、その部分をサブルーチンにして、使いたい時 に呼び出すようにすると、同じプログラムを何度も書かなくてすみます。 サブルーチンを呼び出すのは「GOSUB」(ゴーサブ)命令を使います。 GOSUB 命令の文法は以下のとおりです。 GOSUB @CSCROLL ジャンプ先ラベル GOTO 命令と同じように、ジャンプする先は「ラベル」で指定します。 ラベルは、「@」(アットマーク)に続けてアルファベットや数字で指定します。 サブルーチンからメインプログラムへ戻るには、RETURN(リターン)命令を使います。 プチコンでレースゲームを作る(2)/9 ICT ジュニア(上田パソコンクラブ) ●コースを作る 今は 1 画面分しかコースが無く、他は真っ黒になっています。 スクロールしながらコースの続きを作ってみましょう。 35 36 37 38 39 40 ’--- コース @CSCROLL スクロール BGY=BGYー8 IF BGY<0 THEN BGOFS 1,0,BGY 41 BGFILL 42 BGFILL 3,0,0,0 43 RETURN --- BGY=BGY+512 全体に草をしきつめる 1,0,BGY/8,31,BGY/8,33,8,0,0 1,COX-8,BGY/8,COX+7,BGY/8,1 中央に道路をしきつめる プログラムを実行してみましょう。 コースがずっとつながります。 ただ、上から下へスクロールしているはずなの ですが、真っ直ぐ続いているので見た目はわ かりません。 プチコンでレースゲームを作る(2)/10 ICT ジュニア(上田パソコンクラブ) ★コースをランダムに曲げる コースが真っ直ぐなままではおもしろくありません。コースを左右に曲げてみましょう。 コースの位置を決めるのに、乱数(らんすう、毎回違うランダムな数字)を使います。 乱数を使うには、「RND」(ランダム)関数を使います。 コースをスクロールするプログラムで、コースの中央の位置(変数 COX)の値をランダムに変 えてみましょう。 35 ’--- コース 36 @CSCROLL 37 スクロール --- 38 BGY=BGYー8 39 IF BGY<0 THEN BGY=BGY+512 40 BGOFS 1,0,BGY 41 BGFILL 1,0,BGY/8,31,BGY/8,33,8,0,0 42 COX=COX+RND(3)-1 43 BGFILL 1,COX-8,BGY/8,COX+7,BGY/8,1 3,0,0,0 COX の値を乱数で 1 減らすか、変 44 RETURN えないか、1増やすかする プログラムを実行してみましょう。 コースが左右に曲がります。 RND 関数の文法は以下のとおりです。 A= RND( 3 ) 値を受け取る 最大値 変数 このプログラム例では、「0,1,2」のどれかの値が変数 A に入ります。 「RND(3)」で「0,1,2」のどれかの値が出て、「RND(3)-1」で「-1,0,1」のどれかの値になります。 「COX=COX+RND(3)+1」で、COX の値が1減るか、変わらないか、1増えるかになります。 これで、コースの位置が左右に変化します。 プチコンでレースゲームを作る(2)/11 ICT ジュニア(上田パソコンクラブ) 今のプログラムだと、COX が減り続けたり増え続けたりすると、コースが画面をはみだしてし まいます。 IF命令で COX の範囲を制限します。 35 36 37 38 39 40 41 42 ’--- コース @CSCROLL スクロール --- BGY=BGYー8 IF BGY<0 THEN BGY=BGY+512 BGOFS 1,0,BGY BGFILL 1,0,BGY/8,31,BGY/8,33,8,0,0 COX=COX+RND(3)-1 COX が 8 より小さければ8に、 43 IF COX<8 THEN COX=8 24 より大きければ 24 に制限 44 IF COX>24 THEN COX=24 45 BGFILL 1,COX-8,BGY/8,COX+7,BGY/8,1 3,0,0,0 46 RETURN これで、コースが画面からはみ出さないようになります。 プチコンでレースゲームを作る(2)/12 ICT ジュニア(上田パソコンクラブ) ★スクロール速度の調整 今のプログラムだと、コースのスクロール速度が速すぎるので、速度を落としてみます。 移動のプログラムを改造します。 20 21 22 23 24 25 26 ’--- イドウ @MOVE FOR TO S を 1~2 でくり返し 2 ’ジュウジ キー B=BUTTON() 27 IF 28 IF 29 30 31 32 33 34 35 36 S=1 --- B==4 B==8 SPOFS VSYNC NEXT GOSUB 37 GOTO AND AND X>0 THEN X=X-2 X<239 THEN X=X+2 0,X,Y 1 FOR へ戻ってくり返し S @CSCROLL @MOVE FOR~NEXT を使って、自分のキャラクターを移動するプログラムを 2 回くり返しています。 その後でスクロールのサブルーチン@CSCROLL を呼び出すので、自分のキャラと比べてス クロールが半分の速度になります。 プチコンでレースゲームを作る(2)/13 ICT ジュニア(上田パソコンクラブ) ●得点を付ける 背景のスクロールに関連して、得点 を付けてみましょう。 コースが先へ進むと 1 点ずつ得点 が入るようにします。 最初の設定とコース表示に、点数のプログラムを追加します。 1 ’*** 2 3 4 5 6 7 8 9 ’--- RACE4 サイショ *** --- ACLS X=120 Y=175 SPSET 0,76,2,0,0,2 SPANIM 0,4,5 10 11 12 13 14 15 16 17 18 19 20 SPOFS BGY=0 SC=0 21 22 23 24 25 COLOR 0 LOCATE 0,0 PRINT ”SCORE ”;SC ’--- 0,X,Y 点数の変数 SC を0にする コース BGPAGE BGFILL COX=16 BGFILL ’--- --- 0 1,0,0,31,23,33,8,0,0 1,COXー8,0,COX+7,23,13,0,0,0 イドウ 画面左上に点数を表示 --- プチコンでレースゲームを作る(2)/14 ICT ジュニア(上田パソコンクラブ) 新しい命令が2つ出てきました。 COLOR(カラー)命令は、画面に表示する文字の色を変える命令です。 COLOR 0 文字色 (0~15) ,0 背景色(省略可能) (0~15) 色は 0~15 が使えます。ここでは文字色を「0」(白)にしています。いろいろ数字を変えて試 してみてください。 LOCATE(ローケート)命令は、画面上のカーソルの位置を変える命令です。 LOCATE 0 x 座標 (0~31) ,0 y 座標 (0~23) この LOCATE 命令の後で、PRINT 命令で文字を表示すると、指定した位置に文字が表示さ れます。 プチコンでレースゲームを作る(2)/15 ICT ジュニア(上田パソコンクラブ) そして、コースをスクロールさせるサブルーチンで、1 回スクロールするごとに点数が 1 点ず つ増えるようにします。 44 45 46 47 48 49 50 51 ’--- コース @CSCROLL スクロール --- BGY=BGYー8 IF BGY<0 THEN BGY=BGY+512 BGOFS 1,0,BGY BGFILL 1,0,BGY/8,31,BGY/8,33,8,0,0 COX=COX+RND(3)-1 52 IF COX<8 THEN COX=8 53 IF COX>24 THEN COX=24 54 BGFILL 1,COX-8,BGY/8,COX+7,BGY/8,1 3,0,0,0 55 点数 SC を 1 増やす 56 SC=SC+1 57 COLOR 0 58 LOCATE 0,0 59 PRINT ”SCORE ”;SC 60 61 RETURN 画面左上に点数を表示 「SC=SC+1」は「SC と SC+1 が等しい」という意味では無く、「SC に 1 を足して、SC に入れる」 という意味です。これで SC の値が 1 増えます。 増やした SC の値を、画面左上に表示することで、点数が 1 増えます。 プログラムを実行して、点数が増え ていくのを確認しましょう。 「RACE4」のファイル名で、プログラ ムを SAVE しましょう。 プチコンでレースゲームを作る(2)/16