def __init__(self, *args, **kwags):
        super(SitePlugin, self).__init__(*args, **kwags)

        # Now spawn background process if needed
        io = {"output": self.backgroundOutput, "input": self.backgroundInput, "allowed_import": (), "modules": storage.modules}
        self.spawner = Spawner(self, io=io)
        self.spawned_background_processes = False
        if "BACKGROUND" in self.settings["permissions"]:
            self.spawnBackgroundProcesses()
class SitePlugin(object):
    def __init__(self, *args, **kwags):
        super(SitePlugin, self).__init__(*args, **kwags)

        # Now spawn background process if needed
        io = {"output": self.backgroundOutput, "input": self.backgroundInput, "allowed_import": (), "modules": storage.modules}
        self.spawner = Spawner(self, io=io)
        self.spawned_background_processes = False
        if "BACKGROUND" in self.settings["permissions"]:
            self.spawnBackgroundProcesses()


    def spawnBackgroundProcesses(self):
        if self.spawned_background_processes:
            return

        self.log.debug("Spawning background processes")
        self.spawned_background_processes = True
        files = self.storage.list("")
        for file in files:
            # Run every file that starts with 0background.
            if file.startswith("0background."):
                self.spawnBackgroundProcess(file)


    # Spawn background process if needed
    def spawnBackgroundProcess(self, file_name):
        ext = file_name.replace("0background.", "")
        # Read code
        code = self.storage.read(file_name)
        # Spawn
        self.spawner.spawn(ext, code)



    def delete(self):
        # First really delete
        super(SitePlugin, self).delete(self)
        # Now stop all threads
        self.spawner.stopAll()


    def saveSettings(self):
        super(SitePlugin, self).saveSettings()

        # Spawn if just got the permission
        if "BACKGROUND" in self.settings["permissions"]:
            self.spawnBackgroundProcesses()

    # IO
    def backgroundOutput(self, *args):
        raise NotImplementedError
    def backgroundInput(self, *args):
        raise NotImplementedError
Ejemplo n.º 3
0
 def __init__(self,
     population_size,
     mutation_rate,
     target,
     good_sample_size,
     random_sample_size,
     spawner=None,
 ):
     self.mutation_rate = mutation_rate
     self.population_size = population_size
     self.target = target
     self.good_sample_size = good_sample_size
     self.random_sample_size = random_sample_size
     self.spawner = Spawner() if spawner is None else spawner
Ejemplo n.º 4
0
    def __init__(self, world):

        self.id = type(self).instance_num # const and public
        type(self).instance_num += 1

        # TODO: switches and goals and hives
        self.spawner = Spawner(world)
        self.wall    = Wall(world)
        self.mines   = Mines(world)
        self.balls   = Balls(world)

        self.elapsed_time = KahanSum()

        self.can_mutate = True
Ejemplo n.º 5
0
    def __init__(self, simVars, delta=50, tick=0):
        self.delta = delta
        self.simVars = simVars
        self.map = Map(simVars)
        self.spawner = Spawner(self)
        self.tick = tick

        self.physics = Physics()
Ejemplo n.º 6
0
    def __init__(self, *args, **kwags):
        super(SitePlugin, self).__init__(*args, **kwags)

        # Now spawn background process if needed
        io = {
            "output": self.backgroundOutput,
            "input": self.backgroundInput,
            "allowed_import": ("json",),
            "modules": storage.modules,
            "site": self,
            "scope0": []
        }
        self.spawner = Spawner(self, io=io)
        self.spawned_background_processes = False
        if "BACKGROUND" in self.settings["permissions"]:
            self.spawnBackgroundProcesses()

        self.onFileDone.append(self.reloadBackgroundProcess)
Ejemplo n.º 7
0
    def add_spawner(self, spawner_name):
        try:
            spawner = None
            for spawner in Spawner.__subclasses__():
                spawner_instance = spawner()
                if spawner_instance.name == spawner_name:
                    spawner_instance.spawn()
                    self.spawners.append(spawner_instance)

        except InvalidFilePathException as e:
            print e
Ejemplo n.º 8
0
    def start():
        PixelsManager.setup()
        Map.setup()
        GameEnder.setup()
        TimeManager.setup()
        InputManager()
        Player.get_instance()
        Spawner()
        print("Starting game")

        GameManager.get_instance().run()

        print("Ending game")
        TimeManager.destroy()
        Player.destroy_instance()
        ObjectsHolder.objects.clear()
Ejemplo n.º 9
0
class GeneticAlgo(object):
    def __init__(self,
        population_size,
        mutation_rate,
        target,
        good_sample_size,
        random_sample_size,
        spawner=None,
    ):
        self.mutation_rate = mutation_rate
        self.population_size = population_size
        self.target = target
        self.good_sample_size = good_sample_size
        self.random_sample_size = random_sample_size
        self.spawner = Spawner() if spawner is None else spawner

    def get_next_generation(self, generation):
        scored_generation = generation.score(self.target)
        selection = self._select_from_generation(scored_generation)
        next_population = self._crossover_selection(selection)
        return Generation(next_population)

    def _select_from_generation(self, scored_generation):
        population = scored_generation.population
        good_samples = population[:self.good_sample_size]
        remaining_population = population[self.good_sample_size:]
        random.shuffle(remaining_population)
        random_samples = remaining_population[:self.random_sample_size]
        concat_list = good_samples + random_samples
        return concat_list

    def _crossover_selection(self, selection):
        next_population = []
        max_int = len(selection) - 1
        for i in range(self.population_size):
            index_1 = random.randint(0, max_int)
            index_2 = random.randint(0, max_int)
            child = self.spawner.crossover(
                selection[index_1],
                selection[index_2],
                self.mutation_rate
            )
            next_population.append(child)
        return next_population
Ejemplo n.º 10
0
 def __init__(self, surface):
     self.surface = surface
     self.width = surface.get_width()
     self.height = surface.get_height()
     
     self.reverseGravity = False
     
     self.sprites = []
     
     self.player = Player(world = self, position = [self.width / 2, self.height / 2])
     self.add(self.player)
     
     self.background = BACKGROUND
     
     self.spawner = Spawner(self)
     for i in range(self.MAX_NODES):
         self.add(self.spawner.spawn())
     
     self.text = Text(self)
           
     self.collisionSound = mixer.Sound("resources/chime.aif")
     self.hitSounds = []
     for i in range(1, HITS + 1):
         self.hitSounds.append(mixer.Sound("resources/hit" + str(i) + ".aif"))
Ejemplo n.º 11
0
#!/usr/bin/env python
import pika
import time
import asyncio
from utils.color import style
from spawner import Spawner

if __name__ == '__main__':
    connection = pika.BlockingConnection(
        pika.ConnectionParameters('localhost'))
    if connection.is_closed:
        print(
            "The RabbitMQ server was not found (check connection localhost:5672). Quitting simulation."
        )
    channel = connection.channel()
    if channel.is_closed:
        print("The RabbitMQ server was not found. Quitting simulation.")
    connection.close()

    task_spawner = Spawner()
    task_spawner.execute_concurrent()
    # asyncio.run(task_spawner.execute_concurrent())

    # canceled = False
    # while canceled == False:
    #     time.sleep(1)

    print(style.GREEN('Program exited normally.'))
Ejemplo n.º 12
0
def main():
    # Importing data from config
    with open('data/config.json') as cfg:
        data=json.load(cfg)
    terminal_width=data['terminal_width']
    terminal_height=data['terminal_height']
    map_width=data['map_width']
    map_height=data['map_height']
    fov_algorithm=data['fov_algorithm']
    fov_light_walls=data['fov_light_walls']
    fov_radius=data['fov_radius']
    # Init root console
    tcod.console_set_custom_font('gfx/fonts/terminal12x16_gs_ro.png', tcod.FONT_TYPE_GREYSCALE | tcod.tcod.FONT_LAYOUT_CP437)
    console_root=tcod.console_init_root(terminal_width, terminal_height, 'Python Game Lol', False, tcod.RENDERER_SDL2, 'C', False)
    console_display=tcod.console.Console(terminal_width, terminal_height, 'C')
    with open('gfx/palette.json') as colours:
        palette=json.load(colours)
    console_display.bg[:]=palette['terminal_green']
    #console_interface=tcod.console.Console(terminal_width, map_height, 'C')
    game_map=GameMap(map_width, map_height)
    spawner=Spawner(map_width, map_height, 0)
            # Testing creatures
    generate_test_area(game_map, spawner)
    player=spawner.entities[0]
    # Then generate map
    fov_recompute=True
    # message log
    game_state=GameStates.TURN_PLAYER
    prev_game_state=game_state
    #targeting_item=None
    # Rendering for the first time
    game_map.recompute_fov(player.x, player.y, fov_radius, fov_light_walls, fov_algorithm)
    render_all(console_root, console_display, spawner.entities, game_map, fov_recompute)
    fov_recompute=False
    tcod.console_flush()
    # Game loop
    while True:
        # Render
        if fov_recompute:
            game_map.recompute_fov(player.x, player.y, fov_radius, fov_light_walls, fov_algorithm)
        render_all(console_root, console_display, spawner.entities, game_map, fov_recompute)
        fov_recompute=False
        tcod.console_flush()
        erase_entities(console_display, spawner.entities, game_map)
        # Processing action
        action=handle_event(game_state)
        move=action.get('move')
        pickup=action.get('pickup')
        take_inventory=action.get('take_inventory')
        fullscreen=action.get('fullscreen')
        exit=action.get('exit')
        # Player's Turn
        results_player=[]
        # Results: Extend if player turn ends and append if doesn't? Tcod tutorial is confusing.
        if game_state==GameStates.TURN_PLAYER:
            if move:
                dx, dy=move
                results_movement=player.handle_move(dx, dy, spawner, game_map.path_map, swappable=True)
                if results_movement:
                    results_player.extend(results_movement)
                    fov_recompute=True
                    game_state=GameStates.TURN_ALLY

            elif pickup: # Should implement a pickup list like POWDER
                for entity in spawner.entities:
                    if entity.item and entity.x==player.x and entity.y==player.y:
                        print('ADD ITEM')   # Add item
                        break
                else:
                    print('GRAB GROUND')    # Message log to grab ground
        
        if take_inventory:
            prev_game_state=game_state
            game_state=GameStates.MENU_INVENTORY
        
        if exit:
            if game_state.value>=10:  # Game states >= 10 are menus: inventory, quipment, etc.
                game_state=prev_game_state
            if game_state.value>=20:  # Game states >= 20 are targetings
                results_player.append({'targeting_cancelled': True})
            # else brings up main menu
        
        if fullscreen:
            tcod.console_set_fullscreen(not tcod.console_is_fullscreen())

        # Player turn messages: handled by an announcer (translation friendly probably)

        # Faction turns (handled by an announcer also)
        if game_state==GameStates.TURN_ALLY:
            for entity in spawner.entities:
                if entity.faction==Factions.ALLY and entity!=player:
                    results_ally=entity.ai.take_turn(spawner, game_map.path_map)
            game_state=GameStates.TURN_ENEMY
        
        if game_state==GameStates.TURN_ENEMY:
            for entity in spawner.entities:
                if entity.faction==Factions.ENEMY:
                    results_enemy=entity.ai.take_turn(spawner, game_map.path_map)
            game_state=GameStates.TURN_NEUTRAL
        
        if game_state==GameStates.TURN_NEUTRAL:
            for entity in spawner.entities:
                if entity.faction==Factions.NEUTRAL:
                    if entity.ai:
                        resutls_neutral=entity.ai.take_turn(spawner, game_map.path_map)
            game_state=GameStates.TURN_PLAYER
Ejemplo n.º 13
0
from spawner import Spawner

spawner = Spawner()
spawner.get_counter()
Ejemplo n.º 14
0
from force_ball import ForceBall
from game_state import GameState
from physics import update_ball, handle_wall_collision

#Set window position on screen
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (50, 50)
pygame.init()
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 900
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

balls = initial_balls(SCREEN_WIDTH, SCREEN_HEIGHT)
force_balls = []

game_state = GameState()
object_handler = Spawner()
painter = screen_painter.ScreenPainter()
painter.ball_painting_algorithm = screen_painter.speed

while game_state.running:
    game_state.handle_inputs(pygame.event.get())

    object_handler.update(game_state.get_click_spawn_behaviour())
    if pygame.mouse.get_pressed()[0]:
        object_handler.handle_action(game_state.get_click_action(), balls,
                                     force_balls,
                                     game_state.get_new_spawn_force())

    if not game_state.paused:
        balls_to_delete = []
        for ball in balls:
Ejemplo n.º 15
0
    def startNewGame(self, load):
        
        #Hide menu background on start of game.
        self.mainMenuImage.hide()
    
        #Get window properties, hide the cursor, set properties
        properties = WindowProperties()
        properties.setCursorHidden(True)
        base.win.requestProperties(properties)
        
        #Disable default mouse controls
        self.disableMouse()

        #Create new collision system
        base.cTrav = CollisionTraverser()
        base.pusher = CollisionHandlerPusher()
        
        #Init player here
        #If we don't already have a player
        if self.needPlayer:

            self.player = Player()
            self.needPlayer = False

        #Display HUD and set default stats    
        self.player.show()
        self.player.resetEnergy()
        
        #Load first environment
        self.environ = self.loader.loadModel("./resources/theSouthBridge")
        self.environ.reparentTo(self.render)
        self.environ.setScale(7, 7, 3)
        
        #Load skybox
        self.skybox = loader.loadModel("resources/skyBox")
        self.skyboxPath = NodePath(self.skybox)
        self.skyboxPath.setCompass()
        self.skybox.setBin('background',1)
        self.skybox.setDepthWrite(False)
        self.skybox.setLightOff()
        self.skybox.reparentTo(camera)
        
        #Global current player spawn coordinates
        self.xPos = 0
        self.yPos = 0
        self.zPos = 3
        
        #Create level changer
        self.levelChanger = LevelChanger()
        
        #Check to see if load game was pressed
        if load:

            self.levelChanger.goToBoss()
            #Create spawner open on current level
            self.spawner = Spawner(self.environ, "theRoot")
        else:

            #Create spawner open on current level
            self.spawner = Spawner(self.environ, "theSouthBridge")

        #Populate level with enemies
        self.spawner.spawn()
        
        #Add tasks
        #base.taskMgr.add(self.spawner.checkSpawn, "Spawn Enemies", taskChain='GameTasks')
        base.taskMgr.add(self.projCleanTask, "Projectile Clean Up", taskChain='GameTasks')
        base.taskMgr.add(self.enemyCleanUp, "enemyCleanup", taskChain='GameTasks')
        base.taskMgr.add(self.levelChanger.checkLevel, "checkLevel", taskChain='GameTasks')
        base.taskMgr.add(self.pickupClean, "Pickup celeanup", taskChain='GameTasks')
        
        #Get movement controls from config file
        self.forward = self.configList[0].split("=")[1].translate(None,"\n")
        self.backward = self.configList[1].split("=")[1].translate(None,"\n")
        self.left = self.configList[2].split("=")[1].translate(None,"\n")
        self.right = self.configList[3].split("=")[1].translate(None,"\n")

        #Controls
        self.accept("escape", sys.exit, [0])
        self.accept("enter", self.startPause)
        
        #Set Controls
        self.accept(self.forward, self.setKey, ["forward", True])
        self.accept(self.backward, self.setKey, ["backward", True])
        self.accept(self.left, self.setKey, ["left", True])
        self.accept(self.right, self.setKey, ["right", True])
        
        self.accept(self.forward+"-up", self.setKey, ["forward", False])
        self.accept(self.backward+"-up", self.setKey, ["backward", False])
        self.accept(self.left+"-up", self.setKey, ["left", False])
        self.accept(self.right+"-up", self.setKey, ["right", False])
Ejemplo n.º 16
0
class GameStart(ShowBase):
   
    #Lists for storing entities
    projectileList = []
    enemyList = []
    pickuplist = []        
    #Initialize keys
    keyMap = {"forward":False, "backward":False, "left":False, "right":False, "m":False}
    fsm = 0
    levelChanger = 0
    player = 0
    
    def __init__(self):
        
        #Start ShowBase
        ShowBase.__init__(self)
        
        #Set up task chain for game play
        base.taskMgr.setupTaskChain('GameTasks')
        
        #Flag to see if a player has already been spawned
        self.needPlayer = True
        
        #Load in all menu images. If the don't all get set initially, it stutters on switch,
        self.mainMenuImage = OnscreenImage("./resources/mainMenu1.png")
        self.mainMenuImage.setImage("./resources/mainMenu2.png")
        self.mainMenuImage.reparentTo(render2d)
        self.gameOverImage = OnscreenImage("./resources/gameOver1.png")
        self.gameOverImage.setImage("./resources/gameOver2.png")
        self.gameOverImage.reparentTo(render2d)
        self.gameOverImage.hide()
        self.victoryImage = OnscreenImage("./resources/victory1.png")
        self.victoryImage.setImage("./resources/victory2.png")
        self.victoryImage.reparentTo(render2d)
        self.victoryImage.hide()


        #start FSM
        self.fsm = TerminalZoneFSM()
        
        #Open file to get configs
        self.configFile = open("config.txt")
        self.configList = self.configFile.readlines()
        self.configFile.close()
        
        #Get and set resolution
        properties = WindowProperties()
        self.xRes = self.configList[4].split("=")[1].translate(None,"\n")
        self.yRes = self.configList[5].split("=")[1].translate(None,"\n")
        properties.setSize(int(self.xRes), int(self.yRes))
        base.win.requestProperties(properties)

        #Determine prepare to cry mode
        if self.configList[7].split("=")[1].translate(None,"\n") == "True":
            self.damageMod = 2
        else:
            self.damageMod = 1

        #Starts main menu
        self.fsm.request('MainMenu', 1)
        
    def startNewGame(self, load):
        
        #Hide menu background on start of game.
        self.mainMenuImage.hide()
    
        #Get window properties, hide the cursor, set properties
        properties = WindowProperties()
        properties.setCursorHidden(True)
        base.win.requestProperties(properties)
        
        #Disable default mouse controls
        self.disableMouse()

        #Create new collision system
        base.cTrav = CollisionTraverser()
        base.pusher = CollisionHandlerPusher()
        
        #Init player here
        #If we don't already have a player
        if self.needPlayer:

            self.player = Player()
            self.needPlayer = False

        #Display HUD and set default stats    
        self.player.show()
        self.player.resetEnergy()
        
        #Load first environment
        self.environ = self.loader.loadModel("./resources/theSouthBridge")
        self.environ.reparentTo(self.render)
        self.environ.setScale(7, 7, 3)
        
        #Load skybox
        self.skybox = loader.loadModel("resources/skyBox")
        self.skyboxPath = NodePath(self.skybox)
        self.skyboxPath.setCompass()
        self.skybox.setBin('background',1)
        self.skybox.setDepthWrite(False)
        self.skybox.setLightOff()
        self.skybox.reparentTo(camera)
        
        #Global current player spawn coordinates
        self.xPos = 0
        self.yPos = 0
        self.zPos = 3
        
        #Create level changer
        self.levelChanger = LevelChanger()
        
        #Check to see if load game was pressed
        if load:

            self.levelChanger.goToBoss()
            #Create spawner open on current level
            self.spawner = Spawner(self.environ, "theRoot")
        else:

            #Create spawner open on current level
            self.spawner = Spawner(self.environ, "theSouthBridge")

        #Populate level with enemies
        self.spawner.spawn()
        
        #Add tasks
        #base.taskMgr.add(self.spawner.checkSpawn, "Spawn Enemies", taskChain='GameTasks')
        base.taskMgr.add(self.projCleanTask, "Projectile Clean Up", taskChain='GameTasks')
        base.taskMgr.add(self.enemyCleanUp, "enemyCleanup", taskChain='GameTasks')
        base.taskMgr.add(self.levelChanger.checkLevel, "checkLevel", taskChain='GameTasks')
        base.taskMgr.add(self.pickupClean, "Pickup celeanup", taskChain='GameTasks')
        
        #Get movement controls from config file
        self.forward = self.configList[0].split("=")[1].translate(None,"\n")
        self.backward = self.configList[1].split("=")[1].translate(None,"\n")
        self.left = self.configList[2].split("=")[1].translate(None,"\n")
        self.right = self.configList[3].split("=")[1].translate(None,"\n")

        #Controls
        self.accept("escape", sys.exit, [0])
        self.accept("enter", self.startPause)
        
        #Set Controls
        self.accept(self.forward, self.setKey, ["forward", True])
        self.accept(self.backward, self.setKey, ["backward", True])
        self.accept(self.left, self.setKey, ["left", True])
        self.accept(self.right, self.setKey, ["right", True])
        
        self.accept(self.forward+"-up", self.setKey, ["forward", False])
        self.accept(self.backward+"-up", self.setKey, ["backward", False])
        self.accept(self.left+"-up", self.setKey, ["left", False])
        self.accept(self.right+"-up", self.setKey, ["right", False])
    
    # Changes the states of the keys pressed
    def setKey(self, key, value):
        self.keyMap[key] = value

    #Spawn and append pickups to the list
    def spawnPickup(self, id, node):
         
         n = Pickup(id, node)
         self.pickuplist.append(n)

    #Cleans projectiles after impact and specified duration
    def projCleanTask(self, task):
        
        #using this task to find all the projectiles in the projList
        #that have reached the end of their lifespan
        #use the built in destroy to remove them
        for i in self.projectileList:   
            
            if i.flag:
                
                i.projectileNode.removeNode()
                self.projectileList.remove(i)
        return task.cont
    
    #Clears pickups from the environment after collection
    def pickupClean(self, task):

        for i in self.pickuplist:
            
            if i.deletePickup:
                
                i.destroy()
                self.pickuplist.remove(i)
        return task.cont

    #Clears enemies from the environment after being killed or upon player death
    def enemyCleanUp(self, task):

        self.levelChanger.checkLevel(task)
        
        #Remove flagged enemies
        for i in self.enemyList:
           
           if i.delFlag:
               
                #i.enemyNode.removeNode()
                i.destroy()
                self.enemyList.remove(i)
                #self.spawner.spawnableCount-=1
        return task.cont
        
    #Requests pause from the fsm
    def startPause(self):

        self.fsm.request('PauseMenu')
    
    #Handles the delay between menu image swaps
    def menusTasks(self, s, task):

        if task.time > .75:
            if s == "mainmenu1":
                base.fsm.request('MainMenu', 2)
            elif s == "mainmenu2":
                base.fsm.request('MainMenu', 1)
            elif s == "gameover1":
                base.fsm.request('GameOver', 2)
            elif s == "gameover2":
                base.fsm.request('GameOver', 1)
            elif s == "winmenu1":
                base.fsm.request('WinMenu', 2)
            elif s == "winmenu2":
                base.fsm.request('WinMenu', 1)
        return task.cont
Ejemplo n.º 17
0
import pygame
from player import Player
from spawner import Spawner
from menu import Menu

pygame.init()

player = Player()
spawner = Spawner()

menu = Menu()
menu.game_run(player, spawner)
Ejemplo n.º 18
0
def main():
    """
    Main game logic loop.
    """

    containerTextStyle = {
        'color': '#ffffff',
        'font': '10px',
        'stroke': '#000000',
        'strokeWidth': .15
    }
    spawnerRole = Spawner()
    # Clean up memory
    for creepName in Object.keys(Memory.creeps):
        if not Game.creeps[creepName]:
            if Memory.creeps[creepName].role == "remoteHarvester":
                print("Cleaning up remoteHarvester. It mined: " +
                      Memory.creeps[creepName].totalHarvested)
            del Memory.creeps[creepName]
            #print("Clearing non-existent creep memory: " + creepName)

    if Game.cpu.bucket == 10000:
        Game.cpu.generatePixel()
    # Run each creep
    for name in Object.keys(Game.creeps):
        creep = Game.creeps[name]
        if creep.memory.role in Spawner.roles:
            Spawner.roles[creep.memory.role].run(creep)
        else:
            creep.say("No role")

    # Run tower code
    homeRoom = Object.values(Game.spawns)[0].room
    towers = [
        struct for room in Object.values(Game.rooms)
        for struct in room.find(FIND_STRUCTURES)
        if struct.structureType == STRUCTURE_TOWER
    ]
    hostiles = homeRoom.find(FIND_HOSTILE_CREEPS)
    for tower in towers:
        structures = sorted([
            struct for struct in tower.room.find(FIND_STRUCTURES)
            if struct.hits < struct.hitsMax
        ],
                            key=lambda struct: struct.hits)
        if len(hostiles) > 0:
            tower.attack(tower.pos.findClosestByPath(hostiles))
            continue

        for structure in structures:
            if structure.hits < structure.hitsMax and structure.hits < 100000:
                tower.repair(structure)
                break

    # Run visuals
    for room in Object.values(Game.rooms):
        for container in [
                struct for struct in room.find(FIND_STRUCTURES)
                if struct.structureType == STRUCTURE_CONTAINER
                or struct.structureType == STRUCTURE_STORAGE
        ]:
            room.visual.text(
                Spawner.roles['harvester'].getStructureFutureEnergy(container),
                container.pos, containerTextStyle)

    # Run each spawn
    for name in Object.keys(Game.spawns)[0:1]:
        spawn = Game.spawns[name]
        spawnerRole.run(spawn)
Ejemplo n.º 19
0
import pickle

pygame.init()

objects = []
mousex = 0
mousey = 0
width = 800
height = 800
size = width, height
lives = 3
font = pygame.font.Font('freesansbold.ttf', 32)
screen = pygame.display.set_mode(size)
game_running = True
move1 = False
s = Spawner(width, height)
round_num = 1
fire_cooldown = 0
score = 0

pygame.display.set_caption('Asteriods')


def game_over():
    if score > get_high_score():
        with open('score.bat', 'wb') as file:
            pickle.dump(score, file)
            print("New High Score!")
    else:
        print("All time high score is " + str(get_high_score()))
Ejemplo n.º 20
0
from spawner import Spawner
from genetic_algo import GeneticAlgo

population_size = 1000

a = Spawner()
generation = a.spawn_generation('tomallpress', population_size)

c = GeneticAlgo(population_size, 0.01, 'tomallpress', 100, 1)
for i in range(20):
    generation = c.get_next_generation(generation)

print(generation.display())
Ejemplo n.º 21
0
def main():

    # Initial setup:
    pygame.init()
    pygame.display.set_mode(config.resolution, DOUBLEBUF | OPENGL)
    gluPerspective(config.camera_fov, config.resolution[0] / config.resolution[1], 0.1, 50.0)
    glTranslatef(0, 0, config.camera_z)

    # Entities
    simulated = list()
    drawn = list()

    test_cube = Entity((0, 0, 0))
    move = 0.5
    drawn.append(test_cube)

    asteroid_spawner = Spawner(drawn, simulated, Asteroid, 2)

    wait_t = int(config.delta_t*1000)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    quit()

                if event.key == pygame.K_w:
                    test_cube.pos = add(test_cube.pos, (0, move, 0))
                if event.key == pygame.K_s:
                    test_cube.pos = add(test_cube.pos, (0, -move, 0))
                if event.key == pygame.K_a:
                    test_cube.pos = add(test_cube.pos, ( -move, 0, 0))
                if event.key == pygame.K_d:
                    test_cube.pos = add(test_cube.pos, (move, 0, 0))

                print("x: {} y: {} z: {}".format(test_cube.pos[0], test_cube.pos[1], test_cube.pos[2]))

        for entity in simulated:
            entity.sim()
        asteroid_spawner.sim()

        # Collisions

        # Despawn
        for entity in simulated:
            if entity.pos[0] < config.x_min - config.margin:
                simulated.remove(entity)
                drawn.remove(entity)

        mouse_pos = get_input()
        test_cube.pos = (mouse_pos[0], mouse_pos[1], 0)

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        for entity in drawn:
            entity.draw()
        pygame.display.flip()
        pygame.time.wait(wait_t)
Ejemplo n.º 22
0
class World(object):
    
    # publicly accesible constants
    
    COLORS = (
        (189, 125, 15),
        (125, 15, 188),
        (15, 188, 125)
    )
    
    G = 1000   # gravitational constant
    
    MAX_NODES = 8
    PARTICLE_COUNT = 100
    
    def __init__(self, surface):
        self.surface = surface
        self.width = surface.get_width()
        self.height = surface.get_height()
        
        self.reverseGravity = False
        
        self.sprites = []
        
        self.player = Player(world = self, position = [self.width / 2, self.height / 2])
        self.add(self.player)
        
        self.background = BACKGROUND
        
        self.spawner = Spawner(self)
        for i in range(self.MAX_NODES):
            self.add(self.spawner.spawn())
        
        self.text = Text(self)
              
        self.collisionSound = mixer.Sound("resources/chime.aif")
        self.hitSounds = []
        for i in range(1, HITS + 1):
            self.hitSounds.append(mixer.Sound("resources/hit" + str(i) + ".aif"))
    
    def add(self, sprite):
        self.sprites.append(sprite)
        self.sprites = sorted(self.sprites, key = lambda d: d.drawDepth)

    def addParticle(self):
        position = [randint(0, self.width), randint(0, self.height)]
        self.add(Particle(self, position))
    
    def update(self, millis):
        keys = key.get_pressed()
        self.reverseGravity = keys[pygame.K_LSHIFT] or keys[pygame.K_SPACE]
        
        self.text.update(millis)
        
        for sprite in self.sprites:
            sprite.update(millis)
    
    def draw(self):
        self.surface.fill(self.background)
        self.text.draw(self.surface)
        
        for sprite in self.sprites:
            sprite.draw(self.surface)        
    
    def playerNodeCollide(self, node):
        if self.text.tutorial == 0: self.text.nextTutorial()
        self.player.score(node)
        self.sprites.remove(node)
        self.add(self.spawner.spawn())
        self.dink(self.player, node)
    
    def nodeNodeCollide(self, node1, node2):
        if node1.color == node2.color:
            color = choice((node1.color, node2.color))
            velocity = [ node1.velocity[0] + node2.velocity[0],
                         node1.velocity[1] + node2.velocity[1] ]
            position = [ node1.position[0] + (node1.position[0] - node2.position[0]) / 2,
                         node1.position[1] + (node1.position[1] - node2.position[1]) / 2 ]
            mass = node1.mass + node2.mass
            density = (node1.density + node2.density) / 2
        
            self.sprites.remove(node1)
            self.sprites.remove(node2)
            self.add(Node(
                world = self,
                color = color,
                position = position,
                velocity = velocity,
                mass = mass,
                density = density,
            ))
    
    def dong(self):
        self.collisionSound.play()
    
    def dink(self, ball1, ball2):
        diff = [ball1.velocity[0] - ball2.velocity[0], ball1.velocity[1] - ball2.velocity[1]]
        dist = sqrt(diff[0]**2 + diff[1]**2)
        volume = dist / 800
        if volume > 1: volume = 1
        sound = choice(self.hitSounds)
        sound.set_volume(volume)
        sound.play()
Ejemplo n.º 23
0
class PhysicsState:

    instance_num = 0

    def update_ball_vels(self, ball_inputs):
        vels = []
        ids = self.balls.get_ids()
        for ball_index in range(len(ids)):
            input_index = ids[ball_index]
            input = ball_inputs[input_index]
            # The AI needs to know everything that could possibly
            # affect the ball - that is, the whole const PhysicsState -
            # so pass `self`.
            # Also give a ball index to the input so the AI knows
            # which ball it's controlling.
            vel = input.calc_vel(ball_index, self)
            vels.append(vel)
        self.invalidate_public_data()
        self.balls.set_vels(vels)

    def get_nearest_ball_sqr_dist(self, pos):
        # TODO: `sqr_dist` should be shortest path distance.
        nearest_ball_pos, sqr_dist = get_nearest(pos, self.balls.get_poss())
        return sqr_dist

    def can_add_mine(self, pos):
        is_collision = (self.wall.is_circle_collision(pos, self.mines.rad))
        sqr_dist = self.get_nearest_ball_sqr_dist(pos)
        return self.spawner.can_add_mine(sqr_dist) and not is_collision

    def maybe_add_mine(self, mine_input):

        pos = mine_input.calc_pos(self) # const self
        self.invalidate_public_data()
        if not pos:
            return

        sqr_dist = self.get_nearest_ball_sqr_dist(pos)
        if not self.spawner.try_add_mine(pos, sqr_dist):
            # TODO: Notify of failure to spawn mine at `pos`.
            pass

    def maybe_spawn_mine(self):
        pos = self.spawner.try_take_live_mine()
        if pos is not None:
            self.mines.add(pos)

    # For SimplePhysicsState:
    # def move_mines_without_walls(self, dt): # Mines could be moved in parallel.
    #     for i in range(0, len(self.mine_poss)):
    #         self.update_mine_vel(i, self.ball_pos)
    #         self.mine_poss[i] += vec_scale(self.mine_vels[i], dt)

# Public (including constants):

    def reset(self, initial_wall_bitmap):

        assert(self.can_mutate)

        self.elapsed_time = KahanSum()

        # TODO: switches and goals and hives
        self.wall.reset(initial_wall_bitmap)
        self.spawner.reset()
        self.balls.reset()
        self.mines.reset()

    def __init__(self, world):

        self.id = type(self).instance_num # const and public
        type(self).instance_num += 1

        # TODO: switches and goals and hives
        self.spawner = Spawner(world)
        self.wall    = Wall(world)
        self.mines   = Mines(world)
        self.balls   = Balls(world)

        self.elapsed_time = KahanSum()

        self.can_mutate = True

    # `get_*` functions return constant values (including elements of lists).

    # If public data has been retrieved by, for example, calling
    # `physics_state.get_mines`, then it must be invalidated before
    # mutating the PhysicsState (for example, by calling `advance`).
    # After invalidation, `get_mines` must be called again for new data.
    def invalidate_public_data(self):
        self.can_mutate = True

    def get_elapsed_time(self):
        return self.elapsed_time.get()

    def get_mines(self):
        self.can_mutate = False
        return self.mines

    def get_balls(self):
        self.can_mutate = False
        return self.balls

    def get_spawner(self):
        self.can_mutate = False
        return self.spawner     # Also constant - can't spawn mines.

    def get_wall(self):
        self.can_mutate = False
        return self.wall

    # TODO: switches, goals, hives

    def has_finished(self):
        arent_any_balls = (len(self.balls.get_poss()) == 0)
        are_all_goals_reached = False # TODO
        return arent_any_balls or are_all_goals_reached

    def toggle_invincible_balls(self):
        assert(self.can_mutate)
        self.balls.toggle_invincibility()

    def advance(self, mine_input, ball_inputs, dt):

        assert(self.can_mutate)

        if self.has_finished():
            return False

        # Simulate spawner.
        self.spawner.advance(dt)
        self.maybe_spawn_mine()

        # Use inputs.
        self.update_ball_vels(ball_inputs)
        self.maybe_add_mine(mine_input)    # Allow AI to prevent explosion.
        if self.spawner.is_exploding():
            self.mines.explode()

        # Simulate balls.
        self.balls.advance(self.wall, dt)

        # Simulate mines.
        ball_poss = self.balls.get_poss()
        self.mines.advance(ball_poss, self.wall, dt)

        # Simulate ball-mine collisions.
        collisions = self.mines.find_ball_collisions(ball_poss, self.balls.rad)
        self.balls.update_collided(collisions)
        if any(collisions):
            print('time:\t' + str(self.get_elapsed_time())) # For debugging

        # Finish step.
        self.elapsed_time.add(dt)
        return True
Ejemplo n.º 24
0
    def run(self):

        player = Player((Settings.WIDTH // 2, Settings.HEIGHT // 2))
        if Settings.AGENT_PLAYER:
            player.attach_controller(AgentController(player))
        else:
            player.attach_controller(
                HumanController(player, {
                    "FORWARD": pg.K_w,
                    "BACKWARD": pg.K_s
                }))

        if Settings.AGENT_PLAYER:
            episode = player.controller.agent.current_episode
            start_time = t.time()

        l = 0

        while True:

            player.reset((Settings.WIDTH // 2, Settings.HEIGHT // 2))

            if Settings.AGENT_PLAYER:
                player.controller.reset_training_data()

            # 0: Players, 1: Player Projectiles, 2: Enemies, 3: Enemy Projectiles
            self.env = {0: [player], 1: [], 2: [], 3: []}
            self.spawner = Spawner(self.env)

            ScoreManager.SCORE = 0

            while True:

                e = pg.event.poll()

                if (e.type == pg.QUIT):
                    quit(0)

                deleted_elements = []
                collidable_elements = []
                ScoreManager.TRIGGER = 0

                # Check Collisions
                for key in self.env:
                    collidable_elements += self.env[key]
                for i in range(len(collidable_elements)):
                    for j in range(i + 1, len(collidable_elements)):
                        result = collidable_elements[i].check_collide(
                            collidable_elements[j])
                        if (result):
                            collidable_elements[i].on_collide(
                                collidable_elements[j])
                            collidable_elements[j].on_collide(
                                collidable_elements[i])

                # Handle all GameObjects
                for key in self.env:
                    for obj in self.env[key]:
                        if obj.destroyed:
                            deleted_elements.append((obj, key))
                            continue

                        if key % 2 == 0:  # Controllable
                            obj.controller.handle(e, self.env)
                        else:  # Projectile
                            obj.step()

                self._delete_elements(deleted_elements)

                if player.destroyed:  # Player dead
                    if Settings.AGENT_PLAYER:
                        player.controller.add_reward(Settings.DIE_REWARD)
                    break
                else:
                    if Settings.AGENT_PLAYER:
                        reward = Settings.ALIVE_REWARD
                        if ScoreManager.TRIGGER:
                            reward += Settings.KILL_REWARD
                        player.controller.add_reward(reward)

                self.spawner.spawn()

                self._render_all()

                # Use to control the frame rate of the game
                # Disable while training to make training faster
                # t.sleep(1/Settings.FRAME_RATE)

                # Use to save screen:
                # l += 1
                # pg.image.save(self.screen, f"../resources/generated_images/{Settings.LOAD_MODEL_EPISODE}/model-{Settings.LOAD_MODEL_EPISODE}-{l}.png")

            if Settings.AGENT_PLAYER and Settings.TRAINING_MODE:
                episode += 1
                player.controller.train_wrapper(episode)
                elapsed_time = t.time() - start_time
                time_str = t.strftime("%H:%M:%S", t.gmtime(elapsed_time))
                output_string = "Episode: {:0>4} Score: {:0>5} Reward: {:07.3f} T+: {}".format(
                    episode, ScoreManager.SCORE,
                    sum(player.controller.rewards), time_str)
                print(output_string)
            else:
                print(f"Game Over. Score: {ScoreManager.SCORE}")