@@ -12,8 +12,8 @@ import (
12
12
)
13
13
14
14
type player struct {
15
- id int32 // Die ID des Spielers, zu dem dieser Vogel gehört
16
- positionY float64 // Die Y Position der oberen linken Ecke des Vogels
15
+ id int32
16
+ positionY float64 // Die Y Position der oberen linken Ecke des Oinkys
17
17
speedY float64 // Die Geschwindigkeit, mit der positionY pro Tick erhöht wird
18
18
}
19
19
@@ -42,7 +42,7 @@ func (p *player) isTouchingObstacle(obstacles []*obstacle) bool {
42
42
}
43
43
44
44
func (p * player ) tick () {
45
- p .speedY += shared .OinkySpeedYIncreasePerTick
45
+ p .speedY += shared .OinkyAccelerationY
46
46
p .positionY += p .speedY
47
47
}
48
48
@@ -59,14 +59,17 @@ func (p *player) toUpdateData() shared.PlayerUpdateData {
59
59
}
60
60
61
61
func randomObstacleFreeSpace () (lowerY , upperY float64 ) {
62
- freeSpaceLowerY := 1 - float64 (rand .Intn (10 - shared .ObstacleFreeSpaceHeight * 10 ))* 0.1
63
- freeSpaceUpperY := freeSpaceLowerY - shared .ObstacleFreeSpaceHeight
64
- return freeSpaceLowerY , freeSpaceUpperY
62
+ lowerY = rand .Float64 ()
63
+ if lowerY - shared .ObstacleFreeSpaceHeight < 0 {
64
+ lowerY = 1 - shared .ObstacleFreeSpaceHeight
65
+ }
66
+ upperY = lowerY - shared .ObstacleFreeSpaceHeight
67
+ return
65
68
}
66
69
67
70
type obstacle struct {
68
- freeSpaceLowerY float64 // Die Y Koordinate, die die untere Begrenzung des freien Platzes angibt
69
- freeSpaceUpperY float64 // Die Y Koordinate, die die obere Begrenzung des freien Platzes angibt
71
+ freeSpaceLowerY float64 // Die Y Koordinate der oberen Kante des unteren Teils des Hindernisses
72
+ freeSpaceUpperY float64 // Die Y Koordinate der unteren Kante des oberen Teils des Hindernisses
70
73
posX float64 // Die X Position der linken Kante des Hindernisses
71
74
}
72
75
@@ -100,17 +103,16 @@ func create(party game.Party) game.Game {
100
103
return & impl {
101
104
party : party ,
102
105
alivePlayers : make (map [int32 ]* player , len (party .Players ())),
103
- obstacles : make ([]* obstacle , 0 ),
104
106
ticksUntilNextObstacle : shared .ObstacleSpawnRate ,
105
107
}
106
108
}
107
109
108
110
var _ game.Creator = create
109
111
110
112
func (i * impl ) HandleGameStarted () {
111
- for _ , partyPlayer := range i .party .Players () {
112
- i .alivePlayers [partyPlayer . Id () ] = & player {
113
- id : partyPlayer . Id () ,
113
+ for id := range i .party .Players () {
114
+ i .alivePlayers [id ] = & player {
115
+ id : id ,
114
116
positionY : shared .OinkyStartPosY ,
115
117
speedY : 0 ,
116
118
}
@@ -135,20 +137,22 @@ func (i *impl) HandlePacket(sender game.Player, data []byte) error {
135
137
136
138
switch packetName {
137
139
case shared .JumpPacketName :
138
- data , ok := i .alivePlayers [sender .Id ()]
140
+ player , ok := i .alivePlayers [sender .Id ()]
139
141
if ! ok {
140
142
return errors .New ("invalid player id" )
141
143
}
142
144
143
- data .jump ()
144
- }
145
+ player .jump ()
145
146
146
- return nil
147
+ return nil
148
+ default :
149
+ return fmt .Errorf ("unknown packet name: %s" , packetName )
150
+ }
147
151
}
148
152
149
153
func (i * impl ) Tick () {
150
- gameEnded := i .tickPlayers ()
151
- if gameEnded {
154
+ if gameEnded := i .tickPlayers (); gameEnded {
155
+ i . party . EndGame ()
152
156
return
153
157
}
154
158
i .tickObstacles ()
@@ -180,13 +184,10 @@ func (i *impl) broadcastUpdatePacket() {
180
184
181
185
func (i * impl ) tickPlayers () (gameEnded bool ) {
182
186
for id , player := range i .alivePlayers {
183
- partyPlayer := i .party .Players ()[id ]
184
-
185
187
player .tick ()
186
188
187
189
if player .isOutsideWorld () || player .isTouchingObstacle (i .obstacles ) {
188
- gameEnded := i .killPlayer (partyPlayer )
189
- if gameEnded {
190
+ if gameEnded := i .killPlayer (id ); gameEnded {
190
191
return true
191
192
}
192
193
}
@@ -195,27 +196,21 @@ func (i *impl) tickPlayers() (gameEnded bool) {
195
196
return false
196
197
}
197
198
198
- func (i * impl ) killPlayer (player game.Player ) (gameEnded bool ) {
199
- delete (i .alivePlayers , player .Id ())
200
-
201
- if len (i .alivePlayers ) == 0 {
202
- i .party .EndGame ()
203
- return true
204
- }
205
-
206
- return false
199
+ func (i * impl ) killPlayer (id int32 ) (gameEnded bool ) {
200
+ delete (i .alivePlayers , id )
201
+ return len (i .alivePlayers ) == 0
207
202
}
208
203
209
204
func (i * impl ) tickObstacles () {
210
205
i .ticksUntilNextObstacle --
211
206
212
- if i .ticksUntilNextObstacle = = 0 {
207
+ if i .ticksUntilNextObstacle < = 0 {
213
208
i .ticksUntilNextObstacle = shared .ObstacleSpawnRate
214
209
215
210
i .spawnNewObstacle ()
216
211
}
217
212
218
- i .filterObstacles ()
213
+ i .removeObstaclesOutsideWorld ()
219
214
220
215
for _ , obstacle := range i .obstacles {
221
216
obstacle .tick ()
@@ -236,7 +231,7 @@ func (i *impl) spawnNewObstacle() {
236
231
i .obstacles = append (i .obstacles , newObstacle )
237
232
}
238
233
239
- func (i * impl ) filterObstacles () {
234
+ func (i * impl ) removeObstaclesOutsideWorld () {
240
235
obstacles := make ([]* obstacle , 0 , len (i .obstacles ))
241
236
for _ , o := range i .obstacles {
242
237
if ! o .isOutsideWorld () {
0 commit comments