Πώς να φτιάξετε ένα παιχνίδι φιδιών στην Python

Αν είστε από αυτούς που απολαμβάνουν το παιχνίδι με το φίδι, είμαι σίγουρος ότι θα βρείτε αυτό το άρθρο ενδιαφέρον.

Σε αυτό το άρθρο, θα σας διδάξω πώς να δημιουργήσετε ένα απλό παιχνίδι φιδιών που ακόμη και ένας αρχάριος στην Python θα μπορούσε να το αναπτύξει εύκολα.

Υπάρχουν διάφοροι τρόποι για να δημιουργήσετε αυτό το παιχνίδι και ένας περιλαμβάνει τη χρήση της βιβλιοθήκης PyGame της Python που είναι μια βιβλιοθήκη Python που χρησιμοποιούμε για τη δημιουργία παιχνιδιών.

Ο άλλος τρόπος είναι με τη χρήση της βιβλιοθήκης της χελώνας. Αυτή η ενότητα είναι προεγκατεστημένη με την Python και παρέχει έναν εικονικό καμβά στους χρήστες για τη δημιουργία σχημάτων και εικόνων.

Επομένως, αυτό το άρθρο θα χρησιμοποιήσει τη βιβλιοθήκη χελωνών για να εφαρμόσει το απλό μας παιχνίδι φιδιών, το οποίο είναι φιλικό για αρχάριους, ειδικά για αρχάριους προγραμματιστές Python.

Εκτός από αυτήν την ενότητα, θα χρησιμοποιήσουμε επίσης δύο άλλες ενότητες και συγκεκριμένα.

  • Μονάδα χρόνου – Αυτή η μέθοδος θα μας επιτρέψει να παρακολουθούμε τον αριθμό των δευτερολέπτων που έχουν περάσει από την προηγούμενη φορά.
  • Τυχαία ενότητα – Δημιουργεί αριθμούς τυχαία στην Python.

Άλλα βασικά εργαλεία που θα χρειαστεί να χρησιμοποιήσετε περιλαμβάνουν ένα πρόγραμμα επεξεργασίας κειμένου της επιλογής σας. Θα χρησιμοποιήσω το VSCode σε αυτό το άρθρο. Φυσικά, θα χρειαστεί να εγκαταστήσετε την Python 3 στον υπολογιστή σας εάν δεν την έχετε ήδη. Μπορείτε επίσης να χρησιμοποιήσετε τον μεταγλωττιστή grtechpc.org.

Αυτό πρέπει να είναι διασκεδαστικό!

Πώς λειτουργεί το παιχνίδι με το φίδι

Ο απώτερος στόχος αυτού του παιχνιδιού είναι ο παίκτης να πετύχει την υψηλότερη βαθμολογία ελέγχοντας το φίδι για να συλλέξει το φαγητό που εμφανίζει η οθόνη.

Ο παίκτης ελέγχει το φίδι χρησιμοποιώντας τέσσερα πλήκτρα κατεύθυνσης που σχετίζονται με την κατεύθυνση προς την οποία κινείται το φίδι. Εάν το φίδι χτυπήσει ένα μπλοκ ή τον εαυτό του, ο παίκτης χάνει το παιχνίδι.

  5 εργαλεία για να δημιουργήσετε μαρτυρίες Wall of Love στην εφαρμογή σας

Τα παρακάτω βήματα θα ακολουθήσουμε για να υλοποιήσουμε αυτό το παιχνίδι.

  • Εισαγωγή στα προγράμματά μας των προεγκατεστημένων μονάδων (χελώνα, χρόνος και τυχαία).
  • Δημιουργία της οθόνης του παιχνιδιού χρησιμοποιώντας τη μονάδα turtle.
  • Ρύθμιση των πλήκτρων για την κατεύθυνση κίνησης του φιδιού γύρω από την οθόνη.
  • Η εφαρμογή του παιχνιδιού.

Δημιουργήστε ένα αρχείο snakegame.py στο οποίο θα προσθέσουμε τον κώδικα υλοποίησης.

Εισαγωγή των μονάδων

Αυτό το κομμάτι του κώδικα θα εισαγάγει τη χελώνα, το χρόνο και τις τυχαίες μονάδες που είναι από προεπιλογή προεγκατεστημένες στην Python. Επιπλέον, στη συνέχεια θα ορίσουμε προεπιλεγμένες τιμές για το αρχικό σκορ του παίκτη, την υψηλότερη βαθμολογία που θα πετύχει ο παίκτης και τον χρόνο καθυστέρησης που λαμβάνει ο παίκτης σε κάθε κίνηση. Η μονάδα χρόνου χρησιμοποιείται εδώ για τον υπολογισμό του χρόνου καθυστέρησης.

Προσθέστε το ακόλουθο κομμάτι κώδικα στο αρχείο snakegame.py.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Δημιουργία της οθόνης του παιχνιδιού

Η ενότητα turtle που εισάγουμε εδώ θα μας επιτρέψει να δημιουργήσουμε έναν εικονικό καμβά που θα είναι η οθόνη του παραθύρου του παιχνιδιού. Από εδώ, μπορούμε να δημιουργήσουμε το σώμα του φιδιού και την τροφή που θα συλλέξει το φίδι. Η οθόνη μας θα εμφανίσει επίσης το σκορ που παρακολουθεί ο παίκτης.

Προσθέστε αυτόν τον κώδικα στο αρχείο 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()

Το παραπάνω απόσπασμα κώδικα ξεκινά με την προετοιμασία της οθόνης της χελώνας και μεταβιβάζει έναν τίτλο και ένα χρώμα φόντου στην οθόνη. Αφού καθορίσουμε το μέγεθος του παραθύρου της οθόνης μας, σχεδιάζουμε το σχήμα του φιδιού στον εικονικό καμβά.

Η μέθοδος penup() απλά σηκώνει το στυλό της χελώνας έτσι ώστε να μην τραβιέται γραμμή καθώς η χελώνα κινείται. Η μέθοδος goto(x,y) περιέχει θέσεις συντεταγμένων που μετακινούν τη χελώνα σε απόλυτη θέση.

Στη συνέχεια δημιουργούμε την τροφή που μαζεύει το φίδι. Θα θέλουμε να εμφανίζουμε το σκορ του παίκτη κάθε φορά που το φίδι συλλέγει το φαγητό και την υψηλότερη βαθμολογία που επιτυγχάνει ο παίκτης κατά τη διάρκεια του παιχνιδιού. Επομένως, χρησιμοποιούμε τη μέθοδο pen.write() για να το εφαρμόσουμε. Η hideturtle() αποκρύπτει το εικονίδιο της χελώνας από την οθόνη στην ενότητα κεφαλίδας που είναι γραμμένο αυτό το κείμενο.

  6 Καλύτερη υποδομή ειδοποιήσεων για σύγχρονες εφαρμογές

Είναι σημαντικό να προσθέσετε το turtle.mainloop() στο τέλος του κώδικά σας, το οποίο θα εμφανίζει την οθόνη περισσότερο για να σας επιτρέψει στον χρήστη να κάνει κάτι στην οθόνη.

Εκτελέστε το αρχείο και θα πρέπει να έχετε την ακόλουθη έξοδο:

Ρύθμιση των πλήκτρων κατεύθυνσης για το φίδι

Εδώ, θα ρυθμίσουμε συγκεκριμένα πλήκτρα που θα καθοδηγούν την κατεύθυνση που θα κινείται το φίδι στην οθόνη. Θα χρησιμοποιήσουμε το ‘L’ για αριστερά, ‘R’ για δεξιά, ‘U’ για επάνω, ‘D’ για κάτω. Θα εφαρμόσουμε αυτές τις οδηγίες χρησιμοποιώντας τη συνάρτηση κατεύθυνσης της χελώνας που θα καλέσουμε στο φίδι.

Προσθέστε το ακόλουθο απόσπασμα κώδικα στον κώδικά σας.

# 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')

Η παραπάνω συνάρτηση move() ορίζει την κίνηση του φιδιού στην καθορισμένη θέση μέσα σε μια ακριβή τιμή συντεταγμένων.

Η συνάρτηση listen() είναι ένα πρόγραμμα ακρόασης συμβάντων που καλεί τις μεθόδους που μετακινούν το φίδι σε μια συγκεκριμένη κατεύθυνση όταν ο παίκτης πατήσει το πλήκτρο.

Εφαρμογή του παιχνιδιού με το φίδι

Αφού καθορίσουμε τη βασική προοπτική του παιχνιδιού φιδιών μας, θα πρέπει να κάνουμε το παιχνίδι σε πραγματικό χρόνο.

Αυτό θα περιλαμβάνει τα εξής:

  • Μεγαλώνοντας το μήκος του φιδιού κάθε φορά που μαζεύει την τροφή χρησιμοποιώντας κατά προτίμηση διαφορετικό χρώμα.
  • Αυξάνοντας τη βαθμολογία του παίκτη κάθε φορά που το φίδι συλλέγει το φαγητό και παρακολουθείτε την υψηλότερη βαθμολογία.
  • Ο παίκτης είναι σε θέση να ελέγξει το φίδι από σύγκρουση με τον τοίχο ή το σώμα του.
  • Το παιχνίδι ξαναρχίζει όταν το φίδι συγκρούεται.
  • Η βαθμολογία του παίκτη μηδενίζεται κατά την επανεκκίνηση του παιχνιδιού, ενώ η οθόνη διατηρεί την υψηλότερη βαθμολογία του παίκτη.
  Τα καλύτερα ανέκδοτα, παιχνίδια και πασχαλινά αυγά για το Google Assistant

Προσθέστε τον υπόλοιπο κώδικα στο αρχείο 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()

Στο παραπάνω απόσπασμα κώδικα, ορίσαμε μια τυχαία θέση για το φαγητό του φιδιού μέσα στην οθόνη. Κάθε φορά που το φίδι συλλέγει αυτή την τροφή, το τμήμα του σώματός του αυξάνεται με διαφορετικό χρώμα. λευκό, σε αυτή την περίπτωση, για να διακρίνει την ανάπτυξή του.

Αφού το φίδι συλλέξει το φαγητό χωρίς σύγκρουση, το φαγητό τοποθετείται σε τυχαία θέση εντός του εύρους των 270 συντεταγμένων του μεγέθους της οθόνης. Κάθε φορά που το φίδι συλλέγει φαγητό, η βαθμολογία του παίκτη αυξάνεται κατά 5. Όταν το φίδι συγκρούεται, η βαθμολογία του παίκτη ορίζεται στο 0 ενώ η οθόνη διατηρεί την υψηλότερη βαθμολογία.

Τώρα επιστρέψτε το αρχείο Python και θα δείτε την οθόνη της χελώνας σας να μοιάζει με αυτό:

Συμπέρασμα 🐍

Η χρήση της βιβλιοθήκης χελωνών είναι ένας διασκεδαστικός και εύκολος τρόπος για να δημιουργήσετε το παιχνίδι φιδιών, όπως είδαμε σε αυτό το άρθρο. Εναλλακτικά, θα μπορούσατε να εφαρμόσετε το ίδιο χρησιμοποιώντας τη βιβλιοθήκη PyGame. Μπορείτε να ελέγξετε το Εκμάθηση PyGame εδώ και δείτε πώς θα μπορούσατε να εφαρμόσετε το παιχνίδι διαφορετικά.

Μπορείτε επίσης να δοκιμάσετε ένα παιχνίδι εικασίας αριθμών στην Python ή πώς να λάβετε δεδομένα JSON στην Python.
Απολαύστε την κωδικοποίηση!