Crearea unui joc șarpe simplu în Python
Dacă ești pasionat de jocul șarpelui, acest articol îți va stârni cu siguranță interesul. Te voi ghida pas cu pas în crearea unui joc șarpe simplu, accesibil chiar și începătorilor în Python.
Există mai multe metode de a construi acest joc. Una dintre ele implică utilizarea bibliotecii PyGame, o resursă Python specializată în dezvoltarea jocurilor.
O altă variantă este utilizarea modulului turtle. Acest modul este inclus implicit în Python și oferă o suprafață virtuală pe care utilizatorii pot crea diverse forme și imagini.
În acest tutorial, vom folosi biblioteca turtle pentru a implementa jocul nostru șarpe, o abordare ideală pentru cei care fac primii pași în programarea Python.
Pe lângă modulul turtle, vom folosi și alte două module:
- Modulul time – ne permite să monitorizăm timpul scurs în secunde.
- Modulul random – generează numere aleatorii în Python.
Vei avea nevoie, de asemenea, de un editor de text. Eu voi utiliza VSCode, dar poți alege orice alt editor preferi. Desigur, trebuie să ai Python 3 instalat. Alternativ, poți utiliza compilatorul online tipstrick.ro.
Să începem distracția!
Cum funcționează jocul șarpelui?
Scopul jocului este ca jucătorul să obțină cel mai mare scor, controlând șarpele pentru a colecta hrana care apare pe ecran.
Controlul șarpelui se face prin intermediul tastelor direcționale. Dacă șarpele se lovește de un obstacol (marginea ecranului) sau de propriul corp, jocul se termină.
Pentru a implementa jocul, vom urma acești pași:
- Importarea modulelor necesare (turtle, time, random).
- Crearea ecranului de joc cu modulul turtle.
- Configurarea tastelor pentru controlul mișcării șarpelui.
- Implementarea mecanicii de joc.
Începe prin a crea un fișier numit snakegame.py în care vom scrie codul.
Importarea modulelor
Acest cod importă modulele turtle, time și random, care sunt incluse în mod implicit în Python. De asemenea, vom seta valorile inițiale pentru scorul jucătorului, cel mai mare scor posibil și timpul de întârziere dintre mișcări. Modulul time ne ajută la calcularea acestei întârzieri.
Adaugă următorul cod în fișierul snakegame.py:
import turtle import random import time player_score = 0 highest_score = 0 delay_time = 0.1
Crearea ecranului de joc
Modulul turtle importat ne oferă o pânză virtuală care va deveni ecranul jocului. Pe acesta vom desena corpul șarpelui și hrana. Vom afișa și scorul jucătorului.
Adaugă următorul cod în fișierul snakegame.py:
# 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()
Codul inițializează ecranul turtle, setând titlul ferestrei și culoarea de fundal. Apoi, definim dimensiunea ecranului și desenăm forma șarpelui.
Metoda penup() ridică stiloul broaștei țestoase, astfel încât să nu se deseneze o linie în timp ce se mișcă. Metoda goto(x,y) mută broasca țestoasă la coordonatele specificate.
După aceea, creăm hrana șarpelui. Afișăm scorul actual al jucătorului și cel mai mare scor obținut, folosind metoda pen.write(). Hideturtle() ascunde iconița broaștei țestoase din secțiunea de antet.
Este crucial să adaugi turtle.mainloop() la finalul codului. Aceasta va permite ca ecranul să rămână vizibil.
Rulează fișierul snakegame.py. Ar trebui să vezi ecranul jocului.
Configurarea tastelor pentru controlul mișcării
Acum vom configura tastele care vor controla mișcarea șarpelui pe ecran: L (stânga), R (dreapta), U (sus), D (jos). Aceste comenzi vor fi implementate cu ajutorul unei funcții de direcție asociate șarpelui.
Adaugă următorul cod:
# 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')
Funcția move() definește cum se mișcă șarpele pe baza direcției sale. Listen() ascultă evenimentele și apelează metodele corecte atunci când o tastă este apăsată.
Implementarea mecanicii jocului
Acum, vom aduce jocul la viață, făcându-l interactiv. Trebuie să implementăm următoarele:
- Creșterea lungimii șarpelui când acesta mănâncă hrana.
- Creșterea scorului jucătorului.
- Prevenirea coliziunilor șarpelui cu marginea ecranului sau cu propriul său corp.
- Repornirea jocului în caz de coliziune.
Adaugă următorul cod:
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()
Codul de mai sus definește o poziție aleatorie pentru hrana șarpelui. Când șarpele mănâncă hrana, crește lungimea sa și scorul crește cu 5 puncte. Dacă șarpele se ciocnește, jocul se resetează și scorul jucătorului devine 0, dar scorul maxim rămâne salvat.
Rulează din nou fișierul snakegame.py. Acum ar trebui să poți juca un joc complet.
Concluzie 🐍
Utilizarea bibliotecii turtle este o metodă distractivă și simplă de a crea jocul șarpelui. O alternativă ar fi să folosești PyGame. Poți consulta Tutorialele PyGame pentru o altă perspectivă asupra dezvoltării jocului.
Încearcă și crearea unui joc de ghicit numere sau explorarea datelor JSON în Python.
Distracție plăcută la programat!