自分は4方向に打つプログラムを作っています。
下のが作成したプログラムです。
しかし玉の描画で、玉が消える前に方向キーを押すと、玉の画像が変わってしまいます。
どうしてでしょうか?コメントお願いします。
void PlayerShotCalc(){
int j;
if(Key[KEY_INPUT_Z]==1 && counter%30==0){
for(j=0;j<50;j++){
if(PlayerShot[j].flag==0){
PlayerShot[j].flag=1;
PlayerShot[j].x=ch1.x;
PlayerShot[j].y=ch1.y;
for(int a=0;a<4;a++)
PlayerShot[j].muki=3-ch1.muki;//上
break;
}
}
}
for(j=0;j<50;j++){
if(PlayerShot[j].flag==1){
PlayerShot[j].x+= SHOTSPEED * cos(90*PlayerShot[j].muki*PI/180);
PlayerShot[j].y+= SHOTSPEED * sin(90*PlayerShot[j].muki*PI/180);
if(PlayerShot[j].y < -32 || PlayerShot[j].x > 672 || PlayerShot[j].y > 512 || PlayerShot[j].x < -32 || can_or_cannot( PlayerShot[j].x ,PlayerShot[j].y ,PlayerShot[j].muki )==1 )
//もし画面外まで来たら、
PlayerShot[j].flag=0; //発射フラグを0に戻す
}
}
}
void PlayerShotDisp(){
int j;
for(j=0;j<50;j++){
PlayerShot[j].range=32;
if(PlayerShot[j].flag==1){
if(ch1.muki==0)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y-18,tama[0],TRUE);
else if(ch1.muki==1)
DrawGraph(PlayerShot[j].x-18,PlayerShot[j].y,tama[1],TRUE);
else if(ch1.muki==2)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y+18,tama[2],TRUE);
else if(ch1.muki==3)
DrawGraph(PlayerShot[j].x+18,PlayerShot[j].y,tama[3],TRUE);
}
}
}
void CollisionDetection(){
for(int i=0;i<100;i++){//ショットの全列分
if(PlayerShot.flag==1){//その弾が発射中なら
for(int s=0;s<100;s++){//全敵100体分
if(enemy.flag==1){//その敵のショットが出現中なら
double x,y;
int range;
x=(int)(PlayerShot.x-enemy.x);
y=(int)(PlayerShot.y-enemy.y);
switch(i){
case 0:
case 5:
case 6:
range=0;
break;
default:
range=9;
break;
}
if( (int)sqrt(x*x+y*y) < range+enemy.range){
enemy.flag=0;
ch1.point++;
PlayerShot.flag=0;
}
}
}
}
}
if(ch1.point == 1){
battle_loop=2;
}
}
シューティング
Re:シューティング
動作確認できないんで間違ってるかもしれませんが・・・
PlayerShotDisp関数で
PlayerShotDisp関数で
if(ch1.muki == 0) DrawGraph(PlayerShot[j].x,PlayerShot[j].y-18,tama[0],TRUE); else if(ch1.muki == 1) DrawGraph(PlayerShot[j].x-18,PlayerShot[j].y,tama[1],TRUE); else if(ch1.muki == 2) DrawGraph(PlayerShot[j].x,PlayerShot[j].y+18,tama[2],TRUE); else if(ch1.muki == 3) DrawGraph(PlayerShot[j].x+18,PlayerShot[j].y,tama[3],TRUE);とありますが、ch1.mukiではなくPlayerShot[j].mukiではないでしょうか?
Re:シューティング
pookaさんありがとうございます。変更して実行した結果なのですが、今度は発射されるとき画像の向きが上向きになったままで、画像の向きが変わりません。PlayerControlも乗せておきます
void PlayerControl(){
int white;
white = GetColor(255,255,255);
if(ch1.x%16==0 && ch1.y%16==0){ //座標が32で割り切れたら入力可能
ch1.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ){ //上ボタンが押されたら
ch1.muki=0; //上向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=3;
}
}
else if( Key[ KEY_INPUT_LEFT ] == 1 ){ //左ボタンが押されたら
ch1.muki=1; //右向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=2;
}
}
else if( Key[ KEY_INPUT_DOWN ] == 1 ){ //下ボタンが押されたら
ch1.muki=2; //下向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=1;
}
}
else if( Key[ KEY_INPUT_RIGHT] == 1 ){ //右ボタンが押されたら
ch1.muki=3; //左向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=0;
}
}
else //何のボタンも押されてなかったら
ch1.walking_flag=0; //歩かないフラグを立てる
if(can_or_cannot(ch1.x,ch1.y,ch1.muki)==1)//行き先が歩けないなら
ch1.walking_flag=0; //歩かないフラグを立てる。
}
if(ch1.walking_flag==1){ //歩くフラグが立っていたら
if (ch1.muki==0){ //上向きならch.y座標を減らす
ch1.y-=2;
if(ch1.y<0)
ch1.y=0;
}
if(ch1.muki==1){ //右向きならch.x座標を減らす
ch1.x-=2;
if(ch1.x<0)
ch1.x=0;
}
if(ch1.muki==2){ //下向きならch.y座標を増やす
ch1.y+=2;
if(ch1.y>448)
ch1.y=448;
}
if(ch1.muki==3){ //左向きならch.x座標を増やす
ch1.x+=2;
if(ch1.x>608)
ch1.x=608;
}
}
ch1.img=ima[(ch1.x%16+ch1.y%16)/4 + ch1.muki*4]; //画像をセット
DrawFormatString(0,0, white , "%d , %d" , ch1.x,ch1.y);
DrawGraph( ch1.x , ch1.y , ch1.img , TRUE ) ;//画像を描画
}
/////////////////////////////////////////////////////////////////////////////////////
//変更したプログラム
///////////////////////////////////////////////////////////////////////////////////
void PlayerShotDisp(){
int j;
for(j=0;j<50;j++){
PlayerShot[j].range=32;
if(PlayerShot[j].flag==1){
if(PlayerShot.muki==0)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y-18,tama[0],TRUE);
else if(PlayerShot.muki==1)
DrawGraph(PlayerShot[j].x-18,PlayerShot[j].y,tama[1],TRUE);
else if(PlayerShot[i].muki==2)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y+18,tama[2],TRUE);
else if(PlayerShot[i].muki==3)
DrawGraph(PlayerShot[j].x+18,PlayerShot[j].y,tama[3],TRUE);
}
}
}

void PlayerControl(){
int white;
white = GetColor(255,255,255);
if(ch1.x%16==0 && ch1.y%16==0){ //座標が32で割り切れたら入力可能
ch1.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ){ //上ボタンが押されたら
ch1.muki=0; //上向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=3;
}
}
else if( Key[ KEY_INPUT_LEFT ] == 1 ){ //左ボタンが押されたら
ch1.muki=1; //右向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=2;
}
}
else if( Key[ KEY_INPUT_DOWN ] == 1 ){ //下ボタンが押されたら
ch1.muki=2; //下向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=1;
}
}
else if( Key[ KEY_INPUT_RIGHT] == 1 ){ //右ボタンが押されたら
ch1.muki=3; //左向きフラグを立てる
for(i=0;i<=SHOTMAX;i++){
if(PlayerShot.flag==0)
PlayerShot.muki=0;
}
}
else //何のボタンも押されてなかったら
ch1.walking_flag=0; //歩かないフラグを立てる
if(can_or_cannot(ch1.x,ch1.y,ch1.muki)==1)//行き先が歩けないなら
ch1.walking_flag=0; //歩かないフラグを立てる。
}
if(ch1.walking_flag==1){ //歩くフラグが立っていたら
if (ch1.muki==0){ //上向きならch.y座標を減らす
ch1.y-=2;
if(ch1.y<0)
ch1.y=0;
}
if(ch1.muki==1){ //右向きならch.x座標を減らす
ch1.x-=2;
if(ch1.x<0)
ch1.x=0;
}
if(ch1.muki==2){ //下向きならch.y座標を増やす
ch1.y+=2;
if(ch1.y>448)
ch1.y=448;
}
if(ch1.muki==3){ //左向きならch.x座標を増やす
ch1.x+=2;
if(ch1.x>608)
ch1.x=608;
}
}
ch1.img=ima[(ch1.x%16+ch1.y%16)/4 + ch1.muki*4]; //画像をセット
DrawFormatString(0,0, white , "%d , %d" , ch1.x,ch1.y);
DrawGraph( ch1.x , ch1.y , ch1.img , TRUE ) ;//画像を描画
}
/////////////////////////////////////////////////////////////////////////////////////
//変更したプログラム
///////////////////////////////////////////////////////////////////////////////////
void PlayerShotDisp(){
int j;
for(j=0;j<50;j++){
PlayerShot[j].range=32;
if(PlayerShot[j].flag==1){
if(PlayerShot.muki==0)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y-18,tama[0],TRUE);
else if(PlayerShot.muki==1)
DrawGraph(PlayerShot[j].x-18,PlayerShot[j].y,tama[1],TRUE);
else if(PlayerShot[i].muki==2)
DrawGraph(PlayerShot[j].x,PlayerShot[j].y+18,tama[2],TRUE);
else if(PlayerShot[i].muki==3)
DrawGraph(PlayerShot[j].x+18,PlayerShot[j].y,tama[3],TRUE);
}
}
}
