You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebindings/qtjava/javalib/tutorial/t13/GameBoard.java

109 lines
2.9 KiB

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();
}
}