C#.NETでTron LightBikeゲームを作ろうとしていますが、同時に2人のプレーヤーが衝突したとき(または衝突時に頭部)に問題が発生しています。ここでTronゲームでの衝突タイミングの検出
は
bikes = new ArrayList();
bikes.Add(new LightBike(new Point(500, 10), Color.Blue, "left", new DirectionKeys(Keys.Left, Keys.Down, Keys.Up, Keys.Right))); //blue player facing right
bikes.Add(new LightBike(new Point(10, 10), Color.Red, "right", new DirectionKeys(Keys.A, Keys.S, Keys.W, Keys.D))); //red player facing left
grid = new int[this.Size.Width, this.Size.Height]; //create the grid map
drawThread = new Thread(drawBikes);
最初のプレイヤーは常に追加衝突のヘッドがあるときに勝利のように思え...私は選手たちを初期化する方法です。バイクがArrayListに追加される順序を変更すると(青が2番目に追加されます)、赤が優先されます。私はそれが私が衝突をチェックしている方法と関係があると信じています。以来、(ちょうど赤プレイヤーが同様に青色のプレーヤーを削除していない取得しないのはなぜ
while (true)
{
ArrayList deleteBikes = new ArrayList();
foreach (LightBike b in bikes)
{
if (isValidLocation(b.getNextLocation()))
{
canvas.DrawLine(new Pen(b.color, BIKE_SIZE), b.location, b.getNextLocation());
b.location = b.getNextLocation();
grid[b.location.X, b.location.Y] = bikes.IndexOf(b)+1;
}
else
{
deleteBikes.Add(b);
}
:私はここに
がdrawBikes方法です...具体的にはdrawBikesの私のforeachループに関係していると思います彼らは両方とも本質的にお互いに同時に打つべきです)?スレッドをさらに作成する必要がありますか?私はあなたの問題はあなたが各ループの中に衝突チェックによって直接続くgetNextLocation()
を呼び出していることであると考えてい
public Boolean isValidLocation(Point x)
{
if (x.X < this.Size.Width && x.X > 0)
if (x.Y < this.Size.Height && x.Y > 0)
if (grid[x.X, x.Y] == 0)
return true;
return false;
}
可能であれば、ArrayListを使用しないでください。代わりに汎用リスト 'List'を使用してください。 –
svick
ありがとう!とにかくその機能を探していました。 –