Je crée un jeu où les ennemis apparaissent au hasard sur une carte puis se dirigent vers le joueur à chaque image à une vitesse aléatoire. La carte ne comporte aucun obstacle, les ennemis doivent donc toujours se déplacer en ligne droite. J'ai écrit la fonction de mouvement plusieurs fois mais peu importe ce que les ennemis frappent toujours les angles 0, 45, 90, 135, 180, 225, 270, 315 mais jamais une ligne droite. Voici un exemple du code:
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;
Ceci est ma première tentative de programmation de jeux. Je suppose que cela devrait utiliser un algorithme comme Bresenham's Line ( http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm ) mais mes tentatives d'implémentation ont le même problème. Comment faire bouger les ennemis en ligne droite?