一、介绍与演示
二、代码详解
main.py
import pygame # 导入pygame游戏开发库
import sys # 导入系统模块用于退出程序
from pygame.locals import * # 导入pygame的常量(如事件类型)Quit
import image # 导入自定义的image模块,包含图片处理类
from const import *
import zombiebase # 导入自定义的僵尸基类模块,包含僵尸对象的处理类
import peabullet # 导入自定义的豌豆子弹模块,包含豌豆对象的处理类
import sunlight # 导入自定义的阳光模块,包含阳光对象的处理类
import sunflower # 导入自定义的向日葵模块,包含向日葵对象的处理类
pygame.init() # 初始化pygame所有模块,确保各个模块正常运行
DS = pygame.display.set_mode( GAME_SIZE ) # 创建1280x600像素的显示窗口,DS为显示表面对象
img=image.Image(PATH_BACK,0,(0,0),GAME_SIZE,0) # 背景图片
imgzb=zombiebase.ZombieBase(1,(1080,20) ) #僵尸图片
pb=peabullet.PeaBullet(0,(0,200)) #豌豆子弹图片
#pathFmt传入的是格式化字符串,pathIndex传入的是一个整数,表示图片的索引
sl=sunlight.SunLight(2,(500,0)) #阳光图片
sfList=[]
for i in range(GRID_COUNT[0]):
for j in range(GRID_COUNT[1]):
pos=(LEFT_TOP[0]+i*GRID_SIZE[0],LEFT_TOP[1]+j*GRID_SIZE[1])
sf=sunflower.SunFlower(3,pos) #向日葵图片
sfList.append(sf)
while True:
for event in pygame.event.get():#等待操作系统抛出事件
if event.type == QUIT: # 如果检测到退出事件(如点击关闭按钮)
pygame.quit() # 关闭pygame模块
sys.exit() # 终止Python程序
#R G B
DS.fill( (255, 255, 255) ) # 用纯白色填充整个屏幕
img.draw(DS) # 调用Image对象的draw方法,将背景图片绘制到屏幕上
# imgzb.draw(DS)
# imgzb.doLeft()
# imgzb.updateIndex((imgzb.pathIndex+1)%15) # 更新僵尸图片索引,循环播放
imgzb.update() # 更新僵尸对象的状态(如位置、图片索引等)
imgzb.draw(DS) # 绘制僵尸图片到屏幕上
pb.update() # 更新豌豆子弹对象的状态(如位置、图片索引等)
pb.draw(DS) # 绘制豌豆子弹图片到屏幕上
sl.update() # 更新阳光对象的状态(如位置、图片索引等)
sl.draw(DS) # 绘制阳光图片到屏幕上
for sf in sfList:
sf.update() # 更新向日葵对象的状态(如位置、图片索引等)
sf.draw(DS)
pygame.display.update() # 更新画面显示(将绘制内容刷新到屏幕)
sunflower.py
import objectbase
from const import *
class SunFlower(objectbase.ObjectBase):
pass
objectbase.py
data={
0 : {
'PATH':'pic/other/peabullet.png',
'IMAGE_INDEX_MAX':0,# 图片索引最大值
'IMAGE_INDEX_CD':0.0,# 图片索引时间间隔
'POSITION_CD':0.008,# 位置时间间隔
'SIZE':(32,32),# 图片大小
'SPEED':(4,0),# 图片移动速度
},
1 : {
'PATH':'pic/zombie/0/%d.png',
'IMAGE_INDEX_MAX':15,# 图片索引最大值
'IMAGE_INDEX_CD':0.2,# 图片索引时间间隔
'POSITION_CD':0.2,# 位置时间间隔
'SIZE':(100,128),# 图片大小
'SPEED':(-3,0),# 图片移动速度
},
2 : {
'PATH':'pic/other/sunlight/%d.png',
'IMAGE_INDEX_MAX':30,# 图片索引最大值
'IMAGE_INDEX_CD':0.06,# 图片索引时间间隔
'POSITION_CD':0.05,# 位置时间间隔
'SIZE':(80,80),# 图片大小
'SPEED':(0,2),# 图片移动速度
},
3 : {
'PATH':'pic/plant/sunflower/%d.png',
'IMAGE_INDEX_MAX':19,# 图片索引最大值
'IMAGE_INDEX_CD':0.07,# 图片索引时间间隔
'POSITION_CD':10000,# 位置时间间隔
'SIZE':(128,128),# 图片大小
'SPEED':(0,0),# 图片移动速度
},
}