インベーダーモドキ(bulletのソースとヘッダー)。
/***********************************************************
*bullet.h
***********************************************************/
//インクルードガード。
#ifndef BULLET_H
//インクルードガード用定数。
#define BULLET_H
//弾丸の移動量を表す定数。
#define MOVE_BULLET_LEFT -1
#define MOVE_BULLET_UP -1
#define MOVE_BULLET_RIGHT 1
#define MOVE_BULLET_DOWN 1
//弾の幅と高さ。
#define BULLET_WIDTH 1
#define BULLET_HEIGHT 1
//弾代。
#define BULLET_COST 10
//弾丸を動かす。
void MoveBullet(int bullet_num);
//弾との接触判定を行う。
void HitCheckBullet(int bullet_num);
#endif // !BULLET_H
/***********************************************************
*bullet.cpp
***********************************************************/
#include "global.h"
#include "enemy.h"
#include "player.h"
//弾丸を動かす。
void MoveBullet(int bullet_num) {
characters[bullet_num].x += characters[bullet_num].vx;
characters[bullet_num].y += characters[bullet_num].vy;
if(characters[bullet_num].x < 0 || WINDOW_W < characters[bullet_num].x
|| characters[bullet_num].y < 0 || WINDOW_H < characters[bullet_num].y) {
characters[bullet_num].character_id = CHARACTER_ID_NONE;
}
}
//弾との接触判定を行う。幅と高さ見て、その範囲内に入っていれば当たっているという形にすること。
void HitCheckBullet(int bullet_num) {
//弾と他のキャラクターとの当たり判定を取る前に、プレイヤーの配列番号を取得して置く。
int player_num = FindPlayerNumber();
//当たってるか総当たりでチェック。
for (int i = 0; i < CHARACTER_MAX; i++) {
switch (characters[i].character_id)
{
case CHARACTER_ID_PLAYER:
if (characters[i].team_id != characters[bullet_num].team_id && CheckHit(characters[i], characters[bullet_num])) {
//プレイヤーを破壊する。
characters[i].character_id = CHARACTER_ID_NONE;
//弾も消しておく。
characters[bullet_num].character_id = CHARACTER_ID_NONE;
//ゲームステートを変える。
game_handle.game_state = GAME_STATE_GAMEOVER;
//ゲームステートが変わるので、後始末しておく。
ClearCharacterBuffer();
}
break;
case CHARACTER_ID_ENEMY:
if (characters[i].team_id != characters[bullet_num].team_id && CheckHit(characters[i], characters[bullet_num])) {
//エネミーを撃墜したので、スコアに反映する。
characters[player_num].score.killboard[characters[i].character_id]++;
characters[player_num].score.killboard[CHARACTER_ID_SCORE] += characters[i].score.killboard[CHARACTER_ID_SCORE];
//エネミーを破壊する。
characters[i].character_id = CHARACTER_ID_NONE;
//エネミーの総数を減らしておく。
PullEnemyCounter();
//弾も消しておく。
characters[bullet_num].character_id = CHARACTER_ID_NONE;
//敵部隊の端と底辺の情報を更新する。
for (int j = 0; j < CHARACTER_MAX; j++) {
if (characters[j].character_id == CHARACTER_ID_ENEMY) {
SetSquadCoordinate(j);
}
}
}
break;
case CHARACTER_ID_BULLET:
case CHARACTER_ID_UFO:
if (characters[i].team_id != characters[bullet_num].team_id && CheckHit(characters[i], characters[bullet_num])) {
//対象を撃墜したので、スコアに反映する。
characters[player_num].score.killboard[characters[i].character_id]++;
characters[player_num].score.killboard[CHARACTER_ID_SCORE] += characters[i].score.killboard[CHARACTER_ID_SCORE];
//対象を破壊する。
characters[i].character_id = CHARACTER_ID_NONE;
//弾も消しておく。
characters[bullet_num].character_id = CHARACTER_ID_NONE;
}
break;
}//end of switch
}//end of for
}
この記事が気に入ったらサポートをしてみませんか?