วิธีตั้งโปรแกรมเกมใน Python ด้วย Pygame (พร้อมรูปภาพ)

สารบัญ:

วิธีตั้งโปรแกรมเกมใน Python ด้วย Pygame (พร้อมรูปภาพ)
วิธีตั้งโปรแกรมเกมใน Python ด้วย Pygame (พร้อมรูปภาพ)

วีดีโอ: วิธีตั้งโปรแกรมเกมใน Python ด้วย Pygame (พร้อมรูปภาพ)

วีดีโอ: วิธีตั้งโปรแกรมเกมใน Python ด้วย Pygame (พร้อมรูปภาพ)
วีดีโอ: สอนไพธอน Python 3: การอ่านเท็กซ์ไฟล์เบื้องต้น (Read text file) 2024, เมษายน
Anonim

นี่คือการแนะนำ Pygame สำหรับผู้ที่รู้จัก Python อยู่แล้ว บทความนี้จะสอนขั้นตอนในการสร้างเกมง่ายๆ ที่ให้ผู้เล่นหลบลูกบอลกระดอน

ขั้นตอน

ส่วนที่ 1 จาก 8: การติดตั้ง Pygame

ขั้นตอนที่ 1. ดาวน์โหลด Pygame

ค้นหาสำหรับแพลตฟอร์มของคุณจาก

ขั้นตอนที่ 2. เรียกใช้ตัวติดตั้ง

ขั้นตอนที่ 3 ตรวจสอบว่าการติดตั้งใช้งานได้

เปิดเทอร์มินัล Python พิมพ์ "นำเข้า pygame" หากคุณไม่เห็นข้อผิดพลาดใดๆ แสดงว่าติดตั้ง Pygame สำเร็จแล้ว

    นำเข้า pygame

ส่วนที่ 2 จาก 8: การตั้งค่าหน้าต่างพื้นฐาน

ขั้นตอนที่ 1. เปิดไฟล์ใหม่

ขั้นตอนที่ 2. นำเข้า Pygame

Pygame เป็นห้องสมุดที่ให้การเข้าถึงฟังก์ชั่นกราฟิก หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของฟังก์ชันเหล่านี้ คุณสามารถค้นหาได้จากเว็บไซต์ Pygame

    นำเข้า pygame จาก pygame.locals นำเข้า *

ขั้นตอนที่ 3 ตั้งค่าความละเอียดของหน้าต่าง

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

    ความละเอียด = (400, 300)

ขั้นตอนที่ 4. กำหนดสีบางสี

สีใน pygame คือ (RBGA ซึ่งอยู่ในช่วงค่าระหว่าง 0 ถึง 255 ค่าอัลฟ่า (A) เป็นทางเลือก แต่สีอื่น ๆ (บังคับสีแดง สีน้ำเงิน และสีเขียว)

    ขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0)

ขั้นตอนที่ 5. เริ่มต้นหน้าจอ

ใช้ตัวแปรความละเอียดที่กำหนดไว้ก่อนหน้านี้

    หน้าจอ = pygame.display.set_mode (ความละเอียด)

ขั้นตอนที่ 6 สร้างเกมวนรอบ

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

    ในขณะที่จริง:

ขั้นตอนที่ 7. ระบายสีหน้าจอ

    screen.fill (สีขาว)

ขั้นตอนที่ 8 แสดงหน้าจอ

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

    ในขณะที่ True: … pygame.display.flip()

ขั้นตอนที่ 9 จัดการเหตุการณ์

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

    ในขณะที่ True: … สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit()

ProgramPygamePart1
ProgramPygamePart1

ขั้นตอนที่ 10. ลองเลย

นี่คือสิ่งที่รหัสควรมีลักษณะดังนี้:

    นำเข้า pygame จาก pygame.locals นำเข้า * ความละเอียด = (400, 300) สีขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0) หน้าจอ = pygame.display.set_mode (ความละเอียด) ในขณะที่ True: screen.fill(สีขาว) pygame.display.flip() สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit()

ตอนที่ 3 จาก 8: การสร้างวัตถุในเกม

ขั้นตอนที่ 1 สร้างคลาสและตัวสร้างใหม่

ตั้งค่าคุณสมบัติทั้งหมดของวัตถุ คุณยังระบุค่าเริ่มต้นสำหรับคุณสมบัติทั้งหมดอีกด้วย

    class Ball: def _init_(self, xPos = resolution[0] / 2, yPos = resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = ตัว yPos.dx = xVel self.dy = yVel self.radius = rad self.type = "บอล"

ขั้นตอนที่ 2 กำหนดวิธีการวาดวัตถุ

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

    def วาด(ตัวเอง, พื้นผิว): pygame.draw.circle(พื้นผิว, สีดำ, (self.x, self.y), self.radius)

ขั้นตอนที่ 3 สร้างตัวอย่างคลาสและบอกเกมลูปให้จั่วลูกบอลในทุกลูป

    ball = Ball() ในขณะที่ True: … ball.draw(screen)

ขั้นตอนที่ 4 ทำให้วัตถุเคลื่อนที่

สร้างฟังก์ชันที่จะอัปเดตตำแหน่งของวัตถุ เรียกใช้ฟังก์ชันนี้ในทุกรอบเกม

    คลาส Ball: … def update(self): self.x += self.dx self.y += self.dy

ขั้นตอนที่ 5. จำกัดอัตราเฟรม

ลูกบอลจะเคลื่อนที่เร็วมากเพราะเกมวนซ้ำหลายร้อยครั้งต่อวินาที ใช้นาฬิกาของ Pygame เพื่อจำกัดอัตราเฟรมไว้ที่ 60 fps

    clock = pygame.time. Clock() ในขณะที่ True: … clock.tick(60)

ขั้นตอนที่ 6. เก็บลูกบอลไว้บนหน้าจอ

เพิ่มการตรวจสอบในฟังก์ชันอัปเดตเพื่อย้อนกลับทิศทางของลูกบอลหากกระทบกับขอบหน้าจอด้านใดด้านหนึ่ง

    class Ball: … def update(self): … if (self.x <= 0 or self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 หรือ self.y) >= ความละเอียด[1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

ขั้นตอนที่ 7 ลองเลย

นี่คือสิ่งที่รหัสควรมีลักษณะดังนี้:

    นำเข้า pygame จาก pygame.locals นำเข้า * ความละเอียด = (400, 300) สีขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0) หน้าจอ = pygame.display.set_mode (ความละเอียด) class Ball: def _init_(self, xPos = resolution[0] / 2, yPos = resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def เสมอ (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีดำ, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 หรือ self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 or self.y >= resolution[1]): self.dy *= -1 ball = Ball() clock = pygame.time. Clock() ในขณะที่ True: หน้าจอ กรอก (สีขาว) ball.draw(หน้าจอ) ball.update() pygame.display.flip() clock.tick(60) สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit ()

ตอนที่ 4 จาก 8: การจัดระเบียบเกม

ขั้นตอนที่ 1 ใช้คลาสเพื่อจัดระเบียบทุกอย่าง

เกมจะซับซ้อนขึ้น ใช้เทคนิคเชิงวัตถุเพื่อจัดระเบียบโค้ดของคุณ

ขั้นตอนที่ 2 ทำให้เกมวนซ้ำเป็นคลาส

เนื่องจากตอนนี้เกมของเรามีข้อมูลรวมถึงออบเจกต์และฟังก์ชันของเกม คุณจึงควรเปลี่ยนลูปเกมของคุณให้เป็นคลาส

    เกมคลาส ():

ขั้นตอนที่ 3 เพิ่มตัวสร้าง

ที่นี่คุณจะยกตัวอย่างวัตถุในเกม สร้างหน้าจอและนาฬิกาของเรา และเริ่มต้น Pygame จำเป็นต้องเริ่มต้น Pygame เพื่อใช้คุณสมบัติบางอย่าง เช่น ข้อความหรือเสียง

    เกมคลาส (): def _init_ (ตัวเอง): pygame.init () self.screen = pygame.display.set_mode (ความละเอียด) self.clock = pygame.time. Clock ()

ขั้นตอนที่ 4 จัดการเหตุการณ์ในฟังก์ชัน

    class game(): … def handleEvents(self): สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit()

ขั้นตอนที่ 5. ทำให้เกมวนเป็นฟังก์ชัน

เรียกใช้ฟังก์ชันการจัดการเหตุการณ์ทุกวง

    คลาสเกม(): … def run(self): while True: self.handleEvents() self.screen.fill(white) self.clock.tick(60) pygame.display.flip()

ขั้นตอนที่ 6 จัดการวัตถุเกมหลายรายการ

ตอนนี้รหัสนี้ต้องเรียกการวาดและอัปเดตวัตถุของเราในแต่ละเฟรม นี้จะได้รับยุ่งถ้าคุณมีจำนวนมากของวัตถุ มาเพิ่มวัตถุของเราในอาร์เรย์แล้วอัปเดตและวาดวัตถุทั้งหมดในอาร์เรย์ทุกวง ตอนนี้คุณสามารถเพิ่มวัตถุอื่นได้อย่างง่ายดายและกำหนดตำแหน่งเริ่มต้นที่แตกต่างกัน

    class game(): def _init_(self): … self.gameObjects = self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) … def run(self): while True: self.handleEvents() สำหรับ gameObj ใน self.gameObjects: gameObj.update() self.screen.fill (สีขาว) สำหรับ gameObj ใน self.gameObjects: gameObj.draw(self.screen) self.clock.tick (60) pygame.display.flip()

ProgramPygamePart3
ProgramPygamePart3

ขั้นตอนที่ 7 ลองเลย

นี่คือสิ่งที่รหัสควรมีลักษณะดังนี้:

    นำเข้า pygame จาก pygame.locals นำเข้า * ความละเอียด = (400, 300) สีขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0) หน้าจอ = pygame.display.set_mode (ความละเอียด) class Ball: def _init_(self, xPos = resolution[0] / 2, yPos = resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def เสมอ (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีดำ, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 หรือ self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 หรือ self.y >= resolution[1]): self.dy *= -1 class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode (ความละเอียด) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvent s() สำหรับ gameObj ใน self.gameObjects: gameObj.update() self.screen.fill (สีขาว) สำหรับ gameObj ใน self.gameObjects: gameObj.draw(self.screen) self.clock.tick (60) pygame.display พลิก () เกม (). วิ่ง ()

ตอนที่ 5 จาก 8: การเพิ่มวัตถุผู้เล่น

ขั้นตอนที่ 1 สร้างคลาสผู้เล่นและตัวสร้าง

คุณกำลังจะสร้างวงกลมอีกวงหนึ่งที่ควบคุมโดยเมาส์ กำหนดค่าเริ่มต้นในตัวสร้าง รัศมีเป็นค่าที่สำคัญเพียงอย่างเดียว

    คลาส Player: def _init_(ตัวเอง, rad = 20): self.x = 0 self.y = 0 self.radius = rad

ขั้นตอนที่ 2 กำหนดวิธีการวาดวัตถุของผู้เล่น

มันจะเหมือนกับที่คุณวาดวัตถุในเกมอื่นๆ

    คลาส ผู้เล่น: … def draw(ตัวเอง, พื้นผิว): pygame.draw.circle(พื้นผิว, สีแดง, (self.x, self.y), self.radius)

ขั้นตอนที่ 3 เพิ่มการควบคุมเมาส์สำหรับวัตถุของผู้เล่น

ในทุกเฟรม ให้ตรวจสอบตำแหน่งของเมาส์และตั้งค่าตำแหน่งของวัตถุของผู้เล่นไปที่จุดนั้น

    คลาส Player: … def update(self): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1]

ขั้นตอนที่ 4 เพิ่มวัตถุผู้เล่นให้กับ gameObjects

สร้างอินสแตนซ์ของผู้เล่นใหม่และเพิ่มลงในรายการ

    คลาสเกม(): def _init_(self): … self.gameObjects.append(Player())

ProgramPygamePart4
ProgramPygamePart4

ขั้นตอนที่ 5. ลองเลย

นี่คือสิ่งที่รหัสควรมีลักษณะดังนี้:

    นำเข้า pygame จาก pygame.locals นำเข้า * ความละเอียด = (400, 300) สีขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0) หน้าจอ = pygame.display.set_mode (ความละเอียด) class Ball: def _init_(self, xPos = resolution[0] / 2, yPos = resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def เสมอ (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีดำ, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 หรือ self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 or self.y >= resolution[1]): self.dy *= -1 class ผู้เล่น: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "ผู้เล่น" def วาด (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีแดง, (self.x, self.y), self.radius) def update (ตัวเอง): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_ โหมด(ความละเอียด) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Player()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100))) def handleEvents(ตัวเอง): สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() สำหรับ gameObj ในตัวเอง.gameObjects: gameObj.update() self.screen.fill(สีขาว) สำหรับ gameObj ใน self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game() วิ่ง()

ตอนที่ 6 จาก 8: การสร้างวัตถุโต้ตอบกับผู้เล่น

ขั้นตอนที่ 1 เปลี่ยนฟังก์ชั่นการอัพเดท

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

    class Ball: … def update(self, gameObjects): … class ผู้เล่น: … def update(self, gameObjects):

ขั้นตอนที่ 2 ตรวจสอบการชนกันระหว่างผู้เล่นกับลูกบอล

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

    class Player: … def update(self, gameObjects): … สำหรับ gameObj ใน gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2:

ProgramPygamePart5
ProgramPygamePart5

ขั้นตอนที่ 3 จบเกมหากผู้เล่น "ถูกโจมตี"

ให้ออกจากเกมสำหรับตอนนี้

    if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: pygame.quit()

ขั้นตอนที่ 4. ลองเลย

นี่คือสิ่งที่รหัสควรมีลักษณะดังนี้:

    นำเข้า pygame จาก pygame.locals นำเข้า * ความละเอียด = (400, 300) สีขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0) หน้าจอ = pygame.display.set_mode (ความละเอียด) class Ball: def _init_(self, xPos = resolution[0] / 2, yPos = resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def เสมอ (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีดำ, (self.x, self.y), self.radius) def update(ตัวเอง, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 หรือ self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 or self.y >= resolution[1]): self.dy *= -1 class ผู้เล่น: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "ผู้เล่น" def วาด (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีแดง, (self.x, self.y), self.radius) def update(self, gameObjects): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] สำหรับ gameObj ใน gameObjects: ถ้า gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: pygame.quit() เกมคลาส (): def _init_ (ตัวเอง): pygame.init () self.screen = pygame.display.set_mode (ความละเอียด) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (ผู้เล่น ()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) def handleEvents(self): สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit () def run(self): while True: self.handleEvents() สำหรับ gameObj ใน self.gameObjects: gameObj.update(self.gameObjects) self.screen.fill(สีขาว) สำหรับ gameObj ใน self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() เกม().run()

ตอนที่ 7 จาก 8: การเพิ่มตัวควบคุมเกมเพื่อสร้างวัตถุ

ขั้นตอนที่ 1 สร้างคลาสตัวควบคุมเกม

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

    คลาส GameController: def _init_ (ตัวเอง, ช่วง = 5): self.inter = ช่วง self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "ตัวควบคุมเกม"

ขั้นตอนที่ 2. เพิ่มฟังก์ชั่นการอัพเดท

วิธีนี้จะตรวจสอบระยะเวลาที่ผ่านไปนับตั้งแต่เวลาที่ลูกบอลถูกเพิ่มเข้าไปหรือตั้งแต่เริ่มเกม หากเวลามากกว่าช่วงเวลา คุณจะรีเซ็ตเวลาและเพิ่มลูกบอล

    คลาส GameController: … def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball()))

ขั้นตอนที่ 3 ให้ลูกบอลความเร็วสุ่ม

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

    คลาส GameController: … def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball() xVel=random()*2, yVel=random()*2))

ขั้นตอนที่ 4 แก้ไขฟังก์ชันการวาด

ฟังก์ชันการวาดจะไม่ยอมรับการลอยตัว มาแปลงตำแหน่งของลูกบอลเป็นจำนวนเต็มก่อนที่ลูกบอลจะถูกดึงออกมา

    class Ball: … def draw(ตัวเอง, พื้นผิว): pygame.draw.circle(พื้นผิว, สีดำ, (int(self.x), int(self.y)), self.radius)

ขั้นตอนที่ 5. กำหนดวิธีการวาดสำหรับตัวควบคุมเกม

เนื่องจากเป็นวัตถุเกม ลูปหลักจะพยายามวาดมัน คุณจะต้องกำหนดฟังก์ชันการวาดที่ไม่ทำอะไรเลยเพื่อให้เกมไม่พัง

    คลาส GameController: … def draw(self, screen): pass

ขั้นตอนที่ 6. เพิ่มตัวควบคุมเกมไปที่ gameObjects และนำลูกบอล 2 ลูกออก

ตอนนี้เกมควรวางไข่ทุก ๆ ห้าวินาที

    คลาสเกม(): def _init_(self): … self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player())

ProgramPygamePart6
ProgramPygamePart6

ขั้นตอนที่ 7 ลองเลย

นี่คือสิ่งที่รหัสควรมีลักษณะดังนี้:

    นำเข้า pygame จากสุ่มนำเข้าแบบสุ่มจาก pygame.locals นำเข้า * ความละเอียด = (400, 300) สีขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0) หน้าจอ = pygame display.set_mode(ความละเอียด) คลาส Ball: def _init_(self, xPos = resolution[0] / 2, yPos = resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def วาด (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีดำ, (int (ตัวเอง. x), int(self.y)), self.radius) def update (ตัวเอง, gameObjects): self.x += self.dx self.y += self.dy ถ้า (self.x <= 0 หรือ self x >= resolution[0]): self.dx *= -1 if (self.y <= 0 or self.y >= resolution[1]): self.dy *= -1 class ผู้เล่น: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "ผู้เล่น" def เสมอ (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีแดง, (self.x), self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] สำหรับ gameObj ในเกม วัตถุ: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)* *2: pygame.quit() คลาส GameController: def _init_(self, interval = 5): self.inter = ช่วง self.next = pygame.time.get_ticks() + (2 * 1000) self.type = "ตัวควบคุมเกม " def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=random) ()*2, yVel=random()*2)) def draw(self, screen): pass class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(ความละเอียด) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player()) def handleEvents(self): สำหรับเหตุการณ์ใน pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() สำหรับ gameObj ใน self.gameObjects: gameObj.update(self.gameObjects) self.screen.fill(สีขาว) สำหรับ gameObj ใน self.gameO วัตถุ: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game().run()

ตอนที่ 8 จาก 8: การเพิ่มคะแนนและจบเกม

ขั้นตอนที่ 1 เพิ่มคะแนนให้กับคลาสคอนโทรลเลอร์เกม

สร้างวัตถุแบบอักษรและตัวแปรคะแนน คุณจะวาดแบบอักษรในทุกเฟรมเพื่อแสดงคะแนนและเพิ่มคะแนนทุกเฟรมในการอัพเดท

    คลาส GameController: def _init_(self, interval = 5): … self.score = 0 self.scoreText = pygame.font. Font(None, 12) def update(self, gameObjects): … self.score += 1 def draw (ตัวเอง, หน้าจอ): screen.blit(self.scoreText.render(str(self.score), True, black), (5, 5))

ขั้นตอนที่ 2 ปรับเปลี่ยนวิธีการสิ้นสุดเกม

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

    class Player: def _init_(self, rad = 20): … self.gameOver = False def update(self, gameObjects): … สำหรับ gameObj ใน gameObjects: ถ้า gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: self.gameOver = เกมคลาสจริง (): def _init_(ตัวเอง): … self.gameOver = False def run(self): while True: self.handleEvents() ถ้าไม่ใช่ self.gameOver: สำหรับ gameObj ใน self.gameObjects: gameObj.update(self.gameObjects) ถ้า gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

ขั้นตอนที่ 3 ลองเลย

นี่คือสิ่งที่โค้ดที่เสร็จแล้วควรมีลักษณะดังนี้:

    นำเข้า pygame จากสุ่มนำเข้าแบบสุ่มจาก pygame.locals นำเข้า * ความละเอียด = (400, 300) สีขาว = (255, 255, 255) สีดำ = (0, 0, 0) สีแดง = (255, 0, 0) หน้าจอ = pygame display.set_mode(ความละเอียด) คลาส Ball: def _init_(self, xPos = resolution[0] / 2, yPos = resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def เสมอ (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีดำ, (int (ตัวเอง. x), int(self.y)), self.radius) def update (ตัวเอง, gameObjects): self.x += self.dx self.y += self.dy ถ้า (self.x <= 0 หรือ self x >= resolution[0]): self.dx *= -1 if (self.y <= 0 or self.y >= resolution[1]): self.dy *= -1 class ผู้เล่น: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "ผู้เล่น" self.gameOver = การจั่วป้องกันเท็จ (ตัวเอง, พื้นผิว): pygame.draw.circle (พื้นผิว, สีแดง, (self.x, self.y), self.radius) อัปเดต def (ตัวเอง, gameObjects): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] สำหรับ gameObj ใน gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: self.gameOver = คลาสจริง GameController: def _init_(ตัวเอง, ช่วง = 5): self.inter = ช่วง self.next = pygame.time.get_ticks() + (2 * 1000) ตนเอง type = "ตัวควบคุมเกม" self.score = 0 self.scoreText = pygame.font. Font (ไม่มี, 12) def update (ตัวเอง, gameObjects): ถ้า self.next < pygame.time.get_ticks (): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=random()*2, yVel=random()*2)) self.score += 1 def draw (ตัวเอง, หน้าจอ): screen.blit(self.scoreText.render(str(self.score), True, black), (5, 5)) class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode (ความละเอียด) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (ผู้เล่น ()) self.gameOver = เท็จ def handleEvents(self): สำหรับเหตุการณ์ใน pygame.event.get(): if ev ent.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() ถ้าไม่ใช่ self.gameOver: สำหรับ gameObj ใน self.gameObjects: gameObj.update(self.gameObjects) หาก gameObj พิมพ์ == "ผู้เล่น": self.gameOver = gameObj.gameOver self.screen.fill (สีขาว) สำหรับ gameObj ใน self.gameObjects: gameObj.draw(self.screen) self.clock.tick (60) pygame.display.flip () เกม().run()

แนะนำ: