手讲解超详细python入门游戏项目‘打外星飞船’手把(一)
由于内容比较多,这里会分为五篇文章来讲解,从页面的创建、飞船控制、射击、外星人创建、射杀外星人五片来展开。
做一个窗口和设置响应用户
import sys
import pygame
''' '''
""" 我们先创建一个新的文件,保存的名字就叫做主函数吧,main.py。首先我们应该导入两个模块sys和pygame,pygame是用来开发游戏所需要的功能的,sys是我们退出的时候,我们需要用到的 """"
from settings import Settings
#这个是我们在后面创建一个settings用来管理设置,后年会补充
class AlienInvasion:
"""我们先创建一个类,用它来管理游戏资源和行为的类。"""
def __init__(self):
"""这个我们开始游戏的主循环"""
pygame.init()
#在这个类中,我们先定义一个函数,调用函数pygame.init()初始化背景设置,让他能够正常的工作
self.settings = Settings()
self.screen = pygame.display.set_mode(
(self.settings.screen_width, self.settings.screen_height))
#在主程序文件中打入settings类调用pygames in it(),创建一个settings实力并付给self.settings,这个时候我们把它的属性宽度和高度复给主函数
pygame.display.set_caption("Alien Invasion")
def run_game(self):
"""开始游戏的主循环了,在这个循环中,我们不断的进行一个循环,并且管理屏幕更新的代码。比如说按键或移动鼠标的时候就是要响应一次,作为一次响应事件,就是一个循环。
"""
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#在循环中,如果我们检测到了退出的指令,我们就用 sys.exit()来退出
self.screen.fill(self.settings.bg_color)
#调用方法fill(),用这种背景色填充屏幕。方法fill()用于处理surface只接受一个实参一种颜色
pygame.display.flip()
# 让最近绘制的屏幕可见,在这里我们通过不断的循环都会绘制一个空的屏幕,并且插去就的屏幕,所以让新的屏幕可见就行,成了动画
if __name__ == '__main__':
# 创建游戏实例,并且开始运行游戏
ai = AlienInvasion()
ai.run_game()
这里重新建立一个文件,可以命名为settings.py
class Settings:
"""我们开始编写一个名为settings的模块,在这个模块中,所有的设置都储存在这里,以免在代码中到处添加设置。创建另外一个文件,命名为settings.py。
"""
def __init__(self):
"""这里我们建立一个函数"""
# 如果只是一个默认的屏幕,就太没有意思了,在现在我们把屏幕的颜色改成白色
颜色是由RGB指定的,比如说255,0,0表示红色;0,255,0表示绿色;这里我们把背景色设为白色
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
这里重新建立一个文件,可以命名为ship.py。我们在这里会先创立一ship的模块.,我们用这个模块来管理飞船的大部分行为。
import pygame
class Ship:
"""管理飞船的类"""
def __init__(self, ai_game):
"""初始化飞船并且初始化的他的位置"""
self.screen = ai_game.screen
#在定义这个类之前,我要导入模块pygame
在一处的话,将屏幕付给了sheep的一个属性,方便这个类的所有方法后面的轻松访问
self.screen_rect = ai_game.screen.get_rect()
# 加载飞船图像
self.image = pygame.image.load('images/ship.bmp')
#在这里我们需要把飞船的图像添加进去,一般来说,图像的格式都是JPG和GIF多一点在这里我们用的是bmp的格式. 我把飞船的图片放在下面,注意在你建立文档的时候,一定要把图片放在一个名为images的文件夹下,并且我其他项目是同一个文件夹。
self.rect = self.image.get_rect()
self.rect.midbottom = self.screen_rect.midbottom
#我们都把它放在屏幕底部的中央因为这里我们要把非常放在底部的中央,所以我们应该用的属性叫做 midbottom
def blitme(self):
self.screen.blit(self.image, self.rect)
#现在我们要把这个飞船的图像调用出来,括号里面的是非常的位置
这个是我们要导入的图片
这个是我们最终建立好的游戏界面
参考文献
python从入门到实践–埃里克.马瑟斯