iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

服用Python30天系列 第 23

[DAY23]服用Python-2D小遊戲

  • 分享至 

  • xImage
  •  

前言

今天學實作小遊戲吧!


先簡單介紹遊戲的玩法和功能

使用者控制一個角色(藍色方塊),可以使用鍵盤上的箭頭按鍵移動角色,目標是避免碰到隨機生成的紅色障礙物(紅色方塊),並在遊戲中存活,隨著時間的推移,障礙物將從右向左移動,而使用者必須避免碰撞,另外在遊戲視窗的左上角會顯示玩家的分數。分數隨著時間的推移增加。如果使用者的角色碰到障礙物,遊戲就會結束,並將分數將保持在遊戲視窗的左上角。

程式碼

import pygame
import random

# 初始化 Pygame
pygame.init()

# 設定遊戲視窗的大小
WIDTH, HEIGHT = 800, 600
win = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("2D 遊戲示例")

# 定義顏色
WHITE = (255, 255, 255)

# 定義角色的初始位置和速度
x, y = 50, 300
width, height = 40, 60
vel = 5

# 定義障礙物的初始位置和速度
obstacle_x = WIDTH
obstacle_width = 20
obstacle_height = random.randint(50, 400)
obstacle_vel = 5

# 設定分數
score = 0

# 遊戲主迴圈
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 檢測鍵盤輸入
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and x > vel:
        x -= vel
    if keys[pygame.K_RIGHT] and x < WIDTH - width - vel:
        x += vel
    if keys[pygame.K_UP] and y > vel:
        y -= vel
    if keys[pygame.K_DOWN] and y < HEIGHT - height - vel:
        y += vel

    # 移動障礙物
    obstacle_x -= obstacle_vel
    if obstacle_x < 0:
        obstacle_x = WIDTH
        obstacle_height = random.randint(50, 400)

    # 檢查是否碰到障礙物
    if (
        x < obstacle_x + obstacle_width
        and x + width > obstacle_x
        and y < HEIGHT - obstacle_height
    ):
        running = False

    # 畫出視窗
    win.fill(WHITE)
    pygame.draw.rect(win, (0, 128, 255), (x, y, width, height))
    pygame.draw.rect(
        win,
        (255, 0, 0),
        (obstacle_x, HEIGHT - obstacle_height, obstacle_width, obstacle_height),
    )

    pygame.display.update()

# 關閉 Pygame
pygame.quit()

今天就先到這邊吧~~
目前進度:23/30···


上一篇
[DAY22]服用Python-小遊戲
下一篇
[DAY24]服用Python-flapping bird
系列文
服用Python30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言