【植物大战僵尸】向日葵类的实现

一、介绍与演示

二、代码详解

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),# 图片移动速度
    },

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值