日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python--从入门到实践--chapter 12 pygame_Alien_Invasion

發(fā)布時(shí)間:2024/7/5 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python--从入门到实践--chapter 12 pygame_Alien_Invasion 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 安裝pygame包,把安裝好的包c(diǎn)opy一份到pycharm工程目錄下,不然找不到pygame包

    抄一遍書(shū)上的代碼:

settings.py

class Settings():def __init__(self):self.screen_width = 1200self.screen_height = 800self.bg_color = (255, 255, 255)self.ship_speed_factor = 1.5

ship.py

import pygame class Ship():def __init__(self, ai_settings, screen):self.screen = screenself.ai_settings = ai_settingsself.image = pygame.image.load("images/ship.bmp")self.rect = self.image.get_rect() #圖像矩形self.screen_rect = screen.get_rect() #屏幕矩形,左上角原點(diǎn),右下角如1200,800self.rect.centerx = self.screen_rect.centerx #圖像x中心,在屏幕中心self.rect.bottom = self.screen_rect.bottom #圖像底邊,在屏幕底邊self.center = float(self.rect.centerx) #圖像x中心坐標(biāo)轉(zhuǎn)成浮點(diǎn)型,存在center中self.moving_right = Falseself.moving_left = Falsedef update(self):if self.moving_right and self.rect.right < self.screen_rect.right: #限制位置在屏幕內(nèi)self.center += self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left > 0:self.center -= self.ai_settings.ship_speed_factorself.rect.centerx = self.centerdef blitme(self):self.screen.blit(self.image, self.rect) #blit實(shí)現(xiàn)動(dòng)畫(huà)效果

game_functions.py

import sys import pygame def check_keydown_events(event, ship): #檢測(cè)鍵盤(pán)按下事件if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Truedef check_keyup_events(event, ship): #檢測(cè)鍵盤(pán)松開(kāi)事件if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef check_events(ship):for event in pygame.event.get():if event.type == pygame.QUIT: #退出事件sys.exit()elif event.type == pygame.KEYDOWN: #鍵盤(pán)按下事件check_keydown_events(event, ship)elif event.type == pygame.KEYUP: #鍵盤(pán)松開(kāi)事件check_keyup_events(event, ship)def update_screen(ai_settings, screen, ship):screen.fill(ai_settings.bg_color) #屏幕填充背景色ship.blitme() #ship的動(dòng)畫(huà)效果pygame.display.flip() #讓動(dòng)畫(huà)盡可能流暢

alien_invasion.py

import sys import pygame from settings import Settings from ship import Ship import game_functions as gf def run_game():pygame.init()ai_settings = Settings() #創(chuàng)建游戲設(shè)置screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))pygame.display.set_caption("Alien Invasion") #設(shè)置標(biāo)題ship = Ship(ai_settings, screen) #創(chuàng)建游戲?qū)ο?/span>while True:gf.check_events(ship) #檢測(cè)事件ship.update() #更新ship位置gf.update_screen(ai_settings, screen, ship) #刷新屏幕run_game()


練習(xí)題:
1.火箭上下左右移動(dòng)

2.創(chuàng)建一個(gè)程序,顯示一個(gè)空屏幕。在事件循環(huán)中,每當(dāng)檢測(cè)到 pygame.KEYDOWN 事件時(shí)都打印屬性event.key。運(yùn)行這個(gè)程序,并按各種鍵,看看Pygame如何響應(yīng)

import pygame import sys def check_events(screen):for event in pygame.event.get():if event.type == pygame.QUIT: #退出事件sys.exit()elif event.type == pygame.KEYDOWN: #鍵盤(pán)按下事件while True:font = pygame.font.SysFont("宋體", 80) #設(shè)置字體font_surface = font.render(str(event.key), True, (0, 0, 0), (255, 255, 255)) #渲染內(nèi)容為面pygame.image.save(font_surface, "text.bmp") #面保存成圖片image = pygame.image.load("text.bmp") #獲取圖片image_rect = image.get_rect() #獲取圖片的矩形image_rect.centerx = 200 #設(shè)置圖片矩形位置image_rect.centery = 150screen.blit(image, image_rect) #屏幕呈現(xiàn)該圖片pygame.display.flip() #屏幕刷新顯示出來(lái)if pygame.event.poll().type == pygame.KEYUP: #鍵盤(pán)松開(kāi)break #退出 def run_game():pygame.init()pygame.font.init()screen = pygame.display.set_mode((400, 300))pygame.display.set_caption("測(cè)試按鍵......") #設(shè)置標(biāo)題while True:screen.fill((255, 255, 255)) # 屏幕填充背景色pygame.display.flip() #刷新屏幕check_events(screen) #檢測(cè)事件run_game()


添加子彈模塊后的代碼
settings.py

class Settings():def __init__(self):self.screen_width = 1200self.screen_height = 800self.bg_color = (255, 255, 255)self.ship_speed_factor = 1.5 #飛船速度self.bullet_speed_factor = 1 #子彈速度self.bullet_width = 3 #子彈寬高self.bullet_height = 15self.bullet_color = 60, 60, 60 #子彈顏色self.bullets_allowed = 2 #屏幕中允許的子彈數(shù)量

ship.py 不變
bullet.py

import pygame from pygame.sprite import Spriteclass Bullet(Sprite):def __init__(self, ai_settings, screen, ship):super().__init__()self.screen = screenself.rect = pygame.Rect(0, 0, ai_settings.bullet_width,ai_settings.bullet_height) #繪制子彈的矩形self.rect.centerx = ship.rect.centerx #子彈x與飛船相同self.rect.top = ship.rect.top #子彈從飛船頂部起飛self.y = float(self.rect.y) # y存一份浮點(diǎn)的,可以精調(diào)位置self.color = ai_settings.bullet_color #子彈顏色self.speed_factor = ai_settings.bullet_speed_factor #子彈速度def update(self):self.y -= self.speed_factor #位置更新self.rect.y = self.y #浮點(diǎn)y位置付給矩形圖形def draw_bullet(self):pygame.draw.rect(self.screen, self.color, self.rect) #把子彈矩形畫(huà)到屏幕上

game_functions.py

import sys import pygame from bullet import Bullet def fire_bullet(ai_settings, screen, ship, bullets): #發(fā)射子彈if len(bullets) < ai_settings.bullets_allowed: #子彈沒(méi)超數(shù)量new_bullet = Bullet(ai_settings, screen, ship) #生成新子彈bullets.add(new_bullet) #新子彈加入組 def check_keydown_events(event,ai_settings, screen, ship, bullets): #檢測(cè)鍵盤(pán)按下事件if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Trueelif event.key == pygame.K_SPACE: #按下空格鍵,發(fā)射子彈fire_bullet(ai_settings, screen, ship, bullets)def check_keyup_events(event, ship): #檢測(cè)鍵盤(pán)松開(kāi)事件if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef check_events(ai_settings, screen, ship, bullets):for event in pygame.event.get():if event.type == pygame.QUIT: #退出事件sys.exit()elif event.type == pygame.KEYDOWN: #鍵盤(pán)按下事件check_keydown_events(event, ai_settings, screen, ship, bullets)elif event.type == pygame.KEYUP: #鍵盤(pán)松開(kāi)事件check_keyup_events(event, ship)def update_screen(ai_settings, screen, ship, bullets):screen.fill(ai_settings.bg_color) #屏幕填充背景色for bullet in bullets.sprites(): #把每個(gè)子彈畫(huà)在屏幕上bullet.draw_bullet()ship.blitme() #ship的動(dòng)畫(huà)效果pygame.display.flip() #刷新,讓動(dòng)畫(huà)盡可能流暢def update_bullets(bullets):bullets.update() #更新子彈位置for bullet in bullets.copy(): #刪除飛出屏幕的子彈if bullet.rect.bottom <= 0:bullets.remove(bullet)

alien_invasion.py

import sys import pygame from settings import Settings from ship import Ship import game_functions as gf from pygame.sprite import Group def run_game():pygame.init()ai_settings = Settings() #創(chuàng)建游戲設(shè)置screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))pygame.display.set_caption("Alien Invasion") #設(shè)置標(biāo)題ship = Ship(ai_settings, screen) #創(chuàng)建游戲飛船對(duì)象bullets = Group() #創(chuàng)建子彈組while True:gf.check_events(ai_settings, screen, ship, bullets) #檢測(cè)事件ship.update() #更新ship位置gf.update_bullets(bullets) #更新子彈位置,刪除飛出去的子彈# print(len(bullets)) #調(diào)試時(shí),確認(rèn)子彈飛出屏幕后被刪除gf.update_screen(ai_settings, screen, ship, bullets) #刷新屏幕run_game()


作業(yè)3:更改上述代碼,使之橫向發(fā)射子彈
添加 pygame.transform.rotozoom(surface, angle, scale) (縮放和旋轉(zhuǎn))
代碼連接 https://github.com/hitskyer/course/tree/master/python/chenmingming/pygame_project/alien_invasion

總結(jié)

以上是生活随笔為你收集整理的python--从入门到实践--chapter 12 pygame_Alien_Invasion的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。