在PyCharm中运行《彩图版飞机大战》即可进入如图1所示的游戏界面。
具体的操作步骤如下:
(1)玩游戏。在游戏主界面中,从屏幕的顶部不断出现下落的敌机,玩家按下键盘上的↑、↓、←、→方向键移动飞机的位置并且发射子弹打掉敌机,每打掉一只敌机得100分。当玩家飞机与敌机发生碰撞时游戏结束,同时显示游戏得分以及排行榜按钮,游戏结束界面如图2所示。
(2)查看排行榜。在游戏结束界面中,单击“排行榜”按钮,将显示排行榜界面,如图3所示。在该界面中,如果想重新玩游戏,可以单击“重新开始”按钮。
部分源码如下,其余完整详见下载,可忽略不看。
# 设置游戏屏幕大小 SCREEN_WIDTH = 480 SCREEN_HEIGHT = 800 # 子弹类 class Bullet(pygame.sprite.Sprite): def __init__(self, bullet_img, init_pos): # 调用了父类的初始化方法来初始化sprite的属性 pygame.sprite.Sprite.__init__(self)# 调用了父类的初始化方法来初始化sprite的属性 self.image = bullet_img self.rect = self.image.get_rect() self.rect.midbottom = init_pos self.speed = 10 def move(self): self.rect.top -= self.speed # 玩家飞机类 class Player(pygame.sprite.Sprite): def __init__(self, player_rect, init_pos): pygame.sprite.Sprite.__init__(self) self.image = [] # 用来存储玩家飞机图片的列表 for i in range(len(player_rect)): self.image.append(player_rect[i].convert_alpha()) self.rect = player_rect[0].get_rect() # 初始化图片所在的矩形 self.rect.topleft = init_pos # 初始化矩形的左上角坐标 self.speed = 8 # 初始化玩家飞机速度,这里是一个确定的值 self.bullets = pygame.sprite.Group() # 玩家飞机所发射的子弹的集合 self.img_index = 0 # 玩家飞机图片索引 self.is_hit = False # 玩家是否被击中 # 发射子弹 def shoot(self, bullet_img): bullet = Bullet(bullet_img, self.rect.midtop) self.bullets.add(bullet) # 向上移动,需要判断边界 def moveUp(self): if self.rect.top <= 0: self.rect.top = 0 else: self.rect.top -= self.speed # 向下移动,需要判断边界 def moveDown(self): if self.rect.top >= SCREEN_HEIGHT - self.rect.height: self.rect.top = SCREEN_HEIGHT - self.rect.height else: self.rect.top += self.speed # 向左移动,需要判断边界 def moveLeft(self): if self.rect.left <= 0: self.rect.left = 0 else: self.rect.left -= self.speed # 向右移动,需要判断边界 def moveRight(self): if self.rect.left >= SCREEN_WIDTH - self.rect.width: self.rect.left = SCREEN_WIDTH - self.rect.width else: self.rect.left += self.speed # 敌机类 class Enemy(pygame.sprite.Sprite): def __init__(self, enemy_img, enemy_down_imgs, init_pos): pygame.sprite.Sprite.__init__(self) self.image = enemy_img self.rect = self.image.get_rect() self.rect.topleft = init_pos self.down_imgs = enemy_down_imgs self.speed = 2 self.down_index = 0 # 敌机移动,边界判断及删除在游戏主循环里处理 def move(self): self.rect.top += self.speed
《飞机大战》这是一款经典飞行射击类游戏,精美绚丽的画面,整体环境主要还是围绕太空为主,高保真的音效,为玩家呈现一场不一样射击体验。简单的触屏操作,触屏按住随意一个地方,左右移动,便可自动攻击敌人,上下移动亦可躲避强敌。在飞机的左下角还有两个道具槽,直接点击就可以发动道具效果,前提是你必须要吃到道具。玩家在游戏中要做的就是驾驶着最新战机,向敌人的总部发起了冲击。除了传承经典的飞行射击类元素之外,同时还加入了商店系统,通过购买相关配件和物品升级武器和飞机。另外还有装备系统,可以让你的飞机变得更强悍,替换相关配件让你火力全开。
"""
对文件的操作
写入文本:
传入参数为content,strim,path;content为需要写入的内容,数据类型为字符串。 path为写入的位置,数据类型为字符串。strim写入方式 传入的path需如下定义:path= r’ D:\text.txt’ f = codecs.open(path, strim, 'utf8')中,codecs为包,需要用impor引入。 strim=’a’表示追加写入txt,可以换成’w’,表示覆盖写入。 'utf8'表述写入的编码,可以换成'utf16'等。 """ def write_txt(content, strim, path): f = codecs.open(path, strim, 'utf8') f.write(str(content)) f.close() """ 读取txt: 表示按行读取txt文件,utf8表 示读取编码为utf8的文件,可以根据需求改成utf16,或者GBK等。 返回的为数组,每一个数组的元素代表一行, 若想返回字符串格式,可以将改写成return ‘\n’.join(lines) """ def read_txt(path): with open(path, 'r', encoding='utf8') as f: lines = f.readlines() return lines # 初始化 pygame pygame.init() # 设置游戏界面大小 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) # 游戏界面标题 pygame.display.set_caption('彩图版飞机大战') # 图标 ic_launcher = pygame.image.load('resources/image/ic_launcher.png').convert_alpha() pygame.display.set_icon(ic_launcher) # 背景图 background = pygame.image.load('resources/image/background.png').convert_alpha() # 游戏结束背景图 game_over = pygame.image.load('resources/image/gameover.png') # 子弹图片 plane_bullet = pygame.image.load('resources/image/bullet.png')