Делаю тетрис в Java и хотел бы иметь игру на левой и озвучивания, кнопки и nextPiece справа, как так:передачи данных между JPanel,
You» ll заметим, что оценка на игровой панели обновляется, но оценка на панели оценки (справа) - нет.
На панели игры, у меня есть глобальные переменные для очков и уровня: private int level, totalScore;
которые инициализируются в 0.
и это в моем paint component():
g.setColor(Color.RED);
g.drawString("Level: " + level, this.getWidth()/2+110, this.getHeight()/2-200);
g.drawString("Score: " + totalScore, this.getWidth()/2+110, this.getHeight()/2-170);
Тогда у меня есть этот код в панели Game который вычисляет уровень и счет:
public void changeLevel() {
int max = (level+1)*100;
if (totalScore >= max) {
System.out.println(max + "reached... next level");
level++;
totalScore = 0;
timer();
}
}
public int tallyScore(int totalLines) {
int score = 0;
switch (totalLines) {
case 1: score = 40 * (level + 1);
break;
case 2: score = 100 * (level + 1);
break;
case 3: score = 300 * (level + 1);
break;
case 4: score = 1200 * (level + 1);
break;
default: break;
}
return score;
}
//loop through all rows starting at bottom (12 rows)
public void checkBottomFull() {
int lines = 0;
for(int row = totalRows-1; row > 0; row--) {
while (isFull(row)) {
lines++;
clearRow(row);
}
}
totalScore += tallyScore(lines);
//check if level needs to be changed based on current score...
changeLevel();
//reset lines after score has been incremented
lines=0;
}
и так как я хочу панель Score, чтобы отобразить счет, у меня есть эти два метамфетамин в.п.с. в игровой панели, которые возвращают глобальные переменные:
public int getScore() {
return totalScore;
}
public int getLevel() {
return level;
}
В моем Score панели paintComponent()
У меня есть board.getLevel()
и board.getScore()
(board
класса игровой панель), так что я могу кормить оценки игровой панели на панель Score.
g.setColor(Color.BLACK);
g.drawString("Level: " + board.getLevel(), this.getWidth()/2, this.getHeight()/2-130);
g.drawString("Score: " + board.getScore(), this.getWidth()/2, this.getHeight()/2-100);
Однако, как вы можете видеть на картинке, эти баллы не обновляются.
Любые мысли?
Спасибо!
похоже, что вы делаете свою жизнь труднее, чем должно быть.вместо того, чтобы возиться с глобальными переменными, вы можете использовать интерфейс-слушатель. – desperateCoder
Для лучшей помощи раньше, отправьте .. О, зачем беспокоиться? В прошлый раз ты проигнорировал меня. Я просто проголосую, чтобы закрыть. –
@AndrewThompson Я не проигнорировал вас ... Я опубликовал SSCCE, но не сделал этого совершенно правильно ... Может быть, я не знаю, как публиковать SSCCE даже после прочтения того, что вы связали для меня. – Growler