diff options
| author | Teddy Wing | 2015-10-08 02:44:51 -0400 |
|---|---|---|
| committer | Teddy Wing | 2015-10-08 02:44:51 -0400 |
| commit | 07c59fb8017ee35e71bf809178cbc0bdbc20cc15 (patch) | |
| tree | d756006f6676e4561728a34b2efbc66470ca1ae1 /autoload | |
| parent | 00571ace4745be3f4083867622dd7c7f42a7b103 (diff) | |
| download | vim-space-vlaze-07c59fb8017ee35e71bf809178cbc0bdbc20cc15.tar.bz2 | |
Save high scores
When you get a game over, save your high score to a file so that we can
display it on the leaderboard. The saved scores get sorted from highest
to lowest.
If we don't have your name yet (saved to a separate file), we prompt you
for it.
This means that you can only have one player (name) per installation.
Not the best scenario because maybe you have multiple people playing on
your computer, but I made a judgement call to do it this way so we don't
have to keep prompting the player for their name every time they get a
Game Over. That could get annoying fast.
Diffstat (limited to 'autoload')
| -rw-r--r-- | autoload/space_vlaze/game.vim | 3 | ||||
| -rw-r--r-- | autoload/space_vlaze/leaderboard.vim | 43 | ||||
| -rw-r--r-- | autoload/space_vlaze/score.vim | 5 |
3 files changed, 51 insertions, 0 deletions
diff --git a/autoload/space_vlaze/game.vim b/autoload/space_vlaze/game.vim index 4c7703b..9915a26 100644 --- a/autoload/space_vlaze/game.vim +++ b/autoload/space_vlaze/game.vim @@ -160,4 +160,7 @@ function! space_vlaze#game#GameOver() let text_y += 1 let text_x = text_x_orig endfor + + call space_vlaze#game#RenderBoard() + call space_vlaze#leaderboard#SaveHighScore() endfunction diff --git a/autoload/space_vlaze/leaderboard.vim b/autoload/space_vlaze/leaderboard.vim new file mode 100644 index 0000000..5ad25dd --- /dev/null +++ b/autoload/space_vlaze/leaderboard.vim @@ -0,0 +1,43 @@ +if !exists('s:LEADERBOARD_PATH') + let s:LEADERBOARD_PATH = resolve(expand('<sfile>:p:h')) . '/../../leaderboard.tsv' +endif + + +if !exists('s:PLAYER_NAME_PATH') + let s:PLAYER_NAME_PATH = resolve(expand('<sfile>:p:h')) . '/../../player_name.txt' +endif + + +function! space_vlaze#leaderboard#MaybePromptForName() + if !filereadable(s:PLAYER_NAME_PATH) + let name = space_vlaze#menus#Prompt('Enter your name: ') + + call writefile([name], s:PLAYER_NAME_PATH) + endif +endfunction + + +function! space_vlaze#leaderboard#SaveHighScore() + call space_vlaze#leaderboard#MaybePromptForName() + + if filereadable(s:LEADERBOARD_PATH) + let scores = readfile(s:LEADERBOARD_PATH) + let scores = add(scores, space_vlaze#score#Score()) + let scores = sort(scores, 'space_vlaze#leaderboard#Sort') + call writefile(scores, s:LEADERBOARD_PATH) + else + call writefile([space_vlaze#score#Score()], s:LEADERBOARD_PATH) + endif +endfunction + + +" Sorting function that orders numbers from highest to lowest. +" For use with the |sort()| Vim function +function! space_vlaze#leaderboard#Sort(item1, item2) + return a:item1 ==# a:item2 ? 0 : + \ a:item1 ># a:item2 ? -1 : 1 +endfunction + + +function! space_vlaze#leaderboard#RenderLeaderboard() +endfunction diff --git a/autoload/space_vlaze/score.vim b/autoload/space_vlaze/score.vim index 0debfaa..c1aee64 100644 --- a/autoload/space_vlaze/score.vim +++ b/autoload/space_vlaze/score.vim @@ -3,6 +3,11 @@ function! space_vlaze#score#Initialize() endfunction +function! space_vlaze#score#Score() + return s:score +endfunction + + " Increment score by `num` function! space_vlaze#score#IncrementScore(num) let s:score += a:num |
