diff options
| -rw-r--r-- | numbers/numbers.go | 72 | ||||
| -rw-r--r-- | pongo.go | 49 |
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 -} @@ -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) } |
