【植物大战僵尸】向日葵生产阳光

一、介绍与演示

将阳光的生命周期交给向日葵管理,实现向日葵生产阳光

二、代码详解

data_object.py中更新了SUMMON_CD字段,用来记录生成阳光间隔

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),# 图片移动速度
        'SUMMON_CD':-1,# 生成时间间隔
    },
    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),# 图片移动速度
        'SUMMON_CD':-1,# 生成时间间隔
    },
    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),# 图片移动速度
        'SUMMON_CD':-1,# 生成时间间隔
    },
    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),# 图片移动速度
        'SUMMON_CD':8,# 生成时间间隔
    },

}

sunflower.py

import objectbase
from const import *
import sunlight
class SunFlower(objectbase.ObjectBase):
        def __init__(self, id , pos):
            super(SunFlower,self).__init__(
                id,
                pos
            )
            self.sunLights=[]

        def preSummon(self):
            sl=sunlight.SunLight(2,(self.pos[0]+20,self.pos[1]-10))
            self.sunLights.append(sl)

        def update(self):
            super(SunFlower,self).update()
            for sl in self.sunLights:
                sl.update()

        def draw(self, ds):
            super(SunFlower,self).draw(ds)
            for sl in self.sunLights:
                sl.draw(ds)
        
     

objectbase.py

import image
import time
import data_object #导入数据对象模块,包含图片路径、索引等信息
from const import *
class ObjectBase(image.Image):
    """
    ObjectBase类是一个游戏对象的基类,继承自image.Image类。
    它用于表示游戏中的各种对象,并提供了一些基本的属性和方法。
    """
    def __init__(self, id , pos):
        self.id = id 
        self.preIndexTime=0 # 上一次改变帧的时间
        self.prePositionTime=0 #上一次改变位置的时间
        self.preSummonTime=0 #上一次生成召唤物的时间
        super(ObjectBase,self).__init__(
            self.getData()['PATH'],
            0, 
            pos,
            self.getData()['SIZE'],
            self.getData()['IMAGE_INDEX_MAX']
            )  # 调用父类构造函数初始化图片属性

    def getSummonCD(self):
        #获取召唤物生成时间间隔
        return self.getData()['SUMMON_CD']
    
    def getSpeed(self):
        #获取速度
        return self.getData()['SPEED']
    def getData(self):
        #获取数据对象
        return data_object.data[self.id]

    def getPositionCD(self):
        return self.getData()['POSITION_CD']
    
    def getImageIndexCD(self):
        return self.getData()['IMAGE_INDEX_CD']

    def update(self):
        self.checkSummon()
        self.checkImageIndex() #帧动画实现
        self.checkPosition() #平移实现
    
    def checkImageIndex(self):
        if time.time()-self.preIndexTime<self.getImageIndexCD():
            return
        self.preIndexTime=time.time()

        idx=self.pathIndex+1
        if idx>=self.pathIndexMax:
            idx=0
        self.updateIndex(idx)

    
    def checkPosition(self):
        if time.time()-self.prePositionTime<self.getPositionCD():
            return False
        self.prePositionTime=time.time()
        speed=self.getSpeed()
        self.pos=(self.pos[0]+speed[0],self.pos[1]+speed[1])
        return True
        
    def checkSummon(self):
        if time.time()-self.preSummonTime<self.getSummonCD():
            return 
        self.preSummonTime=time.time()
        self.preSummon()

    def preSummon(self):
        pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值