按python从入门到实践上写的,到这里本来应该出现游戏屏幕却什么都没有,也没有显示有错误,请问是什么原因?

Jason990420
最佳答案

为了简单化,我把三个文件的内容,合并成一个,虽然我作了一点点修改,但有改和没改都一样,都能看到游戏屏幕.
我没找到哪里有大的问题...你试一下以下的代码。

file

import sys
import pygame

class Settings:
    """储存游戏设置"""

    def __init__(self):
        #初始化游戏设置
        #屏幕设置
        self.screen_width   = 300
        self.screen_height  = 200
        self.bg_color       = (230,230,230)

class Ship:
    """管理飞船的类"""

    def __init__(self, ai_game):
        #初始化飞船并设置其初始位置
        self.screen         = ai_game.screen
        self.screen_rect    = ai_game.screen.get_rect()

        #加载飞船图像并获取其外接矩形
        self.image          = pygame.image.load("D:/ship.bmp")
        self.rect           = self.image.get_rect()

        #对于每艘新飞船,都将其放在屏幕底部中央
        self.rect.midbottom =    self.screen_rect.midbottom

    def blitme(self):
        #在指定位置绘制飞船
        self.screen.blit(self.image,self.rect)

class AlienInvasion:
    """管理游戏资源和行为的类"""

    def __init__(self):
        #初始化游戏并创建游戏资源
        pygame.init()
        self.settings = Settings()
        self.screen = pygame.display.set_mode(
        (self.settings.screen_width,self.settings.screen_height))
        pygame.display.set_caption("Alien Invasion")
        self.ship = Ship(self)
        #设置背景色
        self.bg_color = self.settings.bg_color

    def run_game(self):
        #开始游戏的主循环
        while  True:
            #监视键盘和鼠标事件
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            #每次循环时都重绘屏幕
            self.screen.fill(self.settings.bg_color)
            self.ship.blitme()
        #让最近绘制的屏幕可见
            pygame.display.flip()

if __name__ == '__main__':
    #创建游戏实例并运行游戏
    ai = AlienInvasion()
    ai.run_game()
3年前 评论
讨论数量: 6
Jason990420

Source code required in code format for those three files

``` python 

```
3年前 评论

@Jason990420 不好意思刚刚开始学可以说详细点吗?谢谢

3年前 评论
Jason990420

贴上你三个文件的代码


``` python
# alien_invansion.py

# settings.py

# ship.py
```
3年前 评论

@Jason990420 麻烦了谢谢

# alien_invansion.py

import sys

import pygame

from  settings  import  Settings

from  ship  import  Ship

class AlienInvasion:
    #管理游戏资源和行为的类

    def __init__(self):
      #初始化游戏并创建游戏资源
       pygame.init()

       self.settings = Settings()

       self.screen = pygame.display.set_mode((self.settings.screen_width,self.settings.screen_height))

       self.screen = pygame.display.set_mode((1200,800))
       pygame.display.set_caption("Alien Invasion")

       self.ship = Ship(self)

       #设置背景色
       self.bg_color = (230,230.230)

    def run_game(self):
      #开始游戏的主循环
        while  True:
            #监视键盘和鼠标事件
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()

            #每次循环时都重绘屏幕
            self.screen.fill(self.settings.bg_color)
            self.ship.blitme()

        #让最近绘制的屏幕可见
            pygame.display.flip()

if __name__ == '__main__':
    #创建游戏实例并运行游戏
    ai = AlienInvasion()
    ai.run_game()

# settings.py
class Settings:
    """储存游戏设置"""

    def __init__(self):
        #初始化游戏设置
        #屏幕设置
        self.screen_width    =    1200
        self.screen_height    =    800
        self.bg_color    =    (230,230,230)

# ship.py    
import pygame

class Ship:
    """管理飞船的类"""
    def __init__(self, ai_game):
        #初始化飞船并设置其初始位置
        self.screen    =    ai_game.screen
        self.screen_rect    =    ai_game.screen.get_rect()

        #加载飞船图像并获取其外接矩形
        self.image    =    pygame.image.load("images/ship.bmp")
        self.rect    =    self.image.get_rect()

        #对于每艘新飞船,都将其放在屏幕底部中央
        self.rect.midbottom    =    self.screen_rect.midbottom

    def blitme(self):
        #在指定位置绘制飞船
        self.screen.blit(self.image,self.rect)
3年前 评论
Jason990420

为了简单化,我把三个文件的内容,合并成一个,虽然我作了一点点修改,但有改和没改都一样,都能看到游戏屏幕.
我没找到哪里有大的问题...你试一下以下的代码。

file

import sys
import pygame

class Settings:
    """储存游戏设置"""

    def __init__(self):
        #初始化游戏设置
        #屏幕设置
        self.screen_width   = 300
        self.screen_height  = 200
        self.bg_color       = (230,230,230)

class Ship:
    """管理飞船的类"""

    def __init__(self, ai_game):
        #初始化飞船并设置其初始位置
        self.screen         = ai_game.screen
        self.screen_rect    = ai_game.screen.get_rect()

        #加载飞船图像并获取其外接矩形
        self.image          = pygame.image.load("D:/ship.bmp")
        self.rect           = self.image.get_rect()

        #对于每艘新飞船,都将其放在屏幕底部中央
        self.rect.midbottom =    self.screen_rect.midbottom

    def blitme(self):
        #在指定位置绘制飞船
        self.screen.blit(self.image,self.rect)

class AlienInvasion:
    """管理游戏资源和行为的类"""

    def __init__(self):
        #初始化游戏并创建游戏资源
        pygame.init()
        self.settings = Settings()
        self.screen = pygame.display.set_mode(
        (self.settings.screen_width,self.settings.screen_height))
        pygame.display.set_caption("Alien Invasion")
        self.ship = Ship(self)
        #设置背景色
        self.bg_color = self.settings.bg_color

    def run_game(self):
        #开始游戏的主循环
        while  True:
            #监视键盘和鼠标事件
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            #每次循环时都重绘屏幕
            self.screen.fill(self.settings.bg_color)
            self.ship.blitme()
        #让最近绘制的屏幕可见
            pygame.display.flip()

if __name__ == '__main__':
    #创建游戏实例并运行游戏
    ai = AlienInvasion()
    ai.run_game()
3年前 评论

@Jason990420 谢谢 刚刚试了一下,发现有屏幕了,可能是电脑有点问题,谢谢辛苦了!

file

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!