先日、ファイルからの値取得の課題について質問をさせていただきましたものです。
おかげさまで、バグ様をはじめ皆様のご助言のもと何とか無事プログラムを組みあげることができました。
ありがとうございました。
さて、またしても皆様のお力添えを受けたい問題にぶつかってしまったのですが、
ご助言の程いただけないでしょうか、、、、。
問
A,B,C,Dの動きをシュミレーションして、毎秒ごとのA,B,C,Dの位置と衝突する秒数を画面に表示しなさい。
ただし衝突した場合、対象の物体は衝突判定の対象外となるようにする。
A,B,C,Dの初期位置関係の図(添付ファイル)
ただし、プログラムは下記の仕様を満たすこと。
・各矩形の初期位置及び大きさ、移動速度は任意の場所にあるtxtファイルに記述されているものとし、
ファイルから読み込んで設定できるものとする。
・物体の数の増減はファイルに記述されているデータ数で設定できる。
(ファイルにデータを追加すれば数が増える)
・物体は上下左右だけではなく、斜めにも移動できる。
環境は前回同様、コンパイラはVisual C++ 2005 Express Editionで、
パソコンのOSはXPです。
前回の課題を終えて、現在は、ファイルからの値の取得の方法自体は理解しているつもりです。
また前回、矩形の位置や大きさは左上の頂点と、幅、高さをファイルから値取得することで全頂点の位置を決定できることにしました。
これは、今回も変えずにいきたいと思います。
速度については本当に任意の値で構わないそうですが、あまりに衝突速度が早すぎて通り抜けた場合の対処は、かなり難しいので今回は考えなくていいそうです。
以上、長々と書きましたがなにとぞご協力の程よろしくお願いします。
続: ファイルからの値取得
-
バグ
Re:続: ファイルからの値取得
図を見る限り、今回はX軸上だけの動きではなく、Y軸の動きもプラスされるみたいですね。
という事は前回にもありましたが、『絶対に衝突しない』という場合が出てきますよね。そういう場合の処理はどうするのでしょうか?無限ループに陥ってしまうのはあまり好ましいとは言えないと思うのですが…。
今回の課題で必要な値は各矩形ごとに、前回の課題に使った物に加えて『衝突したかどうかの判定用の変数』、『X軸の移動量』、『Y軸の移動量』の3つが追加される事になります。これらをまとめて構造体で管理すると分かり易いのではないでしょうか?
①矩形の左上のX座標
②矩形の左上のY座標
③矩形の幅
④矩形の高
⑤1秒辺りのX軸の移動量
⑥1秒辺りのY軸の移動量
⑦衝突したかどうかの判定用変数
構造体のメンバ変数は上記の7つが必要になると思います。
それから、ファイルから読み込むデータ数によって矩形の数が変わるという事は、動的にメモリを確保しなければいけません。
ここまでは理解できますか?
という事は前回にもありましたが、『絶対に衝突しない』という場合が出てきますよね。そういう場合の処理はどうするのでしょうか?無限ループに陥ってしまうのはあまり好ましいとは言えないと思うのですが…。
今回の課題で必要な値は各矩形ごとに、前回の課題に使った物に加えて『衝突したかどうかの判定用の変数』、『X軸の移動量』、『Y軸の移動量』の3つが追加される事になります。これらをまとめて構造体で管理すると分かり易いのではないでしょうか?
①矩形の左上のX座標
②矩形の左上のY座標
③矩形の幅
④矩形の高
⑤1秒辺りのX軸の移動量
⑥1秒辺りのY軸の移動量
⑦衝突したかどうかの判定用変数
構造体のメンバ変数は上記の7つが必要になると思います。
それから、ファイルから読み込むデータ数によって矩形の数が変わるという事は、動的にメモリを確保しなければいけません。
ここまでは理解できますか?
-
バグ
Re:続: ファイルからの値取得
まず、ファイルに中に書き込まれている構造体に格納するためのデータ数を知る事が必要になりますよね。
一番分かり易いと思われる方法は、fscanf関数の戻り値を利用して、ファイルの終端かエラー値が返ってくるまで空読みをさせて、成功した回数だけ構造体用の領域をmalloc関数を使って確保し、もう一度改めてファイルのデータを読み直す…というのが分かり易いのではないかと思います。
いきなりこの課題の中で一番の難関かと思いますが、まずは、ここまでの流れを自身でコーディングして、ここに投稿してみてください。
一気に終わらせようとすると混乱しますので、1ステップずつこなして行きましょう!!
一番分かり易いと思われる方法は、fscanf関数の戻り値を利用して、ファイルの終端かエラー値が返ってくるまで空読みをさせて、成功した回数だけ構造体用の領域をmalloc関数を使って確保し、もう一度改めてファイルのデータを読み直す…というのが分かり易いのではないかと思います。
いきなりこの課題の中で一番の難関かと思いますが、まずは、ここまでの流れを自身でコーディングして、ここに投稿してみてください。
一気に終わらせようとすると混乱しますので、1ステップずつこなして行きましょう!!
-
AISU
Re:続: ファイルからの値取得
ありがとうございます。
私、今学校におりまして、今日はもう自宅に帰らねばなりません。
しかし、自宅ではネットに接続できる環境がございませんので、
明日、今解説していただいたところまでのコーディングを何とかしてみて、
明日またこちらに書き込みたいと思います。
もし、バグ様にお時間がおありでしたら、
明日までにできる限り自宅でコーディングしたいですので、
私のメールアドレス宛てに、今後すべき最後までの手順を送っていただけたらありがたいです;;
メールでしたら携帯からでも拝見できますので、、
よろしくお願いします。
私、今学校におりまして、今日はもう自宅に帰らねばなりません。
しかし、自宅ではネットに接続できる環境がございませんので、
明日、今解説していただいたところまでのコーディングを何とかしてみて、
明日またこちらに書き込みたいと思います。
もし、バグ様にお時間がおありでしたら、
明日までにできる限り自宅でコーディングしたいですので、
私のメールアドレス宛てに、今後すべき最後までの手順を送っていただけたらありがたいです;;
メールでしたら携帯からでも拝見できますので、、
よろしくお願いします。
-
バグ
Re:続: ファイルからの値取得
明日は時間が取れないので、申し訳ないですがサンプルを載せておきます。
細かくコメントを入れておきましたので、参考にしてください。
急いで作ったので、テストもロクにしてませんし、どこか間違っているかもしれませんので、あくまでもコーディングの流れを見る参考程度にとどめておいてくださいm(__)m
細かくコメントを入れておきましたので、参考にしてください。
急いで作ったので、テストもロクにしてませんし、どこか間違っているかもしれませんので、あくまでもコーディングの流れを見る参考程度にとどめておいてくださいm(__)m