Come creare un gioco di serpenti in Python

Se sei uno a cui piace giocare al gioco del serpente, sono sicuro che troverai questo articolo interessante.

In questo articolo, ti insegnerò come creare un semplice gioco di serpenti che anche un principiante in Python troverebbe facile da sviluppare.

Esistono diversi modi per creare questo gioco e uno include l’uso della libreria PyGame di Python che è una libreria Python che utilizziamo per creare giochi.

L’altro modo è utilizzare la libreria delle tartarughe. Questo modulo viene fornito con Python preinstallato e fornisce agli utenti una tela virtuale per creare forme e immagini.

Pertanto, questo articolo utilizzerà la libreria delle tartarughe per implementare il nostro semplice gioco di serpenti che è adatto ai principianti soprattutto per gli sviluppatori Python alle prime armi.

Oltre a questo modulo, utilizzeremo anche altri due moduli, vale a dire;

  • Modulo Tempo – Questo metodo ci consentirà di tenere traccia del numero di secondi trascorsi dall’ora precedente.
  • Modulo casuale – Genera numeri casualmente in Python.

Altri strumenti di base che dovrai utilizzare includono un editor di testo a tua scelta. Userò VSCode in questo articolo. Ovviamente, dovrai installare Python 3 sulla tua macchina se non lo hai già. Puoi anche usare il compilatore winadmin.it.

Questo dovrebbe essere divertente!

Come funziona il gioco del serpente

L’obiettivo finale di questo gioco è che il giocatore raggiunga il punteggio più alto controllando il serpente per raccogliere il cibo visualizzato sullo schermo.

Il giocatore controlla il serpente usando quattro tasti di direzione relativi alla direzione verso cui si sta muovendo il serpente. Se il serpente colpisce un blocco o se stesso, il giocatore perde la partita.

Seguiremo i seguenti passaggi per implementare questo gioco.

  • Importare nei nostri programmi i moduli preinstallati (tartaruga, tempo e casuale).
  • Creazione della visualizzazione dello schermo del gioco utilizzando il modulo tartaruga.
  • Impostazione dei tasti per la direzione di movimento del serpente sullo schermo.
  • L’implementazione del gioco.

Crea un file snakegame.py in cui aggiungeremo il codice di implementazione.

Importazione dei moduli

Questo pezzo di codice importerà i moduli turtle, time e random che sono preinstallati per impostazione predefinita in Python. Inoltre, imposteremo i valori predefiniti per il punteggio iniziale del giocatore, il punteggio più alto che il giocatore otterrà e il tempo di ritardo impiegato dal giocatore in ogni mossa. Il modulo tempo viene utilizzato qui per calcolare il tempo di ritardo.

Aggiungi il seguente bit di codice al tuo file snakegame.py.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Creazione della visualizzazione dello schermo del gioco

Il modulo tartaruga che importiamo qui ci consentirà di creare una tela virtuale che sarà la schermata della finestra del gioco. Da qui, possiamo creare il corpo del serpente e il cibo che il serpente raccoglierà. Il nostro schermo mostrerà anche il punteggio tracciato del giocatore.

Aggiungi questo codice al file Python.

# window screen created
wind = turtle.Screen()
wind.title("Snake Maze🐍")
wind.bgcolor("red")

# The screen size
wind.setup(width=600, height=600)


# creating the snake 
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 0)
snake.direction = "Stop"

# creating the food
snake_food = turtle.Turtle()
shapes = random.choice('triangle','circle')
snake_food.shape(shapes)
snake_food.color("blue")
snake_food.speed(0)
snake_food.penup()
snake_food.goto(0, 100)

pen = turtle.Turtle()
pen.speed(0)
pen.shape('square')
pen.color('white')
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("Your_score: 0 Highest_Score : 0", align="center", 
font=("Arial", 24, "normal"))
turtle.mainloop()

Il frammento di codice sopra inizia con l’inizializzazione dello schermo della tartaruga e passa un titolo e un colore di sfondo allo schermo. Dopo aver definito la dimensione della finestra del nostro schermo, disegniamo la forma del serpente sulla tela virtuale.

Il metodo penup() prende semplicemente la penna della tartaruga in modo che non venga tracciata una linea mentre la tartaruga si muove. Il metodo goto(x,y) contiene le posizioni delle coordinate che spostano la tartaruga in una posizione assoluta.

Quindi creiamo il cibo che il serpente raccoglie. Vorremo visualizzare il punteggio del giocatore ogni volta che il serpente raccoglie il cibo e il punteggio più alto che il giocatore raggiunge durante il gioco. Pertanto, utilizziamo il metodo pen.write() per implementarlo. Hideturtle() nasconde l’icona della tartaruga dallo schermo nella sezione dell’intestazione in cui è scritto questo testo.

È importante aggiungere turtle.mainloop() alla fine del codice, che visualizzerà lo schermo più a lungo per consentire all’utente di fare qualcosa sullo schermo.

Esegui il file e dovresti avere il seguente output:

Impostazione dei tasti di direzione per il serpente

Qui imposteremo tasti specifici che guideranno la direzione in cui si muoverà il serpente sullo schermo. Useremo la “L” per sinistra, “R” per destra, “U” per su, “D” per giù. Implementeremo queste indicazioni usando la funzione di direzione della tartaruga che chiameremo sul serpente.

Aggiungi il seguente snippet di codice al tuo codice.

# Assigning directions
def moveleft():
    if snake.direction != "right":
        snake.direction = "left"

def moveright():
    if snake.direction != "left":
        snake.direction = "right"

def moveup():
    if snake.direction != "down":
        snake.direction = "up"

def movedown():
    if snake.direction != "up":
        snake.direction = "down"

def move():
    if snake.direction == "up":
        coord_y = snake.ycor()
        snake.sety(coord_y+20)

    if snake.direction == "down":
        coord_y = snake.ycor()
        snake.sety(coord_y-20)

    if snake.direction == "right":
        coord_x = snake.xcor()
        snake.setx(coord_x+20)

    if snake.direction == "left":
        coord_x = snake.xcor()
        snake.setx(coord_x-20)

wind.listen()
wind.onkeypress(moveleft, 'L')
wind.onkeypress(moveright, 'R')
wind.onkeypress(moveup, 'U')
wind.onkeypress(movedown, 'D')

La funzione move() sopra imposta il movimento del serpente nella posizione definita all’interno di un valore di coordinate preciso.

La funzione listen() è un listener di eventi che richiama i metodi che spostano il serpente in una direzione particolare quando il giocatore preme il tasto.

L’implementazione del gameplay del gioco del serpente

Dopo aver stabilito le prospettive di base del nostro gioco del serpente, dovremo realizzare il gioco in tempo reale.

Ciò comporterà quanto segue:

  • Aumentare la lunghezza del serpente ogni volta che raccoglie il cibo utilizzando preferibilmente un colore diverso.
  • Aumentare il punteggio del giocatore ogni volta che il serpente raccoglie il cibo e tracciare il punteggio più alto.
  • Il giocatore è in grado di controllare il serpente dalla collisione con il muro o il proprio corpo.
  • Il gioco riprende quando il serpente si scontra.
  • Il punteggio del giocatore viene azzerato al riavvio del gioco, mentre lo schermo mantiene il punteggio più alto del giocatore.

Aggiungi il resto di questo codice al tuo file python.

segments = []

#Implementing the gameplay
while True:
    wind.update()
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        time.sleep(1)
        snake.goto(0, 0)
        snake.direction = "Stop"
        snake.shape("square")
        snake.color("green")

        for segment in segments:
            segment.goto(1000, 1000)
            segments.clear()
            player_score = 0
            delay_time = 0.1
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

        if snake.distance(snake_food) < 20:
            coord_x = random.randint(-270, 270)
            coord_y = random.randint(-270, 270)
            snake_food.goto(coord_x, coord_y)

            # Adding segment
            added_segment = turtle.Turtle()
            added_segment.speed(0)
            added_segment.shape("square")
            added_segment.color("white")
            added_segment.penup()
            segments.append(added_segment)
            delay_time -= 0.001
            player_score += 5

            if player_score > highest_score:
                highest_score = player_score
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    # checking for collisions
    for i in range(len(segments)-1, 0, -1):
        coord_x = segments[i-1].xcor()
        coord_y = segments[i-1].ycor()
        segments[i].goto(coord_x, coord_y)

    if len(segments) > 0:
        coord_x = snake.xcor()
        coord_y = snake.ycor()
        segments[0].goto(coord_x, coord_y)
    move()

    for segment in segments:
        if segment.distance(snake) < 20:
            time.sleep(1)
            snake.goto(0, 0)
            snake.direction = "stop"
            snake.color('white')
            snake.shape('square')

            for segment in segments:
                segment.goto(1000, 1000)
                segment.clear()
                player_score = 0
                delay_time = 0.1
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

     time.sleep(delay_time)

turtle.mainloop()

Nel frammento di codice sopra, impostiamo una posizione casuale per il cibo del serpente all’interno dello schermo. Ogni volta che il serpente raccoglie questo cibo, il suo segmento corporeo aumenta di un colore diverso; bianco, in questo caso, per distinguerne la crescita.

Dopo che il serpente ha raccolto il cibo senza scontrarsi, il cibo viene posizionato in una posizione casuale all’interno dell’intervallo di 270 coordinate della dimensione dello schermo. Ogni volta che il serpente raccoglie cibo, il punteggio del giocatore aumenta di 5. Quando il serpente si scontra, il punteggio del giocatore viene impostato su 0 mentre lo schermo mantiene il punteggio più alto.

Ora restituisci il file Python e dovresti vedere lo schermo della tua tartaruga simile a questo:

Conclusione 🐍

L’uso della libreria delle tartarughe è un modo semplice e divertente per creare il gioco del serpente, come abbiamo visto in questo articolo. In alternativa, puoi implementare lo stesso usando la libreria PyGame. Puoi controllare il Tutorial PyGame qui e guarda come potresti implementare il gioco in modo diverso.

Puoi anche provare un gioco di indovinare i numeri in Python o come ottenere dati JSON in Python.
Divertiti con la codifica!