diff options
Diffstat (limited to 'pongo.go')
| -rw-r--r-- | pongo.go | 49 |
1 files changed, 46 insertions, 3 deletions
@@ -5,9 +5,9 @@ import ( "fmt" "github.com/veandco/go-sdl2/mix" "github.com/veandco/go-sdl2/sdl" - "gitlab.com/rhogenson/pongo/numbers" "math" "os" + "strconv" "time" ) @@ -19,6 +19,49 @@ const ( paddleSpeed = 5 ) +// Imagine a digital clock. Do they still make those? +var digitSegments = []uint8{0x77, 0x24, 0x5d, 0x6d, 0x2e, 0x6b, 0x7b, 0x25, 0x7f, 0x6f} + +func drawNumber(renderer *sdl.Renderer, n int, x, y int32) error { + const ( + width = 60 + height = 100 + thickness = 10 + padding = 20 + ) + + for _, d := range strconv.Itoa(n) { + segments := digitSegments[d-'0'] + for i := range 7 { + if segments&(1<<i) == 0 { + continue + } + var r *sdl.Rect + switch i { + case 0: + r = &sdl.Rect{X: x, Y: y, W: width, H: thickness} + case 1: + r = &sdl.Rect{X: x, Y: y, W: thickness, H: height / 2} + case 2: + r = &sdl.Rect{X: x + width - thickness, Y: y, W: thickness, H: height / 2} + case 3: + r = &sdl.Rect{X: x, Y: y + height/2 - thickness/2, W: width, H: thickness} + case 4: + r = &sdl.Rect{X: x, Y: y + height/2, W: thickness, H: height / 2} + case 5: + r = &sdl.Rect{X: x + width - thickness, Y: y + height/2, W: thickness, H: height / 2} + case 6: + r = &sdl.Rect{X: x, Y: y + height - thickness, W: width, H: thickness} + } + if err := renderer.FillRect(r); err != nil { + return err + } + } + x += width + padding + } + return nil +} + func keyPressed(key sdl.Keycode) bool { return sdl.GetKeyboardState()[sdl.GetScancodeFromKey(key)] != 0 } @@ -263,10 +306,10 @@ func pong() error { fmt.Fprintln(os.Stderr, err) } - if err := numbers.Draw(renderer, playerScore, 150, 30); err != nil { + if err := drawNumber(renderer, playerScore, 150, 30); err != nil { fmt.Fprintln(os.Stderr, err) } - if err := numbers.Draw(renderer, aiScore, 1300, 30); err != nil { + if err := drawNumber(renderer, aiScore, 1300, 30); err != nil { fmt.Fprintln(os.Stderr, err) } |
