0% acharam este documento útil (0 voto)
21 visualizações13 páginas

Jogo das Tendências: Validação e Legendas

O documento contém um código em Kotlin que implementa um jogo de tendas, incluindo funções para criar menus, validar dados de entrada, ler e processar arquivos, e gerar um mapa do jogo. As funções também tratam de validações como tamanho do mapa e data de nascimento do jogador. O código é estruturado para manipular a representação do terreno e as coordenadas dentro do jogo.

Enviado por

Noob Factor
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
21 visualizações13 páginas

Jogo das Tendências: Validação e Legendas

O documento contém um código em Kotlin que implementa um jogo de tendas, incluindo funções para criar menus, validar dados de entrada, ler e processar arquivos, e gerar um mapa do jogo. As funções também tratam de validações como tamanho do mapa e data de nascimento do jogador. O código é estruturado para manipular a representação do terreno e as coordenadas dentro do jogo.

Enviado por

Noob Factor
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd

import [Link].

File

fun criaMenu(): String {

return "\nBem vindo ao jogo das tendas\n\n1 - Novo jogo\n0 - Sair\n"


}
fun validaTamanhoMapa(numLinhas: Int, numColunas: Int): Boolean{

return (numLinhas==6 && numColunas==5)||(numLinhas==6 && numColunas==6)||


(numLinhas==8 && numColunas==8)||
(numLinhas==10 && numColunas==10)||(numLinhas==8 && numColunas==10)||
(numLinhas==10 && numColunas==8)

}
fun validaDataNascimento(data: String?) : String?{
val invalida = "Data invalida"
val underage = "Menor de idade nao pode jogar"

if(data== null || [Link] != 10){


return invalida
}
val dia = ([Link](0).toString()+[Link](1).toString())
val mes = ([Link](3).toString()+[Link](4).toString())
val ano = ([Link](6).toString()+[Link](7).toString()+[Link](8).toString()
+[Link](9).toString())

if ([Link] != 2 || [Link] != 2 || [Link] != 4){


return invalida
}
if([Link]() in 1900..2022){
if ([Link]() in 1..12){

if ([Link]() == 4||[Link]() ==6 || [Link]() == 9 ||


[Link]() == 11){

if ([Link]() > 30 || [Link]() < 1){


return invalida
}
if (([Link]() == 2004 && [Link]() == 11) || ([Link]() >
2004)){
return underage
}

return null
}
else if ([Link]() == 2){
if([Link]() % 4 == 0 && ([Link]() % 100 != 0) || ([Link]()
% 400 == 0)){

if ([Link]() > 29 ||[Link]() < 1 ){

return invalida
}
if ([Link]() > 2004){
return underage
}

return null
}
if ([Link]() > 28 || [Link]() < 1){
return invalida
}
if ([Link]() > 2004){
return underage
}
return null
} else{
if ([Link]() > 31 || [Link]() < 1){
return invalida
}
if (([Link]() == 2004 && [Link]() == 12) || ([Link]() >
2004)){
return underage
}
return null
}

}
return invalida
}
return invalida
}
fun criaLegendaHorizontal(numColuna: Int): String{
var countColuna = 0
var legenda=""
var codigoAscii=65
var letras=""
while (countColuna < numColuna && codigoAscii <= 90) {

letras=( [Link]()).toString()

if(countColuna > numColuna-2) {

legenda = legenda + "$letras"

}else{
legenda=legenda+"$letras | "
}
codigoAscii++
countColuna++
}

return legenda
}
fun criaLegendaVertical(numColuna: Int): String{
var countColuna = 0
var legenda=""
var codigoAscii=65
var letras=""
while (countColuna < numColuna && codigoAscii <= 90) {

letras=( [Link]()).toString()

codigoAscii++
countColuna++
}
return letras
}

fun leContadoresDoFicheiro(numLines: Int, numColumns: Int, verticais: Boolean):


Array<Int?>{

val linhas= File("$numLines"+"x"+"$numColumns"+".txt").readLines()

if(verticais) {
val array:Array<Int?> =Array(numColumns,{null})

val coluna=linhas[0].split(",")

for (posicao in 0..numColumns - 1) {

if (coluna[posicao].toInt() > 0) {

array[posicao] = coluna[posicao].toInt()
}
}
return array
}else{
val array:Array<Int?> =Array(numLines,{null})

val linha=linhas[1].split(",")

for (posicao in 0..numLines - 1) {

if (linha[posicao].toInt() > 0) {

array[posicao] = linha[posicao].toInt()
}
}
return array
}
}
fun criaLegendaContadoresHorizontal(contadoresHorizontal: Array<Int?>): String {

var contadorshorizontalstr = ""

val posicao = 0

for (posicao in 0..[Link] - 1) {

if (contadoresHorizontal[posicao] == null) {
contadoresHorizontal[posicao]=0//aqui
contadorshorizontalstr =
contadorshorizontalstr+contadoresHorizontal[posicao]+" "

} else if(posicao==[Link]-1) {

contadorshorizontalstr =
contadorshorizontalstr+contadoresHorizontal[posicao].toString()

}else{

contadorshorizontalstr =contadorshorizontalstr+
contadoresHorizontal[posicao].toString()+" "
}
}
return contadorshorizontalstr
}

fun leTerrenoDoFicheiro(numLines: Int, numColumns: Int): Array<Array<String?>> {

val array: Array<Array<String?>> = Array(numLines, { Array(numColumns,


{ null }) })

val linhas = File("$numLines" + "x" + "$numColumns" + ".txt").readLines()

val coordenadas = ""

for (posicao in 2..[Link] - 1) {

val partes = linhas[posicao].split(",")

for (linha in 0..[Link] - 1) {

for (coluna in 0..array[linha].size - 1) {

if (coluna == partes[1].toInt() && linha == partes[0].toInt()) {


array[linha][coluna] = "A"
}
}
}
}
return array
}

fun processaCoordenadas(coordenadasStr: String?, numLines: Int, numColumns: Int):


Pair<Int,Int>?{
var par:Pair<Int,Int>?= Pair(0,0)

if (numLines > 0 || numColumns > 0){

if (coordenadasStr != null) {

if ([Link] == 3){

if (coordenadasStr[1] == ',') {

if (coordenadasStr[0].toString().toInt() == numLines ||
validaTamanhoMapa(numLines,numColumns) == true) {

if (coordenadasStr[2].isUpperCase()){

if (coordenadasStr[2] in 'A'..'Z') {

if(par!=null){

var countColuna=0

for(letras in 'A'..'Z' ){
if(letras<coordenadasStr[2]){
countColuna++
}
}
par=Pair(coordenadasStr[0].toString().toInt()-
1,countColuna)
return par
}

}
}
}
}
}
}

}
return null
}
fun criaTerreno(terreno: Array<Array<String?>>, contadoresVerticais: Array<Int?>?,
contadoresHorizontais: Array<Int?>?,
mostraLegendaHorizontal: Boolean=true, mostraLegendaVertical:
Boolean=true): String {
var mapa = ""
var linha = 0
var contaverticais = ""

if (contadoresVerticais != null) {
for (count in 0 until [Link]){
if (criaLegendaContadoresHorizontal(contadoresVerticais )!=
contadoresVerticais[count].toString()){
if (contadoresVerticais[count] == 0){
contaverticais += ""
}
contaverticais += " "
}
else{
contaverticais +=
criaLegendaContadoresHorizontal(contadoresVerticais)
}
}
mapa += contaverticais + "\n"
}
else{
mapa += " "
}

if (mostraLegendaHorizontal && mostraLegendaVertical) {


if(contadoresVerticais!=null) {
mapa += " " +
criaLegendaContadoresHorizontal(contadoresVerticais!!) + "\n"//aqui
}
mapa += " " + "| " + criaLegendaHorizontal(terreno[1].size) +
"\n"//aqui
while (linha <= [Link] - 1) {
var linhastr=criaLegendaVertical(linha)
if (contadoresHorizontais != null){

if (contadoresHorizontais[linha].toString() != "null"){
mapa += contadoresHorizontais[linha].toString()
}
else{
mapa += " "
}
}
mapa += " " + "$linhastr |"//aqui
for (coluna in 0 until terreno[linha].size) {

if (terreno[linha][coluna] != null) {

if (terreno[linha][coluna] == "A") {

terreno[linha][coluna] = "△"
} else {
terreno[linha][coluna] += ""
}
} else {
terreno[linha][coluna] = ""
}
if (coluna != terreno[linha].size - 1) {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]} |"
} else if (terreno[linha][coluna] == "T") {
mapa += " ${terreno[linha][coluna]} |"
}
else {
mapa += " ${terreno[linha][coluna]} |"
}
} else {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]}"
} else if (terreno[linha][coluna] == "T") {
mapa += " ${terreno[linha][coluna]}"
}
else {
mapa += " ${terreno[linha][coluna]} "
}
}

}
if (linha == [Link] - 1) {
mapa += ""
} else {
mapa += "\n"
}
linha++
}

}
if (!mostraLegendaHorizontal && mostraLegendaVertical) {

while (linha <= [Link] - 1) {


var linhastr=criaLegendaVertical(linha)
if (contadoresHorizontais != null){

if (contadoresHorizontais[linha].toString() != "null"){
mapa += contadoresHorizontais[linha].toString()
}
else{
mapa += " "
}
}
if (linha == 0){
mapa += " " + "${linhastr} |"
}
else{
mapa += " " + "${linhastr} |"
}

for (coluna in 0 until terreno[linha].size) {

if (terreno[linha][coluna] != null) {

if (terreno[linha][coluna] == "A") {

terreno[linha][coluna] = "△"
} else {
terreno[linha][coluna] += ""
}
} else {
terreno[linha][coluna] = ""
}
if (coluna != terreno[linha].size - 1) {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]} |"
} else if (terreno[linha][coluna] == "T") {
mapa += " ${terreno[linha][coluna]} |"
}
else {
mapa += " ${terreno[linha][coluna]} |"
}
} else {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]}"
} else {
mapa += " ${terreno[linha][coluna]} "
}
}

}
if (linha == [Link] - 1) {
mapa += ""
} else {
mapa += "\n"
}
linha++
}

}
if (mostraLegendaHorizontal && !mostraLegendaVertical) {
mapa += " " + "| " + criaLegendaHorizontal(terreno[1].size) + "\n"
while (linha <= [Link] - 1) {

if (contadoresHorizontais != null){

if (contadoresHorizontais[linha].toString() != "null"){
mapa += contadoresHorizontais[linha].toString()
}
else{
mapa += " "
}
}
if (linha == 0){
mapa += " "+"|"
}
else{
mapa += " "+"|"
}

for (coluna in 0 until terreno[linha].size) {

if (terreno[linha][coluna] != null) {

if (terreno[linha][coluna] == "A") {

terreno[linha][coluna] = "△"
} else {
terreno[linha][coluna] += ""
}
} else {
terreno[linha][coluna] = ""
}
if (coluna != terreno[linha].size - 1) {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]} |"
} else if (terreno[linha][coluna] == "T") {
mapa += " ${terreno[linha][coluna]} |"
}
else {
mapa += " ${terreno[linha][coluna]} |"
}
} else {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]}"
} else {
mapa += " ${terreno[linha][coluna]} "
}
}

}
if (linha == [Link] - 1) {
mapa += ""
} else {
mapa += "\n"
}
linha++
}

}
if (!mostraLegendaHorizontal && !mostraLegendaVertical) {

while (linha <= [Link] - 1) {

if (contadoresHorizontais != null){

if (contadoresHorizontais[linha].toString() != "null"){
mapa += contadoresHorizontais[linha].toString()
}
else{
mapa += " "
}
}
if (linha == 0){
mapa += " "+ "|"
}
else{
mapa += " "+ " |"
}
for (coluna in 0 until terreno[linha].size) {

if (terreno[linha][coluna] != null) {

if (terreno[linha][coluna] == "A") {

terreno[linha][coluna] = "△"
} else {
terreno[linha][coluna] += ""
}
} else {
terreno[linha][coluna] = ""
}
if (coluna != terreno[linha].size - 1) {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]} |"
} else if (terreno[linha][coluna] == "T") {
mapa += " ${terreno[linha][coluna]} |"
}
else{
mapa += " ${terreno[linha][coluna]} |"
}
} else {
if (terreno[linha][coluna] == "△") {
mapa += " ${terreno[linha][coluna]}"
} else {
mapa += " ${terreno[linha][coluna]} "
}
}

}
if (linha == [Link] - 1) {
mapa += ""
} else {
mapa += "\n"
}
linha++
}

return mapa
}
fun temArvoreAdjacente(terreno: Array<Array<String?>>, coords: Pair<Int, Int>) :
Boolean {
for (linha in 0 until [Link]) {
for (coluna in 0 until terreno[linha].size) {

if ((linha==[Link] && (coluna == [Link] - 1 || coluna ==


[Link] + 1))||

(coluna==[Link]&&(linha == [Link] - 1 || linha ==


[Link] + 1))) {

if (terreno[linha][coluna] == "A") {

return true
}
}
}

return false
}
fun temTendaAdjacente(terreno: Array<Array<String?>>, coords: Pair<Int, Int>) :
Boolean{
for (linha in 0 until [Link]) {

for (coluna in 0 until terreno[linha].size) {

if ((linha==[Link] && (coluna == [Link] - 1 || coluna ==


[Link] + 1))||

(coluna==[Link]&&(linha == [Link] - 1 || linha ==


[Link] + 1))||

((linha==[Link]-1 || linha==[Link]+1) &&

(coluna == [Link] - 1 || coluna == [Link] +


1))) {

if (terreno[linha][coluna] == "T") {

return true
}
}
}

return false
}
fun contaTendasColuna(terreno:Array<Array<String?>>, coluna: Int): Int{
var countTendas=0

for(linha in 0..[Link]-1){

if(coluna in 0..terreno[linha].size-1){
if(coluna==terreno[linha].size-1){
return -1
}
if(terreno[linha][coluna]=="T"){

countTendas++
return countTendas
}
}

}
return 0
}
fun contaTendasLinha(terreno: Array<Array<String?>>, linha: Int):Int{

if(linha in 0..[Link]-1){

var countTendas=0

for(coluna in 0..terreno[linha].size-1){

if(terreno[linha][coluna]=="T"){

countTendas++
}
}
return countTendas
}
return 0
}
fun colocaTenda(terreno: Array<Array<String?>>, coords: Pair<Int, Int>): Boolean {

for(linha in 0..[Link]-1){

for(coluna in 0..terreno[linha].size-1){

if(linha==[Link] && coluna==[Link]){

if(terreno[linha][coluna]==null){

if(temArvoreAdjacente(terreno,coords)==true){

if(temTendaAdjacente(terreno, coords)==false){

terreno[linha][coluna]="T"

return true
}
}
}else{
terreno[linha][coluna]=""
}
}
}
}
return false
}

fun terminouJogo(terreno: Array<Array<String?>>, contadoresVerticais: Array<Int?>,


contadoresHorizontais: Array<Int?>): Boolean{
for(linha in 0..[Link]-1){
for(coluna in 0..terreno[linha].size-1){
if(contaTendasLinha(terreno, linha)==contadoresHorizontais[linha]){
if(contaTendasColuna(terreno,coluna)==contadoresVerticais[coluna]){
return true
}
}
}
}
return false

}
fun main() {
do {
var opcaoInvalida = true
val invalido = "Resposta invalida"
val underage = "Menor de idade nao pode jogar"
println(criaMenu())
var menu = readln().toIntOrNull()
while (menu == null || menu != 0 && menu != 1) {
println("Opcao invalida")
println(criaMenu())
menu = readln().toIntOrNull()
}
if (menu == 1) {
println("Quantas linhas?")
var linhas = readln().toIntOrNull()
while (!(linhas != null && linhas > 0)) {
println(invalido)
println("Quantas linhas?")
linhas = readLine()?.toIntOrNull()
}
println("Quantas colunas?")
var colunas = readln().toIntOrNull()
while (!(colunas != null && colunas!! > 0) || !(colunas > 0)) {
println(invalido)
println("Quantas colunas?")
colunas = readln().toInt()
}
if (!validaTamanhoMapa(linhas, colunas)) {
println("Terreno invalido")
opcaoInvalida = false

}
if (linhas == 10 && colunas == 10) {
println("Qual a sua data de nascimento? (dd-mm-yyyy)")
var nascimento = readLine().toString()

if (validaDataNascimento(nascimento) == underage) {
println(validaDataNascimento(nascimento))
opcaoInvalida = false
}
while (validaDataNascimento(nascimento) == "Data invalida") {
println(validaDataNascimento(nascimento))
println("Qual a sua data de nascimento? (dd-mm-yyyy)")
nascimento = readln()
if (validaDataNascimento(nascimento) == underage) {
println(validaDataNascimento(nascimento))
opcaoInvalida = false
}
}
}
if ((opcaoInvalida)) {
do {
val terreno = leTerrenoDoFicheiro(linhas, colunas)
val contadoresHorizontais = leContadoresDoFicheiro(linhas,
colunas, false)
val contadoresVerticais = leContadoresDoFicheiro(linhas,
colunas, true)
println("")
println(
criaTerreno(
terreno,
contadoresVerticais,
contadoresHorizontais
)
)
println("Coordenadas da tenda? (ex: 1,B)")
var coordenadas = readln()
while (processaCoordenadas(coordenadas, linhas, colunas) ==
null) {
println(
"Coordenadas invalidas"
)
println("Coordenadas da tenda? (ex: 1,B)")
coordenadas = readln()

while (colocaTenda(terreno, processaCoordenadas(coordenadas,


linhas, colunas)!!) == false) {
println(
"Tenda nao pode ser colocada nestas coordenadas")
println("Coordenadas da tenda? (ex: 1,B)")
coordenadas = readln()
while (processaCoordenadas(coordenadas, linhas, colunas) ==
null) {
println(
"Coordenadas invalidas"
)
println("Coordenadas da tenda? (ex: 1,B)")
coordenadas = readln()
}
}

colocaTenda(terreno,processaCoordenadas(coordenadas,linhas,colunas)!!)==true
println(criaTerreno(terreno, contadoresVerticais,
contadoresHorizontais))

}while (!terminouJogo(terreno,
contadoresVerticais,contadoresHorizontais))
println("Parabens! Terminou o jogo!\n")
}

}
}while (menu == 1)
return
}

Você também pode gostar