Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame, sys, numpy, multiprocessing
- def jogador1(conn, args):
- pygame.init()
- jogador = 1
- gameOver = False
- janela = pygame.display.set_mode((600,600))
- pygame.display.set_caption("Trabalho SO [PIPES] - Jogo Da Velha - Jogador {}".format(jogador))
- janela.fill((28,170,156)) #RGB Verde para cor do fundo
- # ABSTRAÇÃO DO TABULEIRO
- tabuleiro = numpy.zeros((3,3))
- corCruz = (66,66,66) if jogador != 2 else (239,231,200)
- corBola = (66,66,66) if jogador != 1 else (239,231,200)
- corLinha = (23,145,135)
- tamanhoLinha = 15
- espacoCruz = 50
- # DESENHANDO LINHAS
- def desenharLinhas():
- # LINHAS HORIZONTAIS (janela, cor, pos_incial, pos_final, tamanho)
- pygame.draw.line(janela, corLinha, (0,200), (600,200), tamanhoLinha)
- pygame.draw.line(janela, corLinha, (0,400), (600,400), tamanhoLinha)
- # LINHAS VERTICAIS
- pygame.draw.line(janela, corLinha, (200,0), (200,600), tamanhoLinha)
- pygame.draw.line(janela, corLinha, (400,0), (400,600), tamanhoLinha)
- def desenhaFiguras():
- for linha in range(3):
- for coluna in range(3):
- if tabuleiro[linha][coluna] == 2:
- pygame.draw.circle(janela, corBola, (int(coluna*200 + 100), int(linha*200 + 100)), 60, 15)
- elif tabuleiro[linha][coluna] == 1:
- pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+200-espacoCruz), (coluna*200+200-espacoCruz, linha*200+espacoCruz), 23)
- pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+espacoCruz), (coluna*200+200-espacoCruz, linha*200+200-espacoCruz), 23)
- def marcarJogada(linha, coluna, jogador):
- tabuleiro[linha][coluna] = jogador
- def jogadaDisponivel(linha, coluna):
- return tabuleiro[linha][coluna] == 0
- def tabuleiroCheio():
- for linha in range(3):
- for coluna in range(3):
- if jogadaDisponivel(linha, coluna):
- return False
- return True
- def verifcaVitoria(jogador):
- # VERIFICA VERTICAL
- for coluna in range(3):
- if tabuleiro[0][coluna] == jogador and tabuleiro[1][coluna] == jogador and tabuleiro[2][coluna] == jogador:
- linhaVitoriaVertical(coluna, jogador)
- return True
- # VERIFICA HORIZONTAL
- for linha in range(3):
- if tabuleiro[linha][0] == jogador and tabuleiro[linha][1] == jogador and tabuleiro[linha][2] == jogador:
- linhaVitoriaHorizontal(linha, jogador)
- return True
- # VERIFICA DIAGONAL CRESCENTE
- if tabuleiro[2][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[0][2] == jogador:
- linhaVitoriaDiagonalCrescente(jogador)
- return True
- # VERIFICA DIAGONAL DECRESCENTE
- if tabuleiro[0][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[2][2] == jogador:
- linhaVitoriaDiagonalDecrescente(jogador)
- return True
- return False
- def linhaVitoriaVertical(coluna, jogador):
- posX = coluna * 200 + 100
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (posX,15), (posX,600-15), 15)
- def linhaVitoriaHorizontal(linha, jogador):
- posY = linha * 200 + 100
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (15, posY), (600-15, posY), 15)
- def linhaVitoriaDiagonalCrescente(jogador):
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (15,600-15), (600-15,15), 15)
- def linhaVitoriaDiagonalDecrescente(jogador):
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (15,15), (600-15,600-15), 15)
- def restart():
- for linha in range(3):
- for coluna in range(3):
- tabuleiro[linha][coluna] = 0
- janela.fill((28,170,156)) #RGB Verde para cor do fundo
- desenharLinhas()
- desenharLinhas()
- while True:
- if conn.poll():
- mensagem = conn.recv()
- linhaClicada = mensagem[0]
- colunaClicada = mensagem[1]
- jogadorClique = mensagem[2]
- marcarJogada(linhaClicada, colunaClicada, jogadorClique)
- desenhaFiguras()
- gameOver = True if verifcaVitoria(jogador) else False
- jogador = 1 if jogadorClique==2 else 2
- for evento in pygame.event.get():
- if evento.type == pygame.QUIT:
- sys.exit()
- if evento.type == pygame.MOUSEBUTTONDOWN and not gameOver:
- mouseX, mouseY = evento.pos[0], evento.pos[1]
- linhaClick = int(mouseY // 200)
- colunaClick = int(mouseX // 200)
- if jogadaDisponivel(linhaClick, colunaClick):
- conn.send([linhaClick, colunaClick, jogador])
- marcarJogada(linhaClick, colunaClick, jogador)
- desenhaFiguras()
- gameOver = True if verifcaVitoria(jogador) else False
- jogador = 1 if jogador==2 else 2
- if evento.type == pygame.KEYDOWN:
- if evento.key == pygame.K_RETURN or evento.key == pygame.K_BACKSPACE:
- gameOver = False
- restart()
- pygame.display.update()
- def jogador2(conn, args):
- pygame.init()
- jogador = 2
- gameOver = False
- janela = pygame.display.set_mode((600,600))
- pygame.display.set_caption("Trabalho SO [PIPES] - Jogo Da Velha - Jogador {}".format(jogador))
- janela.fill((28,170,156)) #RGB Verde para cor do fundo
- # ABSTRAÇÃO DO TABULEIRO
- tabuleiro = numpy.zeros((3,3))
- corCruz = (66,66,66) if jogador != 2 else (239,231,200)
- corBola = (66,66,66) if jogador != 1 else (239,231,200)
- corLinha = (23,145,135)
- tamanhoLinha = 15
- espacoCruz = 50
- # DESENHANDO LINHAS
- def desenharLinhas():
- # LINHAS HORIZONTAIS (janela, cor, pos_incial, pos_final, tamanho)
- pygame.draw.line(janela, corLinha, (0,200), (600,200), tamanhoLinha)
- pygame.draw.line(janela, corLinha, (0,400), (600,400), tamanhoLinha)
- # LINHAS VERTICAIS
- pygame.draw.line(janela, corLinha, (200,0), (200,600), tamanhoLinha)
- pygame.draw.line(janela, corLinha, (400,0), (400,600), tamanhoLinha)
- def desenhaFiguras():
- for linha in range(3):
- for coluna in range(3):
- if tabuleiro[linha][coluna] == 2:
- pygame.draw.circle(janela, corBola, (int(coluna*200 + 100), int(linha*200 + 100)), 60, 15)
- elif tabuleiro[linha][coluna] == 1:
- pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+200-espacoCruz), (coluna*200+200-espacoCruz, linha*200+espacoCruz), 23)
- pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+espacoCruz), (coluna*200+200-espacoCruz, linha*200+200-espacoCruz), 23)
- def marcarJogada(linha, coluna, jogador):
- tabuleiro[linha][coluna] = jogador
- def jogadaDisponivel(linha, coluna):
- return tabuleiro[linha][coluna] == 0
- def tabuleiroCheio():
- for linha in range(3):
- for coluna in range(3):
- if jogadaDisponivel(linha, coluna):
- return False
- return True
- def verifcaVitoria(jogador):
- # VERIFICA VERTICAL
- for coluna in range(3):
- if tabuleiro[0][coluna] == jogador and tabuleiro[1][coluna] == jogador and tabuleiro[2][coluna] == jogador:
- linhaVitoriaVertical(coluna, jogador)
- return True
- # VERIFICA HORIZONTAL
- for linha in range(3):
- if tabuleiro[linha][0] == jogador and tabuleiro[linha][1] == jogador and tabuleiro[linha][2] == jogador:
- linhaVitoriaHorizontal(linha, jogador)
- return True
- # VERIFICA DIAGONAL CRESCENTE
- if tabuleiro[2][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[0][2] == jogador:
- linhaVitoriaDiagonalCrescente(jogador)
- return True
- # VERIFICA DIAGONAL DECRESCENTE
- if tabuleiro[0][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[2][2] == jogador:
- linhaVitoriaDiagonalDecrescente(jogador)
- return True
- return False
- def linhaVitoriaVertical(coluna, jogador):
- posX = coluna * 200 + 100
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (posX,15), (posX,600-15), 15)
- def linhaVitoriaHorizontal(linha, jogador):
- posY = linha * 200 + 100
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (15, posY), (600-15, posY), 15)
- def linhaVitoriaDiagonalCrescente(jogador):
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (15,600-15), (600-15,15), 15)
- def linhaVitoriaDiagonalDecrescente(jogador):
- cor = (110, 235, 52)
- pygame.draw.line(janela, cor, (15,15), (600-15,600-15), 15)
- def restart():
- for linha in range(3):
- for coluna in range(3):
- tabuleiro[linha][coluna] = 0
- janela.fill((28,170,156)) #RGB Verde para cor do fundo
- desenharLinhas()
- desenharLinhas()
- while True:
- if conn.poll():
- mensagem = conn.recv()
- linhaClicada = mensagem[0]
- colunaClicada = mensagem[1]
- jogadorClique = mensagem[2]
- marcarJogada(linhaClicada, colunaClicada, jogadorClique)
- desenhaFiguras()
- gameOver = True if verifcaVitoria(jogador) else False
- jogador = 1 if jogadorClique==2 else 2
- for evento in pygame.event.get():
- if evento.type == pygame.QUIT:
- sys.exit()
- if evento.type == pygame.MOUSEBUTTONDOWN and not gameOver:
- mouseX, mouseY = evento.pos[0], evento.pos[1]
- linhaClick = int(mouseY // 200)
- colunaClick = int(mouseX // 200)
- if jogadaDisponivel(linhaClick, colunaClick):
- conn.send([linhaClick, colunaClick, jogador])
- marcarJogada(linhaClick, colunaClick, jogador)
- desenhaFiguras()
- gameOver = True if verifcaVitoria(jogador) else False
- jogador = 1 if jogador==2 else 2
- if evento.type == pygame.KEYDOWN:
- if evento.key == pygame.K_RETURN or evento.key == pygame.K_BACKSPACE:
- gameOver = False
- restart()
- pygame.display.update()
- pai_conn, filho_conn = multiprocessing.Pipe()
- proc1 = multiprocessing.Process(target=jogador1, args=(pai_conn,[]))
- proc2 = multiprocessing.Process(target=jogador2, args=(filho_conn,[]))
- proc1.start()
- proc2.start()
- proc1.join()
- proc2.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement