ページ 1 / 1
参考書で・・・
Posted: 2012年2月13日(月) 20:31
by stream
私は先々週ぐらいに「シューティングゲームアルゴリズムマニアックス」という本を購入したんですがどう使っていこうか迷っています。
私は今、龍神録プログラミングの館と新・ゲームプログラミングの館で勉強させていただいています。
①まず、この本は本当にC言語かどうかちょっとあやふやです。
②その本のプログラムの一部なんですが、なぜ関数の引数に変数を宣言しているのか分かりません。利点などを教えていただきたいです。
③できれば下のプログラムを別の書き方で書くとどんな風に書けるのか知りたいです。
↓狙い撃ち弾のプログラム
コード:
//狙い撃ち弾の初期化
#include <math.h>
void InitAimingBullet(
float mx, float my, // 自機の座標
float ex, float ey, // 敵の座標
float speed, // 弾の速さ
float& x, float& y, // 弾の座標
float& vx, float& vy // 弾の速度
) {
// 弾の座標を設定する
x=ex; y=ey;
// 目標までの距離dを求める
float d=sqrt((mx-ex)*(mx-ex)+(my-ey)*(my-ey));
// 速さが一定値speedになるように速度(vx,vy)を求める:
// 目標までの距離dが0のときには下方向に発射する。
if (d) {
vx=(mx-ex)/d*speed;
vy=(my-ey)/d*speed;
} else {
vx=0;
vy=speed;
}
}
//狙い撃ち弾の移動
void MoveAimingBullet(
float& x, float& y, // 弾の座標
float vx, float vy // 弾の速度
) {
// 弾の座標(x,y)に速度(vx,vy)を加える
x+=vx;
y+=vy;
}
本当にしょうもない質問ですみません。
返信お願いします!!
Re: 参考書で・・・
Posted: 2012年2月13日(月) 20:39
by beatle
stream さんが書きました:①まず、この本は本当にC言語かどうかちょっとあやふやです。
恐らくC++という言語です.C++はC言語を拡張した言語です.
stream さんが書きました:②その本のプログラムの一部なんですが、なぜ関数の引数に変数を宣言しているのか分かりません。利点などを教えていただきたいです。
「関数の引数に変数を宣言している」というのが具体的に何を指しているのか説明してください.
もし
コード:
float mx, float my, // 自機の座標
float ex, float ey, // 敵の座標
float speed, // 弾の速さ
float& x, float& y, // 弾の座標
float& vx, float& vy // 弾の速度
の部分を言っているのだとしたら,あなたの勘違いでしょう.これは単なる仮引数リストです.
stream さんが書きました:③できれば下のプログラムを別の書き方で書くとどんな風に書けるのか知りたいです。
無数の書き方があると思いますが,具体的にどのように変えて欲しいのでしょうか.
例えば関数の引数を1つにするにはどうするか,とか.
Re: 参考書で・・・
Posted: 2012年2月13日(月) 21:20
by softya(ソフト屋)
>①まず、この本は本当にC言語かどうかちょっとあやふやです。
C++の参照と言う機能が使われてます。
&マークが付いている引数ですね。
[追記]この程度であればC言語の機能からかけ離れていないので便利な機能と思って使うのもひとつの方法です。
「シューティングゲームアルゴリズムマニアックス」でクラスとかがコードに出てくるのであれば、C++を勉強する必要が出てきます。
>②その本のプログラムの一部なんですが、なぜ関数の引数に変数を宣言しているのか分かりません。利点などを教えていただきたいです。
コード:
void InitAimingBullet(
float mx, float my, // 自機の座標
float ex, float ey, // 敵の座標
float speed, // 弾の速さ
float& x, float& y, // 弾の座標
float& vx, float& vy // 弾の速度
) {
&が付いていることを除けば普通の引数の書き方です。
これじゃない書き方のC言語の入門書やサイトがあるとすれば相当古いです。
>③できれば下のプログラムを別の書き方で書くとどんな風に書けるのか知りたいです。
C言語の文法内で行うならポインタに置き換える必要があります。
ポインタは理解されていますか?
Re: 参考書で・・・
Posted: 2012年2月13日(月) 22:34
by たいちう
その本は私も持っていて、非常に良い本だと思いますが、
言語の知識が不十分だとつらいでしょうね。
様々な弾幕や敵の動きについてのアルゴリズム集なので、
初心者向けではありません。マニアックスという程では無いと思いますが。
サンプルコードがついているので、色々いじって試し、
理解できる範囲を広げていってはどうでしょうか。
最初から全てを理解することは不可能なので、
コメントや本文を参考に、きっとここはこれをやっているんだろう、
こう変えたらどうなるかな?と予想して実験です。
それと並行して、このHPの様な初心者向けの教材を消化していきましょう。
言語の理解も必須です。このHPの内容が理解できるようになったら、
件の本も違ったものに見えてくると思います。
Re: 参考書で・・・
Posted: 2012年2月16日(木) 21:00
by stream
beatleさん<<書き方としてはvoid InitAimingBullet(){ }で引数はなしのシンプルな形で別の書き方が知りたいです。あと、何を指しているかは
beatleさんのおっしゃる通りで仮引数です。
softya(ソフト屋)さん<<一通りは学んだつもりですが知ったかぶりになっているかもしれません。おそらく理解できていないと思います。
たいちうさん<< そうですか。私も早くこのHPの内容をマスターして思うようなプログラムが組めるように努力します。
Re: 参考書で・・・
Posted: 2012年2月16日(木) 21:33
by softya(ソフト屋)
stream さんが書きました:beatleさん<<書き方としてはvoid InitAimingBullet(){ }で引数はなしのシンプルな形で別の書き方が知りたいです。あと、何を指しているかは
beatleさんのおっしゃる通りで仮引数です。
InitAimingBulletの引数をなしにすることは出来ません。
なぜなら複数個の弾を扱うことになると思いますが、どの弾の情報を初期化するか何らかの形でInitAimingBulletに伝えないと行けないからです。
あとInitAimingBulletから引数ではなく直接見えるグローバルな変数として
コード:
float mx, float my, // 自機の座標
float ex, float ey, // 敵の座標
float speed, // 弾の速さ
float x, float y, // 弾の座標
float vx, float vy // 弾の速度
を宣言することは、一番やってはいけない組み方です。
Re: 参考書で・・・
Posted: 2012年2月16日(木) 22:11
by stream
そうですか・・・・
では、なんでもいいので初心者でもわかりやすいInitAimingBulletの組み方が知りたいです。
Re: 参考書で・・・
Posted: 2012年2月16日(木) 22:18
by softya(ソフト屋)
stream さんが書きました:そうですか・・・・
では、なんでもいいので初心者でもわかりやすいInitAimingBulletの組み方が知りたいです。
一番簡単なのは、ご自身が書かれた本に載っている内容が一番です。
これで難しいと感じるなら、本より前にゲームプログラミングの館などの初級の勉強をされた方が良いと思いますよ。
そもそも「シューティングゲームアルゴリズムマニアックス」自体が初心者向けとは言いがたいので。
Re: 参考書で・・・
Posted: 2012年2月17日(金) 00:06
by 天空橋光
ちょっと議題とずれるのですが、シューティングアルゴリズムマニアックスの内容は許諾なしに転載することは禁止だと思うのですが大丈夫ですか?
Re: 参考書で・・・
Posted: 2012年2月17日(金) 00:10
by softya(ソフト屋)
天空橋光 さんが書きました:ちょっと議題とずれるのですが、シューティングアルゴリズムマニアックスの内容は許諾なしに転載することは禁止だと思うのですが大丈夫ですか?
このぐらいなら引用の範囲だと思います。
ただ、全体はマズイでしょうね。
Re: 参考書で・・・
Posted: 2012年2月17日(金) 00:26
by 天空橋光
おぉ、そうですか、どうも議題とずれた内容でお騒がせして申し訳ありませんでした。
Re: 参考書で・・・
Posted: 2012年2月17日(金) 14:20
by stream
分かりました。新・ゲームプログラミングの館の内容は自信を持ってマスターしたと思えるんですが、ゲームプログラミングの館はまだ不十分だと私でも実感しているのでまずはそこをマスターしてから本を参考にさせていただこうと思います。ありがとうございました。
Re: 参考書で・・・
Posted: 2012年2月17日(金) 14:27
by softya(ソフト屋)
stream さんが書きました:分かりました。新・ゲームプログラミングの館の内容は自信を持ってマスターしたと思えるんですが、ゲームプログラミングの館はまだ不十分だと私でも実感しているのでまずはそこをマスターしてから本を参考にさせていただこうと思います。ありがとうございました。
マスターというのは同じものが見ずに書けるレベルだと思います。
例えば「簡単な選択画面を作る」を作るとお題が与えられて「新・ゲームプログラミングの館」を見ずに「
DXライブラリ 関数リファレンスページ」だけを見て作ることは今すぐ出来ますか?
あと、「簡単な選択画面を作る」を関数に分割するとどうやったら良いのだろうとか。色々勉強する題材はあると思います。
[補足]
本当はじゃんけんゲームとか三目並べとかトランプとか見本を見ずに書くことから初めて、関数分割など「ゲームプログラミングの館」を参考に見る程度で作っていったほうが良い勉強になると思いますよ。文法でも組み方でもアルゴリズムの質問でも調べてわからないことは気軽に質問してください。C言語の入門書はお持ちなんですよね?
Re: 参考書で・・・
Posted: 2012年2月17日(金) 14:42
by stream
はい・・・そう言われると少し自信をなくします。C言語の入門書は持っています。また、分からないことがあったら質問させて頂きます。ありがとうございました。
Re: 参考書で・・・
Posted: 2012年2月17日(金) 18:58
by ISLe
softya(ソフト屋) さんが書きました:このぐらいなら引用の範囲だと思います。
ただ、全体はマズイでしょうね。
あくまで個人的な意見ですが。
引用は、引用する側も著作物として認められるもの(思想又は感情を創作的に表現したもの)でないと成立しないので、掲示板の質問で質問の対象を転載することはいかなる場合でも引用とはみなされない気がします。
ただ、この掲示板の利用規約に第三者の権利を侵害する行為について明確な規定が無いので、権利者による申し立てが無い限りはグレーということになるでしょうかね。
著作権侵害にこれくらいならOKというのはなく、権利者の申し立てがあれば一発でアウトですから、気を付けるに越したことはないと思います。