Advertisement
KingOfWesteros

PipeDaVelha.py

Jun 7th, 2021
1,530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.01 KB | None | 0 0
  1. import pygame, sys, numpy, multiprocessing
  2.  
  3.  
  4. def jogador1(conn, args):
  5.  
  6.     pygame.init()
  7.  
  8.     jogador = 1
  9.     gameOver = False
  10.  
  11.     janela = pygame.display.set_mode((600,600))
  12.     pygame.display.set_caption("Trabalho SO [PIPES] - Jogo Da Velha - Jogador  {}".format(jogador))
  13.  
  14.     janela.fill((28,170,156)) #RGB Verde para cor do fundo
  15.  
  16.     # ABSTRAÇÃO DO TABULEIRO
  17.     tabuleiro = numpy.zeros((3,3))
  18.  
  19.     corCruz = (66,66,66) if jogador != 2 else (239,231,200)
  20.     corBola = (66,66,66) if jogador != 1 else (239,231,200)
  21.     corLinha = (23,145,135)
  22.     tamanhoLinha = 15
  23.     espacoCruz = 50
  24.  
  25.     # DESENHANDO LINHAS
  26.     def desenharLinhas():
  27.         # LINHAS HORIZONTAIS (janela, cor, pos_incial, pos_final, tamanho)
  28.         pygame.draw.line(janela, corLinha, (0,200), (600,200), tamanhoLinha)
  29.         pygame.draw.line(janela, corLinha, (0,400), (600,400), tamanhoLinha)
  30.         # LINHAS VERTICAIS
  31.         pygame.draw.line(janela, corLinha, (200,0), (200,600), tamanhoLinha)
  32.         pygame.draw.line(janela, corLinha, (400,0), (400,600), tamanhoLinha)
  33.  
  34.     def desenhaFiguras():
  35.         for linha in range(3):
  36.             for coluna in range(3):
  37.                
  38.                 if tabuleiro[linha][coluna] == 2:
  39.                     pygame.draw.circle(janela, corBola, (int(coluna*200 + 100), int(linha*200 + 100)), 60, 15)
  40.                
  41.                 elif tabuleiro[linha][coluna] == 1:
  42.                     pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+200-espacoCruz), (coluna*200+200-espacoCruz, linha*200+espacoCruz), 23)
  43.                     pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+espacoCruz), (coluna*200+200-espacoCruz, linha*200+200-espacoCruz), 23)
  44.  
  45.  
  46.     def marcarJogada(linha, coluna, jogador):
  47.         tabuleiro[linha][coluna] = jogador
  48.  
  49.     def jogadaDisponivel(linha, coluna):
  50.         return tabuleiro[linha][coluna] == 0
  51.  
  52.     def tabuleiroCheio():
  53.         for linha in range(3):
  54.             for coluna in range(3):
  55.                 if jogadaDisponivel(linha, coluna):
  56.                     return False
  57.         return True
  58.  
  59.     def verifcaVitoria(jogador):
  60.         # VERIFICA VERTICAL
  61.         for coluna in range(3):
  62.             if tabuleiro[0][coluna] == jogador and tabuleiro[1][coluna] == jogador and tabuleiro[2][coluna] == jogador:
  63.                 linhaVitoriaVertical(coluna, jogador)
  64.                 return True
  65.        
  66.         # VERIFICA HORIZONTAL
  67.         for linha in range(3):
  68.             if tabuleiro[linha][0] == jogador and tabuleiro[linha][1] == jogador and tabuleiro[linha][2] == jogador:
  69.                 linhaVitoriaHorizontal(linha, jogador)
  70.                 return True
  71.  
  72.         # VERIFICA DIAGONAL CRESCENTE
  73.         if tabuleiro[2][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[0][2] == jogador:
  74.             linhaVitoriaDiagonalCrescente(jogador)
  75.             return True
  76.        
  77.         # VERIFICA DIAGONAL DECRESCENTE
  78.         if tabuleiro[0][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[2][2] == jogador:
  79.             linhaVitoriaDiagonalDecrescente(jogador)
  80.             return True
  81.  
  82.         return False
  83.  
  84.     def linhaVitoriaVertical(coluna, jogador):
  85.         posX = coluna * 200 + 100
  86.         cor = (110, 235, 52)
  87.         pygame.draw.line(janela, cor, (posX,15), (posX,600-15), 15)
  88.  
  89.     def linhaVitoriaHorizontal(linha, jogador):
  90.         posY = linha * 200 + 100
  91.         cor = (110, 235, 52)
  92.         pygame.draw.line(janela, cor, (15, posY), (600-15, posY), 15)
  93.  
  94.     def linhaVitoriaDiagonalCrescente(jogador):
  95.         cor = (110, 235, 52)
  96.         pygame.draw.line(janela, cor, (15,600-15), (600-15,15), 15)
  97.  
  98.     def linhaVitoriaDiagonalDecrescente(jogador):
  99.         cor = (110, 235, 52)
  100.         pygame.draw.line(janela, cor, (15,15), (600-15,600-15), 15)
  101.  
  102.     def restart():
  103.         for linha in range(3):
  104.             for coluna in range(3):
  105.                 tabuleiro[linha][coluna] = 0
  106.         janela.fill((28,170,156)) #RGB Verde para cor do fundo
  107.         desenharLinhas()
  108.  
  109.  
  110.  
  111.     desenharLinhas()
  112.  
  113.     while True:
  114.         if conn.poll():
  115.             mensagem = conn.recv()
  116.             linhaClicada = mensagem[0]
  117.             colunaClicada = mensagem[1]
  118.             jogadorClique = mensagem[2]
  119.  
  120.             marcarJogada(linhaClicada, colunaClicada, jogadorClique)
  121.             desenhaFiguras()
  122.             gameOver = True if verifcaVitoria(jogador) else False
  123.             jogador = 1 if jogadorClique==2 else 2
  124.  
  125.         for evento in pygame.event.get():
  126.            
  127.             if evento.type == pygame.QUIT:
  128.                 sys.exit()
  129.  
  130.             if evento.type == pygame.MOUSEBUTTONDOWN and not gameOver:
  131.                 mouseX, mouseY = evento.pos[0], evento.pos[1]
  132.                 linhaClick = int(mouseY // 200)
  133.                 colunaClick = int(mouseX // 200)
  134.  
  135.                 if jogadaDisponivel(linhaClick, colunaClick):
  136.                     conn.send([linhaClick, colunaClick, jogador])
  137.                     marcarJogada(linhaClick, colunaClick, jogador)
  138.                     desenhaFiguras()
  139.                     gameOver = True if verifcaVitoria(jogador) else False
  140.                     jogador = 1 if jogador==2 else 2
  141.  
  142.             if evento.type == pygame.KEYDOWN:
  143.                 if evento.key == pygame.K_RETURN or evento.key == pygame.K_BACKSPACE:
  144.                     gameOver = False
  145.                     restart()
  146.    
  147.         pygame.display.update()
  148.  
  149.  
  150. def jogador2(conn, args):
  151.     pygame.init()
  152.  
  153.     jogador = 2
  154.     gameOver = False
  155.  
  156.     janela = pygame.display.set_mode((600,600))
  157.     pygame.display.set_caption("Trabalho SO [PIPES] - Jogo Da Velha - Jogador  {}".format(jogador))
  158.  
  159.     janela.fill((28,170,156)) #RGB Verde para cor do fundo
  160.  
  161.     # ABSTRAÇÃO DO TABULEIRO
  162.     tabuleiro = numpy.zeros((3,3))
  163.  
  164.     corCruz = (66,66,66) if jogador != 2 else (239,231,200)
  165.     corBola = (66,66,66) if jogador != 1 else (239,231,200)
  166.     corLinha = (23,145,135)
  167.     tamanhoLinha = 15
  168.     espacoCruz = 50
  169.  
  170.     # DESENHANDO LINHAS
  171.     def desenharLinhas():
  172.         # LINHAS HORIZONTAIS (janela, cor, pos_incial, pos_final, tamanho)
  173.         pygame.draw.line(janela, corLinha, (0,200), (600,200), tamanhoLinha)
  174.         pygame.draw.line(janela, corLinha, (0,400), (600,400), tamanhoLinha)
  175.         # LINHAS VERTICAIS
  176.         pygame.draw.line(janela, corLinha, (200,0), (200,600), tamanhoLinha)
  177.         pygame.draw.line(janela, corLinha, (400,0), (400,600), tamanhoLinha)
  178.  
  179.     def desenhaFiguras():
  180.         for linha in range(3):
  181.             for coluna in range(3):
  182.  
  183.                 if tabuleiro[linha][coluna] == 2:
  184.                     pygame.draw.circle(janela, corBola, (int(coluna*200 + 100), int(linha*200 + 100)), 60, 15)
  185.                
  186.                 elif tabuleiro[linha][coluna] == 1:
  187.                     pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+200-espacoCruz), (coluna*200+200-espacoCruz, linha*200+espacoCruz), 23)
  188.                     pygame.draw.line(janela, corCruz, (coluna*200+espacoCruz, linha*200+espacoCruz), (coluna*200+200-espacoCruz, linha*200+200-espacoCruz), 23)
  189.  
  190.  
  191.     def marcarJogada(linha, coluna, jogador):
  192.         tabuleiro[linha][coluna] = jogador
  193.  
  194.     def jogadaDisponivel(linha, coluna):
  195.         return tabuleiro[linha][coluna] == 0
  196.  
  197.     def tabuleiroCheio():
  198.         for linha in range(3):
  199.             for coluna in range(3):
  200.                 if jogadaDisponivel(linha, coluna):
  201.                     return False
  202.         return True
  203.  
  204.     def verifcaVitoria(jogador):
  205.         # VERIFICA VERTICAL
  206.         for coluna in range(3):
  207.             if tabuleiro[0][coluna] == jogador and tabuleiro[1][coluna] == jogador and tabuleiro[2][coluna] == jogador:
  208.                 linhaVitoriaVertical(coluna, jogador)
  209.                 return True
  210.        
  211.         # VERIFICA HORIZONTAL
  212.         for linha in range(3):
  213.             if tabuleiro[linha][0] == jogador and tabuleiro[linha][1] == jogador and tabuleiro[linha][2] == jogador:
  214.                 linhaVitoriaHorizontal(linha, jogador)
  215.                 return True
  216.  
  217.         # VERIFICA DIAGONAL CRESCENTE
  218.         if tabuleiro[2][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[0][2] == jogador:
  219.             linhaVitoriaDiagonalCrescente(jogador)
  220.             return True
  221.        
  222.         # VERIFICA DIAGONAL DECRESCENTE
  223.         if tabuleiro[0][0] == jogador and tabuleiro[1][1] == jogador and tabuleiro[2][2] == jogador:
  224.             linhaVitoriaDiagonalDecrescente(jogador)
  225.             return True
  226.  
  227.         return False
  228.  
  229.     def linhaVitoriaVertical(coluna, jogador):
  230.         posX = coluna * 200 + 100
  231.         cor = (110, 235, 52)
  232.         pygame.draw.line(janela, cor, (posX,15), (posX,600-15), 15)
  233.  
  234.     def linhaVitoriaHorizontal(linha, jogador):
  235.         posY = linha * 200 + 100
  236.         cor = (110, 235, 52)
  237.         pygame.draw.line(janela, cor, (15, posY), (600-15, posY), 15)
  238.  
  239.     def linhaVitoriaDiagonalCrescente(jogador):
  240.         cor = (110, 235, 52)
  241.         pygame.draw.line(janela, cor, (15,600-15), (600-15,15), 15)
  242.  
  243.     def linhaVitoriaDiagonalDecrescente(jogador):
  244.         cor = (110, 235, 52)
  245.         pygame.draw.line(janela, cor, (15,15), (600-15,600-15), 15)
  246.  
  247.     def restart():
  248.         for linha in range(3):
  249.             for coluna in range(3):
  250.                 tabuleiro[linha][coluna] = 0
  251.         janela.fill((28,170,156)) #RGB Verde para cor do fundo
  252.         desenharLinhas()
  253.  
  254.  
  255.  
  256.     desenharLinhas()
  257.  
  258.     while True:
  259.         if conn.poll():
  260.             mensagem = conn.recv()
  261.             linhaClicada = mensagem[0]
  262.             colunaClicada = mensagem[1]
  263.             jogadorClique = mensagem[2]
  264.  
  265.             marcarJogada(linhaClicada, colunaClicada, jogadorClique)
  266.             desenhaFiguras()
  267.             gameOver = True if verifcaVitoria(jogador) else False
  268.             jogador = 1 if jogadorClique==2 else 2
  269.  
  270.         for evento in pygame.event.get():
  271.            
  272.             if evento.type == pygame.QUIT:
  273.                 sys.exit()
  274.  
  275.             if evento.type == pygame.MOUSEBUTTONDOWN and not gameOver:
  276.                 mouseX, mouseY = evento.pos[0], evento.pos[1]
  277.                 linhaClick = int(mouseY // 200)
  278.                 colunaClick = int(mouseX // 200)
  279.  
  280.                 if jogadaDisponivel(linhaClick, colunaClick):
  281.                     conn.send([linhaClick, colunaClick, jogador])
  282.                     marcarJogada(linhaClick, colunaClick, jogador)
  283.                     desenhaFiguras()
  284.                     gameOver = True if verifcaVitoria(jogador) else False
  285.                     jogador = 1 if jogador==2 else 2
  286.  
  287.             if evento.type == pygame.KEYDOWN:
  288.                 if evento.key == pygame.K_RETURN or evento.key == pygame.K_BACKSPACE:
  289.                     gameOver = False
  290.                     restart()
  291.    
  292.         pygame.display.update()
  293.  
  294.  
  295.  
  296. pai_conn, filho_conn = multiprocessing.Pipe()
  297.  
  298. proc1 = multiprocessing.Process(target=jogador1, args=(pai_conn,[]))
  299. proc2 = multiprocessing.Process(target=jogador2, args=(filho_conn,[]))
  300.  
  301. proc1.start()
  302. proc2.start()
  303.  
  304. proc1.join()
  305. proc2.join()
  306.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement