1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
import org.kde.qt.*;
public class GameBoard extends QWidget {
private QLCDNumber hits;
private QLCDNumber shotsLeft;
private CannonField cannonField;
public GameBoard() {
super(null, "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);
QVBox box = new QVBox(this, "cannonFrame");
box.setFrameStyle(QFrame.WinPanel | QFrame.Sunken);
cannonField = new CannonField(box, "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()"));
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);
QAccel accel = new QAccel(this);
accel.connectItem(accel.insertItem(new QKeySequence(Key_Enter)), this, SLOT("fire()"));
accel.connectItem(accel.insertItem(new QKeySequence(Key_Return)), this, SLOT("fire()"));
accel.connectItem(accel.insertItem(new QKeySequence(CTRL+Key_Q)), qApp(), SLOT("quit()"));
/***
accel.connectItem(accel.insertItem(Key_Enter), this, SLOT("fire()"));
accel.connectItem(accel.insertItem(Key_Return), this, SLOT("fire()"));
accel.connectItem(accel.insertItem(CTRL+Key_Q), qApp(), SLOT("quit()"));
***/
QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null);
grid.addWidget(quit, 0, 0);
grid.addWidget(box, 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();
}
}
|