From 07c59fb8017ee35e71bf809178cbc0bdbc20cc15 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Thu, 8 Oct 2015 02:44:51 -0400 Subject: 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. --- autoload/space_vlaze/game.vim | 3 +++ autoload/space_vlaze/leaderboard.vim | 43 ++++++++++++++++++++++++++++++++++++ autoload/space_vlaze/score.vim | 5 +++++ 3 files changed, 51 insertions(+) create mode 100644 autoload/space_vlaze/leaderboard.vim 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(':p:h')) . '/../../leaderboard.tsv' +endif + + +if !exists('s:PLAYER_NAME_PATH') + let s:PLAYER_NAME_PATH = resolve(expand(':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 -- cgit v1.2.3