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

เผยแพร่แล้ว: 2022-02-02

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

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

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

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

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

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

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

เครื่องมือพื้นฐานอื่นๆ ที่คุณจะต้องใช้รวมถึงโปรแกรมแก้ไขข้อความที่คุณเลือก ฉันจะใช้ VSCode ในบทความนี้ แน่นอน คุณจะต้องติดตั้ง Python 3 บนเครื่องของคุณ หากคุณยังไม่มี คุณสามารถใช้ Geekflare 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()

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

วิธี 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()

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

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

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

บทสรุป

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

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