วิธีการสร้างเกมงูใน Python

หากคุณเป็นคนหนึ่งที่ชอบเล่นเกมงู ฉันมั่นใจว่าบทความนี้จะน่าสนใจ

ในบทความนี้ ผมจะสอนวิธีสร้างเกมงูง่ายๆ ที่แม้แต่ผู้เริ่มต้นใน Python ก็ยังพบว่าง่ายต่อการพัฒนา

มีหลายวิธีในการสร้างเกมนี้ และวิธีหนึ่งรวมถึงการใช้ไลบรารี PyGame ของ Python ซึ่งเป็นไลบรารี Python ที่เราใช้ในการสร้างเกม

อีกวิธีหนึ่งคือการใช้ห้องสมุดเต่า โมดูลนี้มาพร้อมกับ Python ที่ติดตั้งไว้ล่วงหน้าและมีผ้าใบเสมือนสำหรับผู้ใช้เพื่อสร้างรูปร่างและรูปภาพ

ดังนั้น บทความนี้จะใช้ไลบรารีของ Turtle เพื่อใช้งานเกมงูแบบง่ายของเรา ซึ่งเหมาะสำหรับผู้เริ่มต้นโดยเฉพาะสำหรับนักพัฒนา Python มือใหม่

นอกจากโมดูลนี้แล้ว เราจะใช้โมดูลอื่นอีกสองโมดูล ได้แก่

  • โมดูลเวลา – วิธีนี้จะช่วยให้เราติดตามจำนวนวินาทีที่ผ่านไปตั้งแต่ครั้งก่อน
  • โมดูลสุ่ม – สร้างตัวเลขแบบสุ่มใน Python

เครื่องมือพื้นฐานอื่นๆ ที่คุณจะต้องใช้รวมถึงโปรแกรมแก้ไขข้อความที่คุณเลือก ฉันจะใช้ VSCode ในบทความนี้ แน่นอน คุณจะต้องติดตั้ง Python 3 บนเครื่องของคุณ หากคุณยังไม่มี คุณสามารถใช้ admintrick.com Compiler ได้เช่นกัน

นี้ควรจะสนุก!

เกมงูทำงานอย่างไร

เป้าหมายสูงสุดของเกมนี้คือให้ผู้เล่นทำคะแนนสูงสุดโดยการควบคุมงูเพื่อรวบรวมอาหารที่หน้าจอแสดง

ผู้เล่นควบคุมงูโดยใช้ปุ่มสี่ทิศทางที่สัมพันธ์กับทิศทางที่งูกำลังเคลื่อนที่ไป หากงูชนบล็อกหรือตัวเองผู้เล่นจะแพ้เกม

ขั้นตอนต่อไปนี้เราจะปฏิบัติตามเพื่อใช้เกมนี้

  • การนำเข้าโมดูลที่ติดตั้งไว้ล่วงหน้าลงในโปรแกรมของเรา (เต่า เวลา และสุ่ม)
  • การสร้างหน้าจอของเกมโดยใช้โมดูลเต่า
  • การตั้งค่าปุ่มสำหรับทิศทางการเคลื่อนที่ของงูรอบหน้าจอ
  • การใช้งานการเล่นเกม

สร้างไฟล์ snakegame.py ซึ่งเราจะเพิ่มโค้ดการใช้งาน

การนำเข้าโมดูล

โค้ดบิตนี้จะนำเข้าเต่า เวลา และโมดูลสุ่มที่ติดตั้งไว้ล่วงหน้าใน Python นอกจากนี้ เราจะตั้งค่าเริ่มต้นสำหรับคะแนนเริ่มต้นของผู้เล่น คะแนนสูงสุดที่ผู้เล่นจะได้รับ และเวลาล่าช้าของผู้เล่นในทุกการเคลื่อนไหว โมดูลเวลาใช้ที่นี่เพื่อคำนวณเวลาล่าช้า

เพิ่มโค้ดต่อไปนี้ลงในไฟล์ snakegame.py

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

การสร้างหน้าจอเกม

โมดูลเต่าที่เรานำเข้าที่นี่จะช่วยให้เราสร้างผืนผ้าใบเสมือนซึ่งจะเป็นหน้าจอหน้าต่างของเกม จากที่นี่ เราสามารถสร้างร่างของงูและอาหารที่จะรวบรวมงูได้ หน้าจอของเราจะแสดงคะแนนที่ติดตามของผู้เล่นด้วย

เพิ่มรหัสนี้ในไฟล์ 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()

ข้อมูลโค้ดด้านบนเริ่มต้นด้วยการเริ่มต้นหน้าจอเต่าและส่งชื่อและสีพื้นหลังไปที่หน้าจอ หลังจากกำหนดขนาดหน้าต่างของหน้าจอแล้ว เราวาดรูปร่างของงูบนผืนผ้าใบเสมือนจริง

  วิธีใช้ AirPods และ AirPods Pro ของคุณ: คู่มือฉบับสมบูรณ์

วิธี penup() เพียงแค่หยิบปากกาของเต่าขึ้นมา เพื่อไม่ให้มีการลากเส้นในขณะที่เต่าเคลื่อนที่ วิธี goto(x,y) ประกอบด้วยตำแหน่งพิกัดที่ย้ายเต่าไปยังตำแหน่งที่แน่นอน

จากนั้นเราก็สร้างอาหารที่งูสะสม เราจะต้องการแสดงคะแนนของผู้เล่นทุกครั้งที่งูเก็บอาหารและคะแนนสูงสุดที่ผู้เล่นไปถึงในระหว่างเกม ดังนั้นเราจึงใช้เมธอด pen.write() เพื่อดำเนินการนี้ Hideturtle() ซ่อนไอคอนเต่าจากหน้าจอในส่วนหัวที่เขียนข้อความนี้

สิ่งสำคัญคือต้องเพิ่ม 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() เป็นผู้ฟังเหตุการณ์ที่เรียกใช้วิธีการที่ย้ายงูไปยังทิศทางเฉพาะเมื่อผู้เล่นกดปุ่ม

การใช้งานการเล่นเกมงู

หลังจากวางมุมมองพื้นฐานของเกมงูแล้ว เราจะต้องสร้างเกมแบบเรียลไทม์

สิ่งนี้จะเกี่ยวข้องกับสิ่งต่อไปนี้:

  • งูจะยาวขึ้นทุกครั้งที่เก็บอาหารโดยใช้สีที่ต่างกัน
  • การเพิ่มคะแนนของผู้เล่นทุกครั้งที่งูเก็บอาหารและติดตามคะแนนสูงสุด
  • ผู้เล่นสามารถควบคุมงูไม่ให้ชนกับผนังหรือลำตัวของมันเองได้
  • เกมเริ่มต้นใหม่เมื่องูชนกัน
  • คะแนนของผู้เล่นจะถูกรีเซ็ตเป็นศูนย์เมื่อเกมเริ่มใหม่ ในขณะที่หน้าจอจะรักษาคะแนนสูงสุดของผู้เล่นไว้

เพิ่มโค้ดที่เหลือนี้ลงในไฟล์ 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()

ในข้อมูลโค้ดด้านบนนี้ เราตั้งค่าตำแหน่งสุ่มสำหรับอาหารงูภายในหน้าจอ ทุกครั้งที่งูเก็บอาหารนี้ ส่วนต่างๆ ของร่างกายของงูจะเพิ่มขึ้นด้วยสีที่ต่างกัน สีขาว ในกรณีนี้ เพื่อแยกความแตกต่างของการเจริญเติบโต

  3 เครื่องมือในการสร้างและฝังกราฟหรือแผนภูมิออนไลน์

หลังจากที่งูเก็บอาหารโดยไม่ชนกัน อาหารจะถูกจัดวางในตำแหน่งสุ่มภายในช่วงพิกัด 270 ของขนาดหน้าจอ ทุกครั้งที่งูเก็บอาหาร คะแนนของผู้เล่นจะเพิ่มขึ้นทีละ 5 เมื่องูชนกัน คะแนนของผู้เล่นจะถูกตั้งเป็น 0 ในขณะที่หน้าจอจะรักษาคะแนนสูงสุดไว้

ส่งคืนไฟล์ Python แล้วคุณจะเห็นหน้าจอเต่าของคุณมีลักษณะดังนี้:

สรุป 🐍

การใช้ห้องสมุดเต่าเป็นวิธีที่สนุกและง่ายวิธีหนึ่งในการสร้างเกมงูดังที่เราได้เห็นในบทความนี้ หรือคุณสามารถใช้สิ่งเดียวกันนี้โดยใช้ไลบรารี PyGame คุณสามารถตรวจสอบ กวดวิชา PyGame ที่นี่ และดูว่าคุณจะใช้งานเกมให้แตกต่างออกไปได้อย่างไร

คุณอาจลองเล่นเกมเดาตัวเลขใน Python หรือวิธีรับข้อมูล JSON ใน Python
สนุกกับการเขียนโค้ด!

เรื่องล่าสุด

x