さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.364

作者 @solarplexuss

1話目から読む

新規登録でもっと便利に!

ユーザー投稿作品やKADOKAWAの人気作品をもっと便利に読めます。

閲覧履歴

どこまで読んだか忘れても大丈夫。自動的に記憶してくれます。

更新情報

「フォロー」した作家・作品の更新情報がメールで届きます。

マイページ

好きな作品を管理できる、あなた専用の本棚ができます。

必要なもの

ユーザー登録(無料)に必要なのは、メールアドレスだけ! 登録は簡単です。

目次

連載中 全423話

更新

  1. さあ いよいよC言語を使ったゲームプログラミングを行ってみましょう 
  2. 第1話
  3. C言語を使ったゲームプログミングの仕組みを知ることで🌞著しく🌞C言語を使ったゲームプログミングの敷居を下げることができます
  4. 第2話
  5. 第3話
  6. 第4話
  7. さあ、DXライブラリを導入してみよう
  8. APIってなあに? アプリケーションプログラミングインタフェースはプログラムとプログラムを連携させる働きがあります
  9. C言語を用いたゲームプログラミングでは Windows オペレーティングシステムを用いたプログラミングとなるので Windows API を 用いることになります
  10. C言語をつかってのゲームプログラミングではDXライブラリを通して間接的に🌞Windows32 API🌞 🌞Direct X🌞 というAPI を用いることになります
  11. まずはDXライブラリをダウンロードしてみましょう
  12. まずはプロジェクトを作成します、次にプロジェクト内にプログラムを記述するためのファイルを追加します 
  13. C言語を使ってゲームを作製する場合 新たにプロジェクトを立ち上げ WinMain関数が使えるようプロジェクトの設定を変更するということが必要になります ここは重要なポイントです
  14. プロジェクトにはデフォルトでさまざまな設定がなされています ゲーム作りをするために その設定を 変更してみましょう
  15. DxLib_VCファイルに含まれる💖プロジェクトに追加すべきファイル_VC用ファイル💖を浅い階層に設置しないとDXライブラリを導入できない場合があります
  16. DXライブラリを使用できるようにプロジェクトの設定をおこないます Cドライブの深い階層に💖プロジェクトに追加すべきファイル_VC用ファイル💖を設置してみますがおススメしません
  17. DxLib_VCファイルに含まれる💖プロジェクトに追加すべきファイル_VC用ファイル💖を浅い階層に設置しないとDXライブラリを導入できても関数が正常に実行されない場合があるのでおすすめしません
  18. DXライブラリを使用できるようにプロジェクトの設定をおこないます 今度はCドライブの浅い階層に💖プロジェクトに追加すべきファイル_VC用ファイル💖を保存してみます
  19. DXライブラリを使用できるようにプロジェクトの設定をおこなってみよう Ⅽドライブの浅い階層に💖プロジェクトに追加すべきファイル_VC用ファイル💖を設置する場合
  20. DXライブラリをつかって ディスプレイ画面に白い点を表示してみましょう(DXライブラリの作者 山田 巧さんに感謝します)
  21. まずはゲーム画面の画面サイズを変更してみよう そのためには ChangeWindowMode関数を用います
  22. WaitKey()関数が実行されるとキーボードから何か入力されるまでそれ以降のプログラムは実行されません
  23. 皆さんご注意😊ビルドエラーが生じてプログラムが実行できない場合の簡単な対処法はパソコンの再起動です
  24. なぜ ChangeWindowMode関数はDXライブラリを初期化する前に実行されるのでしょうか?
  25. ゲーム画面に鮮やかな色彩を吹き込んでみましょう
  26. DrawBox関数をつかいゲーム画面に青い四角形を表示してみよう 
  27. DrawBox関数の使い方を学んでみましょう
  28. DrawBox関数の第5引数は色を指定します 第6引数は四角形を塗りつぶすか、輪郭のみを表示するかを決めるためにあります
  29. DrawBox(0, 0, 120, 120, 65535, TRUE);を実行すると(0,0) (121,121) の座標の点を 通る四角形が描かれます
  30. 色の祭典 ディスプレイ画面に表示される色の美しさを味わってみよう
  31. DrawBox関数の第5引数に色コード(整数値)を用いて 赤や白や黄色などの四角形を表示してみましょう 色コードはGetColor関数で取得することもできます
  32. 赤色を強くする場合はGetColor関数の第1引数の値を緑に対応する第2引数の値や青に対応する第3引数の値より大きく 全体の色を白っぽくしたい場合は 引数全体の数値を上げます
  33. Windowモードの画面サイズは640×480となっています
  34. ゲーム画面に自分の好きな画像を載せてみましょう
  35. LoadGraph(ロ ー ドグラフ)関数を用いれば 画像を読み込むことができます
  36. DXライブラリで用いることができる画像ファイルの形式はbmpとなっています jpg形式で保存された画像ファイルを用いることはできません
  37. LoadGraph(ロ ー ドグラフ)関数で読み込まれる画像ファイルは🌞exeファイルが保存されているフォルダ内もしくはそのフォルダ内に作成されたフォルダ内🌞に格納されている必要があります
  38. 読み込みたい画像がLoadGraph(ロ ー ドグラフ)関数によって読み取ることができるためにexeファイルを格納しているフォルダと同じフォルダ内に読み込む画像を移動させましょう
  39. exeファイルが保存されているDebugフォルダ内にゲーム画面に取り込みたい画像ファイルを保存することになります まずはその画像ファイルを用意しましょう
  40. お絵描きソフトCLIP STUDIOペイントを導入して自分の思うがままのゲームキャラクターをデザインしよう
  41. CLIP STUDIOペイントを導入します CLIP STUDIOペイントを用いてゲーム内に登場する飛行機などを自分で描いてみよう
  42. クリップスタジオを用いてゲームに登場するキャラクターなどを実際に描いていきましょう ドットペンを用いれば🌞マウス🌞のみで描画できます
  43. 実際にマックスたちがゲームで用いられる画像データを作成しているところを実況してみます 描画画面のサイズを変更する方法と描画画面のサイズと描く線の太さの関係を学んでみましょう
  44. 線の色を変更していろんな色の線が描けるようにしてみましょう
  45. レイヤー機能をつかってみよう 下書きと色を塗るレイヤーを分けると色塗りがとても簡単になります
  46. 描画領域が32x32ドットのように小さい場合ドットペンを使えばにじみのないまっすぐな線を引くことができます
  47. ドットペンで描いたドット絵をBMP形式でファイルに保存してみましょう JPEG形式で保存してはいけません そのドット絵は後にゲームで用いられることになります
  48. 自分で画像データを作成しなくても以下のエピソードで飛行機の画像データが提供されています 取得した画像データはJPEG形式からBMP形式に変更してご活用ください
  49. まずはサイトからソーラーが描いた飛行機.jpgファイルをダウンロードしてみよう
  50. ただしCLIP STUDIOペイントを用いて直接BMP形式で画像をファイルに保存した場合でさえDrawGraph関数を用いて画像を表示する際に画像の黒い背景が透過されない場合があります
  51. JPEG形式の画像データをBMP形式の画像データに変更する方法を学んでみましょう
  52. ですのでCLIP STUDIOを用いて正しい手順で画像データを作成、保存をする必要があります ここが自分で画像データを作成するときの最大のポイントになります
  53. DrawGraph関数を使って表示したい画像の特定の色の部分だけを透明にするにはCLIP STUDIOを用いて画像データを作成する正しい手順を学ぶ必要があります
  54. CLIP STUDIOの使い方を学んでみよう まずは背景のレイヤーと飛行機の画像を描くレイヤーを用意することができるようになりましょう
  55. 黒色はHSV方式では💖H 0 S 0 V 0💖で表されます  背景はこの黒色で塗りつぶすことになります ここが重要なポイントです
  56. 飛行機を描くレイヤーと背景となる黒い部分を描くレイヤーを 💖💖別けたまま💖💖BMP形式 飛行機の画像データをファイルに保存することが第3のポイントです
  57. exeファイルが保存されているDebugフォルダの中に自分で作製した画像ファイルを保存してみよう exeファイルを直接クリックするとプログラムが実行されます
  58. 実際にDebugフォルダに自分で作製した画像ファイルを移動させてみよう
  59. LoadGraph関数を実行するとき引数にはDebugフォルダから読み込みたい画像ファイルへのパス(相対パス)を用いることになります
  60. LoadGraph("画像データ¥¥ソーラーが描いた飛行機.bmp");を実行します このように文字列を表す""ダブルクォーテーション内では¥は¥¥であらわすことになります ご注意ください
  61. Visual Studioの場合ではデバッグなしで実行することによりDrawGraph関数を実行しても真っ黒い画面が表示されるだけで何も表示されません
  62. ゲーム画面にDrawGraph関数を用いて画像を表示するにはまずexeファイルを生成し次にそのexeファイルが保存されている場所を探し出し直接exeファイルをクリックすることになります
  63. DrawGraph(300, 230, graphichandle, TRUE); をもちいて実際に画像をゲーム画面に表示してみましょう
  64. DrawGraph関数👉DrawGraph(300, 230, graphichandle, TRUE);の仕組みを考察してみよう
  65. DrawGraph関数👉DrawGraph(300, 230, graphichandle, TRUE);の仕組みを考察してみよう
  66. 便利テクニック ハードディスク内から探し出さなくてもすぐにgame.exeを実行できるようgame.exeをタスクバーにピン止めしてみよう
  67. ゲーム画面に表示される飛行機を動かしてみましょう
  68. ゲーム画面に表示される飛行機を複数表示してみましょう
  69. 飛行機の画像を動かしてみる?
  70. こちこち手動で飛行機の画像を動かしてみよう
  71. 飛行機の画像をゲーム画面上で動かしています  SetDrawScreen関数 と ScreenFlip関数を用いた場合
  72. ClearDrawScreen関数が実行されると表画面、裏画面に描かれた画像がともに消去
  73. 飛行機が飛んでいく画像の背景に青い四角形を表示してみよう
  74. 飛行機が飛んでいく画像の背景に一瞬だけ青い四角形の画像が表示されるのではなくずっと青い四角形が表示されるようにしてみた~い
  75. ScreenFlip();を用いて裏画面に描かれた画像を表画面に表示してClearDrawScreen();を用いて消すを繰り返すプログラムは高速で実行されるので画像は表示され続けているように見えます
  76. OSシステムの安定稼働のためProcessMessage関数は目安として60分の1秒に一回程度実行する必要があります
  77. ProcessMessage関数を実行してみましょう
  78. ProcessMessage();の実行時 画面にちらつきが生じる場合があるのでⅭドライブの深い階層に プロジェクトに追加すべきファイル_VC用フォルダ を設定することはおすすめしません
  79. 飛行機の飛ぶスピードを2倍、5倍に変化させてみよう
  80. 飛行機の飛ぶスピードを変更する原理は飛行機を描画するドット間隔を変更することにあります
  81. 飛行機の飛んでいく速度を変化させる方法 その2
  82. for{}文をwhile{}文に書き換えてみましょう
  83. ゲーム画面に飛行機が飛んでいる場合でもあるキーを押すとプログラムの終了、つまりゲームが終了できるようにした~い
  84. CheckHitKey関数は🌞実行されるとき引数に与えられたキーが押されている🌞と戻り値として1が返されます
  85. ゲーム画面に飛行機が飛んでいる最中でも あるキーを押すと プログラムの実行が終了し ゲームが終了するようにした~い
  86. 飛行機が右に飛んでいる最中でもEscキーをおすとプログラムの実行が終了する(ゲームが終了する)ようにプログラムを構成してみよう
  87. for{}文やwhile{}文の条件式の中で関数が記述されていると1回ごとのループの前にその関数が実行されることになります その1
  88. for{}文やwhile{}文の条件式の中で関数が記述されていると1回ごとの繰り返しループの前にその関数が実行されることになります その2です
  89. キーをおすと飛行機が望みの方向に移動するプログラムを作製してみよ~う
  90. ジョイパッド(コントローラー)の入力に応じて飛行機が動くプログラムを作成してみよう GetJoypadlnputState関数を使うことになります
  91. GetJoypadInputState関数の引数にDX_INPUT_PAD1を用いれば ジョイパッド1のどのボタンから入力されているかどうかを 判断する(識別する)ことができま~す
  92. AND演算を行ってみよう! AND演算のしくみはとって~~~~~も簡単です  AND演算 1&5 は 足し算1+5 引き算1-5 掛け算1*5 割り算1/5 の仲間です
  93. PAD_INPUT_DOWNは1、PAD_INPUT_LEFTは2,PAD_INPUT_RIGHTは4,PAD_INPUT_UPは8を表しています
  94. if (key == PAD_INPUT_UP)と if (key & PAD_INPUT_UP)の違いは何なのか 飛行機を斜め上に動かせるようにするには&演算子を用いることになります
  95. DrawFormatString関数を使ってPAD_INPUT_DOWN, PAD_INPUT_LEFT,PAD_INPUT_RIGHT,PAD_INPUT_UPに格納されている数値を表示してみよう
  96. 必須テクニック 新たなプログラムを実行するためにタスクマネージャーから現在実行中のexeファイルを停止する方法を学んでみよう
  97. PAD_INPUT_1 PAD_INPUT_2 PAD_INPUT_3 PAD_INPUT_4 PAD_INPUT_5 は16 32 64 128 256のように異なる数値を表します
  98. PAD_INPUT_DOWN,PAD_INPUT_LEFT,PAD_INPUT_RIGHT,PAD_INPUT_UPに なぜ 2の倍数の 1,2,4,8 が 設定されているのでしょうか?
  99. 飛行機のデータを一括して 1つの構造体変数で管理してみよう そのために構造体を作製することになります
  100. 自機のデータを構造体変数jibunnnohikoukiのメンバ変数で取り扱うことによりjibunnnohikoukiのメンバ変数を見ただけで自機のデータを取り扱っているのがわかるようになります
  101. 1度、構造体を作製しておけば同じタイプのデータで構成される飛行機のデータをその飛行機に対応する構造体変数のメンバ変数で取り扱うことができるようになります
  102. 構造体型の配列宣言を行うことにより同じタイプのデータをとりあつかう構造体のメンバ変数を簡単に作製することができるようになります
  103. WinMain関数のブロック内で構造体変数宣言を行うと生成される構造体変数はローカル変数となります その際、構造体変数のメンバ変数は自動的に初期化されません
  104. WInMain関数の前で構造体変数宣言を行うと生成される構造体変数はグローバル変数となります その際、構造体変数のメンバ変数は自動的に初期化されます
  105. 飛行機から弾を発射してみよう まずは飛行機と弾の画像を表示してみよう
  106. 飛行機の移動に応じて 弾も 一緒に くっついて移動するように画像を表示してみよう
  107. なにかボタンを押したときだけ 飛行機の近くに 弾が表示されるようにしてみよう
  108. Zボタンを押して発射された自分の弾が画面の外に出たときZボタンを押したら新たに自分の弾が発射されるようにプログラムを構成してみましょう
  109. 飛行機から自分の弾を1発だけ発射させるプログラムを構成してみよう
  110. Zボタンを押して発射された自分の弾が画面の外に出たときZボタンを押したら新たに自分の弾が発射されるようにプログラムを構成してみましょう
  111. 自分の弾がゲーム画面に表示されているかどうかを判別するデータを構造体変数のメンバ変数で取り扱ってみよう
  112. 自分の弾とは別に追加で自分の弾1 自分の弾2 自分の弾3 自分の弾4も発射したいのよん
  113. Zボタンを押したとき自分の弾が2連射して発射されるようにしてみよう
  114. C言語でDXライブラリをつかってゲームづくりをする際に学んだ目的を達成するための手順(アルゴリズム) は C#言語でUnityを使ってゲームを作るときにも用いることができます
  115. 弾が連射されるプログラムでは自分の弾と自分の弾1が交互に発射されることになります
  116. Zボタンを押したら2連射される弾の間隔を調整してみましょう
  117. (while{}文を用いていると)理論上プログラムが正しく構成されていてもプログラムが正しく機能しない場合がありますのでご注意ください
  118. なぜZボタンを押し続けた状態で弾が2連射されるのは最初の一回のみで後は弾が1発ずつしか 発射されないのでしょうか? プログラムが理論上正しくても実際に稼働させてみるとうまく機能しない場合があります
  119. 配列を使えばfor文を用いて大量のデータを扱うことができfor文の中でbreak;を用いることにより好きなタイミングでfor文の実行から抜けることができるようになります
  120. 新たにZボタンを押すと弾が2連射されるプログラムを書き換えてみよう まずは配列を用いて弾のデータを取り扱うようにしましょう
  121. ℤボタンを押しつづけていると 連続した弾が発射され続けるプログラムのプロトタイプの解説を行ってみたいと思います
  122. 最初に自分の弾が発射された直後ではなく しばらく時間をおいてから 自分の弾1が発射されるようにプログラムを構成してみましょう 自分の弾と自分の弾1が間隔をあけて表示されることになります
  123. Zボタンを押し続けていると 弾が3連射して発射され続ける、弾が5連射して発射され続けるようプログラムを構成してみよう
  124. Zボタンを押し続けていると 弾が100連射?して発射され続けるようプログラムを構成してみよう
  125. 画面の外に弾が出てから次の弾が発射されるプログラムでは画面の左端にいると次弾が発射されるのに時間がかかり画面の右端にいるとすぐに次弾が発射されることになります
  126. Zボタンを押していると弾が一定の間隔で発射されるようプログラムを改良してみよう
  127. Zボタンを押していると弾が次々と発射されることになりますが弾が発射されてから次の弾が発射されるまでの間隔を一定になるようにしてみましょう
  128. Zボタンを押していると弾が2連射されることになりますが2連射されてから2連射されるまでの間隔を一定になるようにしてみましょう
  129. Zボタンを押していると一定の間隔で弾が高速で2連射されるようにしてみよう
  130. Zボタンを押していると弾が10連射されることになりますが10連射されてから10連射されるまでの間隔を一定になるようにしてみましょう
  131. Zボタンを押していると弾が1000連射されることになりますが1000連射されてから1000連射されるまでの間隔を一定になるようにしてみましょう
  132. Zボタンを押していると弾が1000連射されることになりますが1000連射されてから1000連射されるまでの間隔を一定になるようにしてみましょう その2
  133. レーザーが発射できるようにプログラムを構成してみよう
  134. シューテイングゲームに必要な敵の画像と自機の画像がぶつかったときの当たり判定について考えてみよう
  135. Loadgraph関数とDrawgraph関数を使って敵の画像をゲーム画面に表示してみましょう
  136. 自機と敵機がぶつかっている状態を判定する方法について考えてみましょう
  137. 1直線上にある線分abと線分cdが重なっている条件はa<d,c<bとなります
  138. 四角形の領域と四角形の領域が重なっている条件を考察してみよう とてもシンプルで簡単です
  139. 自機と敵機がぶつかっている状態を判定する方法について考えてみよう
  140. 自機の画像データと敵機の画像データが重なった状態を自機と敵機がぶつかったと判定するとゲーム画面上では自機と敵機がぶつかっていないのにぶつかったと判定されてしまいます
  141. ゲーム画面ではy軸は下方向なので2つの四角形が重なっているときの条件は通常のxy平面のときとはことなってきます
  142. 自機と敵機のあたり判定を行うために自機の画像データの中の四角形の領域と敵機の画像データの中の四角形の領域を適当に選んでみましょう
  143. 自機の画像データの中の四角形の頂点の座標と敵機の画像データの中の四角形の頂点の座標をもとめてみよう
  144. 自機の画像データの中の オレンジ色の四角形 と 敵機の画像データの中の 緑色の四角形 が 重なっている条件を求めてみましょう
  145. 自機と敵機がぶつかったと判定されたときbreak;を使ってWinMain関数のブロック内のwhile文のループから抜け出しプログラムが終了するようにしてみましょう
  146. 次は自機と敵機が衝突したら自機が消えるようにしてみましょう
  147. 次は自機と敵機が衝突したら自機と敵機の両方が消えるようにしてみましょう
  148. 複数の敵機を用意しておいて自機と敵機がぶつかったとき自機と敵機が共にきえるようにしてみましょう
  149. 自機と敵機がぶつかったら 自機と敵機が消えるようにするだけでなく さらに 自分の弾と敵機がぶつかったら 自分の弾と敵機が消えるようにしてみましょう
  150. 複数の敵を用意しておいて自機と敵機がぶつかったら 自機と敵機が消えるようにするだけでなく さらに 自分の弾と敵機がぶつかったら 自分の弾と敵機が消えるようにしてみましょう
  151. 1体の敵を用意しておいて自機と敵機がぶつかったら 自機と敵機が消えるようにするだけでなく さらに連射された自分の弾と敵機がぶつかったら 自分の弾と敵機が消えるようにしてみましょう
  152. 自分の弾に当たるなどして敵機がゲーム画面上から消えている場合は 敵機が消えた場所に自機を移動させても自機が消滅しないようにしてみましょう
  153. 最終段階 複数の敵を用意しておいて自機と敵機がぶつかったら 自機と敵機が消えるようにするだけでなく さらに 連射された自分の弾と敵機がぶつかったら 自分の弾と敵機が消えるようにしてみましょう
  154. GetRand関数を用いてランダムな位置に100体 敵を登場させてみよう 
  155. 配列とfor文を用いて敵の飛行機を横に一直線に表示してみましょう
  156. 配列とfor文を用いて敵の飛行機を縦に一直線に表示してみましょう
  157. 2次元配列を用いて100体の敵の飛行機のデータを取り扱い100体の敵の画像をゲーム画面に表示してみよう
  158. 🌞🌞🌞おまけ🌞🌞🌞1000連射弾で10000体の敵の飛行機を撃ち落としてみよう その1
  159. 🌞🌞🌞おまけ🌞🌞🌞1000連射弾で10000体の敵の飛行機を撃ち落としてみよう その2
  160. おまけコーナーです ここまで学んだことを生かしてパックマンゲームを作製してみましょう 学んだプログラムはいろいろ応用することができます
  161. シューティングプログラムを応用して 😊パックマンゲームを作製してみよ~う😊
  162. パックマンの向きに合わせてパックマンの画像を変えてみましょう
  163. 飛行機がゲーム画面からはみ出ないようにしてみよう
  164. 自分の弾が1000発当たらないと壊れない敵を作製してみよう
  165. 自分の飛行機と敵の飛行機が 衝突した時 自分の飛行機と敵の飛行機が消滅し 自分の弾が1発 敵の飛行機に衝突すると 自分の弾と敵の飛行機が消滅するようにしてみる?
  166. 条件式をうまく設定しないと 敵の飛行機に自分の弾が1発撃ちこまれたら あとは放っておかれても敵の飛行機が消滅する場合があります
  167. 自分の弾のライフが0以上を判定条件に加えないと敵の飛行機に自分の弾が1発突しただけで放っておいても 自動的に敵の飛行機が消滅することがあります
  168. 自分の弾のライフが0以上を判定条件に加えないと敵の飛行機に自分の弾が1発衝突しただけで放っておいても 自動的に敵の飛行機が消滅することがあります
  169. 敵の飛行機に表示されている自分の弾が当たった時だけ敵の飛行機のライフが減るようにしてみよう
  170. 敵の飛行機にあたったとき敵の飛行機は破壊されても自分の弾は破壊されない新型レーザー弾を発射してみよう
  171. 飛行機や自分の弾の移動速度はリフレッシュレートによって異なってきます  リフレッシュレートが高ければ高いほど速く飛行機や自分の弾は移動することになります
  172. リフレッシュレートが異なっても自分の飛行機が同じ速度で移動するようにしてみましょう 果たしてそんなことができるのでしょうか?
  173. ScreenFlip(); が1回実行されるのにかかる時間を計測してみよう そのためにGetNowCount()関数を用います
  174. ScreenFlip();が実行される前の時間と実行された後の時間を求めてScreenFlip();が実行される時間を求めてみよう
  175. ScreenFlip();が1回実行される時間の平均値を求めてみよう
  176. リフレッシュレートがいくらに設定されていても十字キーを押した時の飛行機の1秒間の移動量(移動スピード)を一定になるようにしてみよう
  177. 自分の飛行機の1回の移動量を実数値である4* frametime*144に変更するとなると画面の外に自分の飛行機が飛んでいかないようにする命令文や構造体を変更する必要があります
  178. ユーザーのパソコンのリフレッシュレートが何ヘルツに設定されていても 同じ速度で自分の弾が移動するようにしてみましょう
  179. ユーザーのパソコンのリフレッシュレートが何ヘルツに設定されていても同じ速度で自分の飛行機が移動できるようにした場合 画面の端まで明らかに自分の飛行機が到達できなくなるバグが発生するので注意してください
  180. ゲームキャラクターのアニメーションにとりかかってみましょう 仕組みは非常に簡単でゲームキャラクターのアニメーションからゲームを作成している人もいるほどです
  181. 自分の飛行機の画像が時間ごとに色や形を変えたりアニメーションするようにしてみよう アニメーションさせる仕組みはとても簡単です
  182. 自分の飛行機をアニメーションさせてみよう たくさんの画像データを取り扱えるように構造体のgraphichandleをgraphichandle[7]のように配列に変更します
  183. 同じパターンで複数の画像データを表示させてみよう そのために剰余代入演算子を用いることになります
  184. 注意点 構造体宣言のメンバ変数をメンバ配列に変更すると構造体変数のメンバ変数を構造体変数のメンバ配列に変更するよう今までのプログラムを見直す必要があるので注意💖し・て・ね
  185. 画像データを複数枚用意して自分の飛行機をアニメーションさせてみましょう
  186. 超繊細シューティング作品紹介 作品NO.1 秋 G線上のアリア
  187. 超繊細シューティング作品紹介 作品NO.1 秋 G線上のアリア
  188. アニメーションする速度を調整してみよう
  189. メモリに取り込まれた7枚の画像データの内2枚だけを使ってアニメーションさせてみましょう
  190. 敵の飛行機をアニメーションさせてみよう
  191. 敵の飛行機10体をアニメーションさせてみよう
  192. 敵の飛行機10体をアニメーションさせてみよう その2
  193. 敵の飛行機10体のアニメーションするパターンの周期を変化させてみよう
  194. 敵の飛行機10体のアニメーションするパターンをランダムに変化させてみよう
  195. 敵の飛行機10体のアニメーションするパターンをランダムに変化させてみよう その2
  196. ランダムにアニメーションする敵の飛行機のアニメーション速度を今度こそゆっくりに調整してみよう
  197. 登場するキャラクターそれぞれが独自のタイミングでアニメーションできるようそれぞれのキャラクターごとにgraphicnumberを設定してみよう
  198. 構造体Characterを改良してランダムなタイミングで敵の飛行機10体がなだらかにアニメーショするようにしてみよう
  199. 敵の飛行機が消滅したら爆発するアニメーションを設定してみよう
  200. 敵の飛行機が消滅したら爆発するアニメーションを設定してみよう 敵の飛行機は10体用意してみます
  201. 敵の飛行機を2体用意しておいて弾が当たった時の爆発する時間がそれぞれ異なるようにしてみよう
  202. 敵の飛行機を10体用意しておいて弾が当たった時の爆発する時間がそれぞれ異なるようにしてみよう
  203. 敵の飛行機を10体用意しておいて自分の弾が敵の飛行機に当たった時の爆発する周期がそれぞれ異なるようにしてみよう
  204. まとめ 敵の飛行機10体がそれぞれランダムに滑らかにアニメーションし弾が当たったときの爆発する時間が異なるようにしてみよう
  205. 自分の弾が当たると敵の飛行機が光で点滅するアニメーションが表示されるプログラムを実行してみましょう まず 敵の飛行機に自分の弾が1発あたっただけでは 敵の飛行機が消滅しないようにしましょう
  206. 敵の飛行機に自分の弾が当たったら敵の飛行機が光で点滅するようにしてみよう
  207. 自分の弾が敵の飛行機に当たって光が点滅するときSetDrawBlendMode関数を用いて敵の飛行機が光の下に透けて見えるようにしてみましょう
  208. SetDrawBlendMode関数のいろいろなブレンドモードを用いて元の画像と合成したい画像を合成してみよう 描画モードがDX_BLENDMODE_PMA_INVSRCの場合
  209. SetDrawBlendMode関数のいろいろなブレンドモードを用いて元の画像に合成したい画像を合成してみよう 描画モードがDX_BLENDMODE_SUBの場合
  210. 今度は自分の飛行機が敵の飛行機にぶつかったら爆発するようにしてみましょう
  211. 自分の飛行機と敵の飛行機がぶつかって自分の飛行機が消滅したら もう自分の飛行機が キーボードを押しても動かなくなるようにしてみよう
  212. いよいよ敵の飛行機を移動させてみましょう さまざまなパターンで移動させてみましょう
  213. 敵の飛行機を移動させてみよう
  214. 敵の飛行機を下側に動かしてみよう
  215. 上下に敵の飛行機が移動するようにしてみよう よくある失敗パターン
  216. 上下左右に敵の飛行機が移動するようにしてみよう 敵の飛行機の移動パターンを2次元配列で管理してみよう
  217. 敵の飛行機を上下左右に動かしてみよう よくある失敗パターンその2 敵の飛行機の移動パターンの繰り返し回数は10の倍数にし全ての移動パターンで同じ回数に設定する必要があります
  218. 敵の飛行機を回転移動させてみよう
  219. ジグザグに左の方へ敵の飛行機が移動するようにしてみよ〜う
  220. ジグザグに左の方へ敵の飛行機が移動するようにしてみよ〜う その2
  221. 敵の飛行機の移動速度をゆっくりにしてみよう よくある失敗パターン
  222. 敵の飛行機の移動速度を自由自在に調整してみましょう
  223. 超繊細シューティング作品紹介 作品NO.2 牧神の午後への前奏曲
  224. 敵の飛行機10体を横に並べて飛行させてみよう
  225. 敵の飛行機が弾を発射できるようにしてみよう
  226. 今度は敵の飛行機が弾を発射できるようにしてみよう
  227. 敵の飛行機の弾のデータを構造体Character型の構造体変数のメンバ変数で取り扱ってみよう
  228. 敵の飛行機から弾を発射させてみよう
  229. 敵の飛行機から左向きに弾が発射されるようにしてみよう
  230. 敵の弾の画像を入れ替えてみよう
  231. 敵の弾の移動スピードをゆっくりに調整してみよう
  232. 2連射される敵の弾の最初の弾と次弾の間隔を一定にしてみましょう
  233. 敵の飛行機2体それぞれから敵の弾が2連射されるようにしてみよう
  234. 敵の飛行機10体から敵の弾が2連射されるようにしてみましょう
  235. 敵の飛行機10体から2連射される弾のスピードを変更してみよう
  236. 敵の飛行機1体から2連射される弾の発射のタイミングをずらしてみよう
  237. 敵の飛行機10体から2連射される弾の発射のタイミングをランダムにずらしてみよう
  238. 新型 敵の飛行機1体から弾が2連射される新しいタイプのプログラムを実行してみよう
  239. 新型 敵の飛行機2体から敵の弾が2連射されるようにしてみましょう
  240. 新型 敵の飛行機10体から敵の弾が2連射されるようにしてみましょう
  241. 敵の飛行機1体から敵の弾が2連射されるのにbreak;を使う旧型プログラムとbreak;を使わない新型プログラムを見比べてみましょう その1
  242. 敵の飛行機1体から敵の弾が2連射されるのにbreak;を使う旧型プログラムとbreak;を使わない新型プログラムを見比べてみましょう その2
  243. 敵の飛行機1体から敵の弾が2連射されるのにbreak;を使う旧型プログラムとbreak;を使わない新型プログラムを見比べてみましょう その3
  244. 敵の飛行機1体から敵の弾が2連射されるのにbreak;を使う旧型プログラムとbreak;を使わない新型プログラムを見比べてみましょう その4
  245. 新型 敵の飛行機から弾が3連射されるプログラムを実行してみよう
  246. 新型 敵の飛行機から敵の弾が3連射されるプログラムを改良してみよう
  247. 新型 敵の飛行機から敵の弾が10連射されるようにしてみよう
  248. 新型 敵の飛行機から敵の弾が10連射される敵の弾と敵の弾1,敵の弾1と敵の弾2, 敵の弾2と敵の弾3,敵の弾3と敵の弾4, 敵の弾4と敵の弾5,,・・・敵の弾8と敵の弾9の間隔を変化させてみよう
  249. 新型 敵の飛行機から敵の弾が10連射される敵の弾と敵の弾1,敵の弾1と敵の弾2, 敵の弾2と敵の弾3,敵の弾3と敵の弾4, 敵の弾4と敵の弾5,,・・・敵の弾8と敵の弾9で変化させてみよう その2
  250. 新型 敵の飛行機から敵の弾が10連射される敵の弾と敵の弾1,敵の弾1と敵の弾2, 敵の弾2と敵の弾3,・・・敵の弾8と敵の弾9で(*^。^*)ランダムに(*^。^*)変化させてみよう
  251. 敵の飛行機から弾が1000連射されるプログラムを実行してみましょう
  252. 敵の飛行機から弾がランダムな間隔で1000連射されるプログラムを実行してみようよう
  253. 新型 敵の飛行機10体から敵の弾が10連射されるようにしてみよう
  254. 新型 敵の飛行機10体から敵の弾がランダムな間隔で10連射されるプログラムを実行してみよう
  255. 新型 敵の飛行機10体から最初の弾の発射タイミングもランダムかつランダムな間隔で敵の弾が10連射されるようにしてみよう
  256. 新型 自分の飛行機から弾が2連射されるプログラムを実行してみよう
  257. Zボタンを押したとき自分の飛行機から弾が2連射されるプログラムを実行してみよう
  258. 新型 自分の飛行機から弾が10連射されるプログラムを実行してみよう  その1
  259. 新型 自分の飛行機から自分の弾が10連射されるようにしてみよう 自分の弾が敵の飛行機に当たった時、光で点滅し消滅するようにしてみよう
  260. 敵の飛行機に弾が当たって 消滅すると その後の 10連射される弾の間隔がおかしくなる理由について考えてみましょう
  261. 新型 10連射される自分の弾が全て発射され全て画面の外に出ない限り 次の10連射が開始されないようにしてみよう
  262. 新型 10連射される自分の弾が全て発射され全て画面の外に出ない限り 次の10連射が開始されないようにしてみよう  その2
  263. 新型 10連射される自分の弾が全て発射され全て画面の外に出ない限り 次の10連射が開始されないようにしてみよう  その3
  264. 敵の飛行機に自分の弾が当たって 敵の飛行機が消滅したとき その場所から ずっと敵の弾が発射されないようにしてみましょう
  265. 自分の飛行機が敵の飛行機に当たって消滅した場合 もうZボタンを押しても自分の飛行機から 弾が発射されなくなるプログラムはこちらです
  266. 自分の飛行機が敵の弾に衝突したら消滅するようにしてみよう  その1
  267. 自分の飛行機が敵の弾に衝突したら消滅するようにしてみよう  その2
  268. 自分の飛行機が敵の弾に衝突したら消滅するようにしてみよう  その3
  269. 自分の飛行機が消滅した位置に敵の飛行機がやってきても敵の飛行機が爆発、消滅しないようにしてみよう
  270. 見えない自分の弾に 敵の飛行機がぶつかっても爆発しないようにしてみよう
  271. 見えない自分の弾に 敵の飛行機がぶつかっても爆発しないようにしてみよう その2
  272. 自分の弾が100発 命中しないと 敵の飛行機が爆発しないはずなのに たった 1発 自分の弾が 敵の飛行機に ぶつかっただけで 敵の飛行機が爆発する現象を考察してみましょう
  273. 1発 自分の弾が 敵の飛行機に ぶつかっただけで ずっと 敵の飛行機が敵の飛行機を覆う光で覆われる現象について考察してみましょう
  274. 自分の弾と敵の飛行機がぶつかったとき ずっと 敵の飛行機を覆う光が表示されないようにしてみよう
  275. 注意点 敵の弾と自分の飛行機が 1回ぶつかった場合 敵の弾が消えても 自分の飛行機が動かなければ 敵の弾と自分の飛行機は 常に当たり判定内にいます
  276. 見えている自分の飛行機と見えている敵の弾が1回ぶつかって敵の弾が消えた場合に自分の飛行機がその場から動かなくても (他の敵の弾にあたらなければ) 自分の飛行機が爆発、消滅しないようにしてみよう
  277. まさにシューティングの新ジャンル 敵の弾と自分の飛行機がぶつかる度に自分の飛行機が爆発するよう設定してみましょう
  278. 大量に敵の弾に体当たりして自分の飛行機が爆発するアニメーションを大量に表示してみよう💖
  279. 自分の飛行機と敵の弾がぶつかったとき 敵の飛行機の爆発の炎のアニメーション と 自分の飛行機の爆発の炎のアニメーションが起こる不具合?を修正?してみる?
  280. 敵の弾と自分の飛行機がぶつかったときjibunnohikouki.lifeに0が代入されたときだけ つまり 自分の飛行機が消滅したときだけ 自分の飛行機が爆発するようにしてみましょう
  281. 自分の飛行機に敵の弾が当たった時 自分の飛行機が自分の飛行機を覆う光で 覆われるようにしてみよう まずは自分の飛行機を覆う光の画像データを用意しよう
  282. 自分の飛行機に敵の弾が当たった時 自分の飛行機を覆う光が表示されるようにしてみよう
  283. 大きな敵キャラを1体ゲーム画面に登場させてみましょう 敵の飛行機が10体登場するプログラムを1体登場するプログラムに変更できるかな?
  284. 大きな敵キャラを1体ゲーム画面に登場させてみましょう その2
  285. 大きな敵キャラを1体ゲーム画面に登場させてみましょう その3 大きな敵キャラをアニメーションさせてみよう
  286. 大きな敵キャラを1体ゲーム画面に登場させてみましょう その3 大きな敵キャラの画像をきれいに表示してみよう
  287. 大きな敵キャラを1体ゲーム画面に登場させてみましょう 薄い色合いの部分は黒く表示されることになるので原色で塗ることになります
  288. 大きな敵キャラを1体ゲーム画面に登場させてみましょう きれいな円を描く方法を学んでみよう
  289. 大きな敵キャラを1体ゲーム画面に登場させてみましょう 大きな敵キャラにいろいろ色を塗って遊んでみよう
  290. 大きな敵キャラの中心から敵の弾が発射されるようにしてみよう
  291. 大きな敵の飛行機から発射される敵の弾の射程距離をのばしてみよう
  292. 大きな敵キャラの後ろ側から敵の弾が発射されるようにしてみよう
  293. 大きな敵キャラ(ルルの画像)のほんの少し手前から 敵の弾が発射されるプログラムはこちらです
  294. 設定によっては敵の飛行機の後ろに自分の飛行機が隠れるようになる場合があります
  295. 敵の飛行機と自分の飛行機が重なった時 自分の飛行機が敵の飛行機の上に描かれるようにしてみよう
  296. 大きな敵キャラ(ルルの画像)と自分の飛行機の当たり判定について考察してみよう
  297. 大きな敵の飛行機が爆発したときのアニメーションを設定してみよう
  298. 大きな敵の飛行機が爆発したときのアニメーションを設定してみよう その2
  299. 大きな敵の飛行機に自分の弾が当たった場合 大きな敵が光で点滅するようにしてみましょう  大きな敵の飛行機と自分の弾の当たり判定領域を設定してみよう
  300. 大きな敵の飛行機に自分の弾が当たった場合 大きな敵が光で点滅するようにしてみましょう  大きな敵の飛行機を覆う光の画像を用意してみよう
  301. 大きな敵の飛行機に自分の弾が当たった場合 大きな敵が光で点滅するようにしてみましょう  プログラムを訂正してみましょう
  302. 自分の飛行機が消滅した位置に敵の飛行機がやってきても敵の飛行機が爆発、消滅しないようにしてみよう
  303. 自分の飛行機と敵の飛行機がぶつかったとき自分の飛行機と敵の飛行機が消滅するプログラムを再検証してみよう
  304. 自分の飛行機と敵の弾が衝突したとき当たった自分の飛行機と敵の弾が消え自分の飛行機が爆発するプログラムを再検証し変更を加えてみよう
  305. 自分の飛行機と敵の弾が衝突したとき当たった自分の飛行機と敵の弾が消え自分の飛行機が爆発するプログラムを再検証し変更を加えてみよう その2
  306. 敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムを再検証してみよう  その4
  307. 敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムを再検証してみよう  その5
  308. 敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムを再検証してみよう  その6
  309. 敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムを再検証してみよう  その7
  310. 敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムを再検証してみよう  その8
  311. 敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムを再検証してみよう  その9  配列変数の要素の数を間違えるとプログラムが正常に動作しない場合があります
  312. 敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムを再検証してみよう  その10 画像が表示される順序を考察してみよう
  313. ALL HEAVEN 敵の飛行機と自分の弾があたったとき 敵の飛行機を覆う光が表示されたりされなかったりするのでなく確実に表示されるようにしてみましょう
  314. 自分の飛行機が50発 敵の弾に当たらないと消滅しないようにしてみよう
  315. 敵の弾が自分の飛行機に衝突するたびに 自分の飛行機が 光で点滅するようにしてみましょう まずは自分の飛行機を覆う光の画像データを用意しましょう
  316. 自分の飛行機と敵の弾が ぶつかると 自分の飛行機が光で点滅するようにしてみましょう
  317. 自分の飛行機と敵の弾が ぶつかったとき ちゃんと自分の飛行機を覆う光が表示されるようにしてみよう
  318. 自分の飛行機と敵の弾が ぶつかったとき 表示される自分の飛行機を覆う光をもっとはっきりさせてみましょう
  319. 今度は敵の飛行機と自分の弾が ぶつかったとき 表示される敵の飛行機を覆う光をもっとはっきりさせてみましょう それだけでも敵の飛行機を覆う光の画質が向上し大分印象が変わります
  320. いったん敵の飛行機ルルの登場するプログラムをきれいに整えてみましょう
  321. いったん敵の飛行機ルルの登場するプログラムをきれいに整えてみましょう その2
  322. 赤い敵の飛行機が10体登場するプログラムをきれいに整えてみよう
  323. 自分の飛行機のライフゲージを作製してみよう
  324. 自分の飛行機のライフゲージを作製してみよう
  325. ライフゲージにどの飛行機のライフなのかがわかるようにDrawString関数を使って名前をつけてみましょう
  326. FontHandle と CreateFontToHandle関数 と DrawStringToHandle関数を使って 文字列の大きさを調整してみよう
  327. ライフゲージの左横にかっこよく文字列LIFEを表示してみよう
  328. ライフゲージの表示される位置を微調整してみましょう
  329. ライフが減ったら減った部分のライフゲージが白く表示されるようにしてみましょう
  330. ライフゲージを黄色く縁取りしてみましょう
  331. おまけ SetDrawBlendMode関数を用いてライフゲージの色の濃さを調整してみましょう
  332. SetDrawBlendMode関数を用いて画面全体を暗く表示してみよう 雷の天候シーンを表現することもできます
  333. 雷が落ちた時のようなシーンを考察してみよう
  334. ライフがどれくらいあるのかライフゲージだけでなく 数値でも表示されるようにしてみましょう
  335. ライフがどれくらいあるのかライフゲージだけでなく 数値でも表示されるようにしてみましょう その2DrawFormatString関数を使ってみよう
  336. SetFontSize関数を使って 文字の大きさを調整してみよう
  337. DrawStringToHandle関数は純粋に文字列を表示するときだけに用いることができ変数に格納されている値を文字列に含めて表示することはできません
  338. SetFontSize関数は実行に負荷がかかるので なるべく呼びださないようにwhile{}文のブロック{}内で用いないようにします
  339. 赤い敵の飛行機10体と敵の飛行機ルルを同時に登場させてみましょう
  340. プログラムの命令文を自分の飛行機に関する部分と赤い敵の飛行機10体に関する部分と敵の飛行機ルルに関する部分の3つに分けてみましょう
  341. プログラムの命令文を自分の飛行機に関する部分と赤い敵の飛行機10体に関する部分と敵の飛行機ルルに関する部分の3つに分けてみましょう
  342. プログラムを純粋に自分の飛行機に関する部分だけと赤い敵の飛行機10体に関する部分と敵の飛行機ルルに関する部分の3つに分けてみましょう
  343. 敵の飛行機がゆっくり画面の外から登場するようにしてみよう
  344. ゲーム画面の外から 敵が登場してくるとき 敵の弾がゲーム画面内で消滅しないように設定を変更してみよう
  345. フレームカウンターを設置してみよう while{}文のブロック{}内の命令文が 何回 繰り返し実行されたかを ゲーム画面に表示されるようにしてみよう
  346. while{}文のブロック{}内の命令文が 1回 繰り返し実行されると 静止画が1枚 つまり動画を構成する1フレームが作製されることになります 
  347. ☆while{}文のブロック{}内の命令文が繰り返し実行された回数☆ つまり ☆今☆ ☆ 何フレーム目かを表す数値☆をゲーム画面に表示してみよう
  348. フレーム数を表示できたら 今度は左横にフレームカウンターという文字列を表示してみよう
  349. さらにきれいにフレームカウンターを整えてみよう
  350. DrawStringToHandle関数を使って 文字を表示する場合 文字の大きさを小さく設定しているとMとE mとe が くっついてみえる場合があります
  351. 書式設定(フォントハンドル)を2つ用意してからDrawStringToHandle関数を使って frame counter と LIFE の 文字の大きさを 違う大きさで表示してみよう
  352. 好きなフレームで(時間を指定して)敵の飛行機を登場させてみよう
  353. 好きなフレームで(時間を指定して)敵の飛行機を登場させてみよう
  354. 1500フレーム目だけに 敵キャラミミを登場させてみましょう
  355. 指定したフレーム以降 ずっと 敵キャラが表示されるようにしてみましょう
  356. チョロチョロっとミミを表示させて また チョロチョロっとミミを表示させてみよう if(500 <= framecounter <= 1500)のような記述は間違っています
  357. 変数を2つの数値で挟んで (500 <= framecounter <= 1500)||(2500 <= framecounter <= 3500) のように条件式を記述することはできません
  358. 普通の弾だけでなくレーザーも発射されるようにしてみよう
  359. 自分の飛行機からレーザーが発射されるようにしてみよう
  360. 連続して発射されるレーザーとレーザーの間隔を広げてみよう
  361. 普通の弾とレーザー 2種類の攻撃方法を切り替えて使えるようにしてみよう
  362. Xボタンを押すたびに普通の弾とレーザーの表示が入れ替わるようにしてみよう
  363. Xボタンを押して 普通の弾 ↔ レーザー と 発射される弾の種類を入れ替える時 レーザーの発射される間隔 と 普通の弾の発射される間隔 を 変更するようにしてみよう
  364. 11個の普通の弾にくわえて さらに11個のレーザー弾のデータをさらに取り扱うには さらに別の11個のCharacter型の構造体変数が必要になります
  365. Xボタンを押すと普通の弾が発射され Zボタンを押すとレーザーが発射されるようにしてみよう
  366. 普通の弾の発射される間隔 と レーザー弾の発射される間隔 を それぞれ異なるようにしてみよう
  367. 普通の弾が 発射されている状態で ゲーム画面上を飛んでくるレーザーマークに 自分の飛行機がぶつかると Zボタンから レーザー弾が発射されるようにしてみよう
  368. 普通の弾が 発射されている状態で ゲーム画面上を飛んでくるレーザーマークに 自分の飛行機がぶつかると Zボタンから レーザー弾が発射されるようにしてみよう その2
  369. レーザー弾の威力をあげてみよう レーザー弾が一発 赤い敵の飛行機にあたると 赤い敵の飛行機が消滅するようにしてみましょう
  370. 自分の飛行機が ミサイルマークを キャッチした時 Zボタンを押したら 普通の弾が発射されるようにしてみましょう
  371. レーザーマークなど もう登場することがないキャラクターを ずっと ゲーム画面の外で左方向に進ませておくのは コンピュータに負荷がかかりプログラムの動作が重くなる原因となります
  372. コンピューターに負荷がかかるのを避けるためレーザーマーク と ミサイルマーク は ゲーム画面の外にでたらもう左側に移動しないよう設定し直してみましょう
  373. 1000フレームごとに レーザーマークが画面右端から飛んでくるようにしてみよう
  374. オプション猫を表示してみよう
  375. 自分の飛行機から弾が発射されるのに合わせてオプション猫から弾が発射されるようにしてみよう
  376. オプション猫から発射される弾で敵にダメージが与えられるようにしてみよう
  377. オプション猫も自分の飛行機と 全く同じように ダメージを受けたり爆発するように挙動を設定してみましょう
  378. オプション猫がダメージを受けた時オプション猫が光で覆われるようにしてみましょう
  379. 敵の弾にオプション猫がぶつかった時 オプション猫を覆う光をストライプにしてみよう
  380. オプション猫が敵の弾にぶつかった時 オプション猫が光ると同時にオプション猫の右横にニャーと表示してみよう
  381. 超高速でオプション猫を移動させることによりオプション猫を影分身させてみましょう
  382. オプション猫ちゃんが自分の飛行機のあとを少し遅れてたどたどしくついてくるようにしてみよう
  383. オプション猫をアニメーションさせてみましょう
  384. 頭の後に数珠つなぎに並んだ胴体をもつキャラクターを登場させてみましょう
  385. 数珠つなぎに並んだ胴体をもつキャラクターを登場させてみましょう
  386. 500体のオレンジリングを重ねて表示させてみよう
  387. 先頭のオレンジリングが移動するにしたがって残りのオレンジリングが徐々に1個づつ移動するようにしてみましょう
  388. 先頭のオレンジリングを自由な方向に動かして他のオレンジリングがその動きを追従して移動するようにしてみましょう
  389. 先頭のオレンジリングを自由に動かして他のオレンジリングがその動きを追従して移動するようにしてみましょう オレンジリング本体の数は500体のまま表示されるオレンジリングの画像を10体に減らしてみましょう
  390. 取り扱うオレンジリングの数を 500体から10体に減らしたら プログラムの実行速度は速くなる 少しは オレンジリングの移動速度も上がるのか検証してみましょう
  391. オレンジリング10体を重ならずに表示してみよう
  392. 10体のオレンジリングが重なって表示されないようにしてみよう
  393. オレンジリング10体が離れて表示されるようにしてみよう
  394. オレンジリング50体もしくはオレンジリング10体を重ならないように移動させてみよう
  395. 数珠のようにつながったオレンジリング10体をいろんなパターンで美しく優雅に移動させてみましょう
  396. 数珠のようにつながったオレンジリング10体を左右に移動させてみましょう
  397. 数珠のようにつながったオレンジリング10体を菱形の軌道を描くように移動させてみましょう
  398. オレンジリング10体が左上に移動する場合でも 左右に移動する場合でも オレンジリング10体同士の間に隙間ができないようにしてみよう         
  399. sqrt関数を使って√2の値を求めてみましょう そのためにヘッダファイル<math.h>をインクルードします
  400. オレンジリング10体が隙間なく菱形の軌道に沿って移動するようにしてみよう
  401. 超繊細シューティング作品紹介 作品NO.3 憧憬
  402. 超繊細シューティング作品紹介 作品NO.3 憧憬
  403. オレンジリング10体をいろんなパターンで動かしてみよう 移動パターンを4パターンから8パターンに増やしてみよう
  404. オレンジリング10体をいろんなパターンで動かしてみよう 移動パターンを20パターンに増やしてみよう
  405. オレンジリング10体がゲーム画面内に収まりながら移動するようにしてみましょう
  406. オレンジリング10体がゆっくり2ドットの速度で重ならずに移動するようにしてみましょう
  407. オレンジリング10体が ゲーム画面の中を大きく ぐるっとを回るように移動するようにしてみましょう
  408. オレンジリング10体が8角形の軌道を描きながらゲーム画面の中を大きく ぐるっとを回るように 移動させてみましょう
  409. オレンジリング10体がゲーム画面の中にとどまって移動するようにしてみよう
  410. オレンジリング10体がゲーム画面の外に出ないように微調整してみましょう
  411. オレンジリング10体が上下左右 右上右下左下左上に移動したときも オレンジリング10体がくっついたまま移動するようにしてみましょう
  412. 数珠のようにつながったオレンジリング250体(表示しているオレンジリングは10体だけです)から弾を発射させてみましょう
  413. オレンジリングを覆う光の画像データ オレンジリングの爆発の炎とオレンジリングの爆発の炎1,2,3,4,5,6の7枚の画像データを用意してみよう
  414. オレンジリング250体(表示しているのは10体だけです)から弾を発射させ 自分の弾が当たった時 オレンジリング250体を覆う光が点滅するようにし 消滅するとき 爆発の炎が描かれるtようにしてみよう
  415. プログラムの構造をつかんでみよう プログラムの基本的な構造は 1.キャラクターを登場させて 2.キャラクター同士の関係を設定すること となっています
  416. プログラムの構造をつかんでみよう 基本的な構造は 1.キャラクターを登場させて 2.キャラクター同士の関係を設定すること となっています
  417. Character型の構造体変数でデータが扱われている場合キャラクターとしての扱いとなります 自分の飛行機の爆発の炎 自分の飛行機を覆う光なども自分の飛行機と同じくキャラクターとしての扱いとなります
  418. プログラムを組み立てている構造を理解することにより 敵キャラクターを増やすなどするときでも どの場所に記述すればよいかが簡単にわかるようになります
  419. プログラムを組み立てている構造を理解することにより 敵キャラクターを増やすなどするときでも どの場所に記述すればよいかが簡単にわかるようになります
  420. プログラムの構造を変更してみよう
  421. プログラムに登場する様々な変数を分かりやすい位置に記述しなおしてみましょう
  422. 登場してくる変数の役割をおさらいしてみましょう  配列jibunnotama_tsix[11]についての説明
  423. 配列jibunnotama_count[i]についての説明
  424. int hassyasareru_jibunnotama = 0;によって生成されるint型の変数hassyasareru_jibunnotamaついての説明
  425. int jibunnotama_lazer_tsix[11]についての説明
  426. int jibunnotama_lazer_count[11];についての説明
  427. int hassyasareru_jibunnotama_lazer = 0;によって生成されるint型の変数hassyasareru_jibunnotama_lazerについての説明です
  428. 配列akaitekinohikoukinoidoupatternについての説明です
  429. int akaitekinohikouki_m = 0;をint akaitekinohikoukinoidoupattern_m=0;に変更してみよう
  430. int akaitekinohikouki_repeat = akaitekinohikoukinoidoupattern[0][0];の説明です プログラムを読み直して訂正するのは大事だにゃん
  431. int akaitekinohikoukinotama_count[10][10];のついての説明です
  432. int akaitekinohikoukinotama_tsix[10][10]; によって生成される配列akaitekinohikoukinotama_tsix[10][10]についての説明です
  433. int hassyasareru_akaitekinohikoukinotama[10];により生成される配列hassyasareru_akaitekinohikoukinotama[10]の説明です
  434. int RuRunotama_count[1][10];を実行してい生成される配列RuRunotama_count[1][10]の説明です
  435. int hassyasareru_RuRunotama[1];によって生成される 配列変数 hassyasareru_RuRunotama[0]の説明です
  436. double orange_ringnoidoupattern[9][3]の説明です
  437. int orange_ring_repeat = orange_ringnoidoupattern[0][0];の説明です
  438. int orange_ringnotama_tsix[250][10];によって生成される配列orange_ringnotama_tsixの説明です
  439. int orange_ringnotama_count[250][10]; によって 生成される配列orange_ringnotama_countの説明です
  440. int hassyasareru_orange_ringnotama[250]; によって 生成される配列hassyasareru_orange_ringnotamaの説明です
  441. int option_neko_counter = 0; によって生成されるint型の変数option_neko_counterの説明です
  442. int option_nekonotama_tsix[11]; によって生成される配列 option_nekonotama_tsixの説明です
  443. int option_nekonotama_count[11]; によって生成される配列 option_nekonotama_count の説明です
  444. int hassyasareru_option_nekonotama = 0; によって生成される変数 hassyasareru_option_nekonotama の説明です
  445. int option_nekonotama_lazer_tsix[11]; によって生成される配列 option_nekonotama_lazer_tsix の説明です
  446. int option_nekonotama_lazer_count[11]; によって生成される配列 option_nekonotama_lazer_countの説明です
  447. int hassyasareru_option_nekonotama_lazer = 0;によって生成される変数hassyasareru_option_nekonotama_lazer の説明です
  448. double lazermarknoidoupattern[4][3] = { {20,-1, 1},{20,-1,-1},{20,-1, 1},{20,-1,-1} }; の説明です
  449. int lazermarknoidoupattern_m = 0;によって生成されるint型の変数lazermarknoidoupattern_m の設定です
  450. int lazermark_repeat = lazermarknoidoupattern[0][0];の説明です
  451. double misslemarknoidoupattern[4][3] = { {20,-1, 1},{20,-1,-1},{20,-1, 1},{20,-1,-1} }; の 説明です
  452. int misslemarknoidoupattern_m= 0; の 説明です
  453. int misslemark_repeat = misslemarknoidoupattern[0][0];の説明です
  454. 画像データを回転させて表示させてみよう
  455. 超繊細シューティング作品紹介 作品NO.4 折り紙飛行
  456. 超繊細シューティング作品紹介 作品NO.4 折り紙飛行機
  457. 先頭のオレンジリングの画像と胴体9体のオレンジリングの画像を 別の画像に入れ替えてみましょう
  458. ちょっと修正 黒い背景が描かれたレイヤー と 先頭の頭の部分の 鯉 が描かれたレイヤー は 別々のレイヤーのまま bmp形式で保存しましょう