Jogo da Velha com IA (Inteligencia Artificial)
Publicado por Washington Luis de O Santos (última atualização em 17/09/2020)
[ Hits: 9.428 ]
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')
Simples script para atrasar/adiantar legendas
Calculadora de area de poligonos e circulos
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Queria saber se existe alguma forma de desistalar programa no ubuntu s... (2)
Quero saber sobre os melhores aplicativos de office para usar em 2024 ... (1)
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (16)