Skip to content

Commit a0b0e39

Browse files
committed
Implement high score for second player.
1 parent e239786 commit a0b0e39

3 files changed

Lines changed: 131 additions & 54 deletions

File tree

states/GameOverState.lua

Lines changed: 91 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,107 @@ GameOverState = Class{__includes = BaseState}
22

33

44
function GameOverState:init()
5-
self.name = ''
6-
end
7-
8-
function GameOverState:textinput(text)
9-
if #self.name < 3 then
10-
self.name = self.name .. text
11-
end
5+
self.name = { }
6+
self.position = { }
7+
self.keys = {
8+
{left = "left", right = "right", up = "up", down = "down" },
9+
{left = "a", right = "d", up = "w", down = "s" }
10+
}
11+
self.delay = { 0, 0 }
1212
end
1313

1414
function GameOverState:update(dt)
15-
if love.keyboard.keyPressed['return'] then
16-
if #self.name ~= 0 then
17-
gStateMachine:change('highscore', {
18-
new = {['score'] = self.score, ['name'] = self.name}
19-
})
20-
end
21-
end
22-
if love.keyboard.keyPressed['backspace'] then
23-
if #self.name ~= 0 then
24-
self.name = string.sub(self.name, 1, #self.name - 1)
25-
end
26-
end
15+
for i, _ in pairs(self.score) do
16+
self.delay[i] = self.delay[i] + dt
17+
if self.delay[i] > 0.3 then
18+
if love.keyboard.isDown(self.keys[i].left) then
19+
if self.position[i] ~= 4 and self.position[i] > 1 then
20+
self.position[i] = self.position[i] - 1
21+
self.name[i] = string.sub(self.name[i], 1, self.position[i])
22+
end
23+
self.delay[i] = 0
24+
elseif love.keyboard.isDown(self.keys[i].right) then
25+
if self.position[i] ~= 4 then
26+
self.position[i] = self.position[i] + 1
27+
if self.position[i] ~= 4 then
28+
self.name[i] = self.name[i] .. " "
29+
else
30+
done = true
31+
local new = {}
32+
for j, e in pairs(self.position) do
33+
table.insert(new, {['score'] = self.score[j], ['name'] = self.name[j]})
34+
if e ~= 4 then
35+
done = false
36+
end
37+
end
38+
if done then
39+
gStateMachine:change('highscore', {
40+
new = new
41+
})
42+
end
43+
end
44+
end
45+
self.delay[i] = 0
46+
elseif love.keyboard.isDown(self.keys[i].up) then
47+
if self.position[i] ~= 4 then
48+
lastchar = string.sub(self.name[i], #self.name[i])
49+
if #self.name[i] == 1 then
50+
self.name[i] = ''
51+
else
52+
self.name[i] = string.sub(self.name[i], 1, #self.name[i] - 1)
53+
end
54+
self.name[i] = self.name[i] .. ('ABCDEFGHIJKLMNOPQRSTUVWXYZ A'):match(lastchar..'(.)')
55+
end
56+
self.delay[i] = 0
57+
elseif love.keyboard.isDown(self.keys[i].down) then
58+
if self.position[i] ~= 4 then
59+
lastchar = string.sub(self.name[i], #self.name[i])
60+
if #self.name[i] == 1 then
61+
self.name[i] = ''
62+
else
63+
self.name[i] = string.sub(self.name[i], 1, #self.name[i] - 1)
64+
end
65+
self.name[i] = self.name[i] .. (' ZYXWUVTSRQPONMLKJIHGFEDCBA '):match(lastchar..'(.)')
66+
end
67+
self.delay[i] = 0
68+
end
69+
end
70+
end
2771
end
2872

2973
function GameOverState:draw()
30-
w, h = VIRTUAL_WIDTH, VIRTUAL_HEIGHT
31-
love.graphics.setFont(largeFont)
32-
love.graphics.printf({{1, 0, 0}, "New high score!"}, 0, h / 3, w, "center")
33-
-- love.graphics.setFont(smallFont)
34-
love.graphics.printf({{1, 1, 1}, "Your Score: ", {0, 1, 0}, self.score}, 0, h - h / 4 - 50, w, "center")
35-
love.graphics.printf({{1, 1, 0}, "Enter Your Initials"}, 0, h - h / 4, w, "center")
36-
love.graphics.printf(self.name, 0, h - (h / 4) + 10, w, "center")
74+
w, h = VIRTUAL_WIDTH, VIRTUAL_HEIGHT / table.getn(self.score)
75+
base = 0
76+
for i, e in pairs(self.score) do
77+
love.graphics.setFont(largeFont)
78+
if (not highscores[10]) or (e > highscores[10][1]) then
79+
love.graphics.printf({{1, 0, 0}, "New high score!"}, 0, base + h / 3, w, "center")
80+
end
81+
-- love.graphics.setFont(smallFont)
82+
love.graphics.printf({{1, 1, 1}, "Player ", {1, 1, 1}, i, {1, 1, 1}, " Score: ", {0, 1, 0}, e}, 0, base + h - h / 4 - 50 / table.getn(self.score), w, "center")
83+
if (not highscores[10]) or (e > highscores[10][1]) then
84+
love.graphics.printf({{1, 1, 0}, "Enter Your Initials"}, 0, base + h - h / 4, w, "center")
85+
if self.position[i] ~= 4 then
86+
love.graphics.printf(self.name[i] .. "_", 0, base + h - (h / 4) + 10, w, "center")
87+
else
88+
love.graphics.printf(self.name[i], 0, base + h - (h / 4) + 10, w, "center")
89+
end
90+
end
91+
base = base + h
92+
end
3793
end
3894

3995
function GameOverState:enter(params)
4096
self.score = params.score
97+
for i, e in pairs(self.score) do
98+
table.insert(self.name, ' ')
99+
if (not highscores[10]) or (e > highscores[10][1]) then
100+
table.insert(self.position, 1)
101+
else
102+
table.insert(self.position, 4)
103+
end
104+
end
41105
end
42106

43107
function GameOverState:exit()
44-
end
108+
end

states/HighScoreState.lua

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,31 @@ function HighScoreState:saveHighScores()
1414
end
1515

1616
function HighScoreState:newHighScore(new)
17-
score = new['score']
18-
name = new['name']
19-
20-
for i=1,10 do
21-
if (not self.highscores[i]) then
22-
self.highscores[i] = {score, name}
23-
break
24-
end
25-
if score > self.highscores[i][1] then
26-
if i == 10 then
27-
self.highscores[i] = {score, name}
28-
else
29-
for j=9,i,-1 do
30-
self.highscores[j+1] = self.highscores[j]
31-
end
32-
self.highscores[i] = {score, name}
33-
end
34-
break
35-
end
36-
end
37-
38-
self:saveHighScores()
39-
self:getHighScores()
17+
for _, next in pairs(new) do
18+
score = next['score']
19+
name = next['name']
20+
21+
for i=1,10 do
22+
if (not self.highscores[i]) then
23+
self.highscores[i] = {score, name}
24+
break
25+
end
26+
if score > self.highscores[i][1] then
27+
if i == 10 then
28+
self.highscores[i] = {score, name}
29+
else
30+
for j=9,i,-1 do
31+
self.highscores[j+1] = self.highscores[j]
32+
end
33+
self.highscores[i] = {score, name}
34+
end
35+
break
36+
end
37+
end
38+
39+
self:saveHighScores()
40+
self:getHighScores()
41+
end
4042
end
4143

4244
function HighScoreState:update(dt)

states/PlayState.lua

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,17 +361,28 @@ function PlayState:enter(params)
361361

362362
changed = false
363363

364+
if (not highscores[10]) or (self.players[1].score > highscores[10][1]) then
365+
changed = true
366+
elseif (table.getn(self.player) == 2) and (self.players[2].score > highscores[10][1]) then
367+
changed = true
368+
end
364369
for i=1,10 do
365370
if (not highscores[i]) or (self.players[1].score > highscores[i][1]) then
366-
gStateMachine:change("gameover", {
367-
score = self.players[1].score
368-
})
369371
changed = true
370372
break
371373
end
372374
end
373375

374-
if not changed then gStateMachine:change('title') end
376+
if not changed then gStateMachine:change('title')
377+
else
378+
local score = {}
379+
for _, e in pairs(self.players) do
380+
table.insert(score, e.score)
381+
end
382+
gStateMachine:change("gameover", {
383+
score = score
384+
})
385+
end
375386
end
376387

377388
self.entityManager.player = {}

0 commit comments

Comments
 (0)