プチコン4講座


初心者の方へ

 プチコン4とは、Nintendo Switch で動作するソフトウエアで、BASICというプログラム言語を使って自分でプログラミングをしてゲームやアプリを作ることができます。

プチコンやプログラムに関して、全く知らない初心者の方は、まずは、プチコン4のゲーム内の『初心者ガイド』をプレイすることをオススメします。

初心者ガイドだけでは実際にゲームを作るまでに関しての説明としては不十分なところもあります。続きは公式のWEBでとなっていますが、残念ながら今現在プチコン4の初心者講座は準備中となっています(2019/05/25)。

よって、プチコン4のプログラミングの講座の代わりとしては、前作であるプチコン3号/BIGの公式サイトのプチコン初心者講座が一番丁寧でわかりやすいです。

まだ、公式ではプチコン4用のコンテンツはできていませんが、プログラムに関する考え方はプチコン4もプチコン3号/BIGも基本的に変わりません。

ただし、プチコン4とプチコン3号/BIGではプログラムの書き方に若干の違い、場合によっては大きな違いがあります。

また、ここではゲームプログラムを作成するにあたっての、基礎的な知識を、極力難しいことを考えずに伝えたいと考えております。

アクションゲームを作るまでプチコン(第2回)(プチコン4版)

ここでは、プチコンで簡単なアクションゲームを作る方法を、細かく丁寧に極力わかりやすく解説していきたいと思います。

青文字が前回から追加された、内容になっています。

今回は2回目なので、第1回目のプログラムを元に解説していきます。

どんなゲームかというと、右から出現してくる敵をジャンプで交わすだけの単純なゲームです。

ですが、ゲームプログラムに重要な、当たり判定配列によるループ処理が使用されているため、プログラムを作る上での基礎とも言えます。

敵の表示

  1. ’--------------
  2. ’アクションゲームのサンプル
  3. ’   Version:0
  4. ’   ゲームないようとか
  5. ’   2019/05/25
  6. ’--------------
  7. ACLS
  8. ’プレイヤー
  9. SPSET 0,616
  10. SPANIM 0,7,8,617,8,616,0
  11. X=128   ’Xざひょう
  12. Y=64    ’Yざひょう
  13. A=0     ’ジャンプかそく
  14. JP=1    ’0:ちゃくち
  15.         ’1:じょうしょう
  16.         ’2:らっか
  17. ’てき
  18. EX=-100   ’X ざひょう
  19. EY=176    ’Y ざひょう
  20. ES=1      ’スピード
  21. SPSET 1,1006
  22. SPANIM 1,7,8、1007,8,1006,0
  23. SPOFS 1,-16,-16
  24. ’はいけい と じめん
  25. GCLS #C_AQUA
  26. GFILL 0,192,399,239,RGB(160,128,96)
  27. ’------------------------------
  28. WHILE 1
  29. ’------------------------------
  30.  ’ボタンそうさ
  31.  ’よこいどう
  32.  IF BUTTON(0,#B_LLEFT,0)THEN X=X-1
  33.  IF BUTTON(0,#B_LRIGHT,0)THEN X=X+1
  34.  ’ジャンプ
  35.  IF BUTTON(0,#B_RRIGHT,0)&&(JP==0)THEN JP=1:A=-3:BEEP 8
  36.  IF(!BUTTON(0,#B_RRIGHT,0))&&(JP==1)THEN JP=2:A=A/2
  37.  ’らっか
  38.  A=A+0.1
  39.  IF A>0 THEN JP=2
  40.  Y=Y+A
  41.  ’ちゃくち
  42.  IF(Y>176)&&(!BUTTON(0,#B_RRIGHT,0)) THEN JP=0
  43.  IF Y>176 THEN Y=176:A=0
  44.  ’がめんからでないように
  45.  IF X<0 THEN X=0
  46.  IF X>383 THEN X=383
  47.  ’プレイヤーひょうじ
  48.  SPOFS 0,X,Y
  49.  ’てきのしょり
  50.  ’てきをつくる
  51.  IF EX==-100 THEN
  52.   ES=1+RND(6)
  53.   EX=399+RND(255)
  54.  ENDIF
  55.  ’てきのいどう
  56.  EX=EX-ES
  57.  ’がめんからでたら、じゅんび
  58.  IF EX<-16 THEN EX=-100
  59.  ’てきのひょうじ
  60.  SPOFS 1,EX,EY
  61.  VSYNC 1
  62. WEND

これで、1体の敵が画面の右から登場し、左方向に横移動し左端に来たら消えます。

そして、また画面の右から出てきます。これを繰り返すことになります。

20行目で、-100を入れていますが、このプログラムでは敵が出現していないということを表します。
71行目で、-16になったら、-100を設定しています。要するに横移動だけでは、-100にはならないということになります。
63行目で、敵を出現させるときに、ランダムで画面端から更に離れた場所に出現させています。
64行目で、敵の速さをランダムに設定しているところがポイントです。

「1+ランダムな数字」としているのは、ランダム関数では0という値になることがあためです。そうなったら移動0で静止してしまうのを防ぐ必要があります。

これで、敵が出現するようになってきます。
ようやく、ゲームらしくなってきましたね。

敵の当たり判定

  1. ’--------------
  2. ’アクションゲームのサンプル
  3. ’   Version:0
  4. ’   ゲームないようとか
  5. ’   2019/05/25
  6. ’--------------
  7. ACLS
  8. ’プレイヤー
  9. SPSET 0,616
  10. SPANIM 0,7,8,617,8,616,0
  11. X=128   ’Xざひょう
  12. Y=64    ’Yざひょう
  13. A=0     ’ジャンプかそく
  14. JP=1    ’0:ちゃくち
  15.         ’1:じょうしょう
  16.         ’2:らっか
  17. ’てき
  18. EX=-100   ’X ざひょう
  19. EY=176    ’Y ざひょう
  20. ES=1      ’スピード
  21. SPSET 1,1006
  22. SPANIM 1,7,8、1007,8,1006,0
  23. SPOFS 1,-16,-16
  24. ’ステータス
  25. GOV=0        ’ゲームオーバーなら1
  26. ’はいけい と じめん
  27. GCLS #C_AQUA
  28. GFILL 0,192,399,239,RGB(160,128,96)
  29. ’------------------------------
  30. WHILE 1
  31. ’------------------------------
  32.  ’ボタンそうさ
  33.  ’よこいどう
  34.  IF BUTTON(0,#B_LLEFT,0)THEN X=X-1
  35.  IF BUTTON(0,#B_LRIGHT,0)THEN X=X+1
  36.  ’ジャンプ
  37.  IF BUTTON(0,#B_RRIGHT,0)&&(JP==0)THEN JP=1:A=-3:BEEP 8
  38.  IF(!BUTTON(0,#B_RRIGHT,0))&&(JP==1)THEN JP=2:A=A/2
  39.  ’らっか
  40.  A=A+0.1
  41.  IF A>0 THEN JP=2
  42.  Y=Y+A
  43.  ’ちゃくち
  44.  IF(Y>176)&&(!BUTTON(0,#B_RRIGHT,0)) THEN JP=0
  45.  IF Y>176 THEN Y=176:A=0
  46.  ’がめんからでないように
  47.  IF X<0 THEN X=0
  48.  IF X>383 THEN X=383
  49.  ’プレイヤーひょうじ
  50.  SPOFS 0,X,Y
  51.  ’てきのしょり
  52.  ’てきをつくる
  53.  IF EX==-100 THEN
  54.   ES=1+RND(6)
  55.   EX=399+RND(255)
  56.  ENDIF
  57.  ’てきのいどう
  58.  EX=EX-ES
  59.  ’がめんからでたら、じゅんび
  60.  IF EX<-16 THEN EX=-100
  61.  ’てきのひょうじ
  62.  SPOFS 1,EX,EY
  63.  ’あたりはんてい
  64.  IF X+8<EX-2  THEN @NOHIT
  65.  IF X+8>EX+18 THEN @NOHIT
  66.  IF Y+8<EY-4  THEN @NOHIT
  67.  IF Y+8>EY+12 THEN @NOHIT
  68.   GOV=1
  69.  @NOHIT
  70.  IF GOV==1 THEN BREAK
  71.  VSYNC 1
  72. WEND
  73. ’---------
  74. ’ゲームオーバー
  75. ’---------
  76. BEEP 15
  77. END

敵が出現しても、自分にぶつかったかどうかを判定(通称:当たり判定)しなければゲームとして成り立ちませんね。

当たり判定の仕方はいろいろな方法がありますが、ここでは自分の中心の点が、敵の範囲(四角)の中に入っているかで判定しています。

敵の当たりの範囲を敵の絵より大きくしたりすることで、4つの条件だけで、ぶつかっているか判定ができます。

ぶつかっていたら、つまり4つの条件に一致しなかったら。ゲームオーバーになるようにします。

点数を表示させる

  1. ’--------------
  2. ’アクションゲームのサンプル
  3. ’   Version:0
  4. ’   ゲームないようとか
  5. ’   2019/05/25
  6. ’--------------
  7. ACLS
  8. ’プレイヤー
  9. SPSET 0,616
  10. SPANIM 0,7,8,617,8,616,0
  11. X=128   ’Xざひょう
  12. Y=64    ’Yざひょう
  13. A=0     ’ジャンプかそく
  14. JP=1    ’0:ちゃくち
  15.         ’1:じょうしょう
  16.         ’2:らっか
  17. ’てき
  18. EX=-100   ’X ざひょう
  19. EY=176    ’Y ざひょう
  20. ES=1      ’スピード
  21. SPSET 1,1006
  22. SPANIM 1,7,8、1007,8,1006,0
  23. SPOFS 1,-16,-16
  24. ’ステータス
  25. GOV=0     ’ゲームオーバーなら1
  26. CNT=0     ’タイム カウンタ
  27. ’はいけい と じめん
  28. GCLS #C_AQUA
  29. GFILL 0,192,399,239,RGB(160,128,96)
  30. ’------------------------------
  31. WHILE 1
  32. ’------------------------------
  33.  ’ボタンそうさ
  34.  B=BUTTON()
  35.  ’よこいどう
  36.  IF BUTTON(0,#B_LLEFT,0)THEN X=X-1
  37.  IF BUTTON(0,#B_LRIGHT,0)THEN X=X+1
  38.  ’ジャンプ
  39.  IF BUTTON(0,#B_RRIGHT,0)&&(JP==0)THEN JP=1:A=-3:BEEP 8
  40.  IF(!BUTTON(0,#B_RRIGHT,0))&&(JP==1)THEN JP=2:A=A/2
  41.  ’らっか
  42.  A=A+0.1
  43.  IF A>0 THEN JP=2
  44.  Y=Y+A
  45.  ’ちゃくち
  46.  IF(Y>176)&&(!BUTTON(0,#B_RRIGHT,0)) THEN JP=0
  47.  IF Y>176 THEN Y=176:A=0
  48.  ’がめんからでないように
  49.  IF X<0 THEN X=0
  50.  IF X>383 THEN X=383
  51.  ’プレイヤーひょうじ
  52.  SPOFS 0,X,Y
  53.  ’てきのしょり
  54.  ’てきをつくる
  55.  IF EX==-100 THEN
  56.   ES=1+RND(6)
  57.   EX=399+RND(255)
  58.  ENDIF
  59.  ’てきのいどう
  60.  EX=EX-ES
  61.   ’がめんからでたら、じゅんび
  62.  IF EX<-16 THEN EX=-100
  63.  ’てきのひょうじ
  64.  SPOFS 1,EX,EY
  65.  ’あたりはんてい
  66.  IF X+8<EX-2  THEN @NOHIT
  67.  IF X+8>EX+18 THEN @NOHIT
  68.  IF Y+8<EY-4  THEN @NOHIT
  69.  IF Y+8>EY+12 THEN @NOHIT
  70.   GOV=1
  71.  @NOHIT
  72.  ’スコアひょうじ
  73.  CNT=CNT+1
  74.  LOCATE,0,0
  75.  PRINT FLOOR(CNT/60)
  76.  IF GOV==1 THEN BREAK
  77.  VSYNC 1
  78. WEND
  79. ’---------
  80. ’ゲームオーバー
  81. ’---------
  82. BEEP 15
  83. END

ゲームでは点数が大事ですね。
 ここでは、メインループの回数をカウントしています。

画面に表示するのはゲームを開始してからの秒数になります。プチコンではVSYNCを指定することで60分の1秒に1回メインループが実行されます

これで、一応遊べるようになりますが、簡単すぎて面白く無い感じがすると思います。

敵をたくさん表示させる

  1. ’--------------
  2. ’アクションゲームのサンプル
  3. ’   Version:0
  4. ’   ゲームないようとか
  5. ’   2019/05/25
  6. ’--------------
  7. ACLS
  8. ’プレイヤー
  9. SPSET 0,616
  10. SPANIM 0,7,8,617,8,616,0
  11. X=128   ’Xざひょう
  12. Y=64    ’Yざひょう
  13. A=0     ’ジャンプかそく
  14. JP=1    ’0:ちゃくち
  15.         ’1:じょうしょう
  16.         ’2:らっか
  17. ’てき
  18. DIM EX[8]
  19. DIM EY[8]
  20. DIM ES[8]
  21. FOR I=0 TO 7
  22.  EX[I]=-100   ’X ざひょう
  23.  EY[I]=144    ’Y ざひょう
  24.  ES[I]=1      ’スピード
  25.  SPSET 1+I,1006
  26.  SPANIM 1+I,7,8、1007,8,1006,0
  27.  SPOFS 1+I,-16,-16
  28. NEXT
  29. ’ステータス
  30. GOV=0     ’ゲームオーバーなら1
  31. CNT=0     ’タイム カウンタ
  32. EMX=0     ’てきのさいだいすう
  33. ’はいけい と じめん
  34. GCLS #C_AQUA
  35. GFILL 0,192,399,239,RGB(160,128,96)
  36. ’おんがくをならす
  37. BGMPLAY 1
  38. ’------------------------------
  39. WHILE 1
  40. ’------------------------------
  41.  ’ボタンそうさ
  42.  ’よこいどう
  43.  IF BUTTON(0,#B_LLEFT,0)THEN X=X-1
  44.  IF BUTTON(0,#B_LRIGHT,0)THEN X=X+1
  45.  ’ジャンプ
  46.  IF BUTTON(0,#B_RRIGHT,0)&&(JP==0)THEN JP=1:A=-3:BEEP 8
  47.  IF(!BUTTON(0,#B_RRIGHT,0))&&(JP==1)THEN JP=2:A=A/2
  48.  ’らっか
  49.  A=A+0.1
  50.  IF A>0 THEN JP=2
  51.  Y=Y+A
  52.  ’ちゃくち
  53.  IF(Y>176)&&(!BUTTON(0,#B_RRIGHT,0)) THEN JP=0
  54.  IF Y>176 THEN Y=176:A=0
  55.  ’がめんからでないように
  56.  IF X<0 THEN X=0
  57.  IF X>383 THEN X=383
  58.  ’プレイヤーひょうじ
  59.  SPOFS 0,X,Y
  60.  ’てきのしょり
  61.  EMX=FLOOR(CNT/500)
  62.  IF EMX>7 THEN EMX=7
  63.  FOR I=0 TO EMX
  64.   ’てきをつくる
  65.   IF EX[I]==-100 THEN
  66.    ES[I]=1+RND(6)
  67.    EX[I]=399+RND(255)
  68.   ENDIF
  69.   ’てきのいどう
  70.   EX[I]=EX[I]-ES[I]
  71.   ’がめんからでたら、じゅんび
  72.   IF EX[I]<-16 THEN EX[I]=-100
  73.   ’てきのひょうじ
  74.   SPOFS 1+I,EX[I],EY[I]
  75.   ’あたりはんてい
  76.   IF X+8<EX[I]-2  THEN @NOHIT
  77.   IF X+8>EX[I]+18 THEN @NOHIT
  78.   IF Y+8<EY[I]-4  THEN @NOHIT
  79.   IF Y+8>EY[I]+12 THEN @NOHIT
  80.    GOV=1
  81.   @NOHIT
  82.  NEXT
  83.  ’スコアひょうじ
  84.  CNT=CNT+1
  85.  LOCATE,0,0
  86.  PRINT FLOOR(CNT/60)
  87.  IF GOV==1 THEN BREAK
  88.  VSYNC 1
  89. WEND
  90. ’---------
  91. ’ゲームオーバー
  92. ’---------
  93. BGMSTOP
  94. SPCHR 0,632
  95. BEEP 15
  96. WAIT 60
  97. BGMPLAY 6
  98. LOCATE 9,9
  99. PRINT ”GAME OVER”
  100. END

敵が一体だけでは、つまらないので、たくさん表示させるようにします。

ポイントは敵の変数を配列変数にしてループ(繰り返し命令)で処理させることです。

73行目あたりでは、カウントしている経過時間を元に、敵の出現数を制御する。
こうすることで、はじめは敵が少なく簡単だけど、だんだん難しくなるようにできます。

ついでに、BGMを鳴らす処理と、ゲームオーバー時の演出を少し豪華にしています。

いかがでしょうか、こんな感じで一応遊べるゲームを作ってみました。

ゲーム好きな方には、クソゲーとか、単純すぎてつまらないと思うかもしれません。
ですが、このプログラムをいろいろ改造することよって、敵のパータンを複雑にしたり、敵の動きを面白くしたりと、改良方法は無限大です。

自由にいろいろなことを出来ることがプログラミングの魅力であり、面白さでもあります。

今回は、少しずつプログラムを追加して動かしながら、だんだんとゲームらしくなっていく様子を伝えてみたかったので、このような単純なゲームになっています。

インターネットの世界にはプチコンやゲームのプログラムを公開している人がたくさんいます。

そういったプログラムを参考にすることで、高度なプログラムを少しずつ身に着けていくことができるでしょう。

プチコン4では、作ったプログラムをサーバーで公開することができます。その場合は、プロジェクト単位で公開することになります。

プチコン4ではプロジェクトを実行することができます。プロジェクトを実行する場合、メインのプログラムのファイル名が「MAIN.PRG」である必要があります。
 なので、完成した作品のファイル名は「MAIN.PRG」にしておくことが望ましいでしょう。


この講座のアクションゲームの公開キーも置いておきますね。
公開キー:[]



数学=計算ではない!原理や構造の理解を大切にすると、数学はもっとおもしろくなる!数学は永遠性を秘めている。数学だけが人間の唯一の証ではないかという感動が湧いてくる—。




inserted by FC2 system