昨日の復習をしていくよ

第1話 C言語の時代

Listing. 1: C言語でゲームループ
#include <iostream>
#include <cstdio>
 
using std::cin;
 
//キャラクターの初期位置(0,0) HP100
//一歩歩くと1HPが減るかわいそうなキャラ
int cx=0, cy=0;
int hp = 100;
 
 
//0:左 1:上 2:右 3:下
void Walk(int Dir)
{
	switch (Dir)
	{
	case 0:
		cx = cx - 1;
		break;
	case 1:
		cy = cy - 1;
		break;
	case 2:
		cx = cx + 1;
		break;
	case 3:
		cy = cy + 1;
		break;
	default:
		break;
	}
	hp--;
}
 
void PrintStatus()
{
	printf("+-----------------+\n");
	printf("| NAME: yusha     |\n");
	printf("|   HP:%3d        |\n", hp);
	printf("|  POS:(%3d,%3d)  |\n", cx, cy);
	printf("|                 |\n");
	printf("|                 |\n");
	printf("+-----------------+\n");
}
 
int main()
{
	int i = 0;
	while (true)
	{
		printf("%dフレーム目:無限\n", i);
		Walk(2);
		PrintStatus();
		getchar();
		i++;
	}
 
	return 0;
}

第2話 C++の夜明け

GameChara.h

Listing. 2: ゲームキャラのヘッダ
"GameChara.h"
#pragma once
#include <string>
 
enum DIR
{
	////0:左 1:上 2:右 3:下
	LEFT, UP, RIGHT, DOWN, MAXDIR
};
 
class GameChara
{
public:
	GameChara();//コンストラクタ
	~GameChara();//デストラクタ
	void Walk(DIR Dir);
	void PrintStatus();
private:
	std::string name;
	int cx, cy;
	int hp;
};

GameChara.cpp

Listing. 3: GameChara.cpp
"GameChara.cpp"
#include "GameChara.h"
 
GameChara::GameChara()
{
	name = "yusha";
	cx = 0;
	cy = 0;
	hp = 100;
	printf("おぎゃー\n");
	printf("%sは生まれた!\n", name.c_str());
}
 
GameChara::~GameChara()
{
	printf("うぎゃー\n");
	printf("%sは死んだ。。。\n", name.c_str());
}
 
void GameChara::Walk(DIR Dir)
{
	switch (Dir)
	{
	case LEFT:
		cx = cx - 1;
		break;
	case UP:
		cy = cy - 1;
		break;
	case RIGHT:
		cx = cx + 1;
		break;
	case DOWN:
		cy = cy + 1;
		break;
	default:
		break;
	}
	hp--;
 
}
 
void GameChara::PrintStatus()
{
	printf("+-----------------+\n");
	printf("| NAME: yusha     |\n");
	printf("|   HP:%3d        |\n", hp);
	printf("|  POS:(%3d,%3d)  |\n", cx, cy);
	printf("| ADDR:%p         |\n", this);
	printf("|                 |\n");
	printf("+-----------------+\n");
}

theMain.cpp

Listing. 4: theMain.cpp
"theMain.cpp"
#include <iostream>
#include <cstdio>
#include "GameChara.h"
 
using std::cin;
 
int main()
{
	GameChara *hero = nullptr;
 
	int i = 0;
	while (true)
	{
		printf("%dフレーム目:無限\n", i);
		if (hero == nullptr)
		{
			printf("ヒーローが必要ですか?");
			rewind(stdin);
			char n;
			cin >> n;
			if (n == 'y' || n == 'Y')
			{
				hero = new GameChara;
			}
		}
		if (hero != nullptr) {
			hero->Walk(UP);
			hero->PrintStatus();
			//hero.Walk(UP);
			//hero.PrintStatus();
			printf("ヒーローを葬りますか?");
			rewind(stdin);
			char n;
			cin >> n;
			if (n == 'y' || n == 'Y')
			{
				delete hero;
				hero = nullptr;
			}
		}
		getchar();
		i++;
	}
 
	return 0;
}