Ejemplo n.º 1
0
def concurrent_sim(base_opts,
                   small_opts,
                   user_opts,
                   sim_opts,
                   geometry,
                   cli_args,
                   queue,
                   seed,
                   name=""):
    """Run one concurrent instance of a simulation. All printing is done to a
    named file instead of stdout to avoid nonsensical cluttering by multiple
    threads."""
    # redirect stdout
    filename = name if name != "" else "pid_{}.txt".format(os.getpid())
    sys.stdout = open(filename, mode="w")

    # precompute random values (for performance)
    # must be done for each process
    np.random.seed(seed)
    rf.init_shadowing(sim_opts, geometry)
    max_possible_dails = sim_opts.num_users * sim_opts.iterations
    rf.init_call_probabilities(max_possible_dails, sim_opts.call_rate)

    # set up simulation
    base_station = twr.Tower(base_opts)
    small_cell = twr.Tower(small_opts)
    users = usr.init_users(sim_opts.num_users, user_opts)

    # simulate normally
    stats = simulate(base_station, small_cell, users, geometry, sim_opts,
                     cli_args)
    # save statistics
    queue.put(stats)
Ejemplo n.º 2
0
def initialize():
    t1 = tower.Tower(1)
    t2 = tower.Tower(2)
    t3 = tower.Tower(3)

    for disk in range(5, 0, -1):
        t1.loadDisk(disk)
    return t1, t2, t3
Ejemplo n.º 3
0
 def __init__(self, gameDisplay):
     self.gameDisplay = gameDisplay
     self.towers = [
         tower.Tower(gameDisplay, 150, 400, (255, 0, 0)),
         tower.Tower(gameDisplay, 400, 400, (0, 255, 0)),
         tower.Tower(gameDisplay, 650, 400, (0, 0, 255))
     ]
     firstTower = self.towers[0]
     firstTower.addDisc(disc.Disc(150, (125, 125, 125)))
     firstTower.addDisc(disc.Disc(100, (125, 125, 0)))
     firstTower.addDisc(disc.Disc(50, (125, 0, 0)))
Ejemplo n.º 4
0
 def __init__(self):
     print("in toh.init")
     towerA = tower.Tower("1", referenceX, 'YELLOW')
     towerA.addDisc(discFactory.DiscFactory(referenceX).getLarge())
     towerA.addDisc(discFactory.DiscFactory(referenceX).getMedium())
     towerA.addDisc(discFactory.DiscFactory(referenceX).getSmall())
     self.towers = [
         towerA,
         tower.Tower("2", referenceX, 'MAGENTA'),
         tower.Tower("3", referenceX, 'CYAN')
     ]
     self.moveCount = 0
Ejemplo n.º 5
0
    def update(self, board, cash):
        pressed, pos = pygame.mouse.get_pressed(), pygame.mouse.get_pos()
        keys = pygame.key.get_pressed()

        #Drawing the selection of towers
        for j in range(4):
            for i in range(2):
                if 660+i*100 <= pos[0] <= 660+i*100+60 and 150+j*70 <= pos[1] <= 150+j*70+60 and pressed[0] == 1:
                    self.selected = i+j*2+1
                    self.cooldown = 20

        #Displays costs of certain towers
        if self.selected != 0:
            gameDisplay.blit(font_20.render(str(self.names[self.selected-1]), True, (0, 0, 0)), (
                740-int(font_20.size(str(self.names[self.selected-1]))[0]/2), 425))
            gameDisplay.blit(font_20.render("Cost: " + str(self.Costs[self.selected-1]), True, (0, 0, 0)), (690, 450))


        #Buying a new tower
        if self.cooldown <= 0 and self.selected != 0 and 0 <= pos[0] <= 640 and 0 <= pos[1] <= 480 and pressed[0] == 1:
            if board[int(pos[1]/40)][int(pos[0]/40)] == 0 and cash >= self.Costs[self.selected-1]:
                board[int(pos[1]/40)][int(pos[0]/40)] = tower.Tower(int(pos[0]/40)*40+5, int(pos[1]/40)*40+5, self.selected)
                board[int(pos[1]/40)][int(pos[0]/40)].selected = True
                cash -= self.Costs[self.selected-1]
                self.bought = 1
                if keys[303] != 1 and keys[304] != 1:
                    self.selected = 0
        else:
            self.cooldown -= 1

        if keys[303] != 1 and keys[304] != 1 and self.bought != 0:
            self.selected = 0
            self.bought = 0

        return board, cash
Ejemplo n.º 6
0
    def test_format(self):
        t = tower.Tower()
        d3 = tower.Disk(3)
        d5 = tower.Disk(5)
        t.add(d5)
        t.add(d3)

        f = t.vertical_format(6, 3)
        self.assertEqual(f, ["      ", "[ 3 ] ", "[ 5 ] "])
Ejemplo n.º 7
0
    def setUp(self):
        self.color = (0, 0, 255)
        self.position = (15, 25)
        self.dimension = (80, 90)
        self.attack_radius = 10
        self.cost = 60
        self.DISPLAYSURF = pygame.Surface([150, 160])

        self.t = tower.Tower(self.color, self.position, self.dimension,
                             self.cost, self.DISPLAYSURF)
Ejemplo n.º 8
0
    def test_init(self, mock_pygame_draw_circle):
        self.t = tower.Tower(self.color, self.position, self.dimension,
                             self.cost, self.DISPLAYSURF)

        self.assertEqual(self.t.DISPLAYSURF, self.DISPLAYSURF)
        self.assertEqual(self.t.image.get_width(), 80)
        self.assertEqual(self.t.image.get_height(), 90)
        self.assertEqual(self.t.image.get_at((5, 5)), (0, 0, 255, 255))
        self.assertEqual(self.t.rect.centerx, 15)
        self.assertEqual(self.t.rect.centery, 25)
Ejemplo n.º 9
0
    def test_something(self):
        t = tower.Tower()
        self.assertTrue(t.empty())

        d = tower.Disk(3)
        t.add(d)
        self.assertFalse(t.empty())

        d5 = tower.Disk(5)
        self.assertRaises(Exception, t.add, d5)
        self.assertFalse(t.empty())
Ejemplo n.º 10
0
    def test_oksize(self):
        t = tower.Tower()
        self.assertTrue(t.empty())

        d5 = tower.Disk(5)
        t.add(d5)
        self.assertFalse(t.empty())

        d3 = tower.Disk(3)
        t.add(d3)
        self.assertFalse(t.empty())

        self.assertEqual(t.top(), d3)
        self.assertEqual(t.pop(), d3)
        self.assertEqual(t.pop(), d5)
Ejemplo n.º 11
0
    def generate_field():
        held_positions = []
        towers = []
        for i in range(5):
            pos = random.randint(0, 49)
            while pos in held_positions:
                pos = random.randint(0, 49)
            held_positions.append(pos)
            fp = random.randint(3, 8)
            lr = random.randint(0, 2)
            t = tower.Tower(pos, fp, lr)
            towers.append(t)

        field = Field(towers)
        return field
Ejemplo n.º 12
0
def game_loop(load):
    """Main Function"""

    width, height = 16, 12
    Board = setup_Board([[0]*width for _ in range(height)])
    Lives, Cash = 100, 750
    selection = Selection()
    score = 0
    startButton = Start()
    Images = load_images("Images")
    abilityCooldown = False
    settings = Settings()
    cooldown = 100

    #Generating each of the waves
    wave = 1

    #Loading your save file
    if load:
        file = open("SaveFile/saveFile.txt", "r")
        data = file.readline().split("#")
        if len(data) >= 197:
            count = 0
            #Loading all the tiles
            for j, row in enumerate(Board):
                    for i, tile in enumerate(row):
                        if data[count] == "2":
                            count += 1
                            #Loading all variables for a tower
                            Board[j][i] = tower.Tower(i*40+5, j*40+5, int(data[count]))
                            Board[j][i].pops = int(data[count+1])
                            Board[j][i].score = int(data[count+2])
                            Board[j][i].pierce = int(data[count+3])
                            Board[j][i].damage = int(data[count+4])
                            Board[j][i].speed = float(data[count+5])
                            Board[j][i].shotAmount = int(data[count+6])
                            Board[j][i].size = int(data[count+7])
                            Board[j][i].path = int(data[count+8])
                            Board[j][i].seeking = data[count+9] == "True"
                            Board[j][i].bulletSpeed = float(data[count+10])
                            Board[j][i].camo = data[count+11] == "True"
                            Board[j][i].dead = data[count+12] == "True"
                            Board[j][i].fireDamage = int(data[count+13])
                            Board[j][i].fireLength = float(data[count+14])
                            Board[j][i].fireLasting = float(data[count+15])
                            Board[j][i].Permaslow = data[count+16] == "True"
                            Board[j][i].slowAmount = float(data[count+17])
                            Board[j][i].ExplodeTime = float(data[count+18])
                            Board[j][i].bombRange = float(data[count+19])
                            Board[j][i].crateValue = int(data[count+20])
                            Board[j][i].autoCollect = data[count+21] == "True"
                            Board[j][i].expireTime = int(data[count+22])
                            Board[j][i].glaiveCount = int(data[count+23])
                            Board[j][i].glaiveSpeed = float(data[count+24])
                            Board[j][i].glaiveRings = int(data[count+25])
                            Board[j][i].selected = False
                            Board[j][i].value = int(data[count+26])
                            Board[j][i].range = float(data[count+27])
                            count += 28


                            #Loads all upgrades
                            for h, item in enumerate(Board[j][i].upgrades):
                                for g, subItem in enumerate(item):
                                    Board[j][i].upgrades[h][g] = int(data[count])
                                    count += 1
                  
                            Board[j][i].currentUpgrade = [int(data[count]), int(data[count+1])]
                            count += 2

                            for item in Board[j][i].ability:
                                Board[j][i].ability.append([data[count], int(data[count+1]), int(data[count+2]), int(data[count+3])])
                                count += 4

                        else:
                            Board[j][i] = int(data[count])
                            count += 1

            Cash = int(data[count])
            Lives = int(data[count+1])
            settings.autoPlay.switch = data[count+3] == "True"
            score = int(data[count+2])
            wave = int(data[count+4])
            count += 5
        else:
            print("Invalid Save File")

    #Generating the monsters
    Monsters = waves.genEnemies(wave, Images)
          
    game_run = True
    while game_run:

        #Grabbing mouse cordinates
        pos = pygame.mouse.get_pos()

        gameDisplay.fill((130,90,50))

        #Drawing the background
        for j, row in enumerate(Board):
            for i, tile in enumerate(row):
                if Board[j][i] == 0:
                    Color = (0, 150, 0)
                elif Board[j][i] == 1:
                    Color = (210, 180, 140)
                else:
                    Color = (0, 150, 0)
                pygame.draw.rect(gameDisplay, Color, (i*40,j*40,40,40), 0)
                pygame.draw.rect(gameDisplay, (0, 150, 0), (i*40, j*40, 40, 40), 1)

        #Updating all monsters on the board:
        for monster in Monsters:
            if monster[1] > 0:
                monster[1] -= 1*startButton.speed
            else:
                if monster[0].dead:
                    Monsters.pop(Monsters.index(monster))
                else:
                    Lives = monster[0].update(Lives, startButton.speed, gameDisplay)
                    if monster[0].duplicate:
                        monster[0].duplicate = False
                        tempMonster = [monsters.Monster(5,wave,monster[0].camo, Images),monster[1]-30]
                        tempMonster[0].x, tempMonster[0].y = monster[0].x, monster[0].y
                        tempMonster[0].step = monster[0].step
                        tempMonster[0].cooldown = 5
                        tempMonster[0].hit = monster[0].hit
                        tempMonster[0].fire = monster[0].fire
                        tempMonster[0].speedModifier = monster[0].speedModifier
                        Monsters.append(tempMonster)
                    if len(monster[0].addMonster) != 0:
                        for i, mons in enumerate(monster[0].addMonster):
                            tempMonster = [monsters.Monster(mons,wave,monster[0].camo, Images),monster[1]-30*(i+1)]
                            tempMonster[0].x, tempMonster[0].y = monster[0].x, monster[0].y
                            tempMonster[0].step = monster[0].step
                            tempMonster[0].cooldown = 5
                            tempMonster[0].hit = monster[0].hit
                            tempMonster[0].fire = monster[0].fire
                            tempMonster[0].speedModifier = monster[0].speedModifier
                            Monsters.append(tempMonster)
                    monster[0].addMonster = []
                                
        if len(Monsters) == 0:

            #Starting the new wave
            Cash += 100+wave+1
            wave += 1
            Monsters = waves.genEnemies(wave, Images)
            if not settings.autoPlay.switch:
                startButton.speed = 0
            for j, row in enumerate(Board):
                for i, tile in enumerate(row):
                    try:
                        tile = int(tile)
                    except Exception:
                        tile.Projectiles = []

            #Saving after a wave ends
            data = ""
            for j, row in enumerate(Board):
                for i, tile in enumerate(row):
                    stop = False
                    try:
                        tile = int(tile)
                    except Exception:
                        data += "2" + "#"
                        for item in [tile.rank, tile.pops, tile.score, tile.pierce, tile.damage, tile.speed, tile.shotAmount, tile.size, tile.path, tile.seeking,
                                     tile.bulletSpeed, tile.camo, tile.dead, tile.fireDamage, tile.fireLength, tile.fireLasting, tile.Permaslow, tile.slowAmount,
                                     tile.ExplodeTime, tile.bombRange, tile.crateValue, tile.autoCollect, tile.expireTime, tile.glaiveCount, tile.glaiveSpeed,
                                     tile.glaiveRings, tile.value, tile.range]:
                            data += str(item) + "#"
                        for item in tile.upgrades:
                            for subItem in item:
                                data += str(subItem) + "#"
                        for item in tile.currentUpgrade:
                            data += str(item) + "#"
                        for ability in tile.ability:
                            for item in ability:
                                data += str(item) + "#"
                        stop = True
                    if not stop:
                        data += str(tile) + "#"

            data += str(Cash) + "#"
            data += str(Lives) + "#"
            data += str(score) + "#"
            data += str(settings.autoPlay.switch) + "#"
            data += str(wave) + "#"

            file = open("SaveFile/saveFile.txt", "w")
            file.write(data)

        #Making the selection bar
        pygame.draw.rect(gameDisplay, (130, 90, 50), (640, 0, 200, 580), 0)
        ColorBoard = [[(200, 0, 0), (0, 0, 200)], [(200, 200, 0), (0, 200, 200)], [(100, 100, 100), (0, 200, 0)], [(200, 200, 200), (100, 150, 200)]]
        for j in range(4):
            for i in range(2):
                pygame.draw.rect(gameDisplay, (140, 90, 40), (660+i*100, 150+j*70, 60, 60), 0)
                pygame.draw.rect(gameDisplay, (210, 180, 140), (660+i*100, 150+j*70, 60, 60), 3)
                if (j != 1 or i != 0) and (j != 0 or i != 1) and (j != 1 or i != 1):
                    pygame.draw.rect(gameDisplay, ColorBoard[j][i], (660+i*100+10, 150+j*70+10, 40, 40), 0)
                elif j == 0 and i == 1:
                    gameDisplay.blit(pygame.transform.scale(Images["NinjaBase"], (30, 30)), (660+i*100+15, 150+j*70+20))
                    gameDisplay.blit(pygame.transform.scale(Images["NinjaGun"], (30, 40)), (660+i*100+15, 150+j*70+5))
                elif j == 1 and i == 1:
                    gameDisplay.blit(pygame.transform.scale(Images["IceTower"], (30, 30)), (660+i*100+15, 150+j*70+20))                  
                else:
                    gameDisplay.blit(pygame.transform.scale(Images["Flamethrower"], (40, 60)), (660+i*100+10, 150+j*70))

        #Drawing Lives/Cash
        gameDisplay.blit(pygame.transform.scale(Images["Heart"], (20, 20)), (660, 60))
        gameDisplay.blit(pygame.transform.scale(Images["InstantMoney"], (20, 20)), (660, 20))
        gameDisplay.blit(font_20.render(str(Cash), True, (0, 0, 0)), (690, 16))
        gameDisplay.blit(font_20.render(str(Lives), True, (0, 0, 0)), (690, 56))
        gameDisplay.blit(font_20.render("Wave: " + str(wave), True, (0, 0, 0)), (660, 96))

        if Lives <= 0:
            game_run = False

        #Event handler
        for event in pygame.event.get():
            if event.type == QUIT:
              pygame.quit()
              sys.exit()

        #Drawing all towers:
        stop = False
        pos, pressed = pygame.mouse.get_pos(), pygame.mouse.get_pressed()
        for j, row in enumerate(Board):
            for i, tile in enumerate(row):
                try:
                    tile = int(tile)
                except Exception:
                    tile.update(Monsters, startButton.speed, Cash, Board, Images, gameDisplay)
                    if tile.x <= pos[0] <= tile.x + tile.width and tile.y <= pos[1] <= tile.y + tile.height and pressed[0] == True:
                        for h, k in enumerate(Board):
                            for l, s in enumerate(k):
                                try:
                                    s = int(s)
                                except Exception:
                                    s.selected = False
                        tile.selected = True
                        stop = True
                    Cash += tile.cash

                    #Checking to see whether something was bought today
                    if tile.cash < 0 or not (0 <= pos[0] <= 640 and 0 <= pos[1] <= 480):
                        stop = True
                        

                    tile.cash = 0
                    score += tile.score
                    tile.score = 0

                    if tile.dead == True:
                        Board[j][i] = 0
        if stop == False and pressed[0] == True:
            for j, row in enumerate(Board):
                for i, tile in enumerate(row):
                    try:
                        tile = int(tile)
                    except Exception:
                        tile.selected = False
        

        Board, Cash = selection.update(Board, Cash)

        #The start button
        startButton.update()

        #Updates the settings
        gameDisplay.blit(font_15.render("Settings", True, (0, 0, 0)), (565, 490))
        settings.update()

        #Updating all crates so their drawn on a higher level then towers
        for j, row in enumerate(Board):
            for i, tile in enumerate(row):
                try:
                    tile = int(tile)
                except Exception:
                    if tile.rank == 6:
                        for crate in tile.Crates:
                            crate.update(startButton.speed, gameDisplay)

                            if crate.expireTime <= 0:
                                tile.Crates.pop(tile.Crates.index(crate))

                            if crate.collected:
                                Cash += crate.value
                                tile.Crates.pop(tile.Crates.index(crate))
                    elif tile.rank == 7:
                        for glaive in tile.Glaives:
                            glaive.update(startButton.speed, gameDisplay)

        #Abilities
        Abilities = []
        for j, row in enumerate(Board):
            for i, tile in enumerate(row):
                try:
                    tile = int(tile)
                except Exception:
                    for ability in tile.ability:
                        #Checks for all ready abilities
                        if ability[1] == 0:
                            Abilities.append(ability[0])
                        elif ability[1] == -1:
                            pass
                        else:
                            ability[1] -= 1

        
        if len(Abilities) != 0:
            alreadyUsed = {}
            for ability in Abilities:
                if ability not in alreadyUsed.keys():
                    alreadyUsed[ability] = 1
                else:
                    alreadyUsed[ability] += 1

            count = 0
            for k, v in alreadyUsed.items():
                pygame.draw.rect(gameDisplay, (210, 180, 140), (10+55*count, 430, 40, 40), 0)
                pygame.draw.rect(gameDisplay, (180, 140, 80), (10+55*count, 430, 40, 40), 2)
                if k == "Bullet Time":
                    
                    pygame.draw.rect(gameDisplay, (255,215,0), (20+55*count, 435, 15, 10), 0)
                    pygame.draw.circle(gameDisplay, (255, 215, 0), (35+55*count, 440), 5, 0)                

                    pygame.draw.circle(gameDisplay, (255, 255, 255), (25+55*count, 458), 10, 0)
                    pygame.draw.circle(gameDisplay, (0, 0, 0), (25+55*count, 458), 11, 1)
                    pygame.draw.line(gameDisplay, (0, 0, 0), (25+55*count, 458), (25+55*count, 450), 2)
                    pygame.draw.line(gameDisplay, (0, 0, 0), (25+55*count, 458), (20+55*count, 455), 2)

                elif k == "Forest Fire":
                    gameDisplay.blit(pygame.transform.scale(Images["ForestFire"],(20,30)),(20+55*count,435))

                elif k == "The Arctic":
                    gameDisplay.blit(pygame.transform.scale(Images["TheArctic"],(100,30)),(-20+55*count,435))

                elif k == "Smoke Bomb":
                    gameDisplay.blit(pygame.transform.scale(Images["SmokeBomb"],(50,50)),(55*count,425))

                elif k == "Instant Money":
                    gameDisplay.blit(pygame.transform.scale(Images["InstantMoney"],(30,30)),(15+55*count,435))

                elif k == "Complete Reform":
                    gameDisplay.blit(pygame.transform.scale(Images["CompleteReform"],(30,30)),(15+55*count,435))
                elif k == "Unleash Havoc":
                    gameDisplay.blit(pygame.transform.scale(Images["UnleashHavoc"],(30,30)),(15+55*count,435))
                    
                gameDisplay.blit(font_20.render(str(v), True, (0, 0, 0)), (40+55*count, 450))

                

                stop = False
                if 10+55*count <= pos[0] <= 10+55*count+40 and 430 <= pos[1] <= 470 and pressed[0] == 1:
                    for j, row in enumerate(Board):
                        for i, tile in enumerate(row):
                            try:
                                tile = int(tile)
                            except Exception:
                                for ability in tile.ability:
                                    stop2 = False
                                    for a in tile.effects:
                                        if a[0] == ability[0]:
                                            stop2 = True
                                    if not stop and ability[0] == k and not stop2 and not abilityCooldown:
                                        abilityCooldown = True
                                        stop = True
                                        ability[1] = ability[2] + 0
                                        tile.effects.append([k,ability[3],False])
                count += 1

        if pressed[0] == 0:
            abilityCooldown = False
                    
        #Drawing range of selected tower
        for j, row in enumerate(Board):
            for i, tile in enumerate(row):
                try:
                    tile = int(tile)
                except Exception:
                    if tile.selected:
                        pygame.draw.circle(gameDisplay, (0, 0, 0, 125), (tile.x+int(tile.width/2), tile.y+int(tile.height/2)),int(tile.range), 2)
        
        pygame.display.flip()
        fpsClock.tick(fps)

    print("Score: " + str(score))
Ejemplo n.º 13
0
 def __init__(self, num_disks):
     self.num_of_disks = num_disks
     self.num_of_moves = 0
     self.towers = [tower.Tower('A'), tower.Tower('B'), tower.Tower('C')]
     for i in range(num_disks, 0, -1):
         self.towers[0].append(disk.Disk(i))
Ejemplo n.º 14
0
            # cost += 2*abs(goalPeg[i] - expectedDisc)

            isInOrder = isInOrder and (goalPeg[i] == expectedDisc)
            if not isInOrder:
                cost += 2 + abs(goalPeg[i] - expectedDisc)


        for thisPeg in self.tower.pegs:
            if not thisPeg == goalPeg:
                for i in range(0, len(thisPeg)):
                    for j in range(i, len(thisPeg)):
                        dP = thisPeg[i] - thisPeg[j]
                        if dP > 0:
                            cost += dP
                        cost += 1

        #print(1)

        self.heuristic = cost
        
        #print(cost)
        '''

    def FN(self):
        #print(self.heuristic + self.depth)
        return self.heuristic + self.depth


nodeState(None, tower.Tower([[2, 3, 1, 0], [], []]), False)
Ejemplo n.º 15
0
    def gamemapScr(self):
        """
		Descr: gameMapScr contains events for creating the Game Screen
		Params: self
		Returns: none """

        while self.gamemap_Scr:
            self.interface()  #Creates the game menu screen
            mousepos = (pygame.mouse.get_pos())
            mousepos_change = (pygame.mouse.get_rel())

            # Game loss and return to the endpage
            if self.health == 0:
                self.emptyOut()
                return self.endpageScr()
            elif self.wavenum == 11:
                self.emptyOut()
                return self.winpageScr()

            for event in pygame.event.get():
                # quit
                if event.type == pygame.QUIT:
                    return pygame.quit()

                # Move tower and lose money
                elif event.type == MOUSEBUTTONDOWN:

                    if self.towerRect.collidepoint(pygame.mouse.get_pos()):
                        if self.money >= tower.Tower(mousepos).cost:
                            self.tower.append(tower.Tower(mousepos))
                            self.sprites.add(self.tower)
                            self.tower[-1].ablemove = True

                    elif self.wave_start_button.collidepoint(mousepos):
                        if self.inWave == False:
                            self.inWave = True
                            self.wavenum += 1
                            num = 0
                            invadernum = ((self.wavenum * 3) + 5)

                elif event.type == MOUSEMOTION and self.tower != []:
                    if self.tower[-1].ablemove == True:
                        self.tower[-1].image = pygame.image.load(
                            'assets/' + 'tower2.png').convert_alpha()
                        self.tower[-1].followmouse(mousepos_change)

                elif event.type == MOUSEBUTTONUP and self.tower != []:
                    if not (self.p.isGrass(self.tower[-1])):
                        self.sprites.remove(self.tower[-1])
                        self.tower.remove(self.tower[-1])
                    elif self.tower[-1].ablemove == True:
                        self.tower[-1].image = self.towerimg
                        self.money -= self.tower[-1].cost
                        self.tower[-1].ablemove = False

            #INVADERS IN WAVE
            if self.inWave == True:
                if num < invadernum:
                    slime = invader.Invader("slime1.png", (20, 80))
                    self.invader.append(slime)
                    self.sprites.add(self.invader)
                    num += 1
                elif num == invadernum:
                    self.inWave = False

            #INVADER MOVEMENT
            for monsters in self.invader:
                direction = monsters.path()
                monsters.move(direction)

                # Make the invader Gif pictures
                if monsters.whichimage == 3:
                    monsters.whichimage = 1
                elif monsters.whichimage != 3:
                    monsters.whichimage += 1

                if monsters.whichimage == 1:
                    monsters.image = self.invaderimage1
                if monsters.whichimage == 2:
                    monsters.image = self.invaderimage2
                if monsters.whichimage == 3:
                    monsters.image = self.invaderimage3

                #Health Decreasing when Invade reach castle
                if monsters.rect == (680, 110, 20, 20):
                    self.health -= 1
                    self.sprites.remove(monsters)
                    self.invader.remove(monsters)

                #Invaders in Tower Range get Shot
            for defenders in self.tower:
                for monsters in self.invader:
                    if defenders.inRange(monsters.rect.x, monsters.rect.y):
                        ammo = bullet.Bullet((defenders.rect.center))
                        self.bullets.append(ammo)
                        self.sprites.add(self.bullets)
                        break

                    #Bullet MOVEMENT
                    for shoot in self.bullets:
                        #Bullets Move to Invader Location
                        shoot.to_invader(monsters.rect.center)
                        if pygame.sprite.collide_rect(shoot, monsters):
                            monsters.health -= 25
                            self.sprites.remove(shoot)
                            self.bullets.remove(shoot)

                            #Monster Killed By Bullets
                            if monsters.health == 0:
                                self.money += 5
                                self.sprites.remove(monsters)
                                self.invader.remove(monsters)

            # upload the image
            self.interface()
            self.sprites.draw(self.mainscreen)
            pygame.display.flip()
Ejemplo n.º 16
0
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
#Set the background colour
background = WHITE
#Create a basic font
basicFont = pygame.font.SysFont(None, 48)
#Setup the game clock object
clock = pygame.time.Clock()
#Set the loop boolean and default dt
running = True
dt = 0

##Game Related Stuff##
#Create the sprite groups to be used
tower1 = tower.Tower((100, 100))

while(running):
  #Event management
  for event in pygame.event.get():
    if event.type == QUIT:
      running = False

    if event.type == KEYDOWN:
      if event.key == K_ESCAPE:
        running = False

  #Logic stuff
  tower1.update(dt)

  #Rendering stuff
Ejemplo n.º 17
0
        errprint("please use a non-insane simulation time")
        sys.exit(1)
    sim_opts.set_duration(args.sim_time[0])
if args.distance != -1:
    if not cfg.valid_distance(args.distance[0]):
        errprint("please use a valid distance")
        sys.exit(1)
    geometry.road_end = args.distance[0]

# seed rng
seed = int(time.time()) if args.seed == -1 else args.seed[0]
sim_opts.seed = seed
np.random.seed(seed)

# set up simulation
base_station = twr.Tower(base_opts)
small_cell = twr.Tower(small_opts)
users = usr.init_users(sim_opts.num_users, user_opts)

# pre compute random values (for performance)
rf.init_shadowing(sim_opts, geometry)
max_possible_dails = sim_opts.num_users * sim_opts.iterations
rf.init_call_probabilities(max_possible_dails, sim_opts.call_rate)

if args.multithread:
    # run simulation concurrently
    print("multi threading activated")
    sim.multi_sim(base_opts, small_opts, user_opts, sim_opts, geometry, args,
                  5)
    exit(0)
else:
Ejemplo n.º 18
0
def city_handler(self, event):
    """event handler of city"""
    #moves between menu items

    if event.type == KEYDOWN and event.key == K_UP:  #moves the cursor up
        self.cursor_se.play()
        self.city.menu -= 1
        if self.city.menu < 0:
            self.city.menu = MENU_MAX
        if self.city.menu == 2 and self.party.house == 0:
            self.city.menu -= 1

    elif event.type == KEYDOWN and event.key == K_DOWN:
        self.cursor_se.play()
        self.city.menu += 1
        if self.city.menu > MENU_MAX:
            self.city.menu = 0
        if self.city.menu == 2 and self.party.house == 0:
            self.city.menu += 1

    #move to each menu item
    if event.type == KEYDOWN and (event.key == K_SPACE or event.key == K_z
                                  or event.key == K_RETURN):

        self.select_se.play()

        self.city.music = 0

        if self.city.menu == City.BAR:
            self.game_state = BAR
            self.city = None
            self.bar = bar.Bar()
        elif self.city.menu == City.INN:
            self.game_state = INN
            self.city = None
            self.inn = inn.Inn()
        elif self.city.menu == City.HOUSE:
            self.game_state = HOUSE
            self.city = None
            self.house = house.House()
        elif self.city.menu == City.SHOP:
            if len(self.party.member) == 0:
                #if it cannot be selected, continue music
                self.city.music = 1
            else:
                self.game_state = SHOP
                self.city = None
                self.shop = shop.Shop(self)
        elif self.city.menu == City.TEMPLE:
            if len(self.party.member) == 0:
                self.city.music = 1
            else:
                self.game_state = TEMPLE
                self.city = None
                self.temple = temple.Temple()
        elif self.city.menu == City.CASTLE:
            self.game_state = CASTLE
            self.city = None
            self.castle = castle.Castle()
        elif self.city.menu == City.TOWER:

            self.game_state = TOWER
            self.city = None
            self.tower = tower.Tower()

    elif event.type == KEYDOWN and event.key == K_x:

        self.game_state = MENU
        self.city = None
        self.menu = menu.Menu()
Ejemplo n.º 19
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((600, 600))
    pygame.display.set_caption("Tower Defense")

    #Invader
    print("Testing one Invader----------------------")
    test_invader = invader.Invader("slime.png", (0, 100))  #Creates object

    #############################################
    print("Positioning test for Invader----------------")
    #############################################
    print("Standard LEFT test for Invader----------------")
    test_invader.move("right")
    assert test_invader.rect == (30, 100, 20, 20)

    print("Zero Input LEFT test for Invader----------------")
    test_invader.move("up")
    assert test_invader.rect == (30, 70, 20, 20)

    print("Standard UP test for Invader----------------")
    test_invader.move("down")
    assert test_invader.rect == (30, 100, 20, 20)

    print("Zero Input UP test for Invader----------------")
    test_invader.move("left")
    assert test_invader.rect == (0, 100, 20, 20)

    #############################################
    print("Direction test for Invader----------------")
    #############################################
    print("Standard First Path")
    direction = test_invader.getDirection(path.Path())
    assert direction == "right"

    #Tower
    print("Testing one Tower ----------------------")
    test_tower = tower.Tower((0, 0))  #Creates object

    ############################################
    print("Testing positioning of tower icon ----------------------")
    #############################################
    print("Following x change----------")
    test_tower.followmouse((2, 0))
    assert test_tower.rect == (2, 0, 50, 50)

    print("Following y change----------")
    test_tower.followmouse((0, 5))
    assert test_tower.rect == (2, 5, 50, 50)

    print("Following both x and y change---------")
    test_tower.followmouse((3, 5))
    assert test_tower.rect == (5, 10, 50, 50)

    ############################################
    print("Invader in Range ----------------------")
    #############################################
    print("Invader in Range---------")
    range = test_tower.inRange(4, 8)
    assert range == True

    print("Invader NOT in Range---------")
    notrange = test_tower.inRange(500, 200)
    assert notrange == False

    #Path
    print("Testing Path --------------------------")
    test_path = path.Path()  #Creates object

    ############################################
    print("Getting Path ----------------------")
    #############################################
    print("Coordinates of First Path-------")
    coordinates = test_path.getPathXY(1)
    assert coordinates == (0, 50)

    print("Coordinates of First Path-------")
    pathnum = test_path.getNextPath(test_invader)
    assert pathnum == 2
Ejemplo n.º 20
0
 def __init__(self, color):
     self.color = color
     self.towers = [tower.Tower(self.color)] * 100
     self.walls = [wall.Wall(self.color)] * 100
Ejemplo n.º 21
0
from flask import Flask
from flask_restful import Resource, Api, reqparse
import tower

tower = tower.Tower()


class Heater(Resource):
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('value', type=float)
        args = parser.parse_args()
        print(args)
        temp = args['value']

        tower.heater.setTemperature(float(temp))

        return {}, 200

    def get(self):
        temp = tower.heater.getTemperature()
        return {"value": temp[0], "targetValue": temp[1]}, 200


class Extruder(Resource):
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('value')
        args = parser.parse_args()

        speed = args['value']