亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python外星人入侵,武裝飛船,代碼寫好后,不顯示子彈

python外星人入侵,武裝飛船,代碼寫好后,不顯示子彈

Helenr 2019-05-21 09:29:46
按照書上寫的武裝飛船,寫到能夠左右移動了,但到了射擊(裝子彈)時候,按照書上的代碼照搬了,運行時沒顯示代碼有問題,但就是按了空格鍵,不見有子彈,其他都正常。代碼:alien_invasion.pyimportsysimportpygamefrompygame.spriteimportGroupfromsettingsimportSettingsfromshipimportShipimportgame_functionsasgfdefrun_game():#初始化pygame、設置和屏幕對象pygame.init()ai_settings=Settings()screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))pygame.display.set_caption("AlienInvasion")#創建一艘飛船ship=Ship(ai_settings,screen)#創建一個用于存儲子彈的編組bullets=Group()#開始游戲主循環whileTrue:gf.check_events(ai_settings,screen,ship,bullets)ship.update()bullets.update()gf.update_screen(ai_settings,screen,ship,bullets)run_game()**game_functions.py**importsysimportpygamefrombulletimportBulletdefcheck_keydown_events(event,ai_settings,screen,ship,bullets):"""響應按鍵"""ifevent.key==pygame.K_RIGHT:ship.moving_right=Trueelifevent.key==pygame.K_LEFT:ship.moving_left=Trueelifevent.key==pygame.K_SPACE:#創建一顆子彈,并將其加入到編組bullets中new_bullet=Bullet(ai_settings,screen,ship)bullets.add(new_bullet)defcheck_keyup_events(event,ship):"""響應松開"""ifevent.key==pygame.K_RIGHT:ship.moving_right=Falseelifevent.key==pygame.K_LEFT:ship.moving_left=Falsedefcheck_events(ai_settings,screen,ship,bullets):"""響應按鍵和鼠標事件"""foreventinpygame.event.get():ifevent.type==pygame.QUIT:sys.exit()elifevent.type==pygame.KEYDOWN:check_keydown_events(event,ai_settings,screen,ship,bullets)elifevent.type==pygame.KEYUP:check_keyup_events(event,ship)defupdate_screen(ai_settings,screen,ship,bullets):"""更新屏幕上的圖像,并切換到新屏幕"""#每次循環時都重繪屏幕screen.fill(ai_settings.bg_color)ship.blitme()#讓最近繪制的屏幕可見pygame.display.flip()#在飛船和外星人后面重繪所有子彈forbulletinbullets.sprites():bullet.draw_bullet()**bullet.py**importpygamefrompygame.spriteimportSpriteclassBullet(Sprite):"""一個對飛船發射的子彈進行管理的類"""def__init__(self,ai_settings,screen,ship):"""在飛船所處的位置創建一個子彈對象"""super(Bullet,self).__init__()self.screen=screen#在(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_factordefupdate(self):"""向上移動子彈"""#更新表示子彈位置的小數值self.y-=self.speed_factor#更新表示子彈的rect的位置self.rect.y=self.ydefdraw_bullet(self):"""在屏幕上繪制子彈"""pygame.draw.rect(self.screen,self.color,self.rect)settings.pyclassSettings():"""存儲《外星人入侵》的所有設置的類"""def__init__(self):"""初始化游戲的設置"""#屏幕設置self.screen_width=1200self.screen_height=800self.bg_color=(230,230,230)#飛船的設置self.ship_speed_factor=1.5#子彈設置self.bullet_speed_factor=1self.bullet_width=3self.bullet_height=15self.bullet_color=60,60,60ship.pyimportpygameclassShip():def__init__(self,ai_settings,screen):"""初始化飛船并設置其初始位置"""self.screen=screenself.ai_settings=ai_settings#加載飛船圖像并獲取其外接矩形self.image=pygame.image.load('images/ship.bmp')self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()#將每艘新飛船放在屏幕底部中央self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottom#在飛船的屬性center中存儲小數值self.center=float(self.rect.centerx)#移動標志self.moving_right=Falseself.moving_left=Falsedefupdate(self):"""根據移動標志調整飛船的位置"""#更新飛船的center值,而不是rectifself.moving_rightandself.rect.right0:self.center-=self.ai_settings.ship_speed_factor#根據self.center更新rect對象self.rect.centerx=self.centerdefblitme(self):"""在指定位置繪制飛船"""self.screen.blit(self.image,self.rect)
查看完整描述

3 回答

?
qq_慕移動8078505

TA貢獻1條經驗 獲得超0個贊


樓主你好,請問你的問題解決了了嗎,我遇到了和你一模一樣的問題

查看完整回答
反對 回復 2019-07-10
  • 3 回答
  • 0 關注
  • 2667 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號