Jogo da Velha com IA (Inteligencia Artificial)
Publicado por Washington Luis de O Santos (última atualização em 17/09/2020)
[ Hits: 10.153 ]
Este é mais um programinha do "Jogo da Velha" que também é conhecido como "Jogo do Galo" e "Tic-Tac Toe".
A diferença deste, com a maioria dos outros programas de jogo da velha que eu tenho visto por aí, é que este faz uso da IA (Inteligencia Artificial) e por isso eu o batizei de "jogo_da_veIA-1.0.py".
Este programa foi baseado em um outro feito em Basic apresentado na:
REVISTA GERAÇÃO PROLÓGICA Nº 3 - PG. 6
publicada em jan/fev de 1984
CP-200 COMPATÍVEL ZX81 - TK-85
Disponível em pdf no link abaixo:
https://datassette.org/revistas/geracao-prologica-informatica-revistas/geracao-prologica-no-3
No programa acrescentei cores e contadores para indicar o número de vitórias do usuário, do PC e os empates.
É lógico que o programa em Python, devido aos recursos da própria linguagem e depois de uma boa reestruturação, ficou muito mais simples/fácil de entender comparado com o original em Basic.
E é isso então... novamente se divirtam e deem um joinha se gostaram e vejam os outros programas no link: https://www.vivaolinux.com.br/~WashingtonLuis/scripts/
PS.: Quem entender o programa original em Basic ganha uma bala.
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
'''
Jogo da Velha (IA - inteligencia artificial) version 1.0 - Program
Também conhecido como Jogo do Galo e Tic-Tac Toe
Copyright (c) 2019-2020 Washington Luis de O. Santos
< owashington[arroba]terra.com.br >
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Taubaté - SP, 4 de julho de 2020
Vejam as minhas outras colaborações no link:
https://www.vivaolinux.com.br/~WashingtonLuis/scripts/
Este programa foi baseado em um outro feito em basic apresentado na:
REVISTA GERACAO PROLOGICA Nº 3 - PG. 6
publicada em jan/fev de 1984
CP-200 COMPATIVEL ZX81 - TK-85
Disponivel em pdf no link abaixo:
https://datassette.org/revistas/geracao-prologica-informatica-revistas/geracao-prologica-no-3
'''
import random
import os
from time import sleep
def GetLine(posicao):
global pa, pb, pc
posicao *= 2
# abaixo, temos uma sequencia de "nºs mágicos" que, na realidade, de um jeito meio obscuro,
# formam as linhas verticais, horizontais e diagonais do tabuleiro. Como por exemplo:
# 591, 132, 258, e assim por diante...
# Eu poderia fazer de outra forma, mas o meu ojetivo com isto é homenagear 'O CARA' que criou
# o programinha lá pro CP-200 / TK-85 e que infelizmente não tem o nome divulgado
# OBSERVAÇÃO: os numeros foram subtraidos em 1 para coincidir com as posições da string que
# no PYTHON começa em 0
#z = '59132587963756471'
z = '48021476852645360'
pa = int(z[posicao + 0])
pb = int(z[posicao + 1])
pc = int(z[posicao + 2])
return board[pa] + board[pb] + board[pc]
def pc_joga():
for x in (2, 18):
for n in range(8):
if GetLine(n) == x:
if board[pa] == vazio: pos = pa
elif board[pb] == vazio: pos = pb
else: pos = pc
board[pos] = 1
print('%s%s%i%s' % (BLUE, 'Posição Pc: ', (pos+1), RST))
sleep(2)
return
while True:
pos = random.randint(0, 8)
if board[pos] == vazio:
board[pos] = 1
break
print('%s%s%i%s' % (BLUE, 'Posição Pc: ', (pos+1), RST))
sleep(2)
return
def user_joga():
while True:
x = input('%s%s%s' % (GREEN, 'Posição user: ', RST))
if x in ('q', 'Q', '0'):
print('Jogo abortado...')
exit(0)
try:
pos = int(x) - 1
if board[pos] != vazio:
print('Posição já ocupada')
else :
board[pos] = 9
break
except:
pass
def display():
global empate, micro, user
os.system('clear')
mk = []
for i, v in enumerate(board):
if v == 0: mk.append('%s%s%s' % (YELLOW, str(i+1), RST))
elif v == 1: mk.append('%s%s%s' % (BLUE , 'O' , RST))
else: mk.append('%s%s%s' % (GREEN , 'X' , RST))
print('%s%s%i%s' % (WHITE, 'Empate = ', empate, RST))
print('%s%s%i%s' % (BLUE , 'Micro = ', micro , RST))
print('%s%s%i%s' % (GREEN, 'Usuário = ', user , RST))
print()
print(' %s | %s | %s' % tuple(mk[0:3]))
print('---+---+---')
print(' %s | %s | %s' % tuple(mk[3:6]))
print('---+---+---')
print(' %s | %s | %s' % tuple(mk[6:9]))
print()
def verif():
global empate, micro, user
for n in range(8):
if GetLine(n) == 3:
print('%s%s%s' % (BLUE, 'O Computador Ganhou', RST))
micro += 1
sleep(2)
return True
elif GetLine(n) == 27:
print('%s%s%s' % (GREEN, 'O Usuário Ganhou', RST))
user += 1
sleep(2)
return True
if not vazio in board:
print('Empatou...')
empate += 1
sleep(2)
return True
return False
if __name__ == '__main__':
# Define variáveis usadas para mostrar cores no terminal
RST = '\033[00m'
GRAY = '\033[30m'
RED = '\033[31m'
GREEN = '\033[32m'
YELLOW = '\033[33m'
BLUE = '\033[34m'
VIOLET = '\033[35m'
VERDAO = '\033[36m'
WHITE = '\033[37m'
empate = 0
micro = 0
user = 0
vazio = 0
while True:
board = [vazio] * 9
Flag = random.choice([True, False])
display()
while True:
Flag = not Flag
if Flag: pc_joga()
else: user_joga()
display()
if verif(): break
display()
key = input('Quer jogar de Novo? (S/N)')
if key not in ('S', 's'):
break
print('\nFim de Jogo')
Plano de fundo rotatório no Gnome
Tkinter - Sistema de Cadastro de Cursos, Alunos e Turmas
Calculadora de funções do 1º grau
Afinador de Violão/guitarra em python e gtk.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como impedir exclusão de arquivos por outros usuários no (Linux)
Cirurgia no Linux Mint em HD Externo via USB
Anúncio do meu script de Pós-Instalação do Ubuntu
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (5)
Formas seguras de instalar Debian Sid (0)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (4)
Alguém executou um rm e quase mata a Pixar! (1)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









