第7講 ブロック崩しその5(得点のカウントと表示・ゲームはじめの画面とゲームの切り替え・ゲームクリアとゲームオーバー画面表示)
第9話 初期設定に向けての課題その3
では、皆さん一覧などを参考にして、
具体的な数字はすべて変数に置き換えてください。
すべてグローバル変数ですが、
冒頭では宣言だけにして(int sy=10; とはしないでint sy; とするという意味です。)、
初期化(最初の値を入れること)は社員syokika()で行ってください。
ただし、
int s_y=10, s_t=4; //ブロック横数と縦数
int b_y=0, b_t; //バーの横幅と縦幅
s_yとs_tとb_yだけは宣言と初期化を行ってください。
s_yとs_tについては、
理由はわかりませんでしたが、syokikaで代入するとうまくいかなかったからです。
(コードのどこかにミスがあったのでしょうが、調べてもわかりませんでした。)
ですから、これは
const int s_y=10, s_t=4; //ブロック横数と縦数
と定数にしてもよいですね。
また、b_y=0については、
ゲームの初期画面でAまたはBまたはCの押し忘れがなかったかの確認に使います。
0098
本当は、AまたはBまたはCを押してから、Zを押してゲームを始めるのですが、
AまたはBまたはCを押し忘れて、いきなりZを押してゲーム画面に切り替えたときに、
バーの横幅であるb_yとボールの横方向の速さであるmxhとボールの縦方向の速さであるmyhについては、
設定がされていない状態になり、ゲームが動かなくなってしまいます。
ですから、AまたはBまたはCの押し忘れがなかったかを確認するために、
b_y=0を利用してゲームが動かない事態を防ぎます。
saisyonogamen() において、if文を使い
if(b_y==0){
  Aの場合と同じ設定にする
}
押し忘れの場合には初心者モードになるようにします。

尚、初心者の方は、この後のコードと比較するために、

ブロック横数 s_y
ブロック縦数 s_t
ブロック横幅 syh
ブロック縦幅 sth
バー横幅 b_y
バー縦幅 b_t
ボールの半径 mo
ボールの横方向の速さ mxh
ボールの横方向の速さ  myh 
バーの速さ bh
天井からの空き  aki 

一覧の通りにすることをおすすめします。
また、冒頭の宣言だけは手作業で行い、
40等の数字の書き換えは、
すべて置換を使うことをおすすめします。
すべて置換は、
01
編集→検索と置換(F)→フォルダを指定して置換(S)の順に選び、
009008007
検索する文字列と置換後の文字列を入力してすべて置換を選べばよいのです。

ただし、画面サイズ800と1000になっていますので、
80や100をすべて置換で置換してしまうと、
800はs_t0になるなどしてしまいますから、
その際にはすべて置換ではなく
次を検索と置換
006005
を組み合わせてひとつずつ置換してください。

それから、自由に速度を変更できるようにするためには、跳ね返り
if (
mx == 10)mx_houkou *= houkougae; //左の壁で反射
の条件式に幅を持たせないとだめだということが私の実験でわかりました。

また、ボールの初期位置は
  mx = 400; //ボールの初期の横位置
  my = 920; //ボールの初期の縦位置
にすることにしました。
ゲームの難易度を変えても問題が発生しないようにするためです。
皆さんは、ご自分で工夫してみてください。

尚、数字の部分を一気に変えようとはしないで段階を踏んでやってください。
例えば、
int mo;
をグローバルに宣言して、
syokika()で
  mo=10;
として、半径の部分をmoに変えてから、
いったんデバッグの開始(F5)をして、
成功してから次に進むようにしましょう。
変数を1つ宣言するたびに同手順をとりF5が成功するか確認するのです。
一気にやろうとすると混乱します。
私は、一気にやろうとして大変混乱しましたので、
少しずつやってください。
そして、F5が成功したらコードをメモ帳にコピペして、
名前を付けて保存してください。
できたら、上書きしないで、
ブロック崩し20日8時37分版.cpp
といった感じです。
変更しておかしくなったら、メモ帳からコピペをし直してやり直してください。
いろいろなファイル名で保存しておくのは、
ロールプレイングゲームにおいて、
豆に保存するのと同じです。
いろいろな場所で保存しておくと、
ゲームのいろいろな段階に戻れますね。
それと同じです。

また、
void kachi() {
  SetFontSize(65); //フォントサイズを65に変更
  DrawBox(0, 0, 800, 1000, iro, true);
  DrawFormatString(100, 100, kiiro, "ヾ(^v^)k"); // 文字を描画する
  DrawFormatString(100, 300, kiiro, "ゲームクリアです"); // 文字を描画する
  SetFontSize(32); //フォントサイズを65に変更
  DrawFormatString(20, 500, siro, "ゲームを再開するときはZキーを押してください。"); // 文字を描画する
  if (CheckHitKey(KEY_INPUT_Z) != 0) {
    syokika();
    m = 1;
  }
}
void saisyonogamen() {
  DrawBox(0, 0, 800, 1000, siro, true);
  int gazou;
  gazou = LoadGraph("画像/02.png");
  DrawGraph(200, 200, gazou, false);
  if (CheckHitKey(KEY_INPUT_Z) != 0) m = 1;
}
については、ゲーム再開だけでなく初期画面に戻れるようにしてください。
現在のままだと最初に選んだ級のままでゲームが再開してしまうからです。
ゲームオーバーの画面を052
ゲームクリア我の画面を048035
等に変更してください。



第8話へ  第10話へ
a

初心者のための excel 2016 マクロ VBA 入門講義 基
礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための]世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップ