python游戏源码实例之建房绿化时间表

#!/usr/bin/env python  
# -*- coding: utf-8 -*-


__revision__ = '0.1'  
__author__ = 'lxd'

import threading  
import time

class TimeWorks(object):  
    def __init__(self):  
        self.wait_works = {}#等待工作列表,包括工作的所有细节  
        self.wait_times_threads = []#线程列表

    def setTime(self, data, seconds):  
        """将data放入等待工作列表中,并将工作放入线程中等待 
        """  
        def sleep(seconds):  
            time.sleep(seconds)

#www.iplaypy.com

        atime = threading.Thread(target = sleep, args = (seconds, ))  
        atime.setDaemon(True)  
        atime.start()  
        self.wait_times_threads.append(atime)

        self.wait_works.update({atime.name:data})

    def checkTimeThread(self):  
        """获得时间已到的工作 
        """  
        for atime in self.wait_times_threads:  
            if not atime.isAlive():  
                self.wait_times_threads.remove(atime)  
                return self.wait_works.pop(atime.name)

if __name__ == '__main__':  
    print 'start'  
    timeWorks = TimeWorks()

    build = {'kind':'build', 'name':'build1', 'pos':(1, 2)}  
    timeWorks.setTime(build, 5)

    farm = {'kind':'farm', 'name':'tom', 'pos':(3, 5)}  
    timeWorks.setTime(farm, 3)

    def build_something(data):  
        print 'build_something', str(data)

    def farm_something(data):  
        print 'farm_something', str(data)

    i = 0  
    while True:  
        print 'do_something', i  
        i += 1  
        time.sleep(1)

        data = timeWorks.checkTimeThread()  
        if data:  
            if data['kind'] == 'build':  
                build_something(data)  
            elif data['kind'] == 'farm':  
                farm_something(data)