玉の発射について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぽてまよ

玉の発射について

#1

投稿記事 by ぽてまよ » 16年前

こんばんわ、初めまして。
C言語を勉強し始めたばかりで、このHPを参考に簡単なシューティングゲームを作ってみてるのですが、玉の発射でつまずいてしまいました。
特にエラーなどはでないのですが、どこを変えればいいでしょうか。
アドバイスや、ご指摘などよろしくお願いします。


OS WindowsXP
コンパイラ VC++ 2008EE


#include "DxLib.h"
#define MAX_FIELD_X 550
#define MAX_FIELD_Y 450
#define MIN_FIELD_X 10
#define MIN_FIELD_Y 10
#define PLAYER_SPEED 2*2
 

struct PlayerData{
	int x;
	int y;
	int image;
	int flag;
};


//プロトタイプ宣言
void PlayerShot();

//グローバル変数
struct PlayerData player_move;
struct PlayerData player_shot;





int WINAPI WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lpC,int nC)
{

	ChangeWindowMode(TRUE);  //ウィンドウモードで起動
	if(DxLib_Init()==-1)return(-1);     //DXライブラリ初期化

	
	player_move.image=LoadGraph("image/neko.png");
	player_move.x=MAX_FIELD_X/2;
	player_move.y=MAX_FIELD_Y;
	player_shot.image=LoadGraph("image/shot.png");



	SetDrawScreen(DX_SCREEN_BACK);
	while(ProcessMessage()==0&&CheckHitKey(KEY_INPUT_ESCAPE)==0){
		ClsDrawScreen();

		//自キャラ移動
		if(CheckHitKey(KEY_INPUT_RIGHT)>0)
		{
			if(player_move.x>=MAX_FIELD_X)
			{
				player_move.x=MAX_FIELD_X;
			}
			else {
			player_move.x+=PLAYER_SPEED;
			}
		}

		if(CheckHitKey(KEY_INPUT_LEFT)>0)
		{
			if(player_move.x<=MIN_FIELD_X)
			{
				player_move.x=MIN_FIELD_X;
			}
			else {
			player_move.x-=PLAYER_SPEED;
			}
		}

		DrawGraph(player_move.x,player_move.y,player_move.image,TRUE);



		ScreenFlip();
	}

	DxLib_End();
	return(0);
}


/*-------------------------------------------------------------------*/
/*                      プレイヤー攻撃                             */
/*-------------------------------------------------------------------*/

void PlayerShot(){
	//発射
	if(CheckHitKey(KEY_INPUT_Z)>0)
	{
		if(player_shot.flag==0)
		{
			player_shot.flag=1;
			player_shot.x=player_move.x-12;
			player_shot.y=player_move.y+6;
		}
	}
	
	if(player_shot.flag==1)
	{
		player_shot.y-=12;
		DrawGraph(player_shot.x,player_shot.y,player_shot.image,TRUE);
		if(player_shot.y<MIN_FIELD_Y)
		{
		player_shot.flag=0;
		}
	}
}

TH

Re:玉の発射について

#2

投稿記事 by TH » 16年前

if(player_shot.flag==1) この時行われる移動に関する処理は
「player_shot.y-=12」これが一回だけです。
つまり、フラグが立っていたからといって何度も移動するわけではないんですね。
一度移動したあとに繰り返すような命令が無いため一度移動したらそれで終わりになっています。

while(player_shot.flag==1)
これをいれれば フラグが立っている間は処理を繰り返すために移動させられると思います。
一発しか撃てないのが問題であるならばplayer_shot[n]のようにplayer_shotを増やす必要がありますが…

BEMANI

Re:玉の発射について

#3

投稿記事 by BEMANI » 16年前

>>ぽてまよさん
一応、何がどうなった、動かないのか・・・
という情報があれば凄く助かるかな~と思われます。
次回質問時は「ここをこうしたけど、こうなりませんでした!」
という事を書いてみましょう><


で、問題ですが。
PlayerShot() が呼ばれていないようなので、
while(ProcessMessage()==0&&CheckHitKey(KEY_INPUT_ESCAPE)==0)
{
 PleyrShot()をこの中に入れれば動くのではないかな・・・
}



>>THさん
PlayerShotを呼び出せば、一発だけ画面外に出るまで移動しますよ^^

TH

Re:玉の発射について

#4

投稿記事 by TH » 16年前

何てこった…!
申し訳ないです・・・

ぽてまよ

Re:玉の発射について

#5

投稿記事 by ぽてまよ » 16年前

>>THさん
アドバイスありがとうございます!
今はとりあえず1発ずつでいいかなって思ってたので
数発打つようにしたいとき、配列にして試してみますね。

>>BEMANIさん
ご指摘ありがとうございました!
飛ばせるようになりました^^
まさかそんなことだったなんて思いませんでした・・・(汗
それから、掲示板の質問の仕方についてのアドバイスもありがとうございます。
次質問するときは、どんな状況かもう少し詳しく書こうと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る