这个是主程序
import pygame
from settings import Settings
from ship import Ship
import game_function 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("Allien Invasion")
ship = Ship(screen)
while True:
gf.check_events(ship)
ship.update()
gf.update_screen(ai_settings,screen,ship)
run_game()
game_function.py
import sys
import pygame
def check_events(ship):
for event in pygame.event.get():
if event == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:#event.get():获取每一次事件,event的属性type,如果是键盘输入KEYDOWN
if event.key == pygame.K_RIGHT:#方向右键-->
#ship.rect.centerx += 1#这里用到了形参ship,所以要在函数的括号内加上形参ship
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:
ship.moving_right == False
elif event.key == pygame.K_LEFT:
ship.moving_left == False
def update_screen(ai_settings,screen,ship):
screen.fill(ai_settings.bg_color)
ship.blitme()
pygame.display.flip()
ship.py
import pygame
class Ship():
def __init__(self,screen):
self.screen = screen
self.image = pygame.image.load('images/ship.png')#加载图片
self.rect = self.image.get_rect() #获取surface的rect属性
self.screen_rect = screen.get_rect()
self.rect.centerx = self.screen_rect.centerx#设置rect的位置
self.rect.bottom = self.screen_rect.bottom
'''center top bottom left right属性 加上xy坐标可实现位置的设置
注意:左上角的坐标为(0,0),往右下增大'''
self.moving_right = False
self.moving_left = False
def update(self):
if self.moving_right == True:
self.rect.centerx += 1
elif self.moving_left == True:
self.rect.centerx -= 1
def blitme(self):
self.screen.blit(self.image,self.rect)
#c.blit(a,b)根据指定位置将a:image按照b:rect的位置(相当于粘贴覆盖)绘制到c:screen上,即显示出来
这个是《从入门到实践》的第一个例子,然后目前就是让飞船通过键盘左右移动。可是并不成功。
一个是不能通过右上的叉关闭。一开始是可以的,就是把 if event.type == pygame.QUIT: sys.exit() 写在主程序里的时候,后来放在function里面再导入就不能用了
还有就是左右移动的功能也根本不能用,而且有时候按左右方向键还会闪退。
我对比了一下,代码应该没有错呀,pygame也是安装好了,可以看到那个飞碟,实在不知道是什么问题了。