ページ 1 / 1
プレイヤーの残機を減らす方法について
Posted: 2014年3月22日(土) 10:31
by samusu0905
プレイヤーの残機を減らす処理なんですが、どのようなプログラムを書けばいいんですか?
ダメージ処理のところに書くことはわかっています。ダメージ処理なので、衝突判定の部分ですよね?
衝突判定のところにダメージを負ったら残機を減らすのを書くところまではわかりますが、
プログラムがいまいちわかりません。
具体的にどのような処理を衝突判定に書けばよいですか?
わかりやすい説明をお願いします。
因みに衝突判定なので多分こんな感じのコードだと思います。
コード:
//ドラゴンと敵の衝突判定------------------------------------------------------
void CollisionDragonEnemy(void)
{
int i;
//敵の数ループ
for(i=0; i<ENEMY1_MAX; i++)
{
//敵が存在すれば
if( gEnemy1[i].flg == ON)
{
CollisionDragonEnemyOne(i); //ドラゴンと敵の衝突判定の実施
}
}
}
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragonLife[i].HP -= 1; //ドラゴンのダメージ
}
}
}
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月22日(土) 10:43
by みけCAT
なんでいきなりドラゴンが出てくるのですか?
プレイヤー=ドラゴンですか?
samusu0905 さんが書きました:衝突判定のところにダメージを負ったら残機を減らすのを書くところまではわかりますが、
プログラムがいまいちわかりません。
具体的にどのような処理を衝突判定に書けばよいですか?
まず、ダメージを負う条件は何ですか?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月22日(土) 12:18
by samusu0905
そうですね。自分が今回作っているゲームのプレイヤーはドラゴンにしています。
ですから、プレイヤー=ドラゴンです。
ダメージを負う条件ついては、ドラゴン左右上下と敵の左右上下がそれぞれ衝突したときに
ドラゴンの残機を減らすという処理です。
そこまでは出来ましたが、ドラゴンと敵が衝突するたびにドラゴンの残機が一つずつ減っていくという処理です。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月22日(土) 12:20
by samusu0905
いきなりドラゴンですみませんでした。前もって言うべきでしたね・・。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月22日(土) 16:20
by みけCAT
現状のコードで何が問題なのですか?
samusu0905 さんが書きました:因みに衝突判定なので多分こんな感じのコードだと思います。
そう思ったものを、まず自分でコンパイルして実行してみましたか?
「ダメージ(HP)」と「残機」の概念は両方作るのですか?ここでの「HP」=「残機」ではないのですか?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月22日(土) 17:53
by プラム
gDragon.Numと
gDragon.flg とか言う(名前はなんでもいいですが)ものがあれば
このようにコードを書けばいいじゃないですか?
コード:
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragonLife[i].HP -= 1; //ドラゴンのダメージ
if(gDragonLife[i].HP<=0){
gDragon.Num -= 1;
if(gDragon.Num<=0){
gDragon.flg=OFF;
}
}
}
}
}
と書けばたぶんできると思います。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 00:03
by samusu0905
ハルルンさん申し訳ございませんが、ドラゴンのflgはあってもNumは定義してないですね・・。
教えて下さったのに失礼なことを言ってすみません。
Numが定義されてなければ別の定義されているものを利用すればよろしいでしょうか?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 00:06
by みけCAT
samusu0905 さんが書きました:ハルルンさん申し訳ございませんが、ドラゴンのflgはあってもNumは定義してないですね・・。
教えて下さったのに失礼なことを言ってすみません。
Numが定義されてなければ別の定義されているものを利用すればよろしいでしょうか?
それはプログラムの設計や仕様によります。
Numを新たに定義することはできないのですか?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 00:16
by samusu0905
説明がまだ分かりずらかったですか?
なら更にわかりやすく説明いたします。
実はドラゴンの残機をハートで表しているんですが、
そこで教えてほしいのは、ドラゴンの残機(ハート)8個が、敵とドラゴンが衝突する度にドラゴンの残機(ハート)を一つずつ
削っていく処理です。 わざわざプログラムまで書いていただいたのにすみませんね・・・。
あまりにも自分の説明のなさに申し訳ないです。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 09:00
by プラム
少しわかりづらかったかもしれません。ごめんなさい。
gDragonと書いてある場所のかっこの中にflgとNumを追加して。コードコメントを付けたのでそれを見れば大体わかると思います。
コード:
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragonLife[i].HP -= 1; //ドラゴンのダメージ
if(gDragonLife[i].HP<=0){ //もしドラゴンのHPが0より少なくなった場合に機数をーする
gDragon.Num -= 1; //機数を-する
if(gDragon.Num<=0){ // もしドラゴンの残り機数が0になった場合ドラゴンを存在しなくする(ゲームオーバー)ということです。
gDragon.flg=OFF; // とはドラゴンの存在を消す
}
}
}
}
}
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 09:08
by みけCAT
No: 10のコードだと、機数を-したあとにHPを回復させる処理が必要だと思います。
ところで、
みけCAT さんが書きました:現状のコードで何が問題なのですか?
samusu0905 さんが書きました:因みに衝突判定なので多分こんな感じのコードだと思います。
そう思ったものを、まず自分でコンパイルして実行してみましたか?
「ダメージ(HP)」と「残機」の概念は両方作るのですか?ここでの「HP」=「残機」ではないのですか?
これが無視されているように感じるのですが…私のことお嫌いですか?
それとも勘違いですか?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 09:09
by へにっくす
>ハルルンさん
インデントがおかしいので直しました。
編集するときは、インデントを直す癖をつけた方がいいですよ。
コード:
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragonLife[i].HP -= 1; //ドラゴンのダメージ
if(gDragonLife[i].HP<=0){ //もしドラゴンのHPが0より少なくなった場合に機数をーする
gDragon.Num -= 1; //機数を-する
if(gDragon.Num<=0){ // もしドラゴンの残り機数が0になった場合ドラゴンを存在しなくする(ゲームオーバー)ということです。
gDragon.flg=OFF; // とはドラゴンの存在を消す
}
}
}
}
}
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 09:26
by プラム
みけCATさん>>なぜすぐに妄想が始まるのですか?みなさん嫌いだから無視するとかじゃないと思いますが・・・
ヘにっくすさん>>そうですね。しっかりインデントとかしたほうがですね。そのほうがきれいに見えるし見やすい。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 11:48
by samusu0905
みけCATさん>>すみませんでした。勘違いしないでください。別にみけCATさんのことが嫌いなわけではありません・・。
無視してる感じを受けているのなら謝りますね。みけCATさんごめんなさい。
でも、今はみけCATさんに色々と教えてもらってとても嬉しいですよ。
ハルルンさんの言うとおり嫌いではありません。誤解なさらないようにお願いします・・。
ハルルンさんのプログラムとおりにして、Numを新たに定義して書きましたが、定義して思ったのがNumを新たに定義
したのは良いんですが、定義したところでNumをどのソースコードにも使われてなかったので、衝突判定で書き込んでも
意味がありませんでした。 ですから、ドラゴンのソースコードにでもNumを使ってみます。
上手くいくといいですが・・。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 11:51
by みけCAT
samusu0905 さんが書きました:みけCATさん>>すみませんでした。勘違いしないでください。別にみけCATさんのことが嫌いなわけではありません・・。
無視してる感じを受けているのなら謝りますね。みけCATさんごめんなさい。
でも、今はみけCATさんに色々と教えてもらってとても嬉しいですよ。
ハルルンさんの言うとおり嫌いではありません。誤解なさらないようにお願いします・・。
ありがとうございます。
「私のことお嫌いですか?」というのは半分冗談です。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 11:54
by samusu0905
問題はNumをどのようにうまく活用するのかですね。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 11:57
by samusu0905
そうですか・・。冗談で良かったです。
僕からしたらみけCATさんはとても頼りになる存在ですよ。
みけCATさんだけじゃなくとも、他の教えて下さっている人も同じです。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 12:07
by みけCAT
samusu0905 さんが書きました:問題はNumをどのようにうまく活用するのかですね。
もう一度書きますが、Numを追加するのではなく、
現状(No: 1のコード)で存在する変数gDragonLife
.HPをそのまま残機数として利用することはできないのですか?
私にはそのままHP→残機と読み替えればいいように思えるのですが…?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 13:49
by samusu0905
確かにその通りですね。あ、でも既に自分もHPを残機にしてますのでそこは問題ありませんよ。
後は、残機(ハート)を衝突するたびに一つずつ削っていく処理だけですから。
もう少し自分でやってみますね。
分からなければ、どこまで書けてどこが問題なのかを教えますので。
よろしくお願いします。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 18:25
by samusu0905
あの後、色々と試しましたがうまくいきそうにないです。
ドラゴンのHPは残機として扱っていますので、そこは問題ありません。
ただ、衝突判定の部分で衝突したら残機が減る処理に手こずっています。
敵とドラゴンが衝突したらドラゴンのHPは減りますが、問題の残機(ハート)が8個のままで、
いくら衝突しても一つも消えません・・。別に消える時にわざわざ点滅させる必要はないので
もう少ししたら出来るはずですが。
コードを提示します。
コード:
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragon.HP -= 1; //ドラゴンのダメージ
if(gDragon.HP -= 1) //ドラゴンの残機
{
gDragonLife[i].x = 30+30*(i-2); //残機を一つずつ減らす
}
}
}
}
だいたいこんな感じになります。
出来ればgDragon.HPとgDragonLifeを使ってプログラムを書いて欲しいです。
お願いします><
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 18:34
by プラム
あの・・・
コード:
if(gDragon.HP -= 1) //という書き方はいつまでたっても減らないのは当たり前だと思います(それはドラゴンのHPを減らしているです)
そう書くなら
if(gDragonLife
.HP<=0) と書かないとできない気がします。
あと機数を描画するには
コード:
for(int i =0 ; i<gDragonLife[i].HP; i++){
/*ここに画像を描画する関数を書いてください*/
}
とかいう感じです。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 18:37
by プラム
それか、
コード:
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragon.HP -= 1; //ドラゴンのダメージ
gDragonLife[i].x = 30+30*(i-2); //残機を一つずつ減らす
}
}
}
と書けばいいです。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 18:41
by みけCAT
きつい言い方で申し訳ないのですが、
プレイヤーの左下にプレイヤーの残機を8個ほど並べるやり方について • C言語交流フォーラム ~ mixC++ ~
このスレッドで残機の表示に「見事に成功」したのではなかったのですか?
これは嘘だったのですか?
成功していないのに成功したと言うのは、自分のためにならないと思います。
[hr]
現状のコードにおいて、gDragonLife
.xの役割は何ですか?(何を表していますか?)
そもそも、gDragonLifeの役割は何ですか?(何を表していますか?)
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 20:01
by samusu0905
いえ、残機の表示が出来たのは本当ですよ。
出来なかったのは、残機が減らないということです。
そこが出来なくて困っています。
gDragonLife.xはドラゴンの残機の位置を表す役割と、ドラゴンの残機の数を表す役割もしています。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 20:39
by samusu0905
ハルルンさんの言った通りに書いてみましたが、
コード:
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragon.HP -= 1; //ドラゴンのダメージ
gDragonLife[i].x = 30+30*(i-2); //残機を一つずつ減らす
}
}
}
出来ませんでした・・。なぜか残機の数は全く反応しませんでした。
僕も大丈夫かと思ったのですが、まだ違うところがある見たいです。
わざわざ書いて下さったのに申し訳ないです・・。
みけCATさん何か残機のが減るようなプログラムありませんか?
あれば教えてほしいです。お願いします><
もし、動かなくても自分で少し変えながらやっていけば上手くいくと思うので。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 21:00
by みけCAT
samusu0905 さんが書きました:みけCATさん何か残機のが減るようなプログラムありませんか?
あれば教えてほしいです。お願いします><
ごめんなさい。日本語として意味がわからないです。
すぐに直球でプログラムを求めないで、少しは考えようとして欲しいと思います。
gDragonLifeの表示やその他の処理をしている部分のプログラムを見せていただけますか?
samusu0905 さんが書きました:gDragonLife.xはドラゴンの残機の位置を表す役割と、ドラゴンの残機の数を表す役割もしています。
どういう設計なのでしょうか?
わかりにくいので、表示する位置と数は別の変数(同じ構造体の別のメンバでも良い)に格納するべきだと思います。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 23:06
by samusu0905
ごめんなさい。ただの入力ミスです・・。
「残機が減るようなプログラム」と伝えたかったのです。
分かりずらくてごめんなさい・・。
ここにコードを提示します。
コード:
//ドラゴンと敵の衝突判定の実施------------------------------------------------
void CollisionDragonEnemyOne(int i)
{
//敵が存在していれば
if( gEnemy1[i].flg == ON)
{
if( gDragon.x+DRAGON_XSIZE > gEnemy1[i].x && //ドラゴンの右>敵の左
gDragon.x < gEnemy1[i].x+ENEMY1_XSIZE && //ドラゴンの左<敵の右
gDragon.y+DRAGON_YSIZE > gEnemy1[i].y && //ドラゴンの下>敵の上
gDragon.y+30 < gEnemy1[i].y+ENEMY1_YSIZE) //ドラゴンの上<敵の下
{
gEnemy1[i].flg = OFF; //敵が存在しない
gsPlaySound( sBombSE, LOOP_OFF); //敵の爆発SE
//gsPlaySound( sDamageSE, LOOP_OFF); //ドラゴンのダメージSE
gDragon.HP -= 1; //ドラゴンのダメージ
gDragonLife[i].x = 30+30*(i-2); //残機を一つずつ減らす
}
}
}
これ↑が衝突判定
コード:
//表示-----------------------------------------------------------------------
void DragonDraw(void)
{
int i;
gsDraw2D( sDragon, (int)gDragon.x, (int)gDragon.y); //ドラゴン
for(i=0; i<DRAGONLIFE_MAX; i++)
{
gDragonLife[i].x = 30+30*(i-1); //ドラゴン残機の数を複数に分裂
gDragonLife[i].y = 695;
gsDraw2D( sDragonLife, gDragonLife[i].x, gDragonLife[i].y);
}
}
で、これ↑がドラゴンの残機の表示です。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 23:09
by みけCAT
衝突判定ではgDragonLife.xを操作せず、
DragonDraw関数中のforループでi<gDragon.HPの時だけgDragonLifeを描画すればいいと思います。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 23:13
by samusu0905
後、どの部分のコードを提示すればよろしいですか?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 23:18
by みけCAT
samusu0905 さんが書きました:後、どの部分のコードを提示すればよろしいですか?
今のところ追加する必要はなさそうだと思いますが…No: 28の方法ではうまくいかなかったですか?
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 23:21
by samusu0905
今からやってみるところですよ。
Re: プレイヤーの残機を減らす方法について
Posted: 2014年3月23日(日) 23:33
by samusu0905
やってみましたよ。今度こそできました!
みけCATさんのプログラム通りにやったらできました。
ちゃんとドラゴンの残機も削ることができました。
有難うございます。