feat: add score type
This commit is contained in:
parent
3f1140910d
commit
14520e047c
1 changed files with 33 additions and 0 deletions
33
game/score.go
Normal file
33
game/score.go
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
package game
|
||||||
|
|
||||||
|
// SCORE_MAX is the highest allowed score (7 digits, 9,999,999).
|
||||||
|
// Any additions beyond this value are clamped.
|
||||||
|
const SCORE_MAX Score = 9999999
|
||||||
|
|
||||||
|
// Score is a running total of points earned.
|
||||||
|
// It’s a distinct type (over uint32) to prevent mixing raw integers with scores.
|
||||||
|
type Score uint32
|
||||||
|
|
||||||
|
// Lines adds points for clearing a number of lines at once.
|
||||||
|
//
|
||||||
|
// The formula used is: s = L^2 * 100 (where L is the number of lines cleared)
|
||||||
|
// That yields the following values:
|
||||||
|
//
|
||||||
|
// L=0 => 0
|
||||||
|
// L=1 => 100
|
||||||
|
// L=2 => 400
|
||||||
|
// L=3 => 900
|
||||||
|
// L=4 => 1600
|
||||||
|
//
|
||||||
|
// Note: `lines` is a byte (0..255). Even at 255 the delta (255^2*100=6,502,500)
|
||||||
|
// fits comfortably in uint32 and is then clamped against SCORE_MAX on add.
|
||||||
|
func (s *Score) Lines(lines byte) {
|
||||||
|
L := uint32(lines)
|
||||||
|
s.Add(L * L * 100)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add increases the score by num and clamps the result to SCORE_MAX.
|
||||||
|
// No effect if the score is already at SCORE_MAX
|
||||||
|
func (s *Score) Add(num uint32) {
|
||||||
|
*s = min(*s+Score(num), SCORE_MAX)
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue