用python和pygame庫實現刮刮樂游戲
首先,確保你已經安裝了pygame庫。如果沒有安裝,可以通過以下命令安裝:
pip install pygame
示例有兩個。
一、簡單刮刮樂游戲
準備兩張圖片,一張作為背景bottom_image.png,一張作為刮開的圖片top_image.png:
請將bottom_image.png和top_image.png圖片文件與游戲代碼文件(.py文件)放在在同一目錄下。
以下是簡單刮刮樂游戲的代碼:
import pygame
import os# 初始化pygame
pygame.init()# 設置游戲窗口
width, height = 356, 358
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('刮刮樂游戲')# 定義顏色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)# 確保圖片文件存在
if not os.path.isfile('bottom_image.png') or not os.path.isfile('top_image.png'):raise Exception("圖片文件未找到,請確保bottom_image.png和top_image.png文件在同一目錄下。")# 加載圖片
bottom_image = pygame.image.load('bottom_image.png').convert()
top_image = pygame.image.load('top_image.png').convert_alpha()# 調整圖片大小以適應窗口
bottom_image = pygame.transform.scale(bottom_image, (width, height))
top_image = pygame.transform.scale(top_image, (width, height))# 創建一個與頂層圖片相同大小的透明表面
scratch_surface = pygame.Surface((width, height), pygame.SRCALPHA)# 將頂層圖片繪制到透明表面上
scratch_surface.blit(top_image, (0, 0))# 游戲主循環
running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 獲取鼠標位置和狀態mouse_pos = pygame.mouse.get_pos()mouse_pressed = pygame.mouse.get_pressed()# 如果按下鼠標左鍵,則在透明表面上繪制透明圓形,模擬刮開效果if mouse_pressed[0]: # 檢測鼠標左鍵是否按下pygame.draw.circle(scratch_surface, (0, 0, 0, 0), mouse_pos, 20)# 繪制背景圖片screen.blit(bottom_image, (0, 0))# 繪制刮開的透明表面screen.blit(scratch_surface, (0, 0))# 更新屏幕pygame.display.flip()# 退出游戲
pygame.quit()
運行效果:
二、多對圖片的刮刮樂游戲
使用多對圖片,準備了好了多對圖片,如bottom1.png和top1.png 、 bottom2.png和top2.png 、 bottom2.png和top3.png,并將它們放到了img文件夾中。用戶可以選擇圖對游戲,游戲過程中可按下ESC 鍵返回到菜單頁開始重玩。
項目的目錄(project_directory)結構如下:
源碼如下:
import pygame
import os
import sys# 初始化pygame
pygame.init()# 設置游戲窗口
width, height = 356, 358
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('刮刮樂游戲(可選擇圖片對)')# 定義顏色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)# 圖片對列表
image_pairs = [("img/bottom1.png", "img/top1.png"),("img/bottom2.png", "img/top2.png"),("img/bottom3.png", "img/top3.png")
]# 加載圖片
def load_images(pair_index):bottom_image_path, top_image_path = image_pairs[pair_index]bottom_image = pygame.image.load(bottom_image_path).convert()top_image = pygame.image.load(top_image_path).convert_alpha()bottom_image = pygame.transform.scale(bottom_image, (width, height))top_image = pygame.transform.scale(top_image, (width, height))return bottom_image, top_image# 游戲主函數
def run_game(bottom_image, top_image):scratch_surface = pygame.Surface((width, height), pygame.SRCALPHA)scratch_surface.blit(top_image, (0, 0))running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 檢測鍵盤事件以返回菜單elif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE: # 按下ESC鍵return # 返回到菜單,而不是退出游戲mouse_pos = pygame.mouse.get_pos()mouse_pressed = pygame.mouse.get_pressed()if mouse_pressed[0]:pygame.draw.circle(scratch_surface, (0, 0, 0, 0), mouse_pos, 20)screen.blit(bottom_image, (0, 0))screen.blit(scratch_surface, (0, 0))pygame.display.flip()# 菜單函數
def menu():font = pygame.font.Font(None, 26) menu_running = Truetext_surfaces = []text_rects = []for i, pair in enumerate(image_pairs):text = font.render(f"[ Image {i+1} ]", True, RED)text_rect = text.get_rect(topleft=(10, 40 + i * 30))text_surfaces.append(text)text_rects.append(text_rect)while menu_running:screen.fill(WHITE)text = font.render(f"Press Esc to return to the menu:", True, BLACK)text_rect = text.get_rect(topleft=(10, 5))screen.blit(text, text_rect)for i, text in enumerate(text_surfaces):screen.blit(text, text_rects[i])pygame.display.flip()for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: # Left clickfor i, rect in enumerate(text_rects):if rect.collidepoint(event.pos):bottom_image, top_image = load_images(i)run_game(bottom_image, top_image)# 在這里不需要設置menu_running = False,因為我們希望在游戲結束后自動返回菜單# 運行菜單
menu()
運行效果如下圖所示:
用戶可以單擊菜單項選擇圖對游戲,游戲過程中可按下ESC 鍵返回到菜單頁開始重玩。