Crea un juego de serpientes usando Turtle en Python

Un juego de serpientes es un juego de laberinto arcade desarrollado por Gremlin Industries y publicado por Sega en octubre de 1976. Se considera un juego hábil y se ha popularizado entre las personas durante generaciones. La serpiente en el juego Snake se controla usando los cuatro botones de dirección en relación con la dirección en la que se dirige. El objetivo del jugador en el juego es lograr el máximo de puntos posible recolectando comida o frutas. El jugador pierde una vez que la serpiente golpea la pared o se golpea a sí misma.

Para los principiantes de Python, aquellos que estén interesados ​​en hacer algo más fácil en su dominio definitivamente pueden probar esto y el módulo Turtle se creó exactamente para este propósito para que los principiantes lo prueben y también puedan enviarlo como parte del proyecto. Este programa se realizará en Python 3 .

Entonces, crearemos un juego basado en Python usando los siguientes módulos:

  • Turtle: es una biblioteca de Python preinstalada que permite a los usuarios crear formas e imágenes al proporcionarles un lienzo virtual.
  • Tiempo: Esta función se utiliza para contar el número de segundos transcurridos desde la época.
  • Aleatorio: esta función se utiliza para generar números aleatorios en Python mediante el uso de un módulo random.

Apoyo

El siguiente código se puede hacer fácilmente usando la aplicación PyCharm , que está especialmente diseñada para los programas de Python.

Además, VSCode se puede usar para este programa. Instale Python3 desde extensiones de VSCode. Luego, guarde el programa en forma de your_filename.py

A continuación se muestra el enfoque paso a paso para crear un juego de serpientes usando el módulo Turtle:

Paso 1 : Importaremos módulos al programa y daremos valores predeterminados para el juego.

Python3

import turtle
import time
import random
 
delay = 0.1
score = 0
high_score = 0

Paso 2 : Ahora, crearemos la pantalla del juego, es decir, la pantalla de la ventana del juego donde crearemos la cabeza de la serpiente y la comida para la serpiente en el juego y mostraremos los puntajes en el encabezado del juego. .

Python3

# Creating a window screen
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
 
# the width and height can be put as user's choice
wn.setup(width=600, height=600)
wn.tracer(0)
 
 
# head of the snake
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "Stop"
 
 
# food in the game
food = turtle.Turtle()
colors = random.choice(['red', 'green', 'black'])
shapes = random.choice(['square', 'triangle', 'circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
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("Score : 0  High Score : 0", align="center",
          font=("candara", 24, "bold"))

Producción:

La puntuación inicial como encabezado, blanco: cabeza de serpiente, rojo: fruta

Paso 3 : Ahora, validaremos la clave para los movimientos de la serpiente. Al hacer clic en las palabras clave que normalmente se usan para jugar ‘w’, ‘a’, ‘s’ y ‘d’, podemos operar los movimientos de la serpiente alrededor de la pantalla.

Python3

# assigning key directions
def group():
    if head.direction != "down":
        head.direction = "up"
 
 
def godown():
    if head.direction != "up":
        head.direction = "down"
 
 
def goleft():
    if head.direction != "right":
        head.direction = "left"
 
 
def goright():
    if head.direction != "left":
        head.direction = "right"
 
 
def move():
    if head.direction == "up":
        y = head.ycor()
        head.sety(y+20)
    if head.direction == "down":
        y = head.ycor()
        head.sety(y-20)
    if head.direction == "left":
        x = head.xcor()
        head.setx(x-20)
    if head.direction == "right":
        x = head.xcor()
        head.setx(x+20)
 
 
wn.listen()
wn.onkeypress(group, "w")
wn.onkeypress(godown, "s")
wn.onkeypress(goleft, "a")
wn.onkeypress(goright, "d")

Paso 4 : Ahora, por último, crearemos el juego donde sucederá lo siguiente:

  • La serpiente crecerá su cuerpo cuando la serpiente coma los frutos.
  • Dando color a la cola de la serpiente.
  • Después de comer la fruta, se contará la puntuación.
  • Comprobación de las colisiones de la cabeza de la serpiente con el cuerpo o la pared de la pantalla de la ventana.
  • Reiniciar el juego automáticamente desde el principio después de la colisión.
  • La nueva forma y color de la fruta se introducirá cada vez que se reinicie la ventana.
  • La puntuación volverá a cero y se mantendrá una puntuación alta hasta que no se cierre la ventana.

Python3

segments = []
 
# Main Gameplay
while True:
    wn.update()
    if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
        time.sleep(1)
        head.goto(0, 0)
        head.direction = "Stop"
        colors = random.choice(['red', 'blue', 'green'])
        shapes = random.choice(['square', 'circle'])
        for segment in segments:
            segment.goto(1000, 1000)
        segments.clear()
        score = 0
        delay = 0.1
        pen.clear()
        pen.write("Score : {} High Score : {} ".format(
            score, high_score), align="center", font=("candara", 24, "bold"))
    if head.distance(food) < 20:
        x = random.randint(-270, 270)
        y = random.randint(-270, 270)
        food.goto(x, y)
 
        # Adding segment
        new_segment = turtle.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("orange")  # tail colour
        new_segment.penup()
        segments.append(new_segment)
        delay -= 0.001
        score += 10
        if score > high_score:
            high_score = score
        pen.clear()
        pen.write("Score : {} High Score : {} ".format(
            score, high_score), align="center", font=("candara", 24, "bold"))
    # Checking for head collisions with body segments
    for index in range(len(segments)-1, 0, -1):
        x = segments[index-1].xcor()
        y = segments[index-1].ycor()
        segments[index].goto(x, y)
    if len(segments) > 0:
        x = head.xcor()
        y = head.ycor()
        segments[0].goto(x, y)
    move()
    for segment in segments:
        if segment.distance(head) < 20:
            time.sleep(1)
            head.goto(0, 0)
            head.direction = "stop"
            colors = random.choice(['red', 'blue', 'green'])
            shapes = random.choice(['square', 'circle'])
            for segment in segments:
                segment.goto(1000, 1000)
            segment.clear()
 
            score = 0
            delay = 0.1
            pen.clear()
            pen.write("Score : {} High Score : {} ".format(
                score, high_score), align="center", font=("candara", 24, "bold"))
    time.sleep(delay)
 
wn.mainloop()

A continuación, el programa completo basado en el enfoque anterior:

Python3

# import required modules
import turtle
import time
import random
 
delay = 0.1
score = 0
high_score = 0
 
 
 
# Creating a window screen
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
# the width and height can be put as user's choice
wn.setup(width=600, height=600)
wn.tracer(0)
 
# head of the snake
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "Stop"
 
# food in the game
food = turtle.Turtle()
colors = random.choice(['red', 'green', 'black'])
shapes = random.choice(['square', 'triangle', 'circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
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("Score : 0  High Score : 0", align="center",
          font=("candara", 24, "bold"))
 
 
 
# assigning key directions
def group():
    if head.direction != "down":
        head.direction = "up"
 
 
def godown():
    if head.direction != "up":
        head.direction = "down"
 
 
def goleft():
    if head.direction != "right":
        head.direction = "left"
 
 
def goright():
    if head.direction != "left":
        head.direction = "right"
 
 
def move():
    if head.direction == "up":
        y = head.ycor()
        head.sety(y+20)
    if head.direction == "down":
        y = head.ycor()
        head.sety(y-20)
    if head.direction == "left":
        x = head.xcor()
        head.setx(x-20)
    if head.direction == "right":
        x = head.xcor()
        head.setx(x+20)
 
 
         
wn.listen()
wn.onkeypress(group, "w")
wn.onkeypress(godown, "s")
wn.onkeypress(goleft, "a")
wn.onkeypress(goright, "d")
 
segments = []
 
 
 
# Main Gameplay
while True:
    wn.update()
    if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
        time.sleep(1)
        head.goto(0, 0)
        head.direction = "Stop"
        colors = random.choice(['red', 'blue', 'green'])
        shapes = random.choice(['square', 'circle'])
        for segment in segments:
            segment.goto(1000, 1000)
        segments.clear()
        score = 0
        delay = 0.1
        pen.clear()
        pen.write("Score : {} High Score : {} ".format(
            score, high_score), align="center", font=("candara", 24, "bold"))
    if head.distance(food) < 20:
        x = random.randint(-270, 270)
        y = random.randint(-270, 270)
        food.goto(x, y)
 
        # Adding segment
        new_segment = turtle.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("orange")  # tail colour
        new_segment.penup()
        segments.append(new_segment)
        delay -= 0.001
        score += 10
        if score > high_score:
            high_score = score
        pen.clear()
        pen.write("Score : {} High Score : {} ".format(
            score, high_score), align="center", font=("candara", 24, "bold"))
    # Checking for head collisions with body segments
    for index in range(len(segments)-1, 0, -1):
        x = segments[index-1].xcor()
        y = segments[index-1].ycor()
        segments[index].goto(x, y)
    if len(segments) > 0:
        x = head.xcor()
        y = head.ycor()
        segments[0].goto(x, y)
    move()
    for segment in segments:
        if segment.distance(head) < 20:
            time.sleep(1)
            head.goto(0, 0)
            head.direction = "stop"
            colors = random.choice(['red', 'blue', 'green'])
            shapes = random.choice(['square', 'circle'])
            for segment in segments:
                segment.goto(1000, 1000)
            segment.clear()
 
            score = 0
            delay = 0.1
            pen.clear()
            pen.write("Score : {} High Score : {} ".format(
                score, high_score), align="center", font=("candara", 24, "bold"))
    time.sleep(delay)
 
wn.mainloop()

Demostración del juego final mostrando todo lo escrito en código

Publicación traducida automáticamente

Artículo escrito por polokghosh53 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *