上个星期弄了好久的打飞机,折磨了我好久,其实上周末都已经做好了,整体的一些大功能已经实现,缺少的就是一些小功能,比如说选关啊,变身啊,超级炸弹啊,本来想加上去,但是又比较花费时间,主要以后我也没有想要去从事游戏这么方面的工作,但是Pygame这个东西是真的好用,里面有各种各样的工具,基本可以满足你的所有需求,我只是用了几个必须的方法,做出来了游戏的雏形,以后有时间的话再慢慢优化吧,不过比较Low的事就是我把素材包给换了,我自己再网上找了图片,自己P了一套素材,整出来一个美少女战士,惊了吧,我自己也惊了,好好的打飞机不好吗?其实原理都一样只是换了一个外壳,废话不多说,先给大家看看效果图。
其实就是都做的是飞机没啥意思,就面向‘肥宅’来一个美少女吧,基本就是这个样子,简单的功能,基本没有什么bug,代码全部写在了一个Py文件中,本来想分开写,然后导入呢,但是有点麻烦,现在我的水平只能达到这样,等以后有能力了,把代码优化一下,我基本都是用类来写的,把代码封装起来,显得简洁一点吧(虽然也不是那么简洁),下面给大家看一下我的代码,一共500多行吧。
总体的代码就是这样,下面给大家看看我每个类里面的代码
每个列表里面放的基本都是图片
# 需求 制作一款全新版本的美少女战士
# 分析思路:图片素材 声音素材
# 1:启动界面
# 背景图片 开始游戏按钮 标题(使用sin(x)可以动画)
# 2:游戏界面
# 英雄类:
# 属性:图片 血量 速度 渲染屏幕 初始位置
# 方法:移动 发射子弹 死亡 无敌 碰撞敌机
# 敌人类:
# 属性:图片 血量 速度 初始位置 渲染屏幕
# 方法:移动 死亡
# 子弹类:
# 属性:图片 位置 速度 屏幕
# 方法:移动 碰撞敌机
# 敌机工厂类:负责敌机的产生 敌机的移动
# 3:分数界面
# 历史分数最大值:储存最大值,显示分数
import pygame
import sys
import math
import copy
import random
import os
'''enemy_imgs = [
pygame.image.load('images/enemy1.png'),
pygame.image.load('images/enemy2.png'),
pygame.image.load('images/enemy3.png'),
pygame.image.load('images/enemy4.png'),
pygame.image.load('images/enemy5.png')
]
'''
history = 0
enemy_list = []
enemy_imgs1 = [
pygame.transform.scale((pygame.image.load('images/diren1.png')), (120, 130)),
pygame.transform.scale((pygame.image.load('images/diren1baozha1.png')), (120, 130)),
pygame.transform.scale((pygame.image.load('images/diren1baozha2.png')), (120, 130)),
pygame.transform.scale((pygame.image.load('images/diren1baozha3.png')), (120, 130))
]
enemy_imgs2 = [
pygame.transform.scale((pygame.image.load('images/diren2.png')), (80, 85)),
pygame.transform.scale((pygame.image.load('images/deren2baozha1.png')), (80, 85)),
pygame.transform.scale((pygame.image.load('images/diren2baozha2.png')), (80, 85)),
pygame.transform.scale((pygame.image.load('images/diren2baozha3.png')), (80, 85))
]
enemy_imgs3 = [
pygame.transform.scale((pygame.image.load('images/diren3.png')), (80, 85)),
pygame.transform.scale((pygame.image.load('images/diren3baozha1.png')), (80, 85)),
pygame.transform.scale((pygame.image.load('images/diren3baozha2.png')), (80, 85)),
pygame.transform.scale((pygame.image.load('images/diren3baozha3.png')), (80, 85))
]
enemy_imgs4 = [
pygame.transform.scale((pygame.image.load('images/direndaboss.png')), (220, 160)),
pygame.transform.scale((pygame.image.load('images/bossbaozha1.png')), (220, 160)),
pygame.transform.scale((pygame.image.load('images/bossbaozha2.png')), (220, 160)),
pygame.transform.scale((pygame.image.load('images/bossbaozha3.png')), (220, 160)),
pygame.transform.scale((pygame.image.load('images/bossbaozha4.png')), (220, 160)),
pygame.transform.scale((pygame.image.load('images/bossbaozha5.png')), (220, 160))
]
bullet_img = [
pygame.transform.scale((pygame.image.load('images/bullet2.png')), (36, 34)),
pygame.transform.scale((pygame.image.load('images/heartbullet.png')), (36, 34)),
pygame.transform.scale((pygame.image.load('images/heartbullet.png')), (36, 34)),
]
bullet_list = []
# 加载背景图片
start_bg = [
pygame.image.load('images/beijing2.png'),
pygame.image.load('images/beijing4.png'),
pygame.image.load('images/zitibiaoti5.png'),
pygame.image.load('images/starbit.png'),
pygame.image.load('images/engbg1.png'),
pygame.image.load('images/beijingtu1.png'),
pygame.image.load('images/beijingtu2.png')
]
start_star = [
pygame.image.load("images/star3.png"),
pygame.image.load("images/star2.png"),
pygame.image.load("images/star1.png")
]
# 开始界面类
class StatPanel:
is_inside = False
def __init__(self, screen, start_bg=start_bg, start_star=start_star):
self.screen = screen
self.start_bg = start_bg
self.start_star = start_star
self.index = 0
self.statIndex = 0
self.statAddIndex = 0