一、技術點:
影片精靈、全屏模式、碰撞檢測、音效播放、邊界判斷
游戲說明:
1、螢屏上出現10只小羊,速度隨機,
2、鍵盤上下左右控制小狼運動,當小狼碰到小羊時,小羊消失,
代碼如下:
# -*- coding: utf-8 -*-d import pygame import sys from random import * # 小羊類 生成小羊物件 class Lamb(pygame.sprite.Sprite): def __init__(self, image, position, speed, bg_size): # 初始化影片精靈 pygame.sprite.Sprite.__init__(self) # 加載傳進來的圖片 self.image = pygame.image.load(image) self.rect = self.image.get_rect() # 定義隨機位置 self.rect.left, self.rect.top = position # 運動速度 self.speed = speed # 螢屏大小 self.width, self.height = bg_size[0], bg_size[1] # 生成半徑,檢測碰撞 self.radius = self.rect.width / 2 # 運動邊界判斷 def move(self): self.rect = self.rect.move(self.speed) if self.rect.right < 0: self.rect.left = self.width elif self.rect.left > self.width: self.rect.right = 0 elif self.rect.bottom < 0: self.rect.top = self.height elif self.rect.top > self.height: self.rect.bottom = 0 def main(): pygame.init() lamb_image = "Lamb.png" lang_image = "lang.png" BG_image = "BG1366.png" BG_image1 = "BG1920.png" end_image = "end1.png" # 想添加文字的, 不料弄不出來,顯示的是框框 pygame.font.init() font = pygame.font.Font(None, 30) str1 = "一個人坐在房間,撥動琴弦,這是我為你寫找的歌啊,歌曲結束,時間停止,\n 望著窗外燈火輝煌,空蕩寂靜的房間就只剩表針滴答.\ 時間仿佛在這一刻靜止,思緒亂了,腦海里你的樣子漸漸模糊. 電影就這樣散場了嗎..... 最簡單的旋律,最樸實的歌詞,最真摯的愛 " num = 0 line_h = font.get_linesize() # 加載播放背景音樂 pygame.mixer_music.load("bg.ogg") pygame.mixer_music.set_volume(0.2) pygame.mixer_music.play() # 加載羊叫聲 lamb_music = pygame.mixer.Sound("lamb.wav") lamb_music.set_volume(0.2) # 加載結束音樂 end_music = pygame.mixer.Sound("end.wav") end_music.set_volume(0.2) bigf11 = True running = True oldbg_size = width, height = 800, 600 newbg_size = oldbg_size screen = pygame.display.set_mode(oldbg_size) pygame.display.set_caption("狼愛上羊") # 生成小狼物件,初始速度為0,60 和 78 是小樣的寬高 speed = [0, 0] position = randint(0, width - 60), randint(0, height - 78) lang = Lamb(lang_image, position, speed, oldbg_size) # 生成5個小羊物件,加入串列lambs中 lambs = [] # 生成新的組,用于碰撞檢測 group = pygame.sprite.Group() for i in range(10): # 隨機產生位置 85 和 100 是小樣的寬高 speed = [randint(-4, 4), randint(-4, 4)] position = randint(0, width - 85), randint(0, height - 100) lamb = Lamb(lamb_image, position, speed, oldbg_size) # 如果小羊剛出生就碰上了狼,那么重新定義狼的位置 while pygame.sprite.spritecollide(lang, group, False, pygame.sprite.collide_circle): lang.rect.left, lang.rect.top = randint(0, width - 60), randint(0, height - 78) lambs.append(lamb) group.add(lamb) # 背景圖 background = pygame.image.load(BG_image) # 結束圖 endimg = pygame.image.load(end_image) while running: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() if event.type == pygame.KEYDOWN: # 按F11開啟全屏 if event.key == pygame.K_F11: bigf11 = not bigf11 # 獲取電腦解析度 newsize = width, height = pygame.display.list_modes()[1][0], pygame.display.list_modes()[1][1] if bigf11: screen = pygame.display.set_mode(newsize) newbg_size = [width, height] # 修改小羊的螢屏大小 for each in lambs: each.width, each.height = newbg_size[0], newbg_size[1] # 修改小狼的螢屏大小 lang.width, lang.height = newbg_size[0], newbg_size[1] if width == 1920: background = pygame.image.load(BG_image1) else: screen = pygame.display.set_mode(oldbg_size) # 修改小羊的螢屏大小 for each in lambs: each.width, each.height = oldbg_size[0], oldbg_size[1] # 修改小狼的螢屏大小 lang.width, lang.height = oldbg_size[0], oldbg_size[1] # 小狼運動 if event.key == pygame.K_UP: lang.speed = [0, -4] lang.move() if event.key == pygame.K_DOWN: lang.speed = [0, 4] lang.move() if event.key == pygame.K_RIGHT: lang.speed = [4, 0] lang.move() if event.key == pygame.K_LEFT: lang.speed = [-4, 0] lang.move() # 填充背景 screen.blit(background, (0, 0)) # 將小羊顯示出來 for each in group: each.move() screen.blit(each.image, each.rect) # 將小狼顯示出來 screen.blit(lang.image, lang.rect) # 碰撞檢測, 如果小狼和小羊碰撞,則洗掉小羊 if pygame.sprite.spritecollide(lang, group, True, pygame.sprite.collide_circle): lamb_music.play() if len(group) <= 0: end_music.play() # 游戲結束 if len(group) <= 0: screen.blit(background, (0, 0)) screen.blit(endimg, (0, 0)) # screen.blit(font.render(str1, True, (0, 0, 0)), (0, 0)) # 更新頁面 pygame.display.flip() # 設定延遲 pygame.time.delay(10) if __name__ == '__main__': main()
效果如下:

資料鏈接:
鏈接:https://pan.baidu.com/s/1jTyx1Lz_I9W6UilByeQLXg
提取碼:ucs6
本來結束時想顯示文字的,那個font弄不出來了,下次學會了再弄,
讀書和健身總有一個在路上
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/148791.html
標籤:Python
下一篇:P1008 三連擊
