Я пытаюсь написать шахматные часы на Arduino с ЖК-клавиатурой. Я почти совершенно не знаком с C++, и я думаю, что у меня возникают проблемы с обработкой объектов класса.Почему переменные в моем объекте сбрасываются по умолчанию?
В моем коде у меня есть меню, которое должно позволить игрокам изменять время, доступное им, нажимая правую и левую кнопки на клавиатуре. Сначала это работает, но когда я переключаюсь на другого игрока и снова с помощью кнопок вверх и вниз, переменная minutes
сбрасывается до значения по умолчанию 5 минут.
Что мне не хватает о том, как обрабатываются мои объекты Player
?
boolean menuActive = true;
class Player {
// Represents a player.
public:
int minutes; // number of minutes allowed
void IncrementMinutes();
void DecrementMinutes();
};
void Player::IncrementMinutes() {
this->minutes += 1;
}
void Player::DecrementMinutes() {
if (this->minutes > 1) {
this->minutes -= 1;
}
}
Player p1 = {5, false, 1, "P1 mins: ", 0};
Player p2 = {5, false, 2, "P2 mins: ", 0};
Player menuPlayer = p1;
void setup()
{
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("ChessClock");
}
// Main loop
void loop()
{
lcd_key = read_LCD_buttons();
if (menuActive) {
switch (lcd_key)
{
case btnRIGHT:
{
// increase minutes
menuPlayer.IncrementMinutes();
delay(250);
break;
}
case btnLEFT:
{
// decrease minutes
menuPlayer.DecrementMinutes();
delay(250);
break;
}
case btnUP:
{
// select player 1
menuPlayer = p1;
break;
}
case btnDOWN:
{
// select player 2
menuPlayer = p2;
break;
}
case btnNONE:
{
// display the current value for minutes
lcd.print(menuPlayer.minutes);
break;
}
}
} else {
// Main timer code
}
}
Ах, я думал, что этот вопрос в этой строке. Благодарю. Еще один вопрос - как переключить «menuPlayer», если это указатель? Мои кнопки 'btnUP' и' btnDOWN' дают мне следующее: 'error: невозможно преобразовать 'Player' в 'Player *' при назначении menuPlayer = p1;' –
Nevermind, я понял это. Мне нужно было изменить 'menuPlayer = p1;' на 'menuPlayer = &p1;' в функции 'btnUP' и то же самое для' p2' и 'btnDOWN'. –