Я предполагаю, что ваша функция diff()
рисует меню сложности. Я также предполагаю, что у вас есть функция draw()
, которая рисует вещи в зависимости от текущего состояния вашей игры (меню, игра, конечное меню и т. Д.).
Проблема в том, что вы рисуетеМеню сложности один раз, когда мышь нажимается на кнопку сложности, а затем она немедленно перезаписывается на draw()
.
В программах, которые рисуют непрерывно (например, с draw()
), всякий раз, когда вы хотите что-то показатьдля более чем одного кадра вам нужно нарисовать его каждый кадр (т. е. в draw()
).
Решение состоит в том, чтобы добавить состояние «меню сложности». Ваша draw()
функция будет тогда работать примерно так:
void draw() {
if (menu && !diff && !end) {
drawMenu();
} else if (!menu && diff && !end) {
diff();
} else if (!menu && !diff && end) {
//Why do you draw the game when end is TRUE?
drawGame();
} else if (!menu && !diff && !end) {
//Why do you draw the end menu when end is FALSE?
drawEndMenu();
}
}
Вам, конечно, нужно будет также изменить функцию mousePressed()
.
Вы также сказаличто вы чувствуете, что ваш код грязный. Это тип кода запаха ;Когда что-то кажется «неправильным» во время программирования, это часто означает, что есть лучший способ сделать это. Хорошо, что вы это заметили.
Во-первых, имена ваших функций немного не описательны: вместо diff()
я рекомендую что-то вроде drawDiffMenu()
. Основное правило: имена функций почти всегда должны быть глаголами.
Во-вторых, вы не должны обрабатывать состояние игры с кучей логических значений;Поскольку вы можете иметь только одно состояние за раз, у вас должна быть только одна переменная. (Если вам когда-либо понадобится состояние внутри состояния, создайте другую переменную.) Лучший способ сделать это с помощью перечислений!
Пример:
enum GameState {
MENU, GAME, DIFF_MENU, END
}
GameState gameState = GameState.MENU;
//...
void draw() {
// Google "java switch statement"
if (gameState == GameState.MENU) {
drawMenu();
} else if (gameState == GamesState.DIFF_MENU) {
drawDiffMenu();
} else if...
// Etc...
}
Придирка: колл b.bounce()
после restart()
немного странный, так как в теории этот отскок должен быть частью вашей игры, начиная с
Удачного кодирования!