bounddot2 動画 と、苦労した点
先日bounddotの実行動画の最終形をアップロードしました。
今回は、bounddot2と称して止まっている円が3つのバージョンの動画をアップします。
ここから下は備忘録となります。
昼頃いったん完成しましたが、
映像キャプチャー用に調整していたら、
バグが出てしまい、
なかなかとれない状況になりました。
これも昔の投稿となりますが、
VS Code を使うと書きました。
しかし敷居が高いためうまくゆかず。
参考図書の電子書籍も内容が分からないのです。
ですので、昔ながらのPython 3のprint関数で出力し、バグをとりました。
もう慣れっこです。
問題点はこの1行です。
× for i in range(self.maxi,0,-1):
〇 for i in range(self.maxi-1,-1,-1):
正解の方で、
2か所変更していますが、
self.maxi-1
の方はエラーが出たので、すぐにバグはとれました。
しかし、その次の0を-1にするのに
かなり時間がかかってしまったのです。
for文を完全に理解していなかったのが原因です。
コマンドプロンプトにエラーが出ないので、キャプチャー用に付け足した部分
つまり、違う部分が悪いと思い込んでいました。
実際の処理は、
if not (True in self.disp_questionmark):
としていて、
この行自体は間違っていませんでした。
(その証拠に、ひとつ前のバージョンでは動作しています。)
問題点は、
self.disp_questionmark[0]
がTrueのまま、無限ループしていたところでした。(多分)
ですので、上に書いた、
-1を下限にすることで、
i が、0の時も処理するようにできます。
この手のエラーは昔も出ていたと思いますがよく覚えていません。
とにかく、0まで添え字を演算したいときは、
-(0+1)
で、イコール -1となります。
詳しくは、Python 3の書籍の、
for文の項目
などを見てください。
少し手を加えようと思ったのですが、
結構な時間かかってしまいました。
それでは、やっと動画をアップします。
bounddot2_No3.py
追記
今日も修正しました。
内部的にはかなり変更しましたが、
見た目があまり変わっていないので動画のアップロードはしません。
主な変更点
今までは
if 円1衝突判定if 円2衝突判定if 円3衝突判定
としていました。
これを、
if 円1衝突判定elif 円2衝突判定elif 円3衝突判定
に変更しました。
理由は、
今回のデモンストレーションでは
円に、「一度に重複して衝突する」シチュエーションがないからです。
参考文献
円の衝突判定部分ですが、
自力ではここまで、
できません。
参考図書を書いておきます。
理系の高校生以上が対象かもしれません。
よく調べてから買ってください。
自分は電子書籍のバージョンを持っています。
Python ゲームプログラミング
知っておきたい数学と物理の基本
田中賢一郎 著
インプレスR&D [ NextPublishing ]
コメント
コメントを投稿