From 0e211e15beb9e6875c4ee6943b54c88eeeb2b6d0 Mon Sep 17 00:00:00 2001 From: Syed Daanish Date: Sun, 9 Feb 2025 15:00:17 +0300 Subject: [PATCH] Fixes --- .gitignore | 2 ++ go.mod | 2 +- go.sum | 47 ------------------------------ main.go | 85 ++++++++++++++++++++++++++++++++++++++++++------------ 4 files changed, 70 insertions(+), 66 deletions(-) delete mode 100644 go.sum diff --git a/.gitignore b/.gitignore index 9c98eb0..9e1dcb0 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ # Dependency directories /Godeps/ +go.sum + diff --git a/go.mod b/go.mod index 69a447d..9d2a73d 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.23.4 require ( github.com/gdamore/encoding v1.0.0 // indirect - github.com/gdamore/tcell/v2 v2.7.4 // indirect + github.com/gdamore/tcell/v2 v2.7.4 // direct github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/rivo/uniseg v0.4.3 // indirect diff --git a/go.sum b/go.sum deleted file mode 100644 index 7aa6666..0000000 --- a/go.sum +++ /dev/null @@ -1,47 +0,0 @@ -github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU= -github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/main.go b/main.go index 280068c..5b61589 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ import ( var start, pline int var offx, offy int -var fx, fy, sx, sy, mines int +var fx, fy, sx, sy, ax, ay, mines int var screen tcell.Screen var gameTime time.Time var timr int @@ -27,6 +27,7 @@ var mouseThing string var asciiDigits map[rune][]string var gameOver bool var flags int +var board [][]cell type cell struct { err bool @@ -35,6 +36,7 @@ type cell struct { reveal bool isMine bool color string + sel bool } func main() { @@ -116,6 +118,8 @@ func main() { pline = 7 fx = -1 fy = -1 + ax = 0 + ay = 0 mines = *m_o sx = *sx_o sy = *sy_o @@ -132,7 +136,7 @@ func main() { } offx = width/2 - (sx*5)/2 offy = height/2 - (sy*3-3)/2 - board, _ := gen_board(sx, sy, mines, fx, fy) + board, _ = gen_board(sx, sy, mines, fx, fy) refresh(board) screen.Show() go func() { @@ -145,15 +149,54 @@ func main() { ev := screen.PollEvent() switch ev := ev.(type) { case *tcell.EventKey: - if ev.Rune() == 'l' || ev.Rune() == 'q' { + switch ev.Rune() { + case 'l', 'q': return + case 'f': + if !gameOver { + _ = flag_it(board, ax, ay, sx, sy) + } + case 'r', ' ': + if !gameOver { + _ = reveal(board, ax, ay, sx, sy) + } } - if ev.Key() == tcell.KeyCtrlC { + switch ev.Key() { + case tcell.KeyCtrlC: return + case tcell.KeyLeft: + board[ay][ax].sel = false + ax-- + board[ay][ax].sel = true + refresh(board) + case tcell.KeyRight: + board[ay][ax].sel = false + ax++ + board[ay][ax].sel = true + refresh(board) + case tcell.KeyUp: + board[ay][ax].sel = false + ay-- + board[ay][ax].sel = true + refresh(board) + case tcell.KeyDown: + board[ay][ax].sel = false + ay++ + board[ay][ax].sel = true + refresh(board) + case tcell.KeyEnter: + if fx == -1 && fy == -1 { + fx = ax + fy = ay + board, _ = gen_board(sx, sy, mines, fx, fy) + gameTime = time.Now() + } + if !gameOver { + _ = reveal(board, ax, ay, sx, sy) + } } case *tcell.EventMouse: x, y := ev.Position() - doit := true button := buttonify(ev.Buttons()) if x >= offx+(sx*5/2)-3 && x <= offx+(sx*5/2)+3 && y >= offy-4 && y <= offy-3 && button == "L" { fx = -1 @@ -164,14 +207,13 @@ func main() { board, _ := gen_board(sx, sy, mines, fx, fy) refresh(board) screen.Show() - doit = false continue } x = x - offx y = y - offy boardX := int(math.Floor(float64(x) / 5)) boardY := int(math.Floor(float64(y) / 3)) - if fx == -1 && fy == -1 && (button == "L" || button == "R") && doit { + if fx == -1 && fy == -1 && (button == "L" || button == "R") { fx = boardX fy = boardY board, _ = gen_board(sx, sy, mines, fx, fy) @@ -346,12 +388,12 @@ func flag_it(board [][]cell, x, y, width, height int) error { } func gen_board(width, height, mines, fx, fy int) ([][]cell, error) { - board := make([][]cell, height) - for i := range board { - board[i] = make([]cell, width) + board2 := make([][]cell, height) + for i := range board2 { + board2[i] = make([]cell, width) } if mines >= width*height { - return board, errors.New("too many mines") + return board2, errors.New("too many mines") } source := rand.NewSource(time.Now().UnixNano()) rand := rand.New(source) @@ -359,17 +401,20 @@ func gen_board(width, height, mines, fx, fy int) ([][]cell, error) { for mineCount < mines { x := rand.Intn(width) y := rand.Intn(height) - if (x == fx && y == fy) || board[y][x].isMine { + if (x == fx && y == fy) || board2[y][x].isMine { continue } - board[y][x].isMine = true + board2[y][x].isMine = true mineCount++ } for y := 0; y < height; y++ { for x := 0; x < width; x++ { - if board[y][x].isMine { + if board2[y][x].isMine { continue } + if ax == x && ay == y { + board2[y][x].sel = true + } directions := []struct{ dx, dy int }{ {-1, -1}, {0, -1}, {1, -1}, {-1, 0}, {1, 0}, @@ -378,11 +423,11 @@ func gen_board(width, height, mines, fx, fy int) ([][]cell, error) { count := 0 for _, dir := range directions { nx, ny := x+dir.dx, y+dir.dy - if nx >= 0 && nx < width && ny >= 0 && ny < height && board[ny][nx].isMine { + if nx >= 0 && nx < width && ny >= 0 && ny < height && board2[ny][nx].isMine { count++ } } - board[y][x].mines = count + board2[y][x].mines = count colors := map[int]string{ 0: "#41e8b0", 1: "#7cc7ff", @@ -394,10 +439,10 @@ func gen_board(width, height, mines, fx, fy int) ([][]cell, error) { 7: "#999999", 8: "#d0d8e0", } - board[y][x].color = colors[board[y][x].mines] + board2[y][x].color = colors[board2[y][x].mines] } } - return board, nil + return board2, nil } func print_board(board [][]cell, solved int) { @@ -461,6 +506,10 @@ func print_board(board [][]cell, solved int) { style = tcell.StyleDefault.Background(tcell.GetColor("#384048")).Foreground(tcell.GetColor("#1f272f")).Bold(true) style2 = tcell.StyleDefault.Background(tcell.GetColor("#384048")).Foreground(tcell.GetColor(board[i][j].color)).Bold(true) } + // Chaange color of border if selected + if board[i][j].sel { + style = style.Foreground(tcell.GetColor("#ff7d7d")) + } print_at(j*5+offx, i*3+1+offy, fmt.Sprint(" ", symbol, " "), style2) draw_box(j*5+offx, i*3+offy, j*5+4+offx, i*3+2+offy, style, chars_i) }