gameFunctions.py

PHOTO EMBED

Sat Aug 06 2022 23:24:22 GMT+0000 (Coordinated Universal Time)

Saved by @projectpython

import pygame
import sys


class gamefunctions:
  
  def __init__(self, game):
    self.screen = game.screen
    
    # default value for the move
    self.move = 0
    
    # default turn settings
    self.player1Turn = True
    self.player2Turn = False
    
    # two images, O and X
    self.O = pygame.image.load('tictactoeO.png')
    self.X = pygame.image.load('tictactoeX.png')
    
    # get rects of images
    self.Orect = self.O.get_rect()
    self.Xrect = self.X.get_rect()
    
    # a dictionary to store the positions
    # that correlate to moves
    self.movePos = {
      1:[140,40],
      2:[330,40],
      3:[510,40],
      4:[140,220],
      5:[330, 220],
      6:[510,220],
      7:[140,410],
      8:[330,410],
      9:[510,410]
    }
    
    # a dictionary to store
    # the coordinates of moves
    self.moveData = {
      1:"A1",
      2:"A2",
      3:"A3",
      4:"B1",
      5:"B2",
      6:"B3",
      7:"C1",
      8:"C2",
      9:"C3"
    }
    
    # a list of availableMoves
    self.availableMoves = [1,2,3,
                           4,5,6,
                           7,8,9]
    # a list of moves made
    self.player1Moves = []
    self.player2Moves = []
    
  # a function that allows
  # a player to make a move 
  def makeMove(self):
    self.move = 0
    while self.move not in range(1,10):
      for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
          if event.key == pygame.K_1:
            self.move = 1
          elif event.key == pygame.K_2:
            self.move = 2
          elif event.key == pygame.K_3:
            self.move = 3
          elif event.key == pygame.K_4:
            self.move = 4
          elif event.key == pygame.K_5:
            self.move = 5
          elif event.key == pygame.K_6:
            self.move = 6
          elif event.key == pygame.K_7:
            self.move = 7
          elif event.key == pygame.K_8:
            self.move = 8
          elif event.key == pygame.K_9:
            self.move = 9
      if self.move in self.availableMoves:
        self.availableMoves.remove(self.move)
        return self.move
      else:
        self.move = 0
    
  # a function that draws a move to
  # the screen
  def drawMove(self, move):
    if self.player1Turn:
      self.Orect.x = self.movePos[move][0]
      self.Orect.y = self.movePos[move][1]
      self.screen.blit(self.O, self.Orect)
    elif self.player2Turn:
      self.Xrect.x = self.movePos[move][0]
      self.Xrect.y = self.movePos[move][1]
      self.screen.blit(self.X, self.Xrect)
      
  def checkWinner(self):

    self.resetCount()
    
    player1win = False
    player2win = False
    
    for move in self.player1Moves:
      player1win = self.moveAnalysis(move)
    
    if "B2" in self.player1Moves:
      if "A1" in self.player1Moves and "C3" in self.player1Moves:
        player1win = True
      elif "A3" in self.player1Moves and "C1" in self.player1Moves: 
        player1win = True
    
    self.resetCount()
    
    for move in self.player2Moves:
      player2win = self.moveAnalysis(move)
    
    if "B2" in self.player2Moves:
      if "A1" in self.player2Moves and "B3" in self.player2Moves:
        player2win = True
      elif "A3" in self.player2Moves and "C1" in self.player2Moves:
        player2win = True
    
    return [player1win, player2win] 
      
  # a function that analyses moves made
  # to check for a horizontal/vertical win
  def moveAnalysis(self,move):
      
      moveAlpha = move[0]
      moveNum = move[1]
      
      if moveAlpha == "A":
        self.A += 1
      elif moveAlpha == "B":
        self.B += 1
      elif moveAlpha == "C":
        self.C += 1
      
      if moveNum == "1":
        self.One += 1
      elif moveNum == "2":
        self.Two += 1
      elif moveNum == "3":
        self.Three += 1
        
      if (self.A == 3 or self.B == 3) or (self.C == 3 or self.One == 3) or (self.Two == 3 or self.Three == 3):
        return True
      else:
        return False
   
  def resetCount(self):
    self.A = 0
    self.B = 0
    self.C = 0
    self.One = 0
    self.Two = 0
    self.Three = 0
  
  # two functions that end
  # the turns of players
  def endTurnP1(self):
    self.player1Turn = False
    self.player2Turn = True
  def endTurnP2(self):
    self.player2Turn = False
    self.player1Turn = True
      
          
  
    
  
  
  
  
content_copyCOPY