ゲーム制作RTA(VS2017、DXライブラリ使用)

  1. VS2017を起動
  2. ファイル->新規作成->プロジェクト
  3. Windowsデスクトップウィザード、ソリューションのディレクトリは作成しない
  4. Windowsアプリケーション(.exe)、空のプロジェクト
  5. ソリューションエクスプローラーのソースファイルを右クリック->追加->新しい項目->c++ファイル
  6. プロジェクト->(プロジェクト名の)プロパティ(なんか出てこない時があるので、ソリューションエクスプローラー内でソリューションを選択してもう一度行ったり他の項目を選択したりする)
  7. すべての構成に変更->構成プロパティ->全般->文字セット、マルチバイト文字
  8. 構成プロパティ->c/c++->全般->追加のインクルードディレクトリ、プロジェクトに追加すべきファイル_VC用のパス
  9. 構成プロパティ->リンカー->全般->追加のライブラリディレクトリ、プロジェクトに追加すべきファイル_VC用のパス
  10. Releaseの変更
  11. 構成プロパティ->c/c++->ランタイムライブラリ->コード生成、/MT
  12. Debugに変更
  13. 構成プロパティ->c/c++->ランタイムライブラリ->コード生成、/MTd
  14. プロパティページをokを押して閉じる

構築終了!

 

はい、こちらはccsアドベントカレンダー12月3日の記事です

前日の記事貼る

https://neko-notnamed.hatenablog.com/entry/2019/12/02/000214?_ga=2.81019029.360535521.1575118134-638820458.1571270114

 

ccsアドベントカレンダー2019

https://adventar.org/calendars/4451

 

いつもゲー制するときは下のような感じでやってるので、ここからリファレンスを開くのが若干きつい、いい加減に作業工程覚えましょう

DXライブラリ様にはいつも大変お世話になっております(URL:https://dxlib.xsrv.jp/index.html)

f:id:Neko_NotNamed:20191126202554p:plain

気づくとこうなってる

 

一番下にデバック用にサンプルコード置いときますね(実際に作成したゲームとは若干異なるソースコードになります)

音と画像は適当に用意してください

 

なお、このサンプルコードに音素材として書かれているものは、魔王魂(URL:https://maoudamashii.jokersounds.com/)様から引っ張って、実際のゲームに使いました

 

めんどいことは実装しない主義のコードです

あと、main関数以下で具体的な数字は使わないようにしています(後で変更しやすいように)

 

 

嘘つきました

 

DrawFormatString(100, 100, fontcolor, "いくぜ!よろしくお願いします!");

 

ここでがっつり使ってますね

文字出力関数の実装を当分の目標にします

因みに今のゲー制進捗は、作ってないとかいう驚きの白さです


    #include<Dxlib.h>
#include<stdio.h>
#include<math.h>

constexpr auto NAME = 128;
constexpr auto RANGE = 30;
constexpr auto POWER = 100;
constexpr auto KEY = 3;

int width = 640;
int hight = 480;

int gamestate = 0;
int gameflag = 0;
int flag = 0;
int bgm;
int enemysound;

char name[NAME];
int grade;
int keyword[KEY];
int key;
unsigned int fontcolor = GetColor(255,233,115);
unsigned int backcolor = GetColor(237,121,135);

int gameendflag = 0;
int sceneflag = 0;

//キー取得用の配列
char buf[256] = { 0 };
int keystate[256] = { 0 };

void gamemain_update();
void gamemain_draw();
void move_player();
void keyupdate();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	SetOutApplicationLogValidFlag(FALSE);//Log.txtを生成しないように設定
	ChangeWindowMode(TRUE);//非全画面にセット
	SetGraphMode(width, hight, 32);//画面サイズ指定
	SetMainWindowText("いくぜ!よろしくお願いします!");//ウインドウに表示される名前を設定
	SetAlwaysRunFlag(TRUE);//最小化状態でも処理を続ける

	if (DxLib_Init() == 1) { return -1; }//初期化に失敗時にエラーを吐かせて終了

	SetDrawScreen(DX_SCREEN_BACK);//描画先を裏画面に

	//画像と音を読み込む
	bgm = LoadSoundMem("DATA/game_maoudamashii_8_orgel06.mp3");

	keyword[0] = LoadGraph("DATA/key0.png");
	keyword[1] = LoadGraph("DATA/key1.png");
	keyword[2] = LoadGraph("DATA/key2.png");
	PlaySoundMem(bgm, DX_PLAYTYPE_LOOP);
	while (ProcessMessage() == 0)
	{
		ClearDrawScreen();//裏画面消す

		keyupdate();//キー入力状態を更新
		if (keystate[KEY_INPUT_ESCAPE] > 0) {
			break;
		}

		DrawBox(0, 0, width, hight, backcolor, TRUE);
		//gamestateの値で分岐
		switch (gamestate) {
		case 0:
			DrawFormatString(100, 100, fontcolor, "いくぜ!よろしくお願いします!");
			DrawFormatString(100, 200, fontcolor, "音楽:魔王魂");
			DrawFormatString(100, 300, fontcolor, "プログラム:ハトミ");
			DrawFormatString(100, 400, fontcolor, "スペースキーで開始!");
			if (keystate[KEY_INPUT_SPACE] == 1) {
				gamestate = 1;
			}
			break;
		case 1:
			DrawFormatString(100, 100, fontcolor, "メーリス全体返信、文字化け、元気いっぱい!");
			DrawFormatString(100, 200, fontcolor, "このゲームは大学祭開始のおよそ六時間前に製作開始されました");
			DrawFormatString(100, 300, fontcolor, "とりあえずスペースキーを押せば幸せになれると思う");
			DrawFormatString(100, 400, fontcolor, "スペースキーで開始!");
			if (keystate[KEY_INPUT_SPACE] == 1) {
				gamestate = 2;
			}
			break;
		case 2:
			gamemain_update();
			gamemain_draw();
			break;
		case 3:
			DrawFormatString(0, 80, fontcolor, "1.B2 2.%s", name);
			DrawGraph(0, 100, key, 0);
			DrawFormatString(100, 400, fontcolor, "スペースキーで終了!");
			if (keystate[KEY_INPUT_SPACE] == 1) {
				gameendflag = 1;
			}
		}
		//無限ループを抜けゲーム終了
		if (gameendflag == 1) {
			break;
		}

		ScreenFlip();//裏画面を表画面にコピー
	}

	DxLib_End();
	return 0;
}

void keyupdate()
{
	GetHitKeyStateAll(buf);
	for (int i = 0; i < 256; i++)
	{
		if (buf[i] == 1) {
			keystate[i]++;
		}
		else {
			keystate[i] = 0;
		}
	}
}

void gamemain_update()
{
	DrawFormatString(0, 40, fontcolor, "名前を入力してね\n");
	KeyInputString(0, 60, NAME, name, 1);

	flag = GetRand(KEY);
	if (flag == 0) {
		key = keyword[0];
	}
	else if(flag == 1) {
		key = keyword[1];
	}
	else {
		key = keyword[2];
	}
	WaitTimer(1000);
	gamestate = 3;
}

void gamemain_draw()
{
	DrawGraph(0, 100, key, 0);
}