Düşmanların bir harita üzerinde rastgele ortaya çıktığı ve her karede rastgele bir hızla oyuncuya doğru hareket ettiği bir oyun yaratıyorum. Haritanın hiçbir engeli yoktur, bu nedenle düşmanlar her zaman düz bir çizgide hareket etmelidir. Hareket fonksiyonunu birkaç kez yazdım, ancak düşmanların her zaman 0, 45, 90, 135, 180, 225, 270, 315 açılarına çarptığı fark etmeksizin ama asla düz bir çizgi yok. Kodun bir örneği:
base_speed = random();
diff_x = abs(enemy_y_pos - player_x_pos);
diff_y = abs(enemy_x_pos - player_y_pos);
if (diff_x > diff_y) {
y_speed = base_speed;
} else if (diff_y > diff_x) {
x_speed = base_speed;
}
if (enemy_x_pos < player_x_pos) {
velocity.x = x_speed;
} else if (enemy_x_pos > player_x_pos) {
velocity.x = -x_speed;
} else {
velocity.x = 0;
}
if (enemy_y_pos < player_y_pos) {
velocity.y = y_speed;
} else if (enemy_y_pos > player_y_pos) {
velocity.y = -y_speed;
} else {
velocity.y = 0;
}
enemy_x_pos = enemy_x_pos + velocity.x;
enemy_y_pos = enemy_y_pos + velocity.y;
Bu benim oyun programlamaya yönelik ilk denemem. Bresenham Hattı gibi algoritma kullanması gerektiğini tahmin ediyorum ( http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm ) ama uygulama girişimlerimde aynı sorun var. Düşmanları düz bir çizgide nasıl hareket ettirebilirim?