import org.kde.qt.*; public class GameBoard extends QWidget { private QLCDNumber hits; private QLCDNumber shotsLeft; private CannonField cannonField; public GameBoard() { QPushButton quit = new QPushButton("&Quit", this, "quit"); quit.setFont(new QFont("Times", 18, QFont.Bold, false)); connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); LCDRange angle = new LCDRange("ANGLE", this, "angle"); angle.setRange(5, 70); LCDRange force = new LCDRange("FORCE", this, "force"); force.setRange(10, 50); cannonField = new CannonField(this, "cannonField"); connect(angle, SIGNAL("valueChanged(int)"), cannonField, SLOT("setAngle(int)")); connect(cannonField, SIGNAL("angleChanged(int)"), angle, SLOT("setValue(int)")); connect(force, SIGNAL("valueChanged(int)"), cannonField, SLOT("setForce(int)")); connect(cannonField, SIGNAL("forceChanged(int)"), force, SLOT("setValue(int)")); connect(cannonField, SIGNAL("hit()"), this, SLOT("hit()")); connect(cannonField, SIGNAL("missed()"), this, SLOT("missed()")); QPushButton shoot = new QPushButton("&Shoot", this, "shoot"); shoot.setFont(new QFont("Times", 18, QFont.Bold, false)); connect(shoot, SIGNAL("clicked()"), SLOT("fire()")); connect(cannonField, SIGNAL("canShoot(boolean)"), shoot, SLOT("setEnabled(boolean)")); QPushButton restart = new QPushButton("&New Game", this, "newgame"); restart.setFont(new QFont("Times", 18, QFont.Bold, false)); connect(restart, SIGNAL("clicked()"), this, SLOT("newGame()")); hits = new QLCDNumber(2, this, "hits"); shotsLeft = new QLCDNumber(2, this, "shotsleft"); QLabel hitsL = new QLabel("HITS", this, "hitsLabel", 0); QLabel shotsLeftL = new QLabel("SHOTS LEFT", this, "shotsleftLabel", 0); QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); grid.addWidget(quit, 0, 0); grid.addWidget(cannonField, 1, 1); grid.setColStretch(1, 10); QVBoxLayout leftBox = new QVBoxLayout(); grid.addLayout(leftBox, 1, 0); leftBox.addWidget(angle); leftBox.addWidget(force); QHBoxLayout topBox = new QHBoxLayout(); grid.addLayout(topBox, 0, 1); topBox.addWidget(shoot); topBox.addWidget(hits); topBox.addWidget(hitsL); topBox.addWidget(shotsLeft); topBox.addWidget(shotsLeftL); topBox.addStretch(1); topBox.addWidget(restart); angle.setValue(60); force.setValue(25); angle.setFocus(); newGame(); } protected void fire() { if (cannonField.gameOver() || cannonField.isShooting()) return; shotsLeft.display(shotsLeft.intValue() - 1); cannonField.shoot(); } protected void hit() { hits.display(hits.intValue() + 1); if (shotsLeft.intValue() == 0) cannonField.setGameOver(); else cannonField.newTarget(); } protected void missed() { if (shotsLeft.intValue() == 0) cannonField.setGameOver(); } protected void newGame() { shotsLeft.display(15); hits.display(0); cannonField.restartGame(); cannonField.newTarget(); } }