#include "DxLib.h"
#include "Pshot.h"
#include "struct.h"
#include "map.h"
#include <math.h>
#define SHOT_MAX 200
int MGGraph;//弾の画像
int cooltime;
void Pshot_Syoki(){
int i;
MGGraph=LoadGraph("img/MG.png");//初期化
}
void Pshot_Select(int Px,int Py,int Pi){
int i;
cooltime++;
for(i=0;i<SHOT_MAX;i++){
data[i].knd=1;
switch(data[i].knd){//のちのち武器を追加するので種類で分岐
case 1:
if(cooltime>120){
if(data[i].flag==0){
data[i].x=Px;//プレイヤーの座標にあわせる
data[i].flag=1;//フラグ
data[i].who=Pi;//誰がの弾か(未使用)
data[i].speed=1;//弾速
cooltime=0;//クールダウン
break;
}
}
}
if(data[i].flag==1){
data[i].x=map_EntityMove(dataP[i].x); //マップのスクロール+速さ
}
}
}
void Pshot_calc(int Pi){//計算
int i;
for(i=0;i<SHOT_MAX;i++){
if(data[i].flag==1){
data[i].x=dataP[Pi].x+data[i].speed; //マップのスクロール+速さ
DrawGraph(data[i].x,data[i].y,MGGraph,TRUE);
}
}
}
void Pshot_Draw(){//描写(削除予定)
int i;
// for(i=0;i<SHOT_MAX;i++){
// if(data[i].flag==1){
// DrawGraph(data[i].x,data[i].y,MGGraph,TRUE);
// }
// }
}
#include "DxLib.h"
#include "Punit.h"
#include "Eunit.h"
#include "struct.h"
#include "Pshot.h"
#include "Eshot.h"
#include "map.h"
#include <math.h>
#define UNIT_MAX 200
#define SHOT_MAX 200
#define PI 3.141592654
//画像ハンドル略
void EUnit_Hit(){//当たり判定(未実装)
int i,j;
for(i=0;i>UNIT_MAX;i++){
for(j=0;j>SHOT_MAX;j++){
if(i>4){
dataE[j].flag=0;
}
}
}
}
void PUnit_Select(){//あいているユニット選択
int i;
Pcooltime++;
for(i=0;i<UNIT_MAX;i++){
if(Pcooltime>=120){
if(CheckHitKey(KEY_INPUT_1)==1){
if(dataP[i].flag==0){
dataP[i].flag=1; //以下初期値
dataP[i].type=1;
dataP[i].x=mapX;
dataP[i].speed=0.5;
dataP[i].y=200;
dataP[i].range=100;//ここまで初期値代入
Pcooltime=0;
}
}
}
if(dataP[i].x>mapX+1795 || dataP[i].x<mapX-3){//マップから出たら消去
dataP[i].flag=0;
}
}
}
void EUnit_Select(){ //上と同じ
int i;
Ecooltime++;
for(i=0;i<UNIT_MAX;i++){
if(Ecooltime>=120){
if(dataE[i].flag==0){//出現
dataE[i].flag=1; //以下初期値
dataE[i].type=1;
dataE[i].x=mapX+1795;
dataE[i].speed=0.5;
dataE[i].y=200;
dataE[i].range=200;//ここまで初期値代入
Ecooltime=0;
}
}
if(dataE[i].x>mapX+1800 || dataE[i].x<mapX-9){//消去判定
dataE[i].flag=0;
}
}
}
int PUnit_Draw(int x,int y,int type){//種類ごとに描写
switch(type){ //種類
case 1:
DrawGraph(x,y,PikadaGraph,TRUE);
break;
case 2:
DrawGraph(x,y,PyotGraph,TRUE);
break;
case 3:
DrawGraph(x,y,PgyosenGraph,TRUE);
break;
case 4:
DrawGraph(x,y,PkyakusenGraph,TRUE);
break;
}
}
int EUnit_Draw(double x,double y,int type){//上と同じ
switch(type){ //種類
case 1:
DrawGraph(x,y,EikadaGraph,TRUE);
break;
case 2:
DrawGraph(x,y,EyotGraph,TRUE);
break;
case 3:
DrawGraph(x,y,EgyosenGraph,TRUE);
break;
case 4:
DrawGraph(x,y,EkyakusenGraph,TRUE);
break;
}
}
int PUnit_Range(int x,int y,int range){ //索敵範囲
int i;
int xl,yl,r;
for(i=0;i<UNIT_MAX;i++){
xl = dataE[i].x - x ; //索敵範囲計算
yl = dataE[i].y - y ;
r = xl * xl + yl * yl ;
if( r < range * range ){
Pshot_Select(data[i].x,data[i].y,i); //弾発射
Pshot_calc(i); //弾計算
Pshot_Draw(); //描写(削除予定)
return 1;
}
}
return 0;
}
int EUnit_Range(int x,int y,int range){//上と同じ
int i;
int xl,yl,r;
for(i=0;i<UNIT_MAX;i++){
xl = x - dataP[i].x ;
yl = y - dataP[i].y ;
r = xl * xl + yl * yl ;
if( r < range * range ){
Eshot_calc(dataE[i].x);
Eshot_Draw();
return 1;
}
}
return 0;
}
void PUnit_calc(){ //計算
int i;
for(i=0;i<UNIT_MAX;i++){
if(dataP[i].flag==1){
if(dataP[i].rangeFlag==0){
dataP[i].x=map_EntityMove(dataP[i].x)+dataP[i].speed; //マップのスクロールにあわせる+速さ
}else if(dataP[i].rangeFlag==1){
dataP[i].x=map_EntityMove(dataP[i].x); //マップのスクロールに合わせる
}
dataP[i].rangeFlag=0; //索敵初期化
dataP[i].rangeFlag=PUnit_Range(dataP[i].x,dataP[i].y,dataP[i].range);//索敵範囲判定
PUnit_Draw(dataP[i].x,dataP[i].y,dataP[i].type); //描写関数へ
}
}
}
void EUnit_calc(){ //上と同じ
int i;
for(i=0;i<UNIT_MAX;i++){
if(dataE[i].flag==1){
if(dataE[i].rangeFlag==0){
dataE[i].lx=dataE[i].speed*-1;
dataE[i].x=map_EntityMove(dataE[i].x)+dataE[i].lx; //マップの右端-速さ
}else if(dataE[i].rangeFlag==1){
dataE[i].x=map_EntityMove(dataE[i].x);
}
dataE[i].rangeFlag=0;
dataE[i].rangeFlag=EUnit_Range(dataE[i].x,dataE[i].y,dataE[i].range);//索敵範囲判定
EUnit_Draw(dataE[i].x,dataE[i].y,dataE[i].type);
}
}
}
なかなかうまくいきません。
上のソースでは、プレイヤーのユニットからの位置で弾の座標を計算しています。
実行してみると弾の座標がおかしくなってるみたいなんです。
何か間違っている点があるのは確実なんですが、
いくら眺めてみても自分はわかりませんでした。
何箇所か未実装だったり未完成だったりしてます すいません、よろしくお願いします。