インベーダーモドキ(enemyのソースとヘッダー)

/*************************************************
*enemy.h
**************************************************/
//インクルードガード。
#ifndef ENEMY_H
//インクルードガード用定数。
#define ENEMY_H
//エネミーの前進速度。
#define ENEMY_X_SPEED 1
#define ENEMY_Y_SPEED 1
//エネミーの幅と高さ。
#define ENEMY_WIDTH 7
#define ENEMY_HEIGHT 1
//エネミーを倒した時の得点。
#define ENEMY_POINT 100
//エネミーの前進速度。
#define UFO_X_SPEED 1
//UFOの幅と高さ。
#define UFO_WIDTH 12
#define UFO_HEIGHT 1
//エネミーを倒した時の得点。
#define UFO_POINT 1000
//敵部隊の左端、右端、底辺の座標を更新する。
void SetSquadCoordinate(int enemy_num);
//次回のエネミー部隊の移動量を決める。
void SetSquadVector();
//敵の動き。
void MoveEnemy(int enemy_num);
//UFOの動き。
void MoveUfo(int enemy_num);
//初期化時敵の総数をカウントするための関数。
void AddEnemyCounter();
//敵が撃破されたときに総数を減らす関数。
void PullEnemyCounter();
//エネミーカウンターの取得。
int GetEnemyCounter();
//部隊の進行状況を見、一定以上であった時にtrueを返す関数。
bool CheckSquadProgressPosition();
#endif // !ENEMY_H
/*************************************************
*enemy.cpp
**************************************************/
//インクルード。
#include "global.h"
#include "enemy.h"
#include "bullet.h"
#include "ingame.h"
//グローバルヘッダー。
//敵の群れの左端、右端、底辺を記録するためのグローバル変数。
int squad_y = 0, squad_x = 0, squad_vx = ENEMY_X_SPEED, squad_vy = 0, enemy_counter = 0;
//敵部隊の左端、右端、底辺の座標を更新する。ここでライトレフトの操作をすればいいのでは。これ左右どちらに動いて居るかで条件式変えなきゃだめじゃね。
void SetSquadCoordinate(int enemy_num) {
//左に動いている時の処理。
if (squad_vx < 0) {
//部隊の座標の更新。より左にいるエネミーの座標を拾う。
if (characters[enemy_num].x < squad_x) { squad_x = characters[enemy_num].x; }
}
//右に動いている時の処理。
if (0 < squad_vx) {
//部隊の座標の更新。より右にいるエネミーの座標を拾う。
if (squad_x < characters[enemy_num].x) { squad_x = characters[enemy_num].x; }
}
//底辺の更新。
if (squad_y < characters[enemy_num].y) { squad_y = characters[enemy_num].y; }
}
//次回のエネミー部隊の移動量を決める。
void SetSquadVector() {
//何もなければvyは0。
squad_vy = 0;
//壁に部隊が接触した時の処理。
if (GAME_WINDOW_W <= squad_x + ENEMY_WIDTH || squad_x <= 0) {
squad_x = GAME_WINDOW_W / 2;//部隊のx座標が更新されるよう、都合のいい値を入れて置く。((squad_x + ENEMY_WIDTH -1) ~ 1までの値なら正常に動くはず。)
squad_vx *= -1;
squad_vy = ENEMY_Y_SPEED;
}
}
//敵の動き。
void MoveEnemy(int enemy_num) {
//実際に動かす。
characters[enemy_num].x += squad_vx;
characters[enemy_num].y += squad_vy;
//一定の確立で弾丸を発射するようにする。
if(rand() % 10000 == 0){
int bullet_num = InitCharacter(CHARACTER_ID_BULLET);
characters[bullet_num].team_id = TEAM_ID_ENEMY;
characters[bullet_num].x = characters[enemy_num].x + (ENEMY_WIDTH / 2);
characters[bullet_num].y = characters[enemy_num].y;
characters[bullet_num].vy = MOVE_BULLET_DOWN;
}
//とりあえず動かし終わったので、このエネミーが端の更新に適するかをチェックする。
SetSquadCoordinate(enemy_num);
}
//ufoの動き。
void MoveUfo(int ufo_num) {
//ufoの動き。
GAME_WINDOW_W < characters[ufo_num].x + UFO_WIDTH ?
characters[ufo_num].character_id = CHARACTER_ID_NONE :
characters[ufo_num].x += characters[ufo_num].vx;
}
//初期化時敵の総数をカウントするための関数。
void AddEnemyCounter() {
enemy_counter++;
}
//敵が撃破されたときに総数を減らす関数。
void PullEnemyCounter() {
enemy_counter--;
}
//エネミーカウンターの取得。
int GetEnemyCounter() {
return enemy_counter;
}
//部隊の進行状況を見、一定以上であった時にtrueを返す関数。
bool CheckSquadProgressPosition() {
return DEFENSE_LINE <= squad_y ? true : false;
}

この記事が気に入ったらサポートをしてみませんか?