Skip to content

Instantly share code, notes, and snippets.

@yashihei
Last active December 2, 2015 23:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yashihei/a3c59cab4116a2e5ad83 to your computer and use it in GitHub Desktop.
Save yashihei/a3c59cab4116a2e5ad83 to your computer and use it in GitHub Desktop.
C言語でのファイル分割の定石について

この文章では、C言語においてチーム制作では欠かすことが出来ないファイル分割について説明する。

まず前提として

プレイヤー、敵、弾などのオブジェクト毎に、敵に関する処理はenemy.cpp、プレイヤーはplayer.cppみたく、ファイルを分割する。

どのように分割すれば良いのか

例えば敵の処理を分割したい場合。

enemy.h

//インクルードガード、詳しくはグーグル先生か教科書のインクルードガードの項を
#pragma once

#define ENEMY_MAX 256
#define ENEMY_SIZE 2

struct Enemy {
	int x, y;
	int hp;
	int flag;
}
//変数はexternで共有する
extern Enemy enemies[];

void enemyInit();
void enemyUpdate();
void enemyDraw();

Enemy.cpp

#include "enemy.h"

//変数の実態は一つしか作れないので、cpp側で作る
Enemy enemies[ENEMY_MAX];

void enemyInit() {
	for (int i = 0; i < ENEMY_MAX; i++) {
		enemies[i].flag = 0;
	}
}

void enemyUpdate() {
	for (int i = 0; i < ENEMY_MAX; i++) {
		//フラグの立ってない敵の処理は行わない(continue)
		if (enemies[i].flag == 0) continue;
		enemies[i].y++;
	}
}

void enemyDraw() {
	for (int i = 0; i < ENEMY_MAX; i++) {
		if (enemies[i].flag == 0) continue;
		LOCATE(enemies[i].x, enemies[i].y);
		printf("");
	}
}

呼び出し側は以下のように、

main.cpp

int main () {
	enemyInit();
	while (true) {
		enemyUpdate();
		enemyDraw();
	}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment