summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--numbers/numbers.go72
-rw-r--r--pongo.go49
2 files changed, 46 insertions, 75 deletions
diff --git a/numbers/numbers.go b/numbers/numbers.go
deleted file mode 100644
index f4f90b2..0000000
--- a/numbers/numbers.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package numbers
-
-import (
- "github.com/veandco/go-sdl2/sdl"
-)
-
-const width = 60
-
-var digitSegments = [][]int{
- {0, 1, 2, 4, 5, 6},
- {2, 5},
- {0, 2, 3, 4, 6},
- {0, 2, 3, 5, 6},
- {1, 2, 3, 5},
- {0, 1, 3, 5, 6},
- {0, 1, 3, 4, 5, 6},
- {0, 2, 5},
- {0, 1, 2, 3, 4, 5, 6},
- {0, 1, 2, 3, 5, 6},
-}
-
-func drawDigit(renderer *sdl.Renderer, d int, x, y int32) error {
- const (
- height = 100
- thickness = 10
- )
- for _, segment := range digitSegments[d] {
- var err error
- switch segment {
- case 0:
- err = renderer.FillRect(&sdl.Rect{X: x, Y: y, W: width, H: thickness})
- case 1:
- err = renderer.FillRect(&sdl.Rect{X: x, Y: y, W: thickness, H: height / 2})
- case 2:
- err = renderer.FillRect(&sdl.Rect{X: x + width - thickness, Y: y, W: thickness, H: height / 2})
- case 3:
- err = renderer.FillRect(&sdl.Rect{X: x, Y: y + height/2 - thickness/2, W: width, H: thickness})
- case 4:
- err = renderer.FillRect(&sdl.Rect{X: x, Y: y + height/2, W: thickness, H: height / 2})
- case 5:
- err = renderer.FillRect(&sdl.Rect{X: x + width - thickness, Y: y + height/2, W: thickness, H: height / 2})
- case 6:
- err = renderer.FillRect(&sdl.Rect{X: x, Y: y + height - thickness, W: width, H: thickness})
- }
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-func Draw(renderer *sdl.Renderer, n int, x, y int32) error {
- const padding = 20
-
- if err := renderer.SetDrawColor(245, 245, 245, 255); err != nil {
- return err
- }
- if n == 0 {
- return drawDigit(renderer, 0, x, y)
- }
- digits := make([]int, 0, 19)
- for ; n > 0; n /= 10 {
- digits = append(digits, n%10)
- }
- for i := len(digits) - 1; i >= 0; i-- {
- if err := drawDigit(renderer, digits[i], x, y); err != nil {
- return err
- }
- x += width + padding
- }
- return nil
-}
diff --git a/pongo.go b/pongo.go
index fe11451..984bf58 100644
--- a/pongo.go
+++ b/pongo.go
@@ -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)
}