Я программирую свою первую маленькую «Компьютерную игру» как школьный проект, и это Beat 'em up, Fighting Game, где 2 парня избивают друг друга, довольно простая игра.Мне нужно реализовать метод, который заставляет врага атаковать игрока через случайные промежутки времени, когда программа работает, и вы можете вводить атаки и т. Д.
Я создал AI-метод и, честно говоря, яраньше у меня были некоторые проблемы, но это работало во время тестирования 9/10 раз.Я добавил таймер, который все время перезапускается с другим случайным числом, чтобы запускать таймерную задачу через произвольные интервалы, чтобы сделать противника более непредсказуемым в моей игре.Я также добавил несколько звуковых эффектов и проверку, потеряли ли вы все свои хитпоинты и проиграли игру.Урон наносится Healthbar, который является [] Char Array.Это вычисляется в моем методе "DamageMachen ()".
Теперь моя игра закончена, и я хочу внедрить этот метод в свой controllerClass, но как только метод получает старт, моя программа падает: (
Кто-нибудь знает какое-либо решение для исправления этой проблемы или, может быть, другой метод, который я мог бы использовать, с теми же функциями, что и у меня?
В моем тестовом классе этот AI-метод работает ... не хорошо, но это работает. Иногда ИИ останавливается, я думаю из-за случайных чисел, но он работал 9/10 раз. Я просто не мог решить проблему. Я пытался изменить диапазон случайных чисел, а иногда это было еще хуже, поэтому я выбрал цифры от 1 до 3 секунд, которые мне больше всего понравились.
Когда я внедрил этот метод в мою игру, игра либо вылетает, либо я не могу ничего больше вводить, потому что яПолагайте, что AI-метод сначала должен закончиться, но как я его запрограммировал, он никогда не закончится, пока игра не закончится.
Если у вас есть вопросы по поводу моего кода, прошуSE, дайте мне знать.Я впервые задаю вопрос здесь, поэтому я надеюсь, что того, что я вам показал, достаточно, чтобы увидеть мою проблему.
// KI-Methode THIS IS MY MAIN PROBLEM. I'LL ALSO ADD THE OTHER METHODS DOWN
//THERE JUST TO HELP YOU VISUALIZE MY WHOLE CODE
public void KI() {
long interval = 0;
gewinnErmitteln();
boolean verloren = noob();
int start = 0;
int zaehler = 0;
while (gewonnen == false && verloren == false) {
try {
Random r = new Random();
double randomValue = 1 + (3 - 1) * r.nextDouble();
ki = new Timer();
interval = (long) (randomValue * 1000);
TimerTask kitask = new TimerTask() {
public void run() {
damageMachen(damageNormal);
// Visualisieren TEST
//visualisieren();
done = true;
ki.cancel();
}
};
if (start == zaehler) {
ki.schedule(kitask, interval);
zaehler++;
} else if (done == true) {
done = false;
ki.schedule(kitask, interval);
}
// THIS METHOD JUST CHECKS, IF YOU EITHER HAVE WON OR LOST BY CHECKING; IF THE //[]CHAR ARRAY IS FULL (All Health lost)
gewinnErmitteln();
verloren = noob();
} catch (IllegalStateException e) {
System.out.println("EXCEPTION: " + e);
}
continue;
}
if (verloren == true) {
ki.cancel();
try {
AudioInputStream sad = AudioSystem.getAudioInputStream(
new File("MySoundHere"));
Clip clip = AudioSystem.getClip();
clip.open(sad);
clip.start();
} catch (Exception ex) {
System.out.println("Error with playing sound.");
ex.printStackTrace();
}
}
}
// HERE IS THE METHOD, WHICH I USE TO CALCULATE THE DAMAGE OF ENEMY ATTACKS
// DAMAGE GETS DONE TO A HEALTHBAR, WHICH IS A []CHAR-ARRAY
// Damage-Methoden
public void damageMachen(int damage) {
int damagedone = 0;
int thisdamage = damage;
int focusdamage = 2;
int focusdamagedone = 0;
if (blocken == false) {
// AUDIO
for (int i = 0; i < lebensbalkenValue; i++) {
if (thisdamage != damagedone && lebensbalken[i] == ' ') {
lebensbalken[i] = 'I';
damagedone++;
try {
AudioInputStream punch = AudioSystem.getAudioInputStream(new File(
"MyOtherAudio"));
Clip clip = AudioSystem.getClip();
clip.open(punch);
clip.start();
} catch (Exception ex) {
System.out.println("Error with playing sound.");
ex.printStackTrace();
}
}
}
for (int i = fokusValue - 1; i >= 0; i--) {
if (focusdamage != focusdamagedone && fokusbalken[i] == 'I') {
fokusbalken[i] = ' ';
focusdamagedone++;
try {
AudioInputStream punch = AudioSystem.getAudioInputStream(new File(
"YetAnotherAudioClip"));
Clip clip = AudioSystem.getClip();
clip.open(punch);
clip.start();
} catch (Exception ex) {
System.out.println("Error with playing sound.");
ex.printStackTrace();
}
}
}
} else {
int focusdone = 0;
int thisfocus = 1;
for (int i = 0; i < fokusValue; i++) {
if (thisfocus != focusdone && fokusbalken[i] == ' ') {
fokusbalken[i] = 'I';
focusdone++;
}
}
}
}
// MY CONSTRUCTOR
public Model() {
lebensbalken = new char[lebensbalkenValue];
for (int i = 0; i < lebensbalkenValue; i++) {
lebensbalken[i] = ' ';
}
fokusbalken = new char[fokusValue];
for (int i = 0; i < fokusValue; i++) {
fokusbalken[i] = ' ';
}
}
// MY CONTROLLER CLASS, I INITIALIZE THE AI METHOD RIGHT AT THE BEGINNING
@Override
public void initialize(URL location, ResourceBundle resources) {
javaFighter = new Model();
//AI_METHOD STARTING
javaFighter.KI();
// other stuff to handle buttons, etc. This all works fine, so I don't think I // have to show it to you
}
Я ожидал, что AI-метод будет работать, пока игрок или враг не выиграют игруи пока AI-метод работает и атакует игрока, игрок все еще может вводить свои атаки и т. д.
Программа вылетала, как только она запускала AI-метод.Временами программа не вылетала, цикл таймера не позволял мне вводить что-либо еще, поэтому мне пришлось закрыть программу.