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
|
import org.trinitydesktop.qt.*;
public class GameBoard extends TQWidget {
private TQLCDNumber hits;
private TQLCDNumber shotsLeft;
private CannonField cannonField;
public GameBoard() {
TQPushButton quit = new TQPushButton("&Quit", this, "quit");
quit.setFont(new TQFont("Times", 18, TQFont.Bold, false));
connect(quit, TQ_SIGNAL("clicked()"), tqApp(), TQ_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, TQ_SIGNAL("valueChanged(int)"),
cannonField, TQ_SLOT("setAngle(int)"));
connect(cannonField, TQ_SIGNAL("angleChanged(int)"),
angle, TQ_SLOT("setValue(int)"));
connect(force, TQ_SIGNAL("valueChanged(int)"),
cannonField, TQ_SLOT("setForce(int)"));
connect(cannonField, TQ_SIGNAL("forceChanged(int)"),
force, TQ_SLOT("setValue(int)"));
connect(cannonField, TQ_SIGNAL("hit()"),
this, TQ_SLOT("hit()"));
connect(cannonField, TQ_SIGNAL("missed()"),
this, TQ_SLOT("missed()"));
TQPushButton shoot = new TQPushButton("&Shoot", this, "shoot");
shoot.setFont(new TQFont("Times", 18, TQFont.Bold, false));
connect(shoot, TQ_SIGNAL("clicked()"), TQ_SLOT("fire()"));
connect(cannonField, TQ_SIGNAL("canShoot(boolean)"),
shoot, TQ_SLOT("setEnabled(boolean)"));
TQPushButton restart = new TQPushButton("&New Game", this, "newgame");
restart.setFont(new TQFont("Times", 18, TQFont.Bold, false));
connect(restart, TQ_SIGNAL("clicked()"), this, TQ_SLOT("newGame()"));
hits = new TQLCDNumber(2, this, "hits");
shotsLeft = new TQLCDNumber(2, this, "shotsleft");
TQLabel hitsL = new TQLabel("HITS", this, "hitsLabel", 0);
TQLabel shotsLeftL = new TQLabel("SHOTS LEFT", this, "shotsleftLabel", 0);
TQGridLayout grid = new TQGridLayout(this, 2, 2, 10, -1, null);
grid.addWidget(quit, 0, 0);
grid.addWidget(cannonField, 1, 1);
grid.setColStretch(1, 10);
TQVBoxLayout leftBox = new TQVBoxLayout();
grid.addLayout(leftBox, 1, 0);
leftBox.addWidget(angle);
leftBox.addWidget(force);
TQHBoxLayout topBox = new TQHBoxLayout();
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();
}
}
|