ページ 11

わかる人がいたら教えてください!!

Posted: 2013年12月05日(木) 16:28
by shiro_yuki
ゲームプログラミング歴がまだ浅い高校生ですが、
サンプルプログラミングの館にて

リンゴを拾うゲームのプログラミングのソースコードを触って試しながら
ゲームプログラミングを頑張っていこうとしています!

リンゴをキャラクターが拾ったら、リンゴを拾った個数の分だけが
ゲームのアプリケーション上に
立ち上がるようにするにはどうすればよいのでしょうか・・・・・。

考えてみましたが、初心者の自分にはわからなかったです・・・・・・・。

このゲームのダウンロードリンク先
サンプルプログラミングの館
リンゴの落ちゲー
http://dixq.net/sm/d3.html

------------------------------------------------------------------------------------------------
PC環境
FUJITSU ESPRIMO
OS: Microsoft Windows Vista Business Service Pack 2 32bit
RAM: 2GB
CPU: Intel Core 2 Duo CPU E7300 @ 2.66GHz TB 2.67GHz
使用しているプログラミングソフト: Microsoft Visual Studio 2008 Professional Edition

------------------------------------------------------------------------------------------------

Re: わかる人がいたら教えてください!!

Posted: 2013年12月05日(木) 17:27
by softya(ソフト屋)
すいません。具体的にどうなるのかよく分かりません。

>リンゴをキャラクターが拾ったら、リンゴを拾った個数の分だけが
>ゲームのアプリケーション上に
>立ち上がるようにするにはどうすればよいのでしょうか・・・・・。

何が何処に立ち上がるのでしょうか?

Re: わかる人がいたら教えてください!!

Posted: 2013年12月05日(木) 21:56
by shiro_yuki
例えば、
バケットのなかにりんごが入ったら
一個入りましたー!と文字でテキスト表示させたいです!

りんごが2個、3個はいるごとに、
2個入りましたー!、3個入りましたー!とように
ゲームの状況に応じて、
今まで入った個数を表示させたいなと思っています!!

Re: わかる人がいたら教えてください!!

Posted: 2013年12月05日(木) 22:01
by softya(ソフト屋)
どこから分からないのでしょうか?

1.りんごのカゴに入った個数のカウント
2.画面に個数をテキスト表示させる方法
3.表示させたら一定時間後に消しさる方法

Re: わかる人がいたら教えてください!!

Posted: 2013年12月05日(木) 22:03
by shiro_yuki
1、2、3番よかったら教えてください!

Re: わかる人がいたら教えてください!!

Posted: 2013年12月05日(木) 22:06
by softya(ソフト屋)
shiro_yuki さんが書きました:1、2、3番よかったら教えてください!
ゲームプログラミングの勉強ですよね。
お手伝いしますので、まず自分で考えないと勉強になりません。
さて、まず1としてりんごがカゴに入ったのはソースコード何処でわかるでしょうか?

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 12:17
by shiro_yuki
<code>
int bullet_kago_exit(int i){

if(ch.x-20<bullet.x && bullet.x<ch.x+20 && ch.y-40<bullet.y && bullet.y<ch.y-35)
return 1;
return 0;
</code>

たぶん推測ですが、もしも、かごの中にりんごがはいったら
return 1
1になる→りんごがカゴの中に入ったことになる
そしたら0に戻る なくなるという感じでしょうか・・・・・・。

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 12:23
by softya(ソフト屋)
bullet_kago_exit()が、その判定をする関数だとして、それを確認する良い方法は無いでしょうか? 考えてみ下さい。
ヒント:PrintfDX();デバッグ用の関数。
「DXライブラリ置き場 リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... raph3.html

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 13:11
by shiro_yuki
printfDXは、C言語でも同じようにアプリケーション上に文字を表示させるようにするのが
printfDX関数であり、printfDX関数のなかに、

printfDX(リンゴのかご);

といった感じでしょうか・・・・・・。

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 13:22
by softya(ソフト屋)
shiro_yuki さんが書きました:printfDXは、C言語でも同じようにアプリケーション上に文字を表示させるようにするのが
printfDX関数であり、printfDX関数のなかに、

printfDX(リンゴのかご);

といった感じでしょうか・・・・・・。
printfDX(リンゴのかご);だとprintfの書式としても間違っています。printfの書き方はご存知でしょうか。
あと条件式が必要では? → ソースの書く場所次第ではいらないですが。

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 13:29
by shiro_yuki
printf(" 文字列\n");
これがprintfの書き方じゃないんですか?

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 14:37
by softya(ソフト屋)
shiro_yuki さんが書きました:printf(" 文字列\n");
これがprintfの書き方じゃないんですか?
そうですね。
printfDX(リンゴのかご);
とは違いますよね。「リンゴのかご」は文字列の定数になっていません。
あと何処にどのように書くかも重要です。

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 15:06
by shiro_yuki
もしりんごがカゴのなかにはいったら
return 1になり
入ったときに、最初は0であり、
入ったら、そのbulletと連動して、
a=0;
ringocount=a++;

これをいれてあげて、
printfDX関数で
printfDX("ringocount\n");

こんな感じでしょうか・・・・・・。
もし初心者の自分ですが、だめでしたら指摘お願いいたします・・・・・。

Re: わかる人がいたら教えてください!!

Posted: 2013年12月06日(金) 15:14
by softya(ソフト屋)
shiro_yuki さんが書きました:もしりんごがカゴのなかにはいったら
return 1になり
入ったときに、最初は0であり、
入ったら、そのbulletと連動して、
a=0;
ringocount=a++;


この場合、後置インクリメントを代入で使う必要もないですし、後置インクリメントの代入の使い方として文法的には問題が無いですが意図している事からすれば間違っています。
そもそもaと言う変数はいらない気が。
あと、何処に書くコードなのかの説明になっていませんので前後のソースコードを記載して下さい。
※codeタグもご利用下さい。

shiro_yuki さんが書きました: これをいれてあげて、
printfDX関数で
printfDX("ringocount\n");

こんな感じでしょうか・・・・・・。
もし初心者の自分ですが、だめでしたら指摘お願いいたします・・・・・。


printfDX("ringocount\n");だとカウント値の表示ではなくringocountと言う文字列の表示です。
printfの書式を再確認して下さい。

Re: わかる人がいたら教えてください!!

Posted: 2013年12月07日(土) 17:33
by shiro_yuki
もし、リンゴがカゴのなかにはいって
1になったとき
int a=ringocount+1
if(ringo.flag==1)
ringocount++
else
ringocount+=0

そして、
printfdx(%dだけリンゴはいりました!,a)
このような感じに自分で考えてみました!
たぶん指摘されるかと思いますが
よろしくお願いします!

Re: わかる人がいたら教えてください!!

Posted: 2013年12月07日(土) 17:43
by みけCAT
・C言語/C++で全角文字を使用する必要はありません。
・ほかの場所で使用しない場合、変数aは無駄です。printfdxでも素直にringocountを表示すればいいのではないですか?
・ringocount+=0は無駄です。(演算子のオーバーロードをしていない場合)
・C言語/C++では、文の最後はセミコロンを付けましょう。
・C言語/C++では、文字列リテラルはダブルクォーテーションマークで囲む必要があります。

Re: わかる人がいたら教えてください!!

Posted: 2014年1月10日(金) 12:12
by shiro_yuki
少し返信が遅れてしまいました。
yukiです。

試してみたのですが、リンゴの個数をカウントすることができず、
ずっとスコア上では、0、0、0、とずっと0個の状態のままになってしまいます・・・・・・。
もし、わかりましたら教えてください・・・・・。

あと、ソースコードを載せておきます。
まだ、下のものは、未完成の状態で完成していないものです。

コード:

void bullet_calc(){
	int i;
	int Color;

	Color = GetColor( 0,255,0);

	for(i=0;i<BULLET_MAX;i++){
		if(bullet[i].flag==1){
			if(bullet[i].cnt==bullet[i].till){
				PlaySoundMem(sound_se[0],DX_PLAYTYPE_BACK);
				bullet[i].drop_flag=1;
			}
			if(bullet[i].drop_flag==1){
				bullet[i].x += cos(bullet[i].angle) * bullet[i].spd;
				bullet[i].y += sin(bullet[i].angle) * bullet[i].spd;
				if(bullet_kago_exit(i)==1){
					bullet[i].flag=0;
					PlaySoundMem(sound_se[1],DX_PLAYTYPE_BACK);
				}
				if(bullet_feeld_exit(i)==1)
					bullet[i].flag=0;
			}
			bullet[i].cnt++;
		}
	}
	}
	DrawFormatString( 450, 120, Color,"リンゴの個数は %d です\n",a);
}

Re: わかる人がいたら教えてください!!

Posted: 2014年1月10日(金) 12:19
by softya(ソフト屋)
bullet_calc内でaが計算されていないので、このaが何処でどのように処理されているか分からりません。
これだと正しいか正しくないかの判断ができませんよね。
もし処理していなら、値が変わらないの当然と言えます。

例えるなら、誰も触らない箱の中に勝手に物が増えることはオカルトだということです。
※ aと言う変数を箱に例えています。

Re: わかる人がいたら教えてください!!

Posted: 2014年1月10日(金) 12:30
by shiro_yuki
さっきのせたソースコードの中に、
下記の何行かを加えたらいいのでしょうか・・・・・・。

コード:

if(bullet[n].drop_flag==1){
    a = a + 1;
}

こんな感じでしょうか・・・・・・。

Re: わかる人がいたら教えてください!!

Posted: 2014年1月10日(金) 14:03
by softya(ソフト屋)
それは試したほうが早いですね。
私はプログラミングを理解して欲しいので、ヒントしか出しませんがやってみることが一番理解に繋がるんでやってみてください。
試してうまく行かなかったら、うまくいかないソースコードを投稿してくださいね。