Cuando quiero aprender un nuevo lenguaje desarrollo un juego de series, es decir aparece una serie con un valor faltante y el jugador debe completarlo.
Uno de los requerimientos no funcionales es que se pueda agregar una serie nueva fácilmente, para cumplirlo vamos a utilizar las ventajas de go.
Empecemos desarrollo de la serie, la serie tiene como responsabilidad generarse :
func IniciarSecuencia() [4]int {
rand.Seed(time.Now().Unix())
semilla := rand.Intn(3)
switch semilla {
case 0:
return generarSecuenciaPar()
case 1:
return generarSecuenciaInpar()
default:
return generarFibonacci()
}
}
Esta función genera la serie y para eso utiliza diferentes funciones que generan diferentes tipos de secuencias :
import (
"math/rand"
"time"
)
func generarSecuenciaPar() [4]int {
var resultado [4]int
rand.Seed(time.Now().Unix())
semilla := rand.Intn(100)
for i := 0; i < 4; i++ {
resultado[i] = semilla + i*2
}
return resultado
}
func generarSecuenciaInpar() [4]int {
var resultado [4]int
rand.Seed(time.Now().Unix())
semilla := rand.Intn(100)
for i := 0; i < 4; i++ {
resultado[i] = semilla + i*2 + 1
}
return resultado
}
func generarFibonacci() [4]int {
var resultado [4]int
rand.Seed(time.Now().Unix())
semilla := rand.Intn(50)
for i := 0; i < 4; i++ {
if i < 2 {
resultado[i] = semilla
} else {
resultado[i] = resultado[i-1] + resultado[i-2]
}
}
return resultado
}
Y listo!! ahora en el main tenemos que llamar a esta función y ver si esta bien el resultado:
package main
import (
"example/secuencia/secuencia/model"
"fmt"
"os"
)
func main() {
fmt.Println("------------- Bienvenido !! ----------------")
exit := 'Y'
puntaje := 0
for exit != 'N' {
secuencia := model.IniciarSecuencia()
for i := 0; i < len(secuencia); i++ {
if i != 2 {
fmt.Print(secuencia[i])
fmt.Print(" ")
} else {
fmt.Print("________ ")
}
}
fmt.Println()
fmt.Println("--------------------------")
fmt.Print(" Faltante :")
var nro int
n, err := fmt.Scanf("%d\n", &nro)
if err != nil {
fmt.Println(n, err)
os.Exit(n)
}
if nro == secuencia[2] {
fmt.Print(" Ganaste!! ")
puntaje++
} else {
fmt.Print(" Perdiste!! ")
puntaje--
}
fmt.Println(" Puntaje : ", puntaje)
fmt.Print(" Desea continuar jugando ? (Y/N) ")
fmt.Scanf("%c\n", &exit)
}
}
Y eso es todo a jugar se a dicho!!
Dejo el repositorio git: https://github.com/emanuelpeg/secuenciaGolang