Ir para conteúdo

Visual G [Gamming]


Posts Recomendados

Olá pessoal, sou programador nível intermediário, faço Ciência da Computação na UEL, porém sou novo no fórum....

Gostaria de ter uma ideia do conhecimento dos usuários que frequentam a área de programação e tive a ideia de criar um tópico para que cada usuário que "manje" de programação, faça um jogo e poste-o aqui.

 

Porque VisualG?

 

R:Bom o visualg, para ingressantes na área de programação que não possuem base e não faziam ideia do que significava uma linguagem de programação é uma ótima linguagem para aprender

 

Dicas:Para você que vai participar, utilize vetores, matrizes, laços de iterações, condições, procedimentos, funções, variáveis e sempre, sempre comentando seu código e edentando ele.

 

OBS:Use sua criatividade, você pode fazer até mesmo um rpg.

Bom trabalho!

 

 

 

Vejam alguns exemplos de sources existentes na internet:

 

 

 

Jogo da Forca - Edilson Spalaor

 

 

algoritmo "Jogo da Forca"
// Autor : Edilson Spalaor
// Data : 3/3/2011 à 04/03/2011
var
palavra:vetor[0..2] de caractere
elemento:vetor[1..20] de caractere
posicao:vetor[1..3] de inteiro
restante:vetor[1..3] de caractere
qtdrestante:vetor[1..2] de inteiro
acao:vetor[1..2] de caractere
info:caracter
tentativas,chances:inteiro
escolhida,letra:caractere
aleat,qtdcaracteres,i,pontos,pontosperdidos:inteiro
inicio
palavra[0]<-"oftalmologia"
palavra[1]<-"elemento"
palavra[2]<-"batata"
aleat<- RandI(3)
escolhida<-palavra[aleat]
qtdcaracteres<-compr (escolhida)
chances<-15
para i de 1 ate qtdcaracteres faca
elemento<-"_ "
fimpara
enquanto (pontos<qtdcaracteres) e (tentativas<chances) faca
limpatela
escreval("":35,"A FORCA")
escreval("")
escreva("Palavra: ")
para i de 1 ate qtdcaracteres faca
escreva("":1,Maiusc (elemento) )
fimpara
escreval("")
escreva("Tente uma letra: ")
tentativas<-tentativas+1
leia(letra)
letra<-Minusc (letra)
acao[1]<-"on"
acao[2]<-"on"
para i de 1 ate qtdcaracteres faca
se (letra = (Copia (escolhida ; i, 1))) e (acao[1]="on") entao
acao[1]<-"off"
posicao[1]<-(Pos (letra, escolhida))
se (elemento[posicao[1]]="_ ") entao
elemento[posicao[1]]<-letra
pontos<-pontos+1
fimse
restante[1]<-(Copia (escolhida ; posicao[1]+1, qtdcaracteres-posicao[1]) )
qtdrestante[1]<-compr (restante[1])
para i de 1 ate qtdrestante[1] faca
se (letra = (Copia (restante[1] ; i, 1) )) e (acao[2]="on") entao
acao[2]<-"off"
posicao[2]<-(Pos (letra, restante[1]))
se (elemento[posicao[1]+posicao[2]]="_ ") entao
elemento[posicao[1]+posicao[2]]<-letra
pontos<-pontos+1
fimse
fimse
fimpara
restante[2]<-(Copia (escolhida ; posicao[1]+posicao[2]+1, qtdcaracteres-posicao[2]) )
qtdrestante[2]<-compr (restante[2])
para i de 1 ate qtdrestante[2] faca
se letra = (Copia (restante[2] ; i, 1) ) entao
posicao[3]<-(Pos (letra, restante[2]))
se (elemento[posicao[1]+posicao[2]+posicao[3]]="_ ") entao
elemento[posicao[1]+posicao[2]+posicao[3]]<-letra
pontos<-pontos+1
fimse
fimse
fimpara
fimse
fimpara
fimenquanto
limpatela
escrevaL("":35,"A FORCA")
escreval("")
escreva("Palavra: ")
para i de 1 ate qtdcaracteres faca
escreva("":1,Maiusc (elemento) )
fimpara
se tentativas<chances entao
escreval("")
escreval("Parabens!Você acertou!")
senao
escreval("")
escreval("")
escreval("Você excedeu o número de tentativas! =(")
fimse
escreval("")
escrevaL("FIM DO JOGO")
escreval("")
fimalgoritmo

 

 

 

 

 

 

 

 

 

 

Jogo da Forca - Thiago Aguiar

 

 

algoritmo "Jogo da Forca"

// Autor : Thiago Aguiar
// Data : 12/9/2009

var
frases,respostas: vetor [0..9] de caractere
tamanho
,ind,pergunta,erros,qtd: inteiro
letra
,achou,novojogo,opcao,chute,sexo: caractere
encontrou
: vetor [1..20] de caractere
resposta
: vetor [0..20] de caractere

//Inicio dos Procedimentos
Procedimento "limpa"
inicio
para ind
:= 1 ate tamanho faca
encontrou
[ind]<- "_ "
fimpara
fimprocedimento



Procedimento "inicializa"
inicio
limpatela
erros
<-0
pergunta<- randi(10)
resposta[0]:= respostas[pergunta]
tamanho <- compr(resposta[0])
limpa
novojogo
<- "S"
fimprocedimento


Procedimento "novo_jogo"
inicio
escreval
(" ")
escreva ("Deseja jogar um novo jogo? im ou [N]ão? ")
leia(novojogo)
se novojogo = "S" então
inicializa
senao
escreval
("Pressione ESC para encerrar o jogo.")
fimse
fimprocedimento



Procedimento "fim_de_jogo"
inicio
escreval
("FIM DE JOGO, VOCÊ PERDEU!!")
novo_jogo
fimprocedimento


procedimento
"desenha"
inicio
se erros
= 1 então
escreval
(" ( ) ")
fimse

se erros
= 2 então
escreval
(" ( ) ")
escreval(" _|_ ")
fimse

se erros
= 3 então
escreval
(" ( ) ")
escreval(" _|_ ")
escreval(" | ")
fimse

se erros
= 4 então
se sexo
= "F" então
escreval
(" ________ ")
escreval(" | | ")
escreval(" | mm|mm ")
escreval(" | m(º_º)m ")
escreval(" | mm_Y_mm ")
escreval(" | | ")
escreval(" | / \ ")
escreval(" | ")
escreval(" | ")
escreval(" _______|_______ ")
fim_de_jogo
senao
escreval
(" ________ ")
escreval(" | | ")
escreval(" | | ")
escreval(" | (º_º) ")
escreval(" | _Y_ ")
escreval(" | | ")
escreval(" | / \ ")
escreval(" | ")
escreval(" | ")
escreval(" _______|_______ ")
fim_de_jogo
fimse
fimse
fimprocedimento

procedimento
"sair"
inicio
fimalgoritmo
fimprocedimento


procedimento
"adaptacao"
inicio
se pergunta
= 0 então
resposta
[0]<- "FLAMENGO"
resposta[1]<- "F"
resposta[2]<- "L"
resposta[3]<- "A"
resposta[4]<- "M"
resposta[5]<- "E"
resposta[6]<- "N"
resposta[7]<- "G"
resposta[8]<- "O"
fimse

se pergunta
= 1 então
resposta
[0]<- "FLUMINENSE"
resposta[1]<- "F"
resposta[2]<- "L"
resposta[3]<- "U"
resposta[4]<- "M"
resposta[5]<- "I"
resposta[6]<- "N"
resposta[7]<- "E"
resposta[8]<- "N"
resposta[9]<- "S"
resposta[10]<- "E"
fimse

se pergunta
= 2 então
resposta
[0]<- "PALMEIRAS"
resposta[1]<- "P"
resposta[2]<- "A"
resposta[3]<- "L"
resposta[4]<- "M"
resposta[5]<- "E"
resposta[6]<- "I"
resposta[7]<- "R"
resposta[8]<- "A"
resposta[9]<- "S"
fimse

se pergunta
= 3 então
resposta
[0]<- "CORINTHIAS"
resposta[1]<- "C"
resposta[2]<- "O"
resposta[3]<- "R"
resposta[4]<- "I"
resposta[5]<- "N"
resposta[6]<- "T"
resposta[7]<- "H"
resposta[8]<- "I"
resposta[9]<- "A"
resposta[10]<- "S"
fimse

se pergunta
= 4 então
resposta
[0]<- "CRUZEIRO"
resposta[1]<- "C"
resposta[2]<- "R"
resposta[3]<- "U"
resposta[4]<- "Z"
resposta[5]<- "E"
resposta[6]<- "I"
resposta[7]<- "R"
resposta[8]<- "O"
fimse

se pergunta
= 5 então
resposta
[0]<- "IPATINGA"
resposta[1]<- "I"
resposta[2]<- "P"
resposta[3]<- "A"
resposta[4]<- "T"
resposta[5]<- "I"
resposta[6]<- "N"
resposta[7]<- "G"
resposta[8]<- "A"
fimse

se pergunta
= 6 então
resposta
[0]<- "SPORT"
resposta[1]<- "S"
resposta[2]<- "P"
resposta[3]<- "O"
resposta[4]<- "R"
resposta[5]<- "T"
fimse

se pergunta
= 7 então
resposta
[0]<- "NAUTICO"
resposta[1]<- "N"
resposta[2]<- "A"
resposta[3]<- "U"
resposta[4]<- "T"
resposta[5]<- "I"
resposta[6]<- "C"
resposta[7]<- "O"
fimse

se pergunta
= 8 então
resposta
[0]<- "GREMIO"
resposta[1]<- "G"
resposta[2]<- "R"
resposta[3]<- "E"
resposta[4]<- "M"
resposta[5]<- "I"
resposta[6]<- "O"
fimse

se pergunta
= 9 então
resposta
[0]<- "INTERNACIONAL"
resposta[1]<- "I"
resposta[2]<- "N"
resposta[3]<- "T"
resposta[4]<- "E"
resposta[5]<- "R"
resposta[6]<- "N"
resposta[7]<- "A"
resposta[8]<- "C"
resposta[9]<- "I"
resposta[10]<- "O"
resposta[11]<- "N"
resposta[12]<- "A"
resposta[13]<- "L"
fimse
fimprocedimento

inicio
escreva
("Você é do sexo [M]asculino ou [F]eminino? ")
leia(sexo)
achou<- "N"
novojogo<- "S"

frases[0]:="É UM TIME DE FUTEBOL DO RIO DE JANEIRO"
frases[1]:="É UM TIME DE FUTEBOL DO RIO DE JANEIRO"
frases[2]:="É UM TIME DE FUTEBOL DE SÃO PAULO"
frases[3]:="É UM TIME DE FUTEBOL DE SÃO PAULO"
frases[4]:="É UM TIME DE FUTEBOL DE MINAS GERAIS"
frases[5]:="É UM TIME DE FUTEBOL DE MINAS GERAIS"
frases[6]:="É UM TIME DE FUTEBOL DE PERNAMBUCO"
frases[7]:="É UM TIME DE FUTEBOL DE PERNAMBUCO"
frases[8]:="É UM TIME DE FUTEBOL DO RIO GRANDE DO SUL"
frases[9]:="É UM TIME DE FUTEBOL DO RIO GRANDE DO SUL"

respostas[0]:="FLAMENGO"
respostas[1]:="FLUMINENSE"
respostas[2]:="PALMEIRAS"
respostas[3]:="CORINTHIAS"
respostas[4]:="CRUZEIRO"
respostas[5]:="IPATINGA"
respostas[6]:="SPORT"
respostas[7]:="NAUTICO"
respostas[8]:="GREMIO"
respostas[9]:="INTERNACIONAL"
inicializa
repita
se novojogo
= "S" então
adaptacao
limpatela
escreval
("Jogo da Forca V1.0")
escreval(frases[pergunta])
se erros > 0 então
desenha
fimse
para ind
:= 1 ate tamanho faca
escreva
(encontrou[ind])
fimpara
escreval
(" ")
escreval(" ")
escreval("[1] Quero chutar uma letra")
escreval("[2] Quero chutar a palavra")
escreval("[3] Sair")
escreva("A opção escolhida é: ")
leia(opcao)
se opcao = "2" então
escreva
("Digite a palavra: ")
leia(chute)
se resposta[0] = chute então
escreval
("Parabens, você acertou!")
novo_jogo
senao
escreval
("Infelizmente, você errou!")
erros<- 4
desenha
fimse
fimse
se opcao
= "3" então
sair
fimse
se opcao
= "1" então
escreva
("Digite uma letra: ")
leia(letra)
para ind:= 1 ate tamanho faca
se letra
= resposta[ind] então
achou
<- "S"
encontrou[ind]<- letra
qtd
<- qtd+1
se tamanho = qtd então
escreval
(resposta[0])
escreval("Parabéns, você acertou!")
novo_jogo
fimse
fimse
fimpara
fimse
se achou
= "N" então
erros
<- erros+1
desenha
fimse
achou
<- "N"
fimse
se novojogo
= "N" então
sair
fimse
fimrepita ate novojogo
= "N"
fimalgoritmo

 

 

 

 

 

 

 

 

 

 

 

 

Jogo da Velha

 

 

  1. var
  2. nome:vetor[1..2] de caractere
v:vetor[1..3,1..3]de caractere
ctr:caractere
i,j,cont1,cont2,auxc,auxl,controd:inteiro
inicio
escreval (" _|_|_ ***********************")
escreval (" _|_|_ **** JOGO DA VELHA ****")
escreval (" | | ***********************")
escreval
para i de 1 ate 2 faca
escreval ("Digite o Nome do",i,"° Jogador")
leia (nome)
fimpara
escreval ("********************************")
escreval ("* ",nome[1]," Jogador 1 ==> [X] *")
escreval ("* ",nome[2]," Jogador 2 ==> [O] *")
escreval ("********************************")
escreval
escreval ("Efetuando Sorteio do 1° Jogador que irá jogar")
i<-0
repita
para i de 1 ate 3 faca
para j de 1 ate 3 faca
v[i,j]<-"¨"
fimpara
fimpara
i<-0
enquanto (i<1)faca
i<-randi(3)
se (i=0) entao
i<-randi(3)
fimse
fimenquanto
se (i=1) entao
escreval ("*",nome[1]," Jogador 1 Começa *")
senao
escreval ("*",nome[2]," Jogador 2 Começa *")
fimse
escreval (" | | ")
escreval (" 1,1 | 1,2 | 1,3 ")
escreval (" | | ")
escreval (" ___________|__________|__________ ")
escreval (" | | ")
escreval (" 2,1 | 2,2 | 2,3 ")
escreval (" | | ")
escreval (" ___________|__________|__________ ")
escreval (" | | ")
escreval (" 3,1 | 3,2 | 3,3 ")
escreval (" | | ")
escreval (" | | ")
escreval
repita
escreval ("Jogador ",i," Insira a Coordenada desejada [Linha depois a Coluna embaixo]")
leia (auxl,auxc)
se (v[auxl,auxc]="X") ou (v[auxl,auxc]="O") entao
escreval ("Este Lugar já esta sendo usado <=============")
escreval ("Digite Uma Posição Vazia <=================")
senao
se (i=1)entao
v[auxl,auxc]<-"X"
i<-i+1
controd<-controd+1
senao
se (i=2) entao
v[auxl,auxc]<-"O"
i<-1
controd<-controd+1
fimse
fimse
fimse
escreval (" | | ")
escreval (" ",v[1,1]," | ",v[1,2]," | ",v[1,3]," ")
escreval (" | | ")
escreval (" ___________|__________|__________ ")
escreval (" | | ")
escreval (" ",v[2,1]," | ",v[2,2]," | ",v[2,3]," ")
escreval (" | | ")
escreval (" ___________|__________|__________ ")
escreval (" | | ")
escreval (" ",v[3,1]," | ",v[3,2]," | ",v[3,3]," ")
escreval (" | | ")
escreval (" | | ")
escreval
escreval ("PLACAR PARCIAL")
escreval (nome[1]," ===> ",cont1)
escreval (nome[2]," ===> ",cont2)
escreval ("O PLACAR É Atualizado no fim da rodada")
escreval
se (v[1,1]=v[2,2]) e (v[2,2]=v[3,3]) entao
se (v[1,1]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
controd<-9
senao
se (v[1,1]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (v[1,3]=v[2,2]) e (v[2,2]=v[3,1]) entao
se (v[1,3]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
controd<-9
senao
se (v[1,3]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (v[1,1]=v[1,2]) e (v[1,2]=v[1,3]) entao
se (v[1,1]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
controd<-9
senao
se (v[1,1]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (v[2,1]=v[2,2]) e (v[2,2]=v[2,3]) entao
se (v[2,1]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
controd<-9
senao
se (v[2,1]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (v[3,1]=v[3,2]) e (v[3,2]=v[3,3]) entao
se (v[3,1]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
controd<-9
senao
se (v[3,1]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (v[1,1]=v[2,1]) e (v[2,1]=v[3,1]) entao
se (v[1,1]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
controd<-9
senao
se (v[1,1]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (v[1,2]=v[2,2]) e (v[2,2]=v[3,2]) entao
se (v[1,2]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
controd<-9
senao
se (v[1,2]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (v[1,3]=v[2,3]) e (v[2,3]=v[3,3]) entao
se (v[1,3]="x") entao
escreval ("Jogador 1 Venceu")
escreval (nome[1]," Parabens")
cont1<-cont1+1
senao
se (v[1,3]="O") entao
escreval ("Jogador 2 Venceu")
escreval (nome[2]," Parabens")
cont2<-cont2+1
controd<-9
fimse
fimse
senao
se (controd=9) entao
escreval ("IXAAAAAAAAA DEU VELHAAAAAAAAAAAAAA")
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
ate (controd=9)
escreval ("Deseja Jogar Novamente ,[n]?")
leia (ctr)
ate (ctr="n")
limpatela
escreval ("PLACAR FINAL")
escreval (nome[1]," ===> ",cont1)
escreval (nome[2]," ===> ",cont2)
escreval ("Obrigado Por ter Jogado Velha's Gaming")
fimalgoritmo

 

 

Link para o comentário
Compartilhar em outros sites

É bem util pra quem tá começando em programação,principalmente por ser em uma linguagem baseada em "Portugol",porém mesmo sendo útil para iniciantes, ainda prefiro Pascal pois já te ensina a se preparar para outras linguagens como Java,C,C++ e etc..

 

 

Abrç.

Link para o comentário
Compartilhar em outros sites

É bem util pra quem tá começando em programação,principalmente por ser em uma linguagem baseada em "Portugol",porém mesmo sendo útil para iniciantes, ainda prefiro Pascal pois já te ensina a se preparar para outras linguagens como Java,C,C++ e etc..

 

 

Abrç.

De certa forma concordo com você, porém para usuários que não possuem base nenhuma e onde essa maioria ainda nao domina o inglês, uma linguagem em portugês pode facilitar a compreensão da lógica, ponto mais importante para se tornar um programador, pois a preparação para linguagens de alto nível é sim necessária mas se o programador não tiver uma boa lógica não adianta estar preparado para seguir. Devido à isso a maioria das faculdades optam por ensinar primeiramente uma linguagem baseada em "Portugol"...

Abraços

Link para o comentário
Compartilhar em outros sites

Achei interessante o Visual G !

 

Você tem skype? se tiver me add ai kluivert.davi

é só para tirar algumas duvidas sobre o Visual G

Colega, não teria como eu tirar por mensagem privada ou aqui no tópico mesmo? Digo porque meus tempos vagos são poucos e aleatórios, eu trabalho... Mas se não tiver como eu te adiciono lá e quando der conversamos,

Abraços

Link para o comentário
Compartilhar em outros sites

 

Achei interessante o Visual G !

 

Você tem skype? se tiver me add ai kluivert.davi

é só para tirar algumas duvidas sobre o Visual G

Colega, não teria como eu tirar por mensagem privada ou aqui no tópico mesmo? Digo porque meus tempos vagos são poucos e aleatórios, eu trabalho... Mas se não tiver como eu te adiciono lá e quando der conversamos,

Abraços

 

 

Ok!

Link para o comentário
Compartilhar em outros sites

Bom, não conheço VisualG, mas aprendi um pouco de Lua e fui fazendo alguns jogos. No final, juntei tudo e criei meu "Salão de Jogos" =P

O legal é que cada joguinho foi pra reforçar uma coisa nova que eu aprendia e como foram feitos em momentos diferentes, dá pra ver um pouco de amadurecimento no modo de programar.

 

 

function STARTGAME_ADIVINHE()
	print(" - Adivinhe o numero - ")
	math.randomseed(os.time())

	function jogar()
		numero = 1 + (math.random(1000000000) % 100)
		print("Tente adivinhar o numero que estou pensando! Ele esta entre 1 e 100")
		tentativa = 1
		while true do
			input = io.read()
			if tonumber(input) == false or tonumber(input) == nil or tonumber(input) <= 0 or tonumber(input) > 100 then
				print("Palpite invalido. Digite um numero de 1 a 100.")
			elseif tonumber(input) > numero then
				print("Opa, o numero sorteado eh menor!")
				tentativa = tentativa + 1
			elseif tonumber(input) < numero then
				print("Tah esquentando, mas o numero sorteado eh maior")
				tentativa = tentativa + 1
			else
				print("Parabens, voce acertou!\nNumero de tentativas", tentativa)
				break
			end
		end
		print("Deseja jogar de novo?")
		input = io.read()
		if tostring(input) and tostring(input):lower() == "sim" then
			return jogar()
		else
			print("Fim de jogo\n")
			return true
		end
	end

	jogar()
	return true
end

function STARTGAME_FORCA()
	function isInTable(tab, value)
		for _, v in ipairs(tab) do
			if value == v then
				return _
			end
		end
		return false
	end

	function createTableFromString(str)
		local ret = {}
		for i = 1, str:len() do
			table.insert(ret, str:sub(i, i))
		end
		return ret
	end

	math.randomseed(os.time())
	quit = false

	while not quit do
		-- Palavras possíveis no sorteio
		local words = {{"aquario", "peixes vivem nele"}, {"oraculo", "preve o futuro"}, {"estatua", "figura imovel"}, {"circulo", "figura geometrica"}, {"arara", "animal"}, {"anel", "coloca no dedo"}}
		local rand = (1 + math.random(9999) % #words)
		-- Palavra sorteada
		local word = words[rand][1]
		local tentativas = 5
		print("\nJogo da forca! Voce tem " .. tentativas .. " tentativas restantes!\nA dica eh: " .. words[rand][2] .. ".\n")
		-- O que eh impresso na tela conforme o jogador joga
		local current_word = string.rep(" _",(word:len()))
		print(current_word)
		-- Contagem de palavras acertadas
		local count = 0
		-- Total de letras da palavra sorteada
		local total_letters = word:len()
		-- Tabela com as letras da palavra
		local word_table = createTableFromString(word)
		-- Letras que já foram usadas como palpite
		local used_letters = {}
		
		while not (count >= total_letters or tentativas == 0) do
			local letter = io.read()
			while letter:len() > 1 or not letter:byte() or letter:byte() < 97 or letter:byte() > 122 or isInTable(used_letters, letter) do
				if isInTable(used_letters, letter) then
					print("Opa, voce ja tentou essa letra antes. Por favor, tente outra.\nLetra(s) que voce ja tentou:\n" .. table.concat(used_letters, ", "))
				else
					print("Palpite incorreto. Somente letras minusculas do alfabeto sao palpites aceitaveis")
				end
				letter = io.read()			
			end
			local pos = isInTable(word_table, letter)
			table.insert(used_letters, letter)
			if pos then
				while isInTable(word_table, letter) do
					pos = isInTable(word_table, letter)
					local sub_pos = pos * 2
					word_table[pos] = false
					count = count + 1
					current_word = current_word:sub(1, (sub_pos - 1)) .. letter .. current_word:sub(sub_pos + 1)
				end
				print("Muito bem!")
				print(current_word)
			else
				tentativas = tentativas - 1
				print("Nao, nenhuma letra dessa. Voce tem " .. tentativas .. " tentativa(s) restante(s).")
				print(current_word)
			end
		end
		if count >= total_letters then
			print("Parabens! Voce acertou a palavra! Deseja jogar de novo?")
		else
			print("Ah, voce perdeu. A palavra era " .. word:upper() .. ". Quer jogar de novo?")
		end
		play_again = io.read()
		if play_again:lower() ~= "sim" then
			quit = true
			print("Ok, ate a proxima.")
		end
		print("\n")
	end
	return true
end

function STARTGAME_CONTAS()
	math.randomseed(os.time())
	function newRand(n1, n2)
		return (math.random(n1) % n2) + 1
	end

	local options = {"adicao", "subtracao", "multiplicacao"}
	local symbols = {"+", "-", "*"}

	function getMath()
		local number1 = newRand(33, 9)
		local number2 = newRand(505, 9)

		local math_string = tostring(number1) .. " " .. symbols[newRand(27, #symbols)] .. " " .. tostring(number2)
		local result = loadstring("return " ..math_string)()
		return math_string, result
	end
		
	local quit = false
	local time_to_finish = 30


	print("Bem vindo ao terminal de exercicios matematicos. Voce tera " .. time_to_finish .. " segundos para responder o maximo de contas que puder. Esta pronto?")
	ready = io.read()
	while not ((ready:lower()):find("sim") or (ready:lower()):find("pronto")) do
		print("Tudo bem, eu posso esperar. Diga-me quando estiver pronto.")
		ready = io.read()
	end

	while not quit do
		local count = 0	
		local start_time = os.clock()
		while os.clock() - start_time <= time_to_finish do
			local math_string, true_result = getMath()
			print("A conta que voce deve fazer eh: " .. math_string)
			result = io.read("*n")
			while not result do
				print("Resposta invalida. Por favor, digite um numero valido.")
			end
			if result ~= true_result then
				print("A resposta esta errada. O resultado eh " .. true_result)
			else
				print("Parabens, voce acertou!")
				count = count + 1
			end
		end
		print("\nVoce acertou " .. count .. " contas!\nDeseja jogar novamente?")
		while not play or not play:byte() do
			play = io.read()
		end
		if (play:lower()):find("sim") then
			print("Boa sorte!\n")
		else
			print("\nFim de jogo\n")
			quit = true
		end
	end
	return true
end

function STARTGAME_VELHA()
  math.randomseed(os.time())
  local str_ini = "   |   |   \n___|___|___\n   |   |   \n___|___|___\n   |   |   \n   |   |   "
  local pos = {2, 6, 10, 26, 30, 34, 50, 54, 58}
  local playsCount = 0
  local GAME_STATE = 0
  local str = str_ini
  local random = math.random

  local function markPos(mark, pos)
	str = str:sub(1, pos - 2) .. " " .. mark .. " " .. str:sub(pos + 2)
	return true
  end

  local function wait(time)
	local start = os.clock()
	repeat
	until os.clock() - start >= time
  end

  local function isPosMarked(pos)
	local tmp = str:sub(pos, pos)
	return tmp == "X" or tmp == "O" or false
  end
  
  local function getMarkFromPos(pos)
	  return str:sub(pos, pos)
  end
  
  local function getWinner()
	  local mark = ""
	  local start = 1
	  local winner = false
	  repeat
		  local count = 0
		  for i = start, start + 1 do
			  mark = getMarkFromPos(pos[i])
			  if mark == "X" or mark == "O" then
				  if getMarkFromPos(pos[i+1]) == mark then
					  count = count + 1
				  else
					  break
				  end
			  end
		  end
		  if count == 2 then
			  winner = mark
		  end
		  start = start + 3
	  until start > 7 or winner
	  local start = 1
	  
	  while not winner and start <= 3 do
		  local count = 0
		  for i = start, start + 3, 3 do
			  mark = getMarkFromPos(pos[i])
			  if mark == "X" or mark == "O" then
				  if getMarkFromPos(pos[i+3]) == mark then
					  count = count + 1
				  else
					  break
				  end
			  end
		  end
		  if count == 2 then
			  winner = mark
		  end
		  start = start + 1
	  end
	  
	  local count = 0
	  local mark = getMarkFromPos(pos[5])
	  local isMark = mark == "X" or mark == "O" or false
	  if isMark and getMarkFromPos(pos[1]) == mark and getMarkFromPos(pos[9]) == mark then
		  winner = mark
	  elseif isMark and getMarkFromPos(pos[3]) == mark and getMarkFromPos(pos[7]) == mark then
		  winner = mark
	  end
	  return winner
  end

  local function randomPlay()
	  local randomPos = 0
	  repeat
		  randomPos = pos[random(1, #pos)]
	  until not isPosMarked(randomPos)
	  markPos("X", randomPos)
	  print(str)
  end

  local function AIPlay()
	  local tmp_str = str
	  for i = 1, 9 do
		  local tmp_pos = pos[i]
		  if not isPosMarked(tmp_pos) then
			  markPos("X", tmp_pos)
			  if getWinner() then
				  print(str)
				  return true
			  else
				  str = tmp_str
			  end
		  end
	  end
	  for i = 1, 9 do
		  local tmp_pos = pos[i]
		  if not isPosMarked(tmp_pos) then
			  markPos("O", tmp_pos)
			  if getWinner() then
				  markPos("X", tmp_pos)
				  print(str)
				  return true
			  else
				  str = tmp_str
			  end
		  end
	  end
	  return randomPlay()
  end
	
  local function playerPlay()	
	  local play = false
	  print("Qual posicao voce quer marcar?")
	  repeat
		  local player_pos = io.read()
		  if player_pos and player_pos:byte() and tonumber(player_pos) and pos[tonumber(player_pos)] then
			  player_pos = tonumber(player_pos)
			  if not isPosMarked(pos[player_pos]) then
				  markPos("O", pos[player_pos])
				  play = true
			  else
				  print("Esta posicao ja esta marcada.")
			  end
		  else
			  print("Posicao inexistente.")
		  end
	  until play
	  print(str)
  end

  local function isGameOver()	
	  return playsCount >= 9
  end

  local function startGame()
	  print("Bem-vindo ao jogo da velha. Observe a numeracao das posicoes:")
	  for i = 1, #pos do
		  markPos(tostring(i), pos[i])
	  end
	  print(str .. "\n")
	  str = str_ini
	  wait(1)
	  print("Esta pronto para jogar? {sim/nao}")
	  repeat
		  local decision = io.read()
		  if not decision or not decision:byte() then
			  print("Tudo bem, eu espero voce decidir.")
		  elseif (decision:lower()):find("sim") or (decision:lower()):find("pronto") then
			  print("Ok, vamos la!")
			  GAME_STATE = 1
		  elseif (decision:lower()):find("nao") then
			  print("Ah. Me diga quando estiver pronto.")
		  else
			  print("Nao entendi.")
		  end
	  until GAME_STATE == 1
	  return true
  end



  startGame()

  local VELHA_QUIT = false

  while not VELHA_QUIT do
	  GAME_STATE = 1
	  str = str_ini
	  playsCount = 0
	  repeat
		  playerPlay()
		  playsCount = playsCount + 1
		  if getWinner() then
			  GAME_STATE = 2
			  break
		  elseif isGameOver() then
			  GAME_STATE = 3
			  break
		  end
		  wait(1)
		  AIPlay()
		  playsCount = playsCount + 1
		  if getWinner() then
			  GAME_STATE = 2
			  break
		  elseif isGameOver() then
			  GAME_STATE = 3
			  break
		  end
	  until GAME_STATE > 1
	  
	  if GAME_STATE == 2 then
		  if getWinner() == "X" then
			  print("Ah, voce perdeu!")
		  else
			  print("Parabens! Voce ganhou!")
		  end
	  else
		  print("Velha!")
	  end
	  print("Deseja {sair} ou {jogar} novamente?")
	  repeat
		  local decision = io.read()
		  if decision and decision:byte() then
			  if (decision:lower()):find("sair") then
				  VELHA_QUIT = true
				  print("Tchau!\n\n")
				  break
			  elseif (decision:lower()):find("jogar") then
				  GAME_STATE = 1
				  str = str_ini
				  print("Prepare-se!\n\n" .. str)
				  break
			  end
		  end
		  print("Nao entendi. {jogar}/{sair}")
	  until false
  end
  print("\n")
  return true
end

local games = {
	[1] = {"Adivinhe o Numero", func = STARTGAME_ADIVINHE},
	[2] = {"Jogo da Forca", func = STARTGAME_FORCA},
	[3] = {"Contas Matematicas", func = STARTGAME_CONTAS},
	[4] = {"Jogo da Velha", func = STARTGAME_VELHA},
}

function startGame(str)
	for i, info in pairs(games) do
		if str:find(info[1]:lower()) or tonumber(str) == i then
			local func = info.func
			return func()
		end
	end
	return false
end

MAIN_QUIT = false

while not MAIN_QUIT do
	print('Bem-vindo ao salao de jogos. Escolha um entre os jogos abaixo')
	local str = ""
	for i, info in ipairs(games) do
		str = str .. "["..i.."] - " .. info[1] .. "\n"
	end
	print(str)

	game = io.read()
	while not (game:byte() and startGame(game:lower())) do
		print("Nao entendi qual jogo voce quer.")
		game = io.read()
	end
	print("Voce quer {sair} ou jogar outro {jogo}?")
	DECISION = io.read()
	DECISION = DECISION:lower()
	while not DECISION:find("sair") and not DECISION:find("jogo") do
		print("Nao entendi. Voce quer {sair} ou jogar outro {jogo}?")
		DECISION = io.read()
	end
	if DECISION:find("sair") then
		MAIN_QUIT = true
		print("Ate a proxima, camarada.")
	end
	print("\n")
end

 

 

 

Agora tô tentando aprender C devagarzinho...

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...