badges/game_colors.go

183 lines
5 KiB
Go
Raw Normal View History

2026-04-14 17:21:59 +00:00
package main
import (
"math/rand"
"time"
)
const (
gameColorsCellSize = 16
gameColorsSpeed = 9
gameColorsWidth = int16(displayWidth / gameColorsCellSize)
gameColorsHeight = int16(displayHeight / gameColorsCellSize)
)
var (
colorgame [][]bool
p1x, p1y, p2x, p2y, tx int16
v1x, v1y, v2x, v2y, ty int16
)
func ColorGame() {
display.FillScreen(colorOrange)
colorgame = make([][]bool, gameColorsWidth)
p1x = int16(rand.Int31n(int32(displayWidth/3))) + displayWidth/12
p1y = int16(rand.Int31n(int32(4*gameColorsHeight/5))) + gameColorsHeight/10
p2x = int16(rand.Int31n(int32(displayWidth/3))) + 7*displayWidth/12
p2y = int16(rand.Int31n(int32(4*gameColorsHeight/5))) + gameColorsHeight/10
v1x = 2
v1y = 3
v2x = -3
v2y = 2
for i := int16(0); i < gameColorsWidth; i++ {
colorgame[i] = make([]bool, gameColorsHeight)
if i >= gameColorsWidth/2 {
for j := int16(0); j < gameColorsHeight; j++ {
colorgame[i][j] = true
display.FillRectangle(i*gameColorsCellSize, j*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorPurple)
}
}
}
display.FillRectangle(p1x-gameColorsSpeed, p1y-gameColorsSpeed, gameColorsCellSize, gameColorsCellSize, colorPurple)
display.FillRectangle(p2x-gameColorsSpeed, p2y-gameColorsSpeed, gameColorsCellSize, gameColorsCellSize, colorOrange)
gw := (gameColorsWidth * gameColorsCellSize) - gameColorsSpeed
gh := (gameColorsHeight * gameColorsCellSize) - gameColorsSpeed
2026-04-14 17:21:59 +00:00
for {
display.FillRectangle(p1x-gameColorsSpeed, p1y-gameColorsSpeed, gameColorsCellSize, gameColorsCellSize, colorOrange)
display.FillRectangle(p2x-gameColorsSpeed, p2y-gameColorsSpeed, gameColorsCellSize, gameColorsCellSize, colorPurple)
p1x += v1x
p1y += v1y
p2x += v2x
p2y += v2y
if (p1x < gameColorsSpeed && v1x < 0) || (p1x > gw && v1x > 0) {
2026-04-14 17:21:59 +00:00
v1x = -v1x
}
if (p2x < gameColorsSpeed && v2x < 0) || (p2x > gw && v2x > 0) {
2026-04-14 17:21:59 +00:00
v2x = -v2x
}
if (p1y < gameColorsSpeed && v1y < 0) || (p1y > gh && v1y > 0) {
2026-04-14 17:21:59 +00:00
v1y = -v1y
}
if (p2y < gameColorsSpeed && v2y < 0) || (p2y > gh && v2y > 0) {
2026-04-14 17:21:59 +00:00
v2y = -v2y
}
tx = (p1x - gameColorsSpeed) / gameColorsCellSize
ty = p1y / gameColorsCellSize
if tx < 0 {
tx = 0
}
if colorgame[tx][ty] {
colorgame[tx][ty] = false
if v1x < 0 {
v1x = -v1x
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorOrange)
}
tx = (p1x + gameColorsSpeed) / gameColorsCellSize
if tx >= gameColorsWidth {
tx = gameColorsWidth - 1
}
if colorgame[tx][ty] {
colorgame[tx][ty] = false
if v1x > 0 {
v1x = -v1x
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorOrange)
}
tx = p1x / gameColorsCellSize
ty = (p1y - gameColorsSpeed) / gameColorsCellSize
if ty < 0 {
ty = 0
}
if colorgame[tx][ty] {
colorgame[tx][ty] = false
if v1y < 0 {
v1y = -v1y
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorOrange)
}
ty = (p1y + gameColorsSpeed) / gameColorsCellSize
if ty >= gameColorsHeight {
ty = gameColorsHeight - 1
}
if colorgame[tx][ty] {
colorgame[tx][ty] = false
if v1y > 0 {
v1y = -v1y
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorOrange)
}
// P2
tx = (p2x - gameColorsSpeed) / gameColorsCellSize
ty = p2y / gameColorsCellSize
if tx < 0 {
tx = 0
}
if !colorgame[tx][ty] {
colorgame[tx][ty] = true
if v2x < 0 {
v2x = -v2x
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorPurple)
}
tx = (p2x + gameColorsSpeed) / gameColorsCellSize
if tx >= gameColorsWidth {
tx = gameColorsWidth - 2
}
if !colorgame[tx][ty] {
colorgame[tx][ty] = true
if v2x > 0 {
v2x = -v2x
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorPurple)
}
tx = p2x / gameColorsCellSize
ty = (p2y - gameColorsSpeed) / gameColorsCellSize
if ty < 0 {
ty = 0
}
if !colorgame[tx][ty] {
colorgame[tx][ty] = true
if v2y < 0 {
v2y = -v2y
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorPurple)
}
ty = (p2y + gameColorsSpeed) / gameColorsCellSize
if ty >= gameColorsHeight {
ty = gameColorsHeight - 2
}
if !colorgame[tx][ty] {
colorgame[tx][ty] = true
if v2y > 0 {
v2y = -v2y
}
display.FillRectangle(tx*gameColorsCellSize, ty*gameColorsCellSize, gameColorsCellSize, gameColorsCellSize, colorPurple)
}
display.FillRectangle(p1x-gameColorsSpeed, p1y-gameColorsSpeed, gameColorsCellSize, gameColorsCellSize, colorPurple)
display.FillRectangle(p2x-gameColorsSpeed, p2y-gameColorsSpeed, gameColorsCellSize, gameColorsCellSize, colorOrange)
getInput()
if goBack() {
break
}
time.Sleep(10 * time.Millisecond)
}
}