Dieser Artikel führt Sie und gibt Ihnen eine grundlegende Vorstellung davon, wie Sie ein Spiel Tic Tac Toe mit der Pygame- Bibliothek von Python entwerfen . Pygame ist ein plattformübergreifender Satz von Python-Modulen zum Schreiben von Videospielen. Es enthält Computergrafiken und Soundbibliotheken, die für die Verwendung mit der Programmiersprache Python entwickelt wurden.

Teilen wir die Aufgabe in fünf Teile auf:

  1. Importieren der erforderlichen Bibliotheken und Einrichten der erforderlichen globalen Variablen.
  2. Durch das Entwerfen der Spielanzeigefunktion wird eine Plattform für die Anzeige anderer Komponenten auf dem Bildschirm festgelegt.
  3. Hauptalgorithmus für Gewinn und Unentschieden
  4. Abrufen der Benutzereingabe und Anzeigen des „X“ oder „O“ an der richtigen Stelle, an der der Benutzer mit der Maus geklickt hat.
  5. Ausführen einer Endlosschleife und Einbeziehen der definierten Methoden.

Hinweis: Die erforderlichen PNG-Dateien können unten heruntergeladen werden -

modifizierte_cover.png

X_modified.png

o_modified.png

Importieren der erforderlichen Bibliotheken und Einrichten der erforderlichen globalen Variablen

Wir werden das nutzen pygame, timeund die sysBibliothek von Python. Die Zeitbibliothek wird verwendet, um die Zeit und die sleep()Methode zu verfolgen , die wir in unserem Code verwenden werden. Schauen Sie sich den Code unten an.

import pygame as pg 
import sys 
import time 
from pygame.locals import *
   
  
XO = 'x'
  
winner = None
  
draw = None
  
width = 400
  
height = 400
  
white = (255, 255, 255) 
  
line_color = (0, 0, 0) 
   
board = [[None]*3, [None]*3, [None]*3] 

Der vollständige Code:

import pygame as pg 
import sys 
import time 
from pygame.locals import *
   
  
XO = 'x'
  
winner = None
  
draw = None
  
width = 400
  
height = 400
  
white = (255, 255, 255) 
  
line_color = (0, 0, 0) 
   
board = [[None]*3, [None]*3, [None]*3] 
  
  
pg.init() 
  
fps = 30
  
CLOCK = pg.time.Clock() 
  
screen = pg.display.set_mode((width, height + 100), 0, 32) 
  
pg.display.set_caption("My Tic Tac Toe") 
   
initiating_window = pg.image.load("modified_cover.png") 
x_img = pg.image.load("X_modified.png") 
y_img = pg.image.load("o_modified.png") 
   
initiating_window = pg.transform.scale(initiating_window, (width, height + 100)) 
x_img = pg.transform.scale(x_img, (80, 80)) 
o_img = pg.transform.scale(y_img, (80, 80)) 
   
def game_initiating_window(): 
      
    
    screen.blit(initiating_window, (0, 0)) 
      
    
    pg.display.update() 
    time.sleep(3)                     
    screen.fill(white) 
   
    
    pg.draw.line(screen, line_color, (width / 3, 0), (width / 3, height), 7) 
    pg.draw.line(screen, line_color, (width / 3 * 2, 0), (width / 3 * 2, height), 7) 
   
    
    pg.draw.line(screen, line_color, (0, height / 3), (width, height / 3), 7) 
    pg.draw.line(screen, line_color, (0, height / 3 * 2), (width, height / 3 * 2), 7) 
    draw_status() 
   
def draw_status(): 
      
    
    
    global draw 
      
    if winner is None: 
        message = XO.upper() + "'s Turn"
    else: 
        message = winner.upper() + " won !"
    if draw: 
        message = "Game Draw !"
   
    
    font = pg.font.Font(None, 30) 
      
    
    
    text = font.render(message, 1, (255, 255, 255)) 
   
    
    
    screen.fill ((0, 0, 0), (0, 400, 500, 100)) 
    text_rect = text.get_rect(center =(width / 2, 500-50)) 
    screen.blit(text, text_rect) 
    pg.display.update() 
      
def check_win(): 
    global board, winner, draw 
   
    
    for row in range(0, 3): 
        if((board[row][0] == board[row][1] == board[row][2]) and (board [row][0] is not None)): 
            winner = board[row][0] 
            pg.draw.line(screen, (250, 0, 0), 
                         (0, (row + 1)*height / 3 -height / 6), 
                         (width, (row + 1)*height / 3 - height / 6 ), 
                         4) 
            break
   
    
    for col in range(0, 3): 
        if((board[0][col] == board[1][col] == board[2][col]) and (board[0][col] is not None)): 
            winner = board[0][col] 
            pg.draw.line (screen, (250, 0, 0), ((col + 1)* width / 3 - width / 6, 0), \ 
                          ((col + 1)* width / 3 - width / 6, height), 4) 
            break
   
    
    if (board[0][0] == board[1][1] == board[2][2]) and (board[0][0] is not None): 
          
        
        winner = board[0][0] 
        pg.draw.line (screen, (250, 70, 70), (50, 50), (350, 350), 4) 
          
    if (board[0][2] == board[1][1] == board[2][0]) and (board[0][2] is not None): 
          
        
        winner = board[0][2] 
        pg.draw.line (screen, (250, 70, 70), (350, 50), (50, 350), 4) 
   
    if(all([all(row) for row in board]) and winner is None ): 
        draw = True
    draw_status() 
      
def drawXO(row, col): 
    global board, XO 
      
    
    
    
    if row == 1: 
        posx = 30
          
    
    
    
    if row == 2: 
  
        
        
        posx = width / 3 + 30
          
    if row == 3: 
        posx = width / 3 * 2 + 30
   
    if col == 1: 
        posy = 30
          
    if col == 2: 
        posy = height / 3 + 30
      
    if col == 3: 
        posy = height / 3 * 2 + 30
          
    
    
    board[row-1][col-1] = XO 
      
    if(XO == 'x'): 
          
        
        
        
        
        screen.blit(x_img, (posy, posx)) 
        XO = 'o'
      
    else: 
        screen.blit(o_img, (posy, posx)) 
        XO = 'x'
    pg.display.update() 
   
def user_click(): 
    
    x, y = pg.mouse.get_pos() 
   
    
    if(x<width / 3): 
        col = 1
      
    elif (x<width / 3 * 2): 
        col = 2
      
    elif(x<width): 
        col = 3
      
    else: 
        col = None
   
    
    if(y<height / 3): 
        row = 1
      
    elif (y<height / 3 * 2): 
        row = 2
      
    elif(y<height): 
        row = 3
      
    else: 
        row = None
        
    
    
    
    if(row and col and board[row-1][col-1] is None): 
        global XO 
        drawXO(row, col) 
        check_win() 
          
def reset_game(): 
    global board, winner, XO, draw 
    time.sleep(3) 
    XO = 'x'
    draw = False
    game_initiating_window() 
    winner = None
    board = [[None]*3, [None]*3, [None]*3] 
   
game_initiating_window() 
   
while(True): 
    for event in pg.event.get(): 
        if event.type == QUIT: 
            pg.quit() 
            sys.exit() 
        elif event.type is MOUSEBUTTONDOWN: 
            user_click() 
            if(winner or draw): 
                reset_game() 
    pg.display.update() 
    CLOCK.tick(fps) 

Ausgabe: