Translate

viernes, 16 de diciembre de 2022

Juego de Serie en Go


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!!