在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 我根據(jù)書上改編的pygame小游戲,為什么總是提示不能完整出來?

我根據(jù)書上改編的pygame小游戲,為什么總是提示不能完整出來?

這是第一個(gè)marval_invasion

import pygame

from settings import Settings
from ironman import Ironman
from pygame.sprite import Group
from mieba import Mieba
import game_funtions as gf
def run_game():
    pygame.init()
    ai_settings=Settings()
    screen=pygame.display.set_mode(
        (ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("marvel_invasion")

    ironman=Ironman(ai_settings,screen)
    bullets=Group()
    miebas=Group()
    gf.create_fleet(ai_settings,screen,ironman,miebas)
    bg_color=(255,255,255)
    mieba=Mieba(ai_settings,screen)

    while True:
        gf.check_events(ai_settings,screen,ironman,bullets)
        ironman.update()
        gf.update_bullets(bullets)
        gf.update_screen(ai_settings,screen,ironman,miebas,bullets)
run_game()

The second

import pygame

class Ironman():
    def __init__(self,ai_settings,screen):
        self.screen=screen
        self.ai_settings=ai_settings
        self.image=pygame.image.load('images/iron-man.bmp')
        self.rect=self.image.get_rect()
        self.screen_rect=screen.get_rect()

        self.rect.centery=self.screen_rect.centery
        self.rect.right=self.screen_rect.right
        self.center=float(self.rect.centery)
        self.moving_down=False
        self.moving_up=False

    def update(self):
        if self.moving_down and self.rect.bottom<self.screen_rect.bottom:
            self.center+=self.ai_settings.ironman_speed_factor
        if self.moving_up and self.rect.top>0:
            self.center-=self.ai_settings.ironman_speed_factor
        self.rect.centery=self.center
    def blitme(self):
        self.screen.blit(self.image,self.rect)

The third

import pygame
from pygame.sprite import Sprite

class Mieba(Sprite):
    def __init__(self,ai_settings,screen):
        super(Mieba,self).__init__()
        self.screen=screen
        self.ai_settings=ai_settings

        self.image=pygame.image.load('images/mieba.bmp')
        self.rect=self.image.get_rect()

        self.rect.x=self.rect.width
        self.rect.y=self.rect.height

        self.x=float(self.rect.x)
    def blitme(self):
        self.screen.blit(self.image,self.rect)請輸入代碼

The fourth

import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
    def __init__(self,ai_settings,screen,ironman):
        super(Bullet, self).__init__()
        self.screen=screen

        self.rect=pygame.Rect(0,0,ai_settings.bullet_width,
            ai_settings.bullet_height)
        self.rect.centery=ironman.rect.centery
        self.rect.left=ironman.rect.left
        self.x=float(self.rect.x)
        self.color=ai_settings.bullet_color
        self.speed_factor=ai_settings.bullet_speed_factor
    def update(self):
        self.x-=self.speed_factor
        self.rect.x=self.x
    def draw_bullet(self):
        pygame.draw.rect(self.screen,self.color,self.rect)

The fifth

import sys
import pygame
from bullet import Bullet
from mieba import Mieba

def check_keydown_events(event,ai_settings,screen,ironman,bullets):
    if event.key == pygame.K_DOWN:
        ironman.moving_down = True
    elif event.key == pygame.K_UP:
        ironman.moving_up = True
    elif event.key==pygame.K_SPACE:
        fire_bullet(ai_settings,screen,ironman,bullets)
    elif event.key==pygame.K_q:
        sys.exit()
def check_keyup_events(event,ironman):
    if event.key == pygame.K_DOWN:
        ironman.moving_down = False
    elif event.key == pygame.K_UP:
        ironman.moving_up = False
def check_events(ai_settings,screen,ironman,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,ironman,bullets)
        elif event.type==pygame.KEYUP:
            check_keyup_events(event,ironman)
def update_screen(ai_settings,screen,ironman,miebas,bullets):
    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ironman.blitme()
    miebas.draw(screen)
    pygame.display.flip()
def update_bullets(bullets):
    bullets.update()
    for bullet in bullets.copy():
        if bullet.rect.right<=0:
            bullets.remove(bullet)
    print(len(bullets))
def fire_bullet(ai_settings,screen,ironman,bullets):
    if len(bullets)<ai_settings.bullets_allowed:
        new_bullet=Bullet(ai_settings,screen,ironman)
        bullets.add(new_bullet)
def get_number_miebas_y(ai_settings,mieba_height):
    available_space_y = ai_settings.screen_height - 2 * mieba_height
    number_miebas_y = int(available_space_y / (0.95 * mieba_height))
    return number_miebas_y
def get_number_columns(ai_settings,ironman_width,mieba_width):
    available_space_x=(ai_settings.screen_width-
                       (3*mieba_width)-ironman_width)
    number_columns=int(available_space_x)/(2*mieba_width)
    return number_columns
def create_mieba(ai_settings,screen,miebas,mieba_number):
    mieba = Mieba(ai_settings, screen)
    mieba_height=mieba.rect.height
    mieba.y = mieba_height + 1 * mieba_height * mieba_number
    mieba.rect.y = mieba.y
    mieba.rect.x=mieba.rect.width+2*mieba.rect.width
    miebas.add(mieba)
def create_fleet(ai_settings,screen,ironman,miebas):
    mieba = Mieba(ai_settings, screen)
    number_miebas_y=get_number_miebas_y(ai_settings,mieba.rect.height)
    number_columns=get_number_columns(ai_settings,ironman.rect.width,
        mieba.rect.width)
    for colmns_number in range(number_columns):
        for mieba_number in range(number_miebas_y):
            create_mieba(ai_settings,screen,miebas,mieba_number,
                colmns_number)

the sixth

class Settings():
    def __init__(self):

        self.screen_width=1200
        self.screen_height=800
        self.bg_color=(255,255,255)

        self.ironman_speed_factor=1.5

        self.bullet_speed_factor=4.5
        self.bullet_width=20
        self.bullet_height=3
        self.bullet_color=255,215,0
        self.bullets_allowed=5

以上就是所有代碼,但是運(yùn)行總是TypeError: 'float' object cannot be interpreted as an integer
我的構(gòu)思是將發(fā)射子彈的飛船放在屏幕右邊中間,外星人放在左側(cè)構(gòu)建成群的。
希望大佬看后能幫忙解惑一下哪里編寫不對,外星人的放置有沒有什么其他方法

回答
編輯回答
亮瞎她

今天是真無聊了 復(fù)制下來調(diào)了下....
報(bào)錯(cuò)是這一行

for colmns_number in range(number_columns)

打印出來number_columns是2.0, range參數(shù)只能是整形, 這樣就可以了吧:

for colmns_number in range(int(number_columns))

下次一定要記得說在哪一行... 不過下一句也有問題, create_mieba最多接受4個(gè)參數(shù)給了5個(gè)... 慢慢調(diào)吧

2017年11月30日 04:50