python飞机大战总结

    似乎半个月没写博客了。持之以恒的勋章都掉了。。现在开始补回来。

    这一个月学了学py,搭了一套自己的框架。

总结下自己学到的吧, 还有去TX之前准备自己补上的部分:

    1.感觉U3D什么的游戏引擎,已经帮忙做好游戏图层的管理,所以不用很操心,不过pygame感觉真的啥也不帮忙做。

so写了一个图层的管理(sort函数使用竟然测了半天,py2 和py3似乎有所不同,我用的py3)

class DrawOn(object):

    def __init__(self):
        self.priority = 0


    def draw(self):
        pass

    def definePriority(self,num):
        self.priority=num

class DrawCall(object):
    def __init__(self):
        self.Elements=[]

    def init(self):
        self.Elements=[]

    def add(self,drawon):
        self.Elements.append(drawon)

    def update(self,delta):
        self.Elements=sorted(self.Elements, key=lambda x: x.priority)
        for drawElement in self.Elements:
            drawElement.draw()
        self.init()

_DrawCallInstance=DrawCall()
 
class Ship(DrawOn):
    def __init__(self):
        super().__init__()
        super(Ship,self).definePriority(2)

所有要绘制到屏幕上的给个优先级。这个似乎不难,不过感觉我的方法有些一般,放在堆里似乎可以把nlogn的快排降到n。(emmm问题不大)

    2.事件分发器,之前王者荣耀demo公司的一个前辈讲的时候还没太在意,不过现在理解过一遍之后,突然感觉是真滴好用

import  sys
import pygame

class Event():
    def __init__(self):
        self.map2ListDistributeEvnet={'key':[]}

    def init(self):
        self.map2ListDistributeEvnet.clear()

    def addEvent(self,type,element):
        if type in self.map2ListDistributeEvnet:
            self.map2ListDistributeEvnet(type).append(element)
        else:
            self.map2ListDistributeEvnet[type]=[]
            self.map2ListDistributeEvnet[type].append(element)

    def subEvent(self,type,element):
        if type in self.map2ListDistributeEvnet:
            if element in self.map2ListDistributeEvnet[type]:
                self.map2ListDistributeEvnet[type].remove(element)

    def dispatch(self,type):
        if type not in self.map2ListDistributeEvnet :
            print('按键未注册')
            return

        for event in self.map2ListDistributeEvnet[type]:
            event()


_EventPatcher =Event()

        3.之后大概就是结构了,之前记得助教大哥说过,比较复杂的可以用战场类来维护,尝试了下,似乎收获并不是很大,也可能没get到精髓。


之后一个月:准备把帧同步 网络+客户端梳理一下,自己尝试做一个可以对打的demo吧。。自己的游戏最近有想法了!!!!!!!

噢还是贴一下自己的。。放在D盘,因为是绝对路径。https://pan.baidu.com/s/1SDyqRbJvFh7fTkCZLQ5nnA

猜你喜欢

转载自blog.csdn.net/qq_33951440/article/details/80362576