Pause the project and reorganize files

I realized that I was overly ambitious with the goals I had set for this
project, as I still am far too inexperienced with Go to complete this
project in a clean manner, time to return to the drawing board and study
more about Go itself
This commit is contained in:
raul 2024-03-18 08:15:02 +01:00
parent 666d4c18c5
commit 7b0d6f7501
3 changed files with 148 additions and 151 deletions

147
game.go
View File

@ -1,147 +0,0 @@
package main
import (
"fmt"
"math/rand/v2"
"os"
//"reflect"
"strconv"
"time"
)
var (
hiddenShips1 [][]string
revealedShips1 [][]string
realShips int = 0
foundShips int = 0
)
func fillShips(tiles int) {
hiddenShips1 = make([][]string, tiles)
revealedShips1 = make([][]string, tiles)
for i := 0; i < tiles; i++ {
hiddenShips1[i] = make([]string, tiles)
revealedShips1[i] = make([]string, tiles)
}
for i := 0; i < len(revealedShips1); i++ {
for i1 := range revealedShips1[i] {
shipChance := rand.IntN(3-0) + 0
if shipChance == 1 {
revealedShips1[i][i1] = "S"
} else {
revealedShips1[i][i1] = "X"
}
}
}
for i := 0; i < len(hiddenShips1); i++ {
for i1 := range hiddenShips1[i] {
hiddenShips1[i][i1] = "_"
}
}
}
func game() {
fmt.Printf("How many rows/columns would you like to have?\nChoice: ")
var shipNum int
fmt.Scanln(&shipNum)
clear()
fillShips(shipNum)
showMatrix(revealedShips1)
fillRealShips(revealedShips1)
for {
clear()
msg := gameStatus()
fmt.Println(msg)
fmt.Printf("X coordinate: ")
x := scanLine()
fmt.Printf("Y coordinate: ")
y := scanLine()
xint, _ := strconv.Atoi(x)
yint, _ := strconv.Atoi(y)
xint--
yint--
// bombingText := fmt.Sprintf("Bombing X: %v / Y: %v.", x, y)
// for i := 0; i < 3; i++ {
// fmt.Printf("\r%v", bombingText)
// time.Sleep(time.Second)
// bombingText = bombingText + "."
// }
fmt.Printf("\nBombed!")
time.Sleep(time.Second)
checkShip(revealedShips1, hiddenShips1, xint, yint)
checkWin()
}
}
func checkShip(visibleMat [][]string, hiddenMat [][]string, x int, y int) {
if visibleMat[x][y] == "S" {
hiddenMat[x][y] = "S"
foundShips++
} else {
hiddenMat[x][y] = "X"
}
}
func fillRealShips(mat [][]string) {
for i := 0; i < len(mat); i++ {
for i1 := range mat[i] {
if mat[i][i1] == "S" {
realShips++
}
}
}
}
func checkWin() {
var winStatus bool = realShips == foundShips
//var winStatus bool = reflect.DeepEqual(revealedShips1, hiddenShips1)
if winStatus == true {
clear()
msg := gameStatus()
fmt.Print(msg)
fmt.Println("You win!")
os.Exit(0)
}
}
func gameStatus() (msg string) {
msg = fmt.Sprintln("_ = Unknown")
msg += fmt.Sprintln("X = Missed")
msg += fmt.Sprintln("S = Ship")
msg += fmt.Sprintln("Player 1 (You):")
msg += fmt.Sprintf("Real ships: %v\nFound ships: %v\n", realShips, foundShips)
showMatrix(hiddenShips1)
return msg
}
func showMatrix(mat [][]string) {
for i := 0; i < len(mat); i++ {
for _, v := range mat[i] {
fmt.Printf("%v ", v)
}
fmt.Println()
}
}
func fillMatrix(mat [][]string) {
for i := 0; i < len(mat); i++ {
for i1 := range mat[i] {
shipChance := rand.IntN(3-0) + 0
if shipChance == 1 {
mat[i][i1] = "S"
realShips++
} else {
mat[i][i1] = "_"
}
}
}
}

View File

@ -32,7 +32,7 @@ func handleConn(conn net.Conn) {
fmt.Println() fmt.Println()
address := getIP(conn) address := getIP(conn)
fmt.Printf("%v connected!\n", address) fmt.Printf("%v connected!\n", address)
go game() //go game()
for { for {
gameStatus() gameStatus()
conn.Write([]byte(gameStatus())) conn.Write([]byte(gameStatus()))
@ -51,6 +51,6 @@ func handleConn(conn net.Conn) {
catchErr(err) catchErr(err)
xint-- xint--
yint-- yint--
checkShip(xint, yint) //checkShip(xint, yint)
} }
} }

View File

@ -1,5 +1,149 @@
package main package main
func singleplayer() { import (
game() "fmt"
"math/rand/v2"
"os"
//"reflect"
"strconv"
//"time"
)
var (
hiddenShips1 [][]string
revealedShips1 [][]string
realShips int = 0
foundShips int = 0
)
func fillShips(tiles int) {
hiddenShips1 = make([][]string, tiles)
revealedShips1 = make([][]string, tiles)
for i := 0; i < tiles; i++ {
hiddenShips1[i] = make([]string, tiles)
revealedShips1[i] = make([]string, tiles)
}
for i := 0; i < len(revealedShips1); i++ {
for i1 := range revealedShips1[i] {
shipChance := rand.IntN(3-0) + 0
if shipChance == 1 {
revealedShips1[i][i1] = "S"
} else {
revealedShips1[i][i1] = "X"
}
}
}
for i := 0; i < len(hiddenShips1); i++ {
for i1 := range hiddenShips1[i] {
hiddenShips1[i][i1] = "_"
}
}
}
func singleplayer() {
fmt.Printf("How many rows/columns would you like to have?\nChoice: ")
var shipNum int
fmt.Scanln(&shipNum)
clear()
fillShips(shipNum)
showMatrix(revealedShips1)
fillRealShips(revealedShips1)
for {
clear()
msg := gameStatus()
fmt.Println(msg)
fmt.Printf("X coordinate: ")
x := scanLine()
fmt.Printf("Y coordinate: ")
y := scanLine()
xint, _ := strconv.Atoi(x)
yint, _ := strconv.Atoi(y)
xint--
yint--
// bombingText := fmt.Sprintf("Bombing X: %v / Y: %v.", x, y)
// for i := 0; i < 3; i++ {
// fmt.Printf("\r%v", bombingText)
// time.Sleep(time.Second)
// bombingText = bombingText + "."
// }
// go func() {
// fmt.Printf("\nBombed!")
// time.Sleep(time.Second)
// }()
checkShip(revealedShips1, hiddenShips1, xint, yint)
checkWin()
}
}
func checkShip(visibleMat [][]string, hiddenMat [][]string, x int, y int) {
if visibleMat[x][y] == "S" {
hiddenMat[x][y] = "S"
foundShips++
} else {
hiddenMat[x][y] = "X"
}
}
func fillRealShips(mat [][]string) {
for i := 0; i < len(mat); i++ {
for i1 := range mat[i] {
if mat[i][i1] == "S" {
realShips++
}
}
}
}
func checkWin() {
var winStatus bool = realShips == foundShips
//var winStatus bool = reflect.DeepEqual(revealedShips1, hiddenShips1)
if winStatus == true {
clear()
msg := gameStatus()
fmt.Print(msg)
fmt.Println("You win!")
os.Exit(0)
}
}
func gameStatus() (msg string) {
msg = fmt.Sprintln("_ = Unknown")
msg += fmt.Sprintln("X = Missed")
msg += fmt.Sprintln("S = Ship")
msg += fmt.Sprintln("Player 1 (You):")
msg += fmt.Sprintf("Real ships: %v\nFound ships: %v\n", realShips, foundShips)
showMatrix(hiddenShips1)
return msg
}
func showMatrix(mat [][]string) {
for i := 0; i < len(mat); i++ {
for _, v := range mat[i] {
fmt.Printf("%v ", v)
}
fmt.Println()
}
}
func fillMatrix(mat [][]string) {
for i := 0; i < len(mat); i++ {
for i1 := range mat[i] {
shipChance := rand.IntN(3-0) + 0
if shipChance == 1 {
mat[i][i1] = "S"
realShips++
} else {
mat[i][i1] = "_"
}
}
}
} }