第7講 テトリス開発(4つのブロックを描くまで)
第1話 ゲーム画面以外の画面の作成
では、vc++を起動して、第6講第9話でコピペによって作ったテトリスから、
プロジェクトを開きましょう。

プロジェクトを開く001031テトリス→003基本.sln
とたどりプロジェクトを開きます。
開いたらF5を押して下さい。
ゲームが起動してから、エンターを押す続けると
0010
008
0011
0013
とゲームモードが切り替わります。
第2講等の作業が一切不要であると説明したことの意味がおわかりかと思います。

今回は、ゲーム画面であるvoid gamemain()の中身=本ゲーム開発の本丸は、
後で考えることにして、外堀から埋めていきます。
すなわち、ゲームメニュー画面・ゲームオーバー画面・ゲームクリア画面から作っていきましょう。
まず、ゲームメニュー画面から。
この3つの画面はすべてWindowsのペイントを使って作ることにします。
ペイントを起動したら、ゲーム画面サイズがこれから開発するテトリスの場合、
横440縦540ですから、
001サイズ変更を使って、
002単位をピクセルにして、縦横比を維持するのチェックを外し、
水辺方向440垂直方向540にしてOKボタンを押して下さい。
003
(この画像は、私が開発したテトリスの画面ですから、
無料でご自由にお使い下さい。
2次配布も自由に行っていただいて結構です。)
サイズ変更がすんだらこれをコピペして下さい。
004

次に、005Aをつかって、
006
と書き込んで下さい。
色や文言は皆さんの好みで作ってください。
これでゲームメニュー画面は完成ですので、
名前を付けて保存します。
保存先は007
D:\vc2010\テトリス\基本\画像
で、008ファイル名は02.pngとし、ファイルの種類はPNG(*.png)を選んで、
保存して下さい。
以下同様にして、ゲームオーバーとゲームクリアの画面を作ります。
ファイル名は、それぞれ03.pngと04.pngとしましょう。
008009
一応私が作った3つのファイルをダウンロードできるようにしておきます。
02.png 03.png 04.png
使う場合にはクリックして開き、右クリックで画像を保存して下さい。
ですが、できればご自分で作って楽しんで下さい。

では、コードを次のように変更しましょう。
#include "DxLib.h"
void hajimennogamen(); //ゲームの最初の画面を担当する社員
void gamemain(); //ゲーム画面を担当する社員
void make(); //ゲームオーバー画面を担当する社員
void kachi(); //ゲームクリア画面を担当する社員
char m; //ゲームモードを決定する整数 0:ゲームの最初の画面 1:ゲーム画面 2:ゲームオーバー 3:ゲームクリア画面
int x=100,y=100; //整数型の箱xとyを用意
int h ; //画像に付けられた出席番号を収納する箱を用意
int siro = GetColor(255, 255, 255); //白色の出席番号収納する箱
int kiiro = GetColor(255, 255, 0); //黄色の出席番号収納する箱
int mizuiro = GetColor(0, 255, 255); //水色の出席番号を収納する箱
char taisyoutonarukey_mae[100];
char jyu(int taisyoutonarukey);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
  ChangeWindowMode(true); //ウィンドウモードの切り替え
  
SetGraphMode(440, 540, 32); //ウインドウサイズの変更
  if (DxLib_Init() == -1)return(-1);  // DXライブラリ初期化処理

  SetDrawScreen(DX_SCREEN_BACK); //裏画像を描画対象に加える(2017/06/28追加) 画面のちらつき対策
  m=0;
  while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
    if(m==0)hajimennogamen();
    if(m==1)gamemain();
    if(m==2)make();
    if(m==3)kachi();
  }

  WaitKey();   // キー入力待ち
  DxLib_End();  // DXライブラリ終了処理
  return 0;
}
void hajimennogamen(){ //ゲームの最初の画面
  int gazou;
  gazou = LoadGraph("画像/02.png");
  DrawGraph(0, 0, gazou, true);
  if (jyu(KEY_INPUT_RETURN) != 0) m=1;
}

void gamemain(){ //ゲーム画面
  h = LoadGraph("画像/00.png"); //画像に付けられた出席番号を箱hに収納
  DrawGraph(x, y, h, true); //画像を描く
  if (jyu(KEY_INPUT_RIGHT) != 0) x+=2;
  if (jyu(KEY_INPUT_LEFT) != 0)x-=2;
  if (jyu(KEY_INPUT_DOWN) != 0)y+=2;
  if (jyu(KEY_INPUT_UP) != 0)y-=2;
  if (jyu(KEY_INPUT_RETURN) != 0) m=2;
}
void make(){ //ゲームオーバー画面
  int gazou;
  gazou = LoadGraph("画像/03.png");
  DrawGraph(0, 0, gazou, true);
  if (jyu(KEY_INPUT_RETURN) != 0) m=3;
}
void kachi(){ //ゲームクリア画面
  int gazou;
  gazou = LoadGraph("画像/04.png");
  DrawGraph(0, 0, gazou, true);
  if (jyu(KEY_INPUT_RETURN) != 0) m=0;
}

char jyu(int taisyoutonarukey) { //taisyoutonarukey(たいしょうとなるキー)は、今対象としているキーの出席番号
  if (CheckHitKey(taisyoutonarukey) != 0) {
    if (taisyoutonarukey_mae[taisyoutonarukey] == 0) {
      taisyoutonarukey_mae[taisyoutonarukey] = 1;
      return 1;
    }
  }
  else {
    taisyoutonarukey_mae[taisyoutonarukey] = 0;
    return 0;
  }
  return 0;
}
コピペ用添付ファイル
これでゲームを起動したときのゲーム画面を除く画面が、
先ほど保存したペイントの画像になりました。
さらに、
007
ソリューションエクスプローラーの赤い囲いと青い囲いのそれぞれで右クリックして、
名前を変更するで、両方ともテトリスに変更しておきましょう。
009
これで一回F5をして、vc++を終了してから、
再度起動すると最初の画面の最近使ったプロジェクト
008にテトリスと表示されることになります。
これをクリックすればテトリスを開くことができるようになります。
尚、vc++を起動せず、エクスプローラーによって、
011D:\→vcpp2010→テトリス→テトリス.sln
とたどり、赤い囲いをダブルクリックしてもテトリスを開くことができます。


これで外堀が埋まりましたので、
テトリス開発の基本的考え方を説明したいところですが、
残念ながら、そのために多次元配列を説明する必要がありますので、
迂遠に感じるでしょうが、第2話ではC言語基礎に戻らなければなりません。

第6講第9話へ  第2話へ

002

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

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