プログラミングで2Dゲームのテスト書きたいんだけど

1 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:36:41.180 ID:Vv7+3A/W0
例えばPONGのテストを書く場合ってさ
バーがボールを弾くことを確かめるにはどんなコードを書けばいいのさ
2 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:37:27.320 ID:PrI55Qa50
何を言ってるんだろう
3 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:37:53.886 ID:7M39TbMw0
なるべく純関数で作ってスナップショットテストを作ると楽
4 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:38:16.970 ID:Q/6pta+fM
ぜんぶおしえて
5 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:44:47.236 ID:Vv7+3A/W0
パッと思いついた方法だと
バーとボールの状態を予め決めておいて、さらに事前にその状態からボールがバーに弾かれた後の状態も求めておいて
実際にプログラムを動かしてみてその結果と事前に求めた結果が同じかどうか比較する
同じならテストは通る、違うならエラー
でもこんなのバーとボールの状態を全通りテストする訳にはいかないし気持ち悪いよな
6 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:48:05.629 ID:svtXcFsT0
簡単だよ
まずはテスト用の変数を作る
次にバーに接触した時にその変数に必要なデータを代入させる
例えば、接触しましたよ。角度はどれくらいでした。スピードはどれくらいでした。
こんな感じ
12 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:00:27.663 ID:M27uN6yR0
>>6-7じゃないの?
テストケースが無数にあるなら全部じゃなくてそれなりの数用意してこんだけやれば充分ですって言っちゃえばいいじゃん
7 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:50:00.929 ID:svtXcFsT0
バーと弾との当たり判定は作っていると思う
そこに当たった時にテスト用の変数に代入したらいいのさ
ちなみにテスト用の変数は構造体またはクラスで作るといいよ
8 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:53:50.035 ID:Vv7+3A/W0
角度とスピードが分かってもそれが意図した通りに弾いてるのかが分からないといけないんだよね
やっぱり目視でそれっぽく動いているということを確認するしかないんだろうか
9 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:54:08.127 ID:Vv7+3A/W0
ああああ分からないわよおおおおおお
ゲームはテスト書くのが難しいのかなあああああああ
だからテスターたくさん雇って物量戦術で通すのかなああああああああああ
10 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 08:57:20.015 ID:svtXcFsT0
それも簡単だよ
テストをしたらいい
意図的に、ボールの出現場所、ボールの速さ、角度を設定して
チートみたいな感じにバーにわざとあてるテストをする
まあこれにも限界があって、ゲームプログラマの考える範囲でしかテストが出来ない
そして必ずといっていいくらいバグは存在する
13 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:01:45.610 ID:7ARmx0Yg0
2Dのブロック崩しなら
全通りチェックしてもいいんじゃね
14 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:02:26.220 ID:FiFn1BDk0
なんで人の話聞かないのに質問するの?
15 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:03:15.980 ID:Vv7+3A/W0
そういうもんなの?
16 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:13:27.723 ID:YzbZ/BT90
>>15
そういうものなの。全通り試さなくて良い。
その代わり、何で試すかは考える必要があるし、つまり経験と勘とセンスが必要になる。
端、端の隣、反射する角度が変わる直前、変わる直後、ど真ん中、とか何とか。
17 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:20:54.898 ID:Vv7+3A/W0
おちんぽだな
18 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:32:36.587 ID:PsSBKXla0
ここらへんバグりやすそうだなってところに目星をつけて試すわけか
19 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:34:25.429 ID:x9OvGPd20
どういうゲームでどういうバグを心配してるのか書け
20 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:41:30.825 ID:3ZIRue0SM
昔クソみたいな自作テストフレームワーク作って既存フレームワーク汚い言葉でコケにしてた奴いたの思い出した
22 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:49:51.667 ID:svtXcFsT0
まあ現実にはテスターっていうより
企画とかにやらせて
バグ見つけてくれーって感じだけど
23 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:52:14.757 ID:svtXcFsT0
しかもこれがやっかいで
複雑になればなるだけわけわからんバグが出て来る
このバグの解消がゲームプログラマーやってて一番頭痛くなる
動くには動くけど、何故かバグが出るって状態になる
24 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:56:52.316 ID:YzbZ/BT90
こういう要領を得ない文を連投してもっと要領を得ない文章にする香具師は、
矛盾とか不整合とかを含んだプログラムを書くんだろうな、と思ってしまう。
複雑になればなるほどプログラミングには文系能力が求められる。
26 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:58:12.020 ID:svtXcFsT0
>>24
どうなんだろうな
どちらかというとゲームプログラミングは理系に感じる
何故それが動くのか?何故その条件式なのか?みたいなのを完全理解しないと
何でここでバグが出るのか?ってのが理解出来ない
28 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:59:02.083 ID:Wjzpl5cB0
>>26
ゲームだろうが業務だろうが論理の積み重ね
論理は理系でも文系でもない
文理に対する認識が誤ってる
27 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:58:17.978 ID:Wjzpl5cB0
>>24
数式だってシンプルなほど優れてる
分離関係なく物事の捉え方の問題だと思う
25 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:57:39.622 ID:Wjzpl5cB0
まずは何事もシンプルにしろ
シンプルの積み重ねはバグりにくいしテストしやすい
29 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 09:59:37.810 ID:ZCM2ZQmc0
テストコードでできる範囲はホワイトボックス前提で関数単位でテストするユニットテストだろ
それ以上のテスト自動化だと普通のテストコードではなく何かのフレームワークなり使わんと無理よ
30 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2021/02/18(木) 10:00:40.697 ID:YzbZ/BT90
>シンプルの積み重ねはバグりにくい
ダウト

単体がシンプルであることと、合成が複雑であることとは相反しない。
逆にシンプルにし過ぎると、複雑に組み合わせないと使い物にならなくなる。

コメント

タイトルとURLをコピーしました