所以我想在C#.NET中做一個Tron LightBike遊戲,但是當兩個玩家同時碰撞(或碰撞時)時,我遇到了一個問題。在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的順序時(藍色添加第二),然後紅色勝出。我相信這與我檢查碰撞的方式有關。我認爲,特別是它在drawBikes我foreach循環做...
這裏是drawBikes方法:
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);
}
爲什麼正當紅的球員得到去除,而不是藍色的播放器以及(自他們都應該在本質上同時擊中對方)?我應該創建更多的線程?我覺得這是不必要的...
這裏是我的isValidLocation()代碼:
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
2012-04-07 09:16:33
謝謝!無論如何,我正在尋找這個功能。 – 2012-04-09 17:26:22