#Python# Alien Invasion项目(一)

规划项目

项目需要实现以下功能:
1.飞船出现在屏幕底部,并可以左右移动
2.玩家可以按空格键控制飞船射击子弹
3.外星人出现在屏幕中,并自主向下移动
4.飞船子弹消灭外星人后,将出现新外星人并加快移动速度
5.外星人碰撞到飞船或到达屏幕底部时,玩家将损失一艘飞船
6.玩家损失达三艘飞船时,游戏结束

安装pygame

可参考我的另一篇博客"#Python# 在windows中安装pygame"https://blog.csdn.net/weixin_45797443/article/details/106321292.

创建主界面

新建一个主程序,以后我们的游戏运行都使用这个程序
alien_invasion.py

import sys
import pygame

def run_game():
    # 初始化游戏并创建一个屏幕对象
    pygame.init() # 初始化pygame
    screen = pygame.display.set_mode((1200, 800)) # 构造一个宽1200像素,高800像素的Surface对象
    pygame.display.set_caption("Alien Invasion") # 将窗口命名为Alien Invasion
    bg_color = (230,230,230) # 创建背景色
    
    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT: # 检测游戏窗口关闭按钮是否被点击
                sys.exit(0) # 退出游戏,且不抛出异常
        # 每次循环时重绘屏幕
        screen.fill(bg_color)
        # 让最近绘制的屏幕可见
        pygame.display.flip()
run_game()

创建设置类

创建一个模块,存放所有游戏相关设置,便于以后修改游戏
settings.py

class Settings:
    '''存储所有设置'''

    def __init__(self):
        '''初始化游戏设置'''
        # 屏幕设置
        self.screen_width = 1200 # 窗口宽度为1200像素
        self.screen_height = 800 # 窗口高度为800像素
        self.bg_color = (230,230,230) # 创建名为bu_color的背景色 以RGB值为参数指定

在主程序中创建Settings实例,并使用它来访问设置
alien_invasion.py

import sys
import pygame
from settings import Settings

def run_game():
    # 初始化游戏并创建一个屏幕对象
    pygame.init() # 初始化pygame
    ai_settings = Settings()
    screen = pygame.display.set_mode(ai_settings.screen_width,ai_settings.screen_height)) # 构造一个宽1200像素,高800像素的Surface对象
    pygame.display.set_caption("Alien Invasion") # 将窗口命名为Alien Invasion
    
    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT: # 检测游戏窗口关闭按钮是否被点击
                sys.exit(0) # 退出游戏,且不抛出异常
        # 每次循环时重绘屏幕
        screen.fill(ai_settings.bg_color)
        # 让最近绘制的屏幕可见
        pygame.display.flip()
run_game()

创建飞船类

ship.py

import pygame

class Ship():

    def __init__(self,ai_settings,screen):
        '''初始化飞船并设置初始位置'''
        self.screen = screen 
        self.ai_settings = ai_settings
        # 加载飞船图像并获取其外接矩形
        self.image = pygame.image.load(r'D:\Python学习\Alien Invasion\images\ship.bmp') # 设置飞船的图像 # 使用相对文件地址出错?
        self.rect = self.image.get_rect() # 获取飞船图像的外接矩形
        self.screen_rect = screen.get_rect() # 获取界面的外接矩形
        # 将每艘飞船放在屏幕底部中央
        self.rect.centerx = self.screen_rect.centerx # 将screen_rect的中心点的x坐标赋值给rect的中心点的x坐标
        self.rect.bottom = self.screen_rect.bottom # 将screen_rect的底部的y坐标赋给rect的底部的y坐标

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

更新主程序,创建一艘飞船
alien_invasion,py

import sys
import pygame
from settings import Settings
from ship import Ship

def run_game():
    # 初始化游戏并创建一个屏幕对象
    pygame.init() # 初始化pygame
    ai_settings = Settings()
    screen = pygame.display.set_mode(ai_settings.screen_width,ai_settings.screen_height)) # 构造一个宽1200像素,高800像素的Surface对象
    pygame.display.set_caption("Alien Invasion") # 将窗口命名为Alien Invasion
    # 创建一艘飞船
    ship = Ship(screen)
    
    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT: # 检测游戏窗口关闭按钮是否被点击
                sys.exit(0) # 退出游戏,且不抛出异常
        # 每次循环时重绘屏幕
        screen.fill(ai_settings.bg_color)
        ship.blitme() # 将飞船重绘在屏幕上
        # 让最近绘制的屏幕可见
        pygame.display.flip()
run_game()

总结

pygame.display.set_mode((1200,800))

set_mode(size=(0, 0), flags=0, depth=0, display=0) -> Surface
函数创建一个Surface对象,参数size为元组,元组中的两个元素分别指定窗口的宽度与高度(像素为单位)

pygame.event.get()

get(eventtype=None) -> Eventlist
get(eventtype=None, pump=True) -> Eventlist
函数获取用户进行操作所产生的事件列表,且事件含有type属性及不同参数
常见的事件集如下:

事件产生途径参数
QUIT用户按下关闭按钮none
ATIVEEVENTPygame被激活或者隐藏gain, state
KEYDOWN键盘被按下unicode, key, mod
KEYUP键盘被放开key, mod
MOUSEMOTION鼠标移动pos, rel, buttons
MOUSEBUTTONDOWN鼠标按下pos, button
MOUSEBUTTONUP鼠标放开pos, button
JOYAXISMOTION游戏手柄(Joystick or pad) 移动joy, axis, value
JOYBALLMOTION游戏球(Joy ball) 移动joy, axis, value
JOYHATMOTION游戏手柄(Joystick) 移动joy, axis, value
JOYBUTTONDOWN游戏手柄按下joy, button
JOYBUTTONUP游戏手柄放开joy, button
VIDEORESIZEPygame窗口缩放size, w, h
VIDEOEXPOSEPygame窗口部分公开(expose)none
USEREVENT触发了一个用户事件code
bg_color = (230,230,230)
screen.fill(bg_color)

fill(color, rect=None, special_flags=0) -> Rect
bg_color为一个元组,作为实参传递给函数,元组中的元素为RGB参数其中(255,0,0)表示红色,(0,255,0)表示绿色,(0,0,255)表示蓝色,(230,230,230)表示一种浅灰色

self.image.get_rect()

get_rect(text, style=STYLE_DEFAULT, rotation=0, size=0) -> rect
函数获取对象的外接矩形,并返回矩形
pygame的矩形类含有以下常用属性:
left,top,width,height,centerx,centery
rect常用属性
其中centerx,centery表示矩形中心的坐标

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

blit(source, dest, area=None, special_flags=0) -> Rect
函数将一个Surface对象绘制在另一个Surface对象上,绘制的Surface对象通过参数sourse来指定,并通过参数dest来指定在被绘制的Surface对象上的坐标。其中参数dest一般为Rect的左上角坐标,也可为一个Rect,此时函数会自动提取其左上角坐标进行定位

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值