Jogo da Velha com IA (Inteligencia Artificial)
Publicado por Washington Luis de O Santos (última atualização em 17/09/2020)
[ Hits: 10.061 ]
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')
Crivo de Eratóstenes Simples em Python
Gerador de referência cruzada de texto
Script para Away com varias funções para xchat.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
VOL já não é mais como antes? (4)
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









