python编程:从入门到实践--项目1-外星人入侵_学习笔记_源码
生活随笔
收集整理的這篇文章主要介紹了
python编程:从入门到实践--项目1-外星人入侵_学习笔记_源码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里有九個.py文件,在工作的間隙,和老板斗智斗勇,終于完成了,實現了游戲的功能,恰逢博客園開通,雖然是對著書上的代碼敲了一遍,但是對pygam這個庫的了解增加了一些,作為一個python初學者,也作為一個堂堂西電通信科班出來的人,竟然沒有用過python表示狗血,僅以此記錄我亡羊補牢,為時不晚的茫茫深飄路,如果我的代碼有幸被你搜到
你可以copy進你的編輯器,然后運行?
python.exe .\alien_invasion.py?
?
隨后就會出現這個一個簡易版的飛船大戰游戲,缺點是本來應該是飛船和外星人,我找不到合適的圖,因為要bmp格式圖像,我現在還只是在網站上在線轉換。所以美工效果不行,諒解!
?
下面附上window目錄下文件
?
?
ship3.bmp是為了逗姑娘,把飛船設置成他的照片,哈哈哈。就這樣吧,歡迎大家和我進行討論,我希望通過這個博客園記錄一下,我的CT+IT之路。
?
?
?
alien_invasion.py
#coding=utf-8 import sys import pygame from setting import Settings from ship import Ship from pygame.sprite import Group from game_stats import GameStats from button import Button from scoreboard import Scoreboard #from alien import Alien import game_functions as gf#名稱太長,想要給它取個別名,以后每次用到它的時候都用它的別名代替它def run_game():#初始化pygame、設置和屏幕對象pygame.init()#初始化所有導入的 pygame 模塊#返回的一個pygame.Surface對象,而元組(1200,800)代表屏幕設置的長寬ai_settings=Settings()#調用類使用#這里的ai_注意這個寫法是上面被調用的screen=pygame.display.set_mode(#創建一個長寬的窗口(ai_settings.screen_width,ai_settings.screen_height))#pygame.display.set_mode(resolution=(0,0),flags=0,depth=0)pygame.display.set_caption("Alien Invasion")#創建一個用于存儲游戲統計信息的實例# 創建存儲游戲統計信息的實例,并創建記分牌stats=GameStats(ai_settings)sb=Scoreboard(ai_settings,screen,stats)#print stats# 創建一艘飛船ship=Ship(ai_settings,screen)# 創建Play按鈕 play_button = Button(ai_settings,screen,"Play")# print play_button#創建一個外星人# alien=Alien(ai_settings,screen)# bg_color=(230,230,100)#設置背景色#創建一個用于存儲子彈的編組bullets=Group()aliens=Group()#創建了一個空編組#創建外星人群 gf.create_fleet(ai_settings,screen,ship,aliens)# 開始游戲主循環while True:gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets)#我們需要更新調用的check_events() 代碼,將ship 作為實參傳遞給它 ship.update()#刪除已消失的子彈if stats.game_active:ship.update()gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)#print(len(bullets)) gf.update_aliens(ai_settings,screen,stats,sb,ship,aliens,bullets)gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button) # 每次循環時都重繪屏# 讓最近繪制的屏幕可見 run_game()?
ship.py
#-*- coding=utf-8 -*- #ship.py import pygame from pygame.sprite import Sprite class Ship(Sprite):def __init__(self,ai_settings,screen):"""初始化飛船并設置其初始位置"""super(Ship,self).__init__()self.screen=screenself.ai_setting=ai_settingsself.image=pygame.image.load(r'images\ship2.bmp')self.rect=self.image.get_rect()#處理矩形(rect 對象)self.screen_rect=screen.get_rect()#將每艘飛船放在屏幕底部中央self.rect.centerx=self.screen_rect.centerx#要將游戲元素居中,可設置相應rect 對象的屬性center 、centerx 或centery self.rect.bottom=self.screen_rect.bottom#在飛船的屬性center中存儲小數值self.center=float(self.rect.centerx)#因為centerx只能存儲整數#移動標志self.moving_right=False#為Ship類添加一個名為moving_right的屬性self.moving_left=Falsedef update(self): #和一個名為update的方法 """根據移動標志調整飛船的位置"""#更新飛船的center值,而不是rect #self.rect.right返回飛船外接矩形的右邊緣的 x 坐標if self.moving_right and self.rect.right<self.screen_rect.right: #為什么用兩個if是因為防止同時按住左鍵和右鍵self.center+=self.ai_setting.ship_speed_factorif self.moving_left and self.rect.left>0:#飛船將在觸及屏幕左邊緣或右邊緣后停止移動self.center-=self.ai_setting.ship_speed_factorself.rect.centerx=self.centerdef blitme(self):"""在指定位置繪制飛船"""self.screen.blit(self.image,self.rect)def center_ship(self):"""讓飛船在屏幕上居中"""self.center=self.screen_rect.centerxsetting.py
#coding=utf-8 class Settings():"""存儲《外星人入侵》的所有設置的類"""def __init__(self):"""初始化游戲的靜態設置"""#屏幕設置self.screen_width=1200self.screen_height=800self.bg_color=(230,180,230)#飛船的設置self.ship_limit=3self.bullet_width=3self.bullet_height=15self.bullet_color=60,60,60self.bullets_allowed=3 # 外星人設置self.fleet_drop_speed=50# 以什么樣的速度加快游戲節奏 ? self.speedup_scale = 1.1 # 外星人點數的提高速度 ? self.score_scale = 1.5 self.initialize_dynamic_settings()def initialize_dynamic_settings(self): """初始化隨游戲進行而變化的設置""" self.ship_speed_factor = 1.5 self.bullet_speed_factor = 3 self.alien_speed_factor = 1 # fleet_direction為1表示向右;為-1表示向左,游戲剛開始時,外星人總是向右移動 self.fleet_direction = 1# 記分 self.alien_points = 50def increase_speed(self): """提高速度設置和外星人點數""" self.ship_speed_factor *= self.speedup_scale self.bullet_speed_factor *= self.speedup_scale self.alien_speed_factor *= self.speedup_scaleself.alien_points = int(self.alien_points * self.score_scale)#print self.alien_pointsgame_function.py
#-*-coding=utf-8-*- #這個模塊中導入了事件檢查循環要使用的sys 和pygame 。 #當前,函數check_events() 不需要任何形參,其函數體復制了alien_invasion.py的事件循環。 import sys import pygame from bullet import Bullet from alien import Alien from time import sleep def check_keydown_events(event,ai_settings,screen,ship,bullets):"""響應按鍵"""if event.key==pygame.K_RIGHT:ship.moving_right=True#print "K_RIGHT",pygame.K_RIGHT# print "RIGHTde ",event.keyelif event.key==pygame.K_LEFT:ship.moving_left=True# print "LEFTde :",event.keyelif event.key==pygame.K_SPACE:# 創建一顆子彈,并將其加入到編組bullets中 fire_bullet(ai_settings,screen,ship,bullets)# if len(bullets)<ai_settings.bullets_allowed:# new_bullet=Bullet(ai_settings,screen,ship)# bullets.add(new_bullet)#add() 方法用于給集合添加元素,如果添加的元素在集合中已存在,則不執行任何操作。# print new_bulletelif event.key==pygame.K_q:#玩家按Q時結束游戲,設置成e也行鍵盤 sys.exit() def fire_bullet(ai_settings,screen,ship,bullets):"""如果還沒有達到限制,就發射一顆子彈"""#創建新子彈,并將其加入到編組bullets中if len(bullets)<ai_settings.bullets_allowed:new_bullet=Bullet(ai_settings,screen,ship)bullets.add(new_bullet) def check_keyup_events(event,ship):"""響應松開"""if event.key==pygame.K_RIGHT:ship.moving_right=Falseelif event.key==pygame.K_LEFT:ship.moving_left=False def check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets):"""響應按鍵和鼠標事件"""for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit()elif event.type==pygame.KEYDOWN:check_keydown_events(event,ai_settings,screen,ship,bullets)elif event.type==pygame.KEYUP:check_keyup_events(event,ship)elif event.type==pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y=pygame.mouse.get_pos()check_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x,mouse_y) def check_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x,mouse_y):"""在玩家單機play按鈕時開始新游戲"""button_cliked=play_button.rect.collidepoint(mouse_x,mouse_y)if button_cliked and not stats.game_active:#test if a point is inside a rectangle#重置游戲統計信息 #Returns true if the given point is inside the rectangle stats.reset_stats()stats.game_active= True#重置記分牌圖像 sb.prep_score()sb.prep_high_score()sb.prep_level()sb.prep_ships()#清空外星人列表和子彈列表# 重置游戲設置 ai_settings.initialize_dynamic_settings()pygame.mouse.set_visible(False)#隱藏光標stats.reset_stats()#單擊了Play按鈕且 且 游戲當前處于非活動狀態stats.game_active=True#清空外星人列表和子彈列表 aliens.empty()bullets.empty()#創建一群新的外星人,并將飛船居中 create_fleet(ai_settings,screen,ship,aliens)ship.center_ship()#def check_events(ship): # for event in pygame.event.get():#從隊列中獲取事件get events from the queue這是一個pygame的事件 # if event.type ==pygame.QUIT:#,并將事件循環替換為對函數check_events() 調用 # sys.exit() # elif event.type==pygame.KEYDOWN:#KEYDOWN是個事件 # if event.key==pygame.K_RIGHT: # ship.moving_right=True # elif event.key==pygame.K_LEFT: # ship.moving_left=True # elif event.type==pygame.KEYUP: # if event.key==pygame.K_RIGHT:#如果因玩家按下K_LEFT 鍵而觸發了KEYDOWN 事件,我們就將moving_left 設置為True # ship.moving_right=False # elif event.key==pygame.K_LEFT:#如果因玩家松開K_LEFT 而觸發了KEYUP 事件,我們就將moving_left 設置 為False # ship.moving_left=False # #向右移動飛船 # ship.rect.centerx+=1 # # def update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button):"""更新屏幕上的圖像,并切換到新屏幕"""#每次循環時都重繪屏幕screen.fill(ai_settings.bg_color)#screen.fill() 用背景色填充屏#在飛船和外星人后面重繪所有子彈for bullet in bullets.sprites():bullet.draw_bullet() ship.blitme()#填充背景后,我們調 用ship.blitme() 將飛船繪制到屏幕上,確保它出現在背景前面aliens.draw(screen)#在屏幕上繪制編組中的每個外星人#alien.blitme()# 顯示得分 sb.show_score()# 如果游戲處于非活動狀態,就顯示Play按鈕if not stats.game_active:play_button.draw_button()#讓最近繪制的屏幕可見 pygame.display.flip() def update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets):"""更新子彈的位置,并刪已消失的子彈"""#更新子彈的位置 bullets.update()#刪除已消失的子彈for bullet in bullets.copy():if bullet.rect.bottom<=0:bullets.remove(bullet)# 檢查是否有子彈擊中了外星人 # 如果是這樣,就刪除相應的子彈和外星 check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets)# collisions=pygame.sprite.groupcollide(bullets,aliens,True,True)#if len(aliens)==0:#刪除現有的子彈并新建一群外星人# bullets.empty()# create_fleet(ai_settings,screen,ship,aliens) def check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets):"""響應子彈和外星人的碰撞"""#刪除發生碰撞的子彈和外星人collisions=pygame.sprite.groupcollide(bullets,aliens,True,True)#當為True的時候,會刪除組中所有沖突的精靈,False的時候不會刪除沖突的精靈if collisions: for aliens in collisions.values():stats.score += ai_settings.alien_points*len(aliens) sb.prep_score() check_high_score(stats,sb)if len(aliens)==0:#刪除現有的子彈,并創建一個新的外星人群# 如果整群外星人都被消滅,就提高一個等級 bullets.empty()ai_settings.increase_speed()# 提高等級 ? stats.level += 1 sb.prep_level() create_fleet(ai_settings, screen, ship, aliens) #def create_fleet(ai_settings, screen, aliens): # """創建外星人群""" # # 創建一個外星人,并計算一行可容納多少個外星人 # # 外星人間距為外星人寬度 ? # alien = Alien(ai_settings, screen) # alien_width = alien.rect.width # available_space_x = ai_settings.screen_width - alien_width # number_aliens_x = int(available_space_x / (1.5* alien_width)) # # 創建第一行外星人 ? # for alien_number in range(number_aliens_x): # # 創建一個外星人并將其加入當前行 ? # alien = Alien(ai_settings, screen) # alien.x = alien_width + 1.5* alien_width * alien_number # alien.rect.x = alien.x # aliens.add(alien) #def create_fleet(ai_settings,screen,aliens): # """創建外星人群""" # #創建一個外星人,并計算一行可容納多少個外星人 # #外星人間距為外星人寬度的1/2 # alien=Alien(ai_settings,screen) # alien_width=alien.rect.width # available_space_x=ai_settings.screen_width-2*alien_width # number_aliens_x=int(available_sapce_x/(1.5*alien_width) # #創建第一行外星人 # for alien_number in range(number_aliens_x): # # 創建一個外星人并將其加入當前行 ? # alien = Alien(ai_settings, screen) # alien.x=alien_width+1.5*alien_width*alien_number # alien.rect.x=alien.x # aliens.add(alien) def get_number_aliens_x(ai_settings,alien_width):"""計算每行可容納多少個外星人"""available_sapce_x=ai_settings.screen_width-0.5*alien_widthnumber_aliens_x=int(available_sapce_x/(1.5*alien_width))return number_aliens_x def create_alien(ai_settings,screen,aliens,alien_number,row_number):"""創建一個外星人并將其加入當前行"""alien=Alien(ai_settings,screen)alien_width=alien.rect.widthalien.x=alien_width+1.5*alien_width*alien_numberalien.rect.x=alien.xalien.rect.y=alien.rect.height+2*alien.rect.height*row_numberaliens.add(alien) def create_fleet(ai_settings,screen,ship,aliens):"""創建外星人群"""#創建一個外星人,并計算每行可容納多少個外星人alien=Alien(ai_settings,screen)number_aliens_x=get_number_aliens_x(ai_settings,alien.rect.width) number_rows=get_number_rows(ai_settings,ship.rect.height,alien.rect.height)#創建第一行外星人# for alien_number in range(number_aliens_x):# create_alien(ai_settings,screen,aliens,alien_number,row_number)#創建外星人群for row_number in range(number_rows):for alien_number in range(number_aliens_x):create_alien(ai_settings,screen,aliens,alien_number,row_number) def get_number_rows(ai_settings,ship_height,alien_height):"""計算屏幕可容納多少行外星人"""available_space_y=(ai_settings.screen_height-(2*alien_height)-ship_height)number_rows=int(available_space_y/(3*alien_height))return number_rows def ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets):"""響應被外星人撞到的飛船"""#將ships_left減1if stats.ships_left>0:#將ships_left減1stats.ships_left-=1# 更新記分牌 ? sb.prep_ships()#清空外星人列表和子彈列表 aliens.empty()bullets.empty()# 創建一群新的外星人,并將飛船放到屏幕底端中央 create_fleet(ai_settings,screen,ship,aliens)ship.center_ship()#暫停sleep(1)else :stats.game_active=Falsepygame.mouse.set_visible(True)def update_aliens(ai_settings,screen,stats,sb,ship,aliens,bullets):"""檢查是否有外星人到達屏幕邊緣 然后更新所有外星人的位置檢查是否有外星人位于屏幕邊緣,并更新整群外星人的位置"""check_fleet_edges(ai_settings,aliens)aliens.update()#檢測外星人和飛船之間的碰撞if pygame.sprite.spritecollideany(ship,aliens):ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets)print("Ship hit!!!")#方法spritecollideany() 接受兩個實參:一個精靈和一個編組。它檢查編組是否有成員與精靈發生了碰撞,#并在找到與精靈發生了碰撞的成員后就停止遍歷編組# 檢查是否有外星人到達屏幕底端 check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets)def check_fleet_edges(ai_settings,aliens):"""有外星人到達邊緣時采取相應的措施"""for alien in aliens.sprites():if alien.check_edges():change_fleet_direction(ai_settings,aliens)break def change_fleet_direction(ai_settings,aliens):"""將整群外星人下移,并改變他們的方向"""for alien in aliens.sprites():alien.rect.y+=ai_settings.fleet_drop_speedai_settings.fleet_direction*=-1def check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets):"""檢查是否有外星人位于屏幕底端"""screen_rect=screen.get_rect()for alien in aliens.sprites():if alien.rect.bottom>=screen_rect.bottom:# 像飛船被撞到一樣進行處理 ship_hit(ai_settings,stats,screen,ship,aliens,bullets)break def check_high_score(stats, sb): """檢查是否誕生了新的最高得分""" if stats.score > stats.high_score: stats.high_score = stats.score sb.prep_high_score()?bullet.py
#-*-coding=utf-8-*- import pygame from pygame.sprite import Sprite class Bullet(Sprite):"""一個對飛船發射的子彈進行管理的類"""def __init__(self,ai_settings,screen,ship):"""在飛船所處的位置創建一個子彈對象"""super(Bullet,self).__init__()#super() 函數是用于調用父類(超類)的一個方法。self.screen=screen#python中的super( test, self).__init__()#首先找到test的父類(比如是類A),然后把類test的對象self轉換為類A的對象,然后“被轉換”的類A對象調用自己的__init__函數#在(0,0)處創建一個表示子彈的矩形,再設置正確的位置self.rect=pygame.Rect(0,0,ai_settings.bullet_width,ai_settings.bullet_height)self.rect.centerx=ship.rect.centerxself.rect.top=ship.rect.top#存儲用小數表示的子彈位置self.y=float(self.rect.y)self.color=ai_settings.bullet_colorself.speed_factor=ai_settings.bullet_speed_factordef update(self):"""向上移動子彈"""#更新表示子彈位置的小數值self.y-=self.speed_factor#更新表示子彈的rect的位置self.rect.y=self.ydef draw_bullet(self):"""在屏幕上繪制子彈"""pygame.draw.rect(self.screen,self.color,self.rect)?
scoreboard.py
#-*-coding=utf-8-*- import pygame.font#在屏幕上顯示文本,因此我們首先導入模塊pygame.font from pygame.sprite import Group from ship import Ship class Scoreboard():"""顯示得分信息的類"""def __init__(self,ai_settings,screen,stats):"""初始化顯示得分涉及的屬性"""self.screen=screenself.screen_rect=screen.get_rect()self.ai_settings = ai_settings self.stats = stats # 顯示得分信息時使用的字體設置 self.text_color = (30, 30, 30) self.font = pygame.font.SysFont(None, 48) # 準備初始得分圖像 # 準備包含最高得分和當前得分的圖像 self.prep_score() self.prep_high_score()self.prep_level()self.prep_ships()def prep_score(self): """將得分轉換為一幅渲染的圖像""" rounded_score = int(round(self.stats.score, -1)) score_str = "{:,}".format(rounded_score) self.score_image = self.font.render(score_str, True, self.text_color, self.ai_settings.bg_color) # 將得分放在屏幕右上角 self.score_rect = self.score_image.get_rect() self.score_rect.right = self.screen_rect.right - 20 self.score_rect.top = 20def show_score(self): """在屏幕上顯示得分""" self.screen.blit(self.score_image, self.score_rect)self.screen.blit(self.high_score_image, self.high_score_rect)self.screen.blit(self.level_image,self.level_rect)# 繪制飛船 self.ships.draw(self.screen)def prep_high_score(self): """將最高得分轉換為渲染的圖像""" high_score = int(round(self.stats.high_score, -1)) high_score_str = "{:,}".format(high_score) self.high_score_image = self.font.render(high_score_str, True, self.text_color, self.ai_settings.bg_color) #將最高得分放在屏幕頂部中央 self.high_score_rect = self.high_score_image.get_rect() self.high_score_rect.centerx = self.screen_rect.centerx self.high_score_rect.top = self.score_rect.topdef prep_level(self):"""將登記轉換為渲染的圖像"""self.level_image=self.font.render(str(self.stats.level),True,self.text_color,self.ai_settings.bg_color)#將登記放在得分的下方self.level_rect=self.level_image.get_rect()self.level_rect.right=self.score_rect.rightself.level_rect.top=self.score_rect.bottom+10def prep_ships(self): """顯示還余下多少艘飛船""" self.ships = Group() for ship_number in range(self.stats.ships_left): ship = Ship(self.ai_settings, self.screen) ship.rect.x = 10 + ship_number * ship.rect.width ship.rect.y = 10 self.ships.add(ship)?
button.py
#-*-coding=utf-8-*- import pygame.font#Pygame能夠將文本渲染到屏幕 class Button():def __init__(self,ai_settings,screen,msg): #,其中msg 是 要在按鈕中顯示的文本"""初始化按鈕的屬性""" self.screen = screen self.screen_rect = screen.get_rect() # 設置按鈕的尺寸和其他屬性self.width,self.height=200,50self.button_color=(0,255,0)#設置button_color 讓按鈕的rect 對象為亮綠色self.text_color=(255,255,255)#置text_color 讓文本為白色self.font=pygame.font.SysFont(None,48)#實參None 讓Pygame 使用默認字體,而48 指定了文本的字號#創建按鈕的rect對象,并使其居中#為讓按鈕在屏幕上居中,我們創建一個表示按鈕的rect self.rect=pygame.Rect(0,0,self.width,self.height)self.rect.center=self.screen_rect.center#,并將其center 屬性設置為屏幕的center 屬性#按鈕的標簽只需創建一次 self.prep_msg(msg)def prep_msg(self,msg):#方法prep_msg() 接受實參self 以及要渲染為圖像的文本(msg )。"""將msg渲染為圖像,并使其在按鈕上居中"""self.msg_image=self.font.render(msg,True,self.text_color,self.button_color)#方法font.render() 還接受一個布爾實參,該實參指定開啟還是關閉反鋸齒功能(反鋸齒讓文本的邊緣更平滑self.msg_image_rect=self.msg_image.get_rect()self.msg_image_rect.center=self.rect.centerdef draw_button(self):# 繪制一個用顏色填充的按鈕,再繪制文本self.screen.fill(self.button_color,self.rect)#調用screen.fill() 來繪制表示按鈕的矩形self.screen.blit(self.msg_image,self.msg_image_rect)#再調用screen.blit() ,并向它傳遞一幅圖像以及與該圖像相關聯的rect 對象?
game_stats.py
#-*-coding=utf-8-*- class GameStats():"""跟蹤游戲的統計信息"""def __init__(self,ai_settings):"""初始化統計信息"""self.ai_settings=ai_settingsself.reset_stats()# 游戲剛啟動時處于活動狀態 self.game_active = False# 在任何情況下都不應重置最高得分 self.high_score = 0def reset_stats(self):"""初始化在游戲運行期間可能變化的統計信息"""self.ships_left=self.ai_settings.ship_limitself.score=0self.level=1?
alien.py
#-*-coding=utf-8-*- import sys import pygame from pygame.sprite import Sprite class Alien(Sprite):"""表示單個外星人的類"""def __init__(self,ai_settings,screen):"""初始化外星人并設置其起始位置"""super(Alien,self).__init__()self.screen=screenself.ai_settings=ai_settings#加載外星人圖像,并設置其rect屬性self.image=pygame.image.load('images/ship2.bmp')self.rect=self.image.get_rect()#每個外星人最初都在屏幕左上角附近self.rect.x=self.rect.width*1/2self.rect.y=self.rect.height*1/2#獲得圖像的寬度#存儲外星人的準確位置self.x=float(self.rect.x)def blitme(self):"""在指定位置繪制外星人"""self.screen.blit(self.image,self.rect)def update(self):"""向左向右移動外星人"""self.x+=(self.ai_settings.alien_speed_factor*self.ai_settings.fleet_direction)self.rect.x=self.xdef check_edges(self):"""如果外星人位于屏幕邊緣,就返回True"""screen_rect=self.screen.get_rect() #如果外星人的rect 的right 屬性大于或等于屏幕的rect 的right 屬性,就說明外星人位于屏幕右邊緣if self.rect.right>=screen_rect.right: #外星人的rect 的left 屬性小于或等于0,就說明外星人位于屏幕左邊return Trueelif self.rect.left<=0:return True?
轉載于:https://www.cnblogs.com/Harryzhou/p/10484939.html
總結
以上是生活随笔為你收集整理的python编程:从入门到实践--项目1-外星人入侵_学习笔记_源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git ssh 绑定 GitLab
- 下一篇: RTP协议全解析(H264码流和PS流)