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

歡迎訪問 生活随笔!

生活随笔

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

python

python外星人入侵不显示子弹_【Python】python外星人入侵,武装飞船,代码写好后,不显示子弹...

發(fā)布時(shí)間:2025/3/8 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python外星人入侵不显示子弹_【Python】python外星人入侵,武装飞船,代码写好后,不显示子弹... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

按照書上寫的武裝飛船,寫到能夠左右移動(dòng)了,但到了射擊(裝子彈)時(shí)候,按照書上的代碼照搬了,運(yùn)行時(shí)沒顯示代碼有問題,但就是按了空格鍵,不見有子彈,其他都正常。

代碼:

alien_invasion.py

import sys

import pygame

from pygame.sprite import Group

from settings import Settings

from ship import Ship

import game_functions as gf

def run_game():

#初始化pygame、設(shè)置和屏幕對象

pygame.init()

ai_settings = Settings()

screen = pygame.display.set_mode(

(ai_settings.screen_width,ai_settings.screen_height))

pygame.display.set_caption("Alien Invasion")

#創(chuàng)建一艘飛船

ship = Ship(ai_settings,screen)

#創(chuàng)建一個(gè)用于存儲(chǔ)子彈的編組

bullets = Group()

#開始游戲主循環(huán)

while True:

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**

import sys

import pygame

from bullet import Bullet

def check_keydown_events(event,ai_settings,screen,ship,bullets):

"""響應(yīng)按鍵"""

if event.key == pygame.K_RIGHT:

ship.moving_right = True

elif event.key == pygame.K_LEFT:

ship.moving_left = True

elif event.key == pygame.K_SPACE:

#創(chuàng)建一顆子彈,并將其加入到編組bullets中

new_bullet = Bullet(ai_settings,screen,ship)

bullets.add(new_bullet)

def check_keyup_events(event,ship):

"""響應(yīng)松開"""

if event.key == pygame.K_RIGHT:

ship.moving_right = False

elif event.key == pygame.K_LEFT:

ship.moving_left = False

def check_events(ai_settings,screen,ship,bullets):

"""響應(yīng)按鍵和鼠標(biāo)事件"""

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)

def update_screen(ai_settings,screen,ship,bullets):

"""更新屏幕上的圖像,并切換到新屏幕"""

#每次循環(huán)時(shí)都重繪屏幕

screen.fill(ai_settings.bg_color)

ship.blitme()

#讓最近繪制的屏幕可見

pygame.display.flip()

#在飛船和外星人后面重繪所有子彈

for bullet in bullets.sprites():

bullet.draw_bullet()

**bullet.py**

import pygame

from pygame.sprite import Sprite

class Bullet(Sprite):

"""一個(gè)對飛船發(fā)射的子彈進(jìn)行管理的類"""

def __init__(self,ai_settings,screen,ship):

"""在飛船所處的位置創(chuàng)建一個(gè)子彈對象"""

super(Bullet,self). __init__()

self.screen = screen

#在(0,0)處創(chuàng)建一個(gè)表示子彈的舉行,再設(shè)置正確的位置

self.rect = pygame.Rect(0,0,ai_settings.bullet_width,

ai_settings.bullet_height)

self.rect.centerx = ship.rect.centerx

self.rect.top = ship.rect.top

#存儲(chǔ)用小數(shù)表示的子彈位置

self.y = float(self.rect.y)

self.color = ai_settings.bullet_color

self.speed_factor = ai_settings.bullet_speed_factor

def update(self):

"""向上移動(dòng)子彈"""

#更新表示子彈位置的小數(shù)值

self.y -= self.speed_factor

#更新表示子彈的rect的位置

self.rect.y = self.y

def draw_bullet(self):

"""在屏幕上繪制子彈"""

pygame.draw.rect(self.screen,self.color,self.rect)

settings.py

class Settings():

"""存儲(chǔ)《外星人入侵》的所有設(shè)置的類"""

def __init__(self):

"""初始化游戲的設(shè)置"""

#屏幕設(shè)置

self.screen_width = 1200

self.screen_height = 800

self.bg_color = (230,230,230)

#飛船的設(shè)置

self.ship_speed_factor = 1.5

#子彈設(shè)置

self.bullet_speed_factor = 1

self.bullet_width = 3

self.bullet_height = 15

self.bullet_color = 60,60,60

ship.py

import pygame

class Ship():

def __init__(self,ai_settings,screen):

"""初始化飛船并設(shè)置其初始位置"""

self.screen = screen

self.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.centerx

self.rect.bottom = self.screen_rect.bottom

#在飛船的屬性center中存儲(chǔ)小數(shù)值

self.center = float(self.rect.centerx)

#移動(dòng)標(biāo)志

self.moving_right = False

self.moving_left = False

def update(self):

"""根據(jù)移動(dòng)標(biāo)志調(diào)整飛船的位置"""

#更新飛船的center值,而不是rect

if self.moving_right and self.rect.right < self.screen_rect.right:

self.center += self.ai_settings.ship_speed_factor

if self.moving_left and self.rect.left > 0:

self.center -= self.ai_settings.ship_speed_factor

#根據(jù)self.center更新rect對象

self.rect.centerx = self.center

def blitme(self):

"""在指定位置繪制飛船"""

self.screen.blit(self.image,self.rect)

回答

game_function.py 中的子彈繪制要在顯示在屏幕之前

如下:

#在飛船和外星人后面重繪所有子彈

for bullet in bullets.sprites():

bullet.draw_bullet()

ship.blitme()

#讓最近繪制的屏幕可見

pygame.display.flip()

這樣改一下

game_function.py

—-snip—-

def update_screen(ai_settings,screen,ship,bullets):

"""更新屏幕上的圖像,并切換到新屏幕"""

#每次循環(huán)時(shí)都重繪屏幕

screen.fill(ai_settings.bg_color)

ship.blitme()

#在飛船和外星人后面重繪所有子彈

for bullet in bullets.sprites():

bullet.draw_bullet()

ship.blitime()

#讓最近繪制的屏幕可見

pygame.display.flip()

我的也是 代碼完全正確,甚至打開了編輯者寫的代碼,還是沒有子彈

不請自來!

你的game_function.py呢?

功能模塊也要添加進(jìn)相關(guān)的設(shè)置,主程序才能調(diào)用出來,

主程序的

bullets.update()這里應(yīng)該是會(huì)報(bào)錯(cuò)的

還有,函數(shù)里面的形參要和書本上的一致

耐心點(diǎn)抄下去,不要著急,

已找到問題原因,你應(yīng)該是虛擬機(jī)中運(yùn)行的,虛擬機(jī)中要按住ctrl+space,就可以有子彈了

請問題主解決問題了嗎,我也遇到了同樣的問題

我也是這個(gè)問題,子彈會(huì)出來,但是子彈不會(huì)動(dòng)

謝謝大佬,我也是這個(gè)問題,照著書敲的,看了好久,看到了你的帖子問題才解決的 。謝謝

總結(jié)

以上是生活随笔為你收集整理的python外星人入侵不显示子弹_【Python】python外星人入侵,武装飞船,代码写好后,不显示子弹...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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