예제 #1
0
 def on_point(): #RETURNS TRUE IF BOTH CHARACTERS X & Y = meeting_point's X & Y (are on meeting_point)
     on = 0
     for character in Character.List:
         if character.x == Tile.get_tile(Tile.MAP['point']).x and character.y == Tile.get_tile(Tile.MAP['point']).y:
             on += 1
     if on == len(Character.List):
         return True
예제 #2
0
 def on_point(): #RETURNS TRUE IF BOTH CHARACTERS X & Y = meeting_point's X & Y (are on meeting_point)
     on = 0
     for character in Character.List:
         if character.x == Tile.get_tile(Tile.MAP['point']).x and character.y == Tile.get_tile(Tile.MAP['point']).y:
             on += 1
     if on == len(Character.List):
         return True
예제 #3
0
def interaction(screen, survivor):

    Mpos = pygame.mouse.get_pos()  # [x, y]
    Mx = Mpos[0] / Tile.width
    My = Mpos[1] / Tile.height

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            for tile in Tile.List:
                if tile.x == (Mx * Tile.width) and tile.y == (My * Tile.width):
                    tile.type = 'solid'
                    tile.walkable = False
                    break

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w]:  # North
        future_tile_number = survivor.get_number() - Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('n')
                survivor.y -= survivor.height

    if keys[pygame.K_s]:  # South
        future_tile_number = survivor.get_number() + Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('s')
                survivor.y += survivor.height

    if keys[pygame.K_a]:  # West
        future_tile_number = survivor.get_number() - Tile.H

        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('w')
                survivor.x -= survivor.width

    if keys[pygame.K_d]:  # East
        future_tile_number = survivor.get_number() + Tile.H
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('e')
                survivor.x += survivor.width
예제 #4
0
 def respawn():
     for character in Character.List:
         if character.name == 'Bill':
             character.x, character.y = Tile.get_tile(
                 Tile.MAP['spawn'][0]).x, Tile.get_tile(
                     Tile.MAP['spawn'][0]).y
         else:
             character.x, character.y = Tile.get_tile(
                 Tile.MAP['spawn'][1]).x, Tile.get_tile(
                     Tile.MAP['spawn'][1]).y
예제 #5
0
def interaction(screen, survivor):

    Mpos = pygame.mouse.get_pos() # [x, y]
    Mx = Mpos[0] / Tile.width
    My = Mpos[1] / Tile.height

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            for tile in Tile.List:
                if tile.x == (Mx * Tile.width) and tile.y == (My * Tile.width):
                    tile.type = 'solid'
                    tile.walkable = False
                    break

    keys = pygame.key.get_pressed()



    if keys[pygame.K_w]: # North
        future_tile_number = survivor.get_number() - Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                # survivor.y -= survivor.height

    if keys[pygame.K_s]: # South
        future_tile_number = survivor.get_number() + Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                # survivor.y += survivor.height

    if keys[pygame.K_a]: # West
        future_tile_number = survivor.get_number() - Tile.H

        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                # survivor.x -= survivor.width

    if keys[pygame.K_d]: # East
        future_tile_number = survivor.get_number() + Tile.H
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
예제 #6
0
파일: A_Star.py 프로젝트: anas24/Zombies
    def get_surrounding_tiles(base_node):
        
        array =(
            (base_node.number + N),
            (base_node.number + NE),
            (base_node.number + E),
            (base_node.number + SE),
            (base_node.number + S),
            (base_node.number + SW),
            (base_node.number + W),
            (base_node.number + NW),
            )

        tiles = []

        onn = base_node.number 
        diagonals = [onn + NE, onn + NW, onn + SE, onn + SW]
        for tile_number in array:

            surrounding_tile = Tile.get_tile(tile_number)
            
            if tile_number not in range(1, Tile.total_tiles + 1):
                continue

            if surrounding_tile.walkable and surrounding_tile not in closed_list:
                # tiles.append(surrounding_tile) # Diagonal movement
                tiles = blocky(tiles, diagonals, surrounding_tile)

        return tiles
예제 #7
0
    def get_surrounding_tiles(base_node):

        array = (
            (base_node.number + N),
            (base_node.number + NE),
            (base_node.number + E),
            (base_node.number + SE),
            (base_node.number + S),
            (base_node.number + SW),
            (base_node.number + W),
            (base_node.number + NW),
        )

        tiles = []  #to add valid tiles

        onn = base_node.number
        diagonals = [onn + NE, onn + NW, onn + SE, onn + SW]

        for tile_number in array:

            surrounding_tile = Tile.get_tile(tile_number)

            if tile_number not in range(1, Tile.total_tiles + 1):
                continue

            if surrounding_tile.walkable and surrounding_tile not in closed_list:
                # tiles.append(surrounding_tile) # Diagonal movement
                tiles = blocky(tiles, diagonals, surrounding_tile)

        return tiles
예제 #8
0
    def update_characters(bill, bull): #LOOKS FOR CHARACTERS FALLING IN HOLES OR STANDING ON MEETING POINT. IF loading_level IS TRUE, TELEPORTS CHARACTERS TO SPAWNING POINTS
        for character in Character.List:
            if Tile.get_tile(character.get_number()).type == 'hole':
                if Tile.get_tile(character.get_number()).x == character.x and Tile.get_tile(character.get_number()).y == character.y:
                    if not character.has_target():
                        Tile.freeze = True
                        functions.load_level(Tile.MAP['level'])

        if Tile.loading_level == True:
            Character.respawn(bill, bull)

            Tile.loading_level = False

        if bill.x == Tile.get_tile(Tile.MAP['point']).x and bill.y == Tile.get_tile(Tile.MAP['point']).y and not Character.on_point():
            bill.status = 'happy'
            bull.status = 'sad'

        elif bull.x == Tile.get_tile(Tile.MAP['point']).x and bull.y == Tile.get_tile(Tile.MAP['point']).y and not Character.on_point():
            bull.status = 'happy'
            bill.status = 'sad'

        elif Character.on_point():
            bill.status = 'happy'
            bull.status = 'happy'
            Tile.freeze = True
            functions.load_level(Tile.MAP['level'] + 1)

        else:
            bill.status = 'sad'
            bull.status = 'sad'
예제 #9
0
    def update_characters(bill, bull): #LOOKS FOR CHARACTERS FALLING IN HOLES OR STANDING ON MEETING POINT.

        try:
            for character in Character.List:
                if Tile.get_tile(character.get_number()).type == 'hole':
                    if Tile.get_tile(character.get_number()).x == character.x and Tile.get_tile(character.get_number()).y == character.y:
                        if not character.has_target():
                            functions.load_level(Tile.MAP['level'])

            if bill.x == Tile.get_tile(Tile.MAP['point']).x and bill.y == Tile.get_tile(Tile.MAP['point']).y and not Character.on_point():
                bill.status = 'happy'
                bull.status = 'sad'

            elif bull.x == Tile.get_tile(Tile.MAP['point']).x and bull.y == Tile.get_tile(Tile.MAP['point']).y and not Character.on_point():
                bull.status = 'happy'
                bill.status = 'sad'

            elif Character.on_point():
                bill.status = 'happy'
                bull.status = 'happy'
                functions.load_level(Tile.MAP['level'] + 1)

            else:
                bill.status = 'sad'
                bull.status = 'sad'

        except Exception, e:
            functions.load_level(Tile.MAP['level'])
예제 #10
0
def interaction(screen, survivor):

    Mpos = pygame.mouse.get_pos() # [x, y]
    Mx = Mpos[0] / Tile.width
    My = Mpos[1] / Tile.height

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            for tile in Tile.List:
                if tile.x == (Mx * Tile.width) and tile.y == (My * Tile.width):
                    tile.type = 'solid'
                    tile.walkable = False
                    break

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_w: # North
                future_tile_number = survivor.get_number() - Tile.V

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.y -= survivor.height

            if event.key == pygame.K_s: # South
                future_tile_number = survivor.get_number() + Tile.V

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.y += survivor.height

            if event.key == pygame.K_a: # West
                future_tile_number = survivor.get_number() - Tile.H

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.x -= survivor.width

            if event.key == pygame.K_d: # East
                future_tile_number = survivor.get_number() + Tile.H

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.x += survivor.width
예제 #11
0
def interaction(screen, survivor):

    Mpos = pygame.mouse.get_pos()  # [x, y]
    Mx = Mpos[0] / Tile.width
    My = Mpos[1] / Tile.height

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            for tile in Tile.List:
                if tile.x == (Mx * Tile.width) and tile.y == (My * Tile.width):
                    tile.type = 'solid'
                    tile.walkable = False
                    break

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_w:  # North
                future_tile_number = survivor.get_number() - Tile.V

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.y -= survivor.height

            if event.key == pygame.K_s:  # South
                future_tile_number = survivor.get_number() + Tile.V

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.y += survivor.height

            if event.key == pygame.K_a:  # West
                future_tile_number = survivor.get_number() - Tile.H

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.x -= survivor.width

            if event.key == pygame.K_d:  # East
                future_tile_number = survivor.get_number() + Tile.H

                if Tile.get_tile(future_tile_number).walkable:
                    survivor.x += survivor.width
예제 #12
0
def player_input(screen,player):
	Mpos=pygame.mouse.get_pos() #[x,y]
	Mx=Mpos[0]//Tile.width
	My=Mpos[1]//Tile.height
	#print("Mx="+str(Mx)+" My="+str(My))
    #for all events check for terminate
	for event in pygame.event.get():

		if event.type == pygame.QUIT:
			pygame.quit()
			sys.exit()

		if event.type == pygame.MOUSEBUTTONDOWN:
			#toggle tile solid/empty
			for tile in Tile.List:
				if tile.x==(Mx*Tile.width) and tile.y==(My*Tile.height):
					if tile.type=='empty':
						tile.type='solid'
						tile.walkable=False
					else:
						tile.type='empty'
						tile.walkable=True
					break

		if event.type == pygame.KEYDOWN:
			if event.key==pygame.K_w: #North
				future_tile_number=player.get_number()-Tile.V
				if Tile.get_tile(future_tile_number).walkable:
					player.y-=player.height
			if event.key==pygame.K_s: #South
				future_tile_number=player.get_number()+Tile.V
				if Tile.get_tile(future_tile_number).walkable:
					player.y+=player.height
			if event.key==pygame.K_a: #West
				future_tile_number=player.get_number()-Tile.H
				if Tile.get_tile(future_tile_number).walkable:
					player.x-=player.width
			if event.key==pygame.K_d: #East
				future_tile_number=player.get_number()+Tile.H
				if Tile.get_tile(future_tile_number).walkable:
					player.x+=player.width
예제 #13
0
 def spawn(total_frames, FPS):
     if total_frames % (2*FPS)  == 0:
         if total_frames %(6*FPS)==0:
             r=randint(0,2)
             sounds=[pygame.mixer.Sound('Audio/zs1.ogg'),pygame.mixer.Sound('Audio/zs2.ogg'),
             pygame.mixer.Sound('Audio/zs3.ogg')]
             sound=sounds[r]
             sound.play()
         r = randint(0, len(Zombie.spawn_tiles) - 1)
         tile_num = Zombie.spawn_tiles[r]
         spawn_node = Tile.get_tile(tile_num)
         Zombie(spawn_node.x, spawn_node.y)
예제 #14
0
 def spawn(total_frames, FPS):
     if total_frames % (FPS) == 0:
         if total_frames % (FPS) == 0:
             r = randint(0, 2)
             sounds = [
                 pygame.mixer.Sound('audio/zs1.ogg'),
                 pygame.mixer.Sound('audio/zs2.ogg'),
                 pygame.mixer.Sound('audio/zs3.ogg')
             ]
             sound = sounds[r]
             sound.play()
         r = randint(0, len(Zombie.spawn_tiles) - 1)
         tile_num = Zombie.spawn_tiles[r]
         spawn_node = Tile.get_tile(tile_num)
         Zombie(spawn_node.x, spawn_node.y)
예제 #15
0
def draw_tiles(screen):
    for tile in Tile.List:
        pygame.draw.aaline(screen, (100, 100, 100), (tile.x, tile.y),
                           (tile.x, tile.y + Tile.height))
        pygame.draw.aaline(screen, (100, 100, 100),
                           (tile.x, tile.y + Tile.height),
                           (tile.x + Tile.width, tile.y + Tile.height))
        if (tile.walkable):
            if tile.number < Tile.total_tiles - Tile.V:
                tile_below = Tile.get_tile(tile.number + Tile.V)
                if (tile_below.walkable):
                    if tile.type == 'point':
                        screen.blit(Tile.point_block, (tile))
                    elif tile.type == 'hole':
                        screen.blit(Tile.hole_block, (tile))
                    elif tile.type == 'spawnbill':
                        screen.blit(Tile.bill_spawn, (tile))
                    elif tile.type == 'spawnbull':
                        screen.blit(Tile.bull_spawn, (tile))
                    else:
                        screen.blit(Tile.solid_block, (tile))
                else:
                    if tile.type == 'point':
                        screen.blit(Tile.point_block_edge, (tile))
                    elif tile.type == 'hole':
                        screen.blit(Tile.hole_block_edge, (tile))
                    elif tile.type == 'spawnbill':
                        screen.blit(Tile.bill_spawn, (tile))
                    elif tile.type == 'spawnbull':
                        screen.blit(Tile.bull_spawn, (tile))
                    else:
                        screen.blit(Tile.solid_block_edge, (tile))

    for tile in Tile.List:  #SETS NEW TILE TYPES. SAME AS IN Tile.create_tiles FUNCTION, JUST REFRESHING FOR NEW MAP

        if tile.number in Tile.MAP['solids']:
            tile.type = 'solid'
        elif tile.number == Tile.MAP['point']:
            tile.type = 'point'
        elif tile.number in Tile.MAP['holes']:
            tile.type = 'hole'
        else:
            tile.type = 'empty'

        if tile.type == 'empty':
            tile.walkable = False
        else:
            tile.walkable = True
예제 #16
0
 def spawn(total_frames, FPS):
     if total_frames % (FPS) == 0: 
         if total_frames % (FPS * 48) == 0: # higher the multiplying value to slow the zombie spawn rate
             
             r  = randint(0, 2)
             sounds = [pygame.mixer.Sound('audio/zs1.ogg'),
                       pygame.mixer.Sound('audio/zs2.ogg'),
                       pygame.mixer.Sound('audio/zs2.ogg')
                       ]
             sounds = sounds[r]
             sounds.play()
         
             r = randint(0, len(Zombie.spawn_tiles) - 1) # pick a randon spawn tile
             tile_num = Zombie.spawn_tiles[r]
             spawn_node = Tile.get_tile(tile_num)
             Zombie(spawn_node.x, spawn_node.y)
예제 #17
0
def draw_tiles(screen):
    for tile in Tile.List:
        pygame.draw.aaline(screen, (100, 100, 100), (tile.x, tile.y), (tile.x, tile.y + Tile.height))
        pygame.draw.aaline(
            screen, (100, 100, 100), (tile.x, tile.y + Tile.height), (tile.x + Tile.width, tile.y + Tile.height)
        )
        if tile.walkable:
            if tile.number < Tile.total_tiles - Tile.V:
                tile_below = Tile.get_tile(tile.number + Tile.V)
                if tile_below.walkable:
                    if tile.type == "point":
                        screen.blit(Tile.point_block, (tile))
                    elif tile.type == "hole":
                        screen.blit(Tile.hole_block, (tile))
                    elif tile.type == "spawnbill":
                        screen.blit(Tile.bill_spawn, (tile))
                    elif tile.type == "spawnbull":
                        screen.blit(Tile.bull_spawn, (tile))
                    else:
                        screen.blit(Tile.solid_block, (tile))
                else:
                    if tile.type == "point":
                        screen.blit(Tile.point_block_edge, (tile))
                    elif tile.type == "hole":
                        screen.blit(Tile.hole_block_edge, (tile))
                    elif tile.type == "spawnbill":
                        screen.blit(Tile.bill_spawn, (tile))
                    elif tile.type == "spawnbull":
                        screen.blit(Tile.bull_spawn, (tile))
                    else:
                        screen.blit(Tile.solid_block_edge, (tile))

    for tile in Tile.List:  # SETS NEW TILE TYPES. SAME AS IN Tile.create_tiles FUNCTION, JUST REFRESHING FOR NEW MAP

        if tile.number in Tile.MAP["solids"]:
            tile.type = "solid"
        elif tile.number == Tile.MAP["point"]:
            tile.type = "point"
        elif tile.number in Tile.MAP["holes"]:
            tile.type = "hole"
        else:
            tile.type = "empty"

        if tile.type == "empty":
            tile.walkable = False
        else:
            tile.walkable = True
예제 #18
0
파일: a_star.py 프로젝트: mosfet386/Test
	def get_surrounding_tiles(parent_tile):
		surrounding_tile_numbers=(
		parent_tile.number+N,
		parent_tile.number+S,
		parent_tile.number+E,
		parent_tile.number+W,
		parent_tile.number+NW,
		parent_tile.number+NE,
		parent_tile.number+SW,
		parent_tile.number+SE)
		#print(surrounding_tile_numbers)
		tiles=[]
		pnum=parent_tile.number
		diagonals=[pnum+NE,pnum+NW,pnum+SE,pnum+SW]
		for tile_number in surrounding_tile_numbers:
			surrounding_tile=Tile.get_tile(tile_number)
			if surrounding_tile.walkable and surrounding_tile not in closed_list:
				#tiles.append(surrounding_tile) #consider diagonal directions
				blocky(tiles,diagonals,surrounding_tile)
		return tiles
예제 #19
0
    def get_surrounding_tiles(base_node):
        array = (
            (base_node.number + N),
            (base_node.number + NE),
            (base_node.number + E),
            (base_node.number + SE),
            (base_node.number + S),
            (base_node.number + SW),
            (base_node.number + W),
            (base_node.number + NW),
        )

        # print array

        tiles = []  # all valid tiles

        for tile_number in array:
            surrounding_tile = Tile.get_tile(tile_number)

            if surrounding_tile.walkable and surrounding_tile not in closed_list:
                tiles.append(surrounding_tile)

        return tiles
예제 #20
0
    def get_surrounding_tiles(base_node):
        array = (
            (base_node.number + N),
            (base_node.number + NE),
            (base_node.number + E),
            (base_node.number + SE),
            (base_node.number + S),
            (base_node.number + SW),
            (base_node.number + W),
            (base_node.number + NW),
        )

        # print array

        tiles = [] # all valid tiles

        for tile_number in array:
            surrounding_tile = Tile.get_tile(tile_number)

            if surrounding_tile.walkable and surrounding_tile not in closed_list:
                tiles.append(surrounding_tile)

        return tiles
예제 #21
0
파일: a_star.py 프로젝트: mosfet386/Test
	def get_surrounding_tiles(parent_tile):
		surrounding_tile_numbers=(
		parent_tile.number+N,
		parent_tile.number+S,
		parent_tile.number+E,
		parent_tile.number+W,
		parent_tile.number+NW,
		parent_tile.number+NE,
		parent_tile.number+SW,
		parent_tile.number+SE)
		#print(surrounding_tile_numbers)
		tiles=[]
		pnum=parent_tile.number
		diagonals=[pnum+NE,pnum+NW,pnum+SE,pnum+SW]
		for tile_number in surrounding_tile_numbers:
			surrounding_tile=Tile.get_tile(tile_number)
			#prevent out-of-bounds path finding
			if tile_number not in range(1,Tile.total_tiles+1):
				continue
			if surrounding_tile.walkable and surrounding_tile not in closed_list:
				#tiles.append(surrounding_tile) #consider diagonal directions
				blocky(tiles,diagonals,surrounding_tile)
		return tiles
예제 #22
0
    def update_characters(
        bill, bull
    ):  #LOOKS FOR CHARACTERS FALLING IN HOLES OR STANDING ON MEETING POINT.

        try:
            for character in Character.List:
                if Tile.get_tile(character.get_number()).type == 'hole':
                    if Tile.get_tile(character.get_number(
                    )).x == character.x and Tile.get_tile(
                            character.get_number()).y == character.y:
                        if not character.has_target():
                            functions.load_level(Tile.MAP['level'])

            if bill.x == Tile.get_tile(
                    Tile.MAP['point']).x and bill.y == Tile.get_tile(
                        Tile.MAP['point']).y and not Character.on_point():
                bill.status = 'happy'
                bull.status = 'sad'

            elif bull.x == Tile.get_tile(
                    Tile.MAP['point']).x and bull.y == Tile.get_tile(
                        Tile.MAP['point']).y and not Character.on_point():
                bull.status = 'happy'
                bill.status = 'sad'

            elif Character.on_point():
                bill.status = 'happy'
                bull.status = 'happy'
                functions.load_level(Tile.MAP['level'] + 1)

            else:
                bill.status = 'sad'
                bull.status = 'sad'

        except Exception, e:
            functions.load_level(Tile.MAP['level'])
예제 #23
0
 def spawn(total_frames, FPS):
     if total_frames % (FPS * 3) == 0:
         r = randint(0, len(Coin.spawn_tiles) - 1)
         tile_num = Coin.spawn_tiles[r]
         spawn_node = Tile.get_tile(tile_num)
         Coin(spawn_node.x, spawn_node.y)
예제 #24
0
def interaction(screen, survivor):

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        # if a key is pressed
        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_e:

                survivor.current += 1
                survivor.current %= 3

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w]:  # North
        future_tile_number = survivor.get_number() - Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('n')
                # survivor.y -= survivor.height               

    if keys[pygame.K_s]: # South
        future_tile_number = survivor.get_number() + Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('s')
                # survivor.y += survivor.height

    if keys[pygame.K_a]:   # West
        future_tile_number = survivor.get_number() - Tile.H

        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('w')
                # survivor.x -= survivor.width

    if keys[pygame.K_d]:   # East
        future_tile_number = survivor.get_number() + Tile.H
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('e')
                # survivor.x += survivor.width

    if keys[pygame.K_LEFT]:
        survivor.rotate('w')
        Bullet(survivor.centerx, survivor.centery, -10, 0, 'w', survivor.get_bullet_type())

    elif keys[pygame.K_RIGHT]:
        survivor.rotate('e')
        Bullet(survivor.centerx, survivor.centery, 10, 0, 'e', survivor.get_bullet_type())
    
    elif keys[pygame.K_UP]:
        survivor.rotate('n')
        Bullet(survivor.centerx, survivor.centery, 0, -10, 'n', survivor.get_bullet_type())
    
    elif keys[pygame.K_DOWN]:
        survivor.rotate('s')
        Bullet(survivor.centerx, survivor.centery, 0, 10, 's', survivor.get_bullet_type())
예제 #25
0
def build_controls(screen):

    Mpos = pygame.mouse.get_pos()  # [x, y]
    Mx = Mpos[0] / Tile.width
    My = Mpos[1] / Tile.height
    LEFT = 1
    MIDDLE = 2
    RIGHT = 3

    block_type = block_default.get()

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            print Tile.MAP
            pygame.quit()
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == LEFT:
                for tile in Tile.List:
                    if tile.x == (Mx * Tile.width) and tile.y == (My *
                                                                  Tile.width):

                        print 'Trying to create {} block on tile: {}'.format(
                            block_type, tile.number)

                        if block_type == 'solid':
                            if tile.type == 'empty':
                                Tile.MAP['solids'].append(tile.number)
                            elif tile.number == Tile.MAP['point']:
                                tile.MAP['point'] = 0
                            elif tile.number in Tile.MAP['holes']:
                                Tile.MAP['holes'].remove(tile.number)

                        elif block_type == 'point':
                            if tile.type == 'empty':
                                if Tile.get_tile(
                                        Tile.MAP['point']) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['point']).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['point']).walkable = False
                                Tile.MAP['point'] = tile.number
                            if tile.number in Tile.MAP['solids']:
                                if Tile.get_tile(
                                        Tile.MAP['point']) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['point']).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['point']).walkable = False
                                Tile.MAP['point'] = tile.number
                                Tile.MAP['solids'].remove(tile.number)
                            elif tile.number in Tile.MAP['holes']:
                                if Tile.get_tile(
                                        Tile.MAP['point']) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['point']).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['point']).walkable = False
                                Tile.MAP['point'] = tile.number
                                Tile.MAP['holes'].remove(tile.number)

                        elif block_type == 'hole':
                            if tile.type == 'empty':
                                Tile.MAP['holes'].append(tile.number)
                            if tile.number in Tile.MAP['solids']:
                                Tile.MAP['solids'].remove(tile.number)
                            elif tile.number == Tile.MAP['point']:
                                Tile.MAP['point'] = 0

                        elif block_type == 'spawnbill':
                            elements = 0
                            for i in range(0, Tile.total_tiles + 1):
                                if i in Tile.MAP['spawn']:
                                    elements += 1

                            if elements == 1:
                                Tile.MAP['spawn'].append(1)
                            elif elements > 2 or elements == 0:
                                Tile.MAP['spawn'] = [1, 1]

                            if tile.type == 'empty':
                                if Tile.get_tile(
                                        Tile.MAP['spawn'][0]) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][0]).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][0]).walkable = False
                                Tile.MAP['spawn'][0] = tile.number

                            if tile.number in Tile.MAP['solids']:
                                if Tile.get_tile(
                                        Tile.MAP['spawn'][0]) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][0]).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][0]).walkable = False
                                Tile.MAP['spawn'][0] = tile.number

                            elif tile.number in Tile.MAP['holes']:
                                if Tile.get_tile(
                                        Tile.MAP['spawn'][0]) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][0]).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][0]).walkable = False
                                Tile.MAP['spawn'][0] = tile.number
                                Tile.MAP['holes'].remove(tile.number)

                        elif block_type == 'spawnbull':
                            elements = 0
                            for i in range(0, Tile.total_tiles + 1):
                                if i in Tile.MAP['spawn']:
                                    elements += 1
                            if elements == 1:
                                Tile.MAP['spawn'].append(1)
                            elif elements > 2 or elements == 0:
                                Tile.MAP['spawn'] = [1, 1]

                            if tile.type == 'empty':
                                if Tile.get_tile(
                                        Tile.MAP['spawn'][1]) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][1]).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][1]).walkable = False
                                Tile.MAP['spawn'][1] = tile.number

                            if tile.number in Tile.MAP['solids']:
                                if Tile.get_tile(
                                        Tile.MAP['spawn'][1]) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][1]).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][1]).walkable = False
                                Tile.MAP['spawn'][1] = tile.number

                            elif tile.number in Tile.MAP['holes']:
                                if Tile.get_tile(
                                        Tile.MAP['spawn'][1]) in Tile.List:
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][1]).type = 'empty'
                                    Tile.get_tile(
                                        Tile.MAP['spawn'][1]).walkable = False
                                Tile.MAP['spawn'][1] = tile.number
                                Tile.MAP['holes'].remove(tile.number)

                        tile.type = block_type
                        tile.walkable = True

                        if Tile.get_tile(tile.number).type == block_type:
                            print 'Success!'
                        else:
                            print 'Failed.'

            elif event.button == RIGHT:
                for tile in Tile.List:
                    if tile.x == (Mx * Tile.width) and tile.y == (My *
                                                                  Tile.width):

                        i = 0

                        if tile.type == 'empty':
                            print 'Tile is already empty.'
                        else:
                            print 'Trying to remove {} block from tile: {}'.format(
                                tile.type, tile.number)
                            i = 1

                        if tile.type == 'point':
                            Tile.MAP['point'] = 0
                        else:
                            if tile.number in Tile.MAP['solids']:
                                Tile.MAP['solids'].remove(tile.number)
                            elif tile.number in Tile.MAP['holes']:
                                Tile.MAP['holes'].remove(tile.number)
                            elif tile.number in Tile.MAP['spawn']:
                                Tile.MAP['spawn'].remove(tile.number)

                        tile.type = 'empty'
                        tile.walkable = False

                        if tile.type == 'empty' and i == 1:
                            print 'Sucess!'
                        else:
                            print 'Failed.'
예제 #26
0
def interaction(screen, survivor):

    Mpos = pygame.mouse.get_pos() # [x, y] 
    Mx = Mpos[0] / Tile.width
    My = Mpos[1] / Tile.height

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            for tile in Tile.List:
                if tile.x == (Mx * Tile.width) and tile.y == (My * Tile.width):
                    tile.type = 'solid'
                    tile.walkable = False
                    break
        if event.type == pygame.KEYDOWN:
            if event.key==pygame.K_e:
                survivor.current+=1
                survivor.current%=3

    keys=pygame.key.get_pressed()  
    if  keys[pygame.K_UP]: # North
        future_tile_number = survivor.get_number() - Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile=Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                        # survivor.y -= survivor.height
                            
                survivor.set_target(future_tile)
                survivor.rotate('n')                   

    if keys[pygame.K_DOWN]: # South
        future_tile_number = survivor.get_number() + Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile=Tile.get_tile(future_tile_number)

            if future_tile.walkable:
                
                survivor.set_target(future_tile)
                survivor.rotate('s')
                        # survivor.y += survivor.height


    if keys[pygame.K_LEFT]: # West
        future_tile_number = survivor.get_number() - Tile.H

        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile=Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                
                survivor.set_target(future_tile)
                survivor.rotate('w')
                        # survivor.x -= survivor.width 
    if keys[pygame.K_RIGHT]: # East
        future_tile_number = survivor.get_number() + Tile.H

        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile=Tile.get_tile(future_tile_number)
            if future_tile.walkable:

                survivor.set_target(future_tile)
                survivor.rotate('e')
                        # survivor.x += survivor.width
    if keys[pygame.K_w]:
        
        survivor.rotate('n')
        Bullet(survivor.centerx,survivor.centery,0,-10,'n',survivor.get_bullet_type())

    elif keys[pygame.K_a]:
        survivor.rotate('w')
        Bullet(survivor.centerx,survivor.centery,-10,0,'w',survivor.get_bullet_type())
    elif keys[pygame.K_s]:
        survivor.rotate('s')
        Bullet(survivor.centerx,survivor.centery,0,10,'s',survivor.get_bullet_type())
    elif keys[pygame.K_d]:
        survivor.rotate('e')
        Bullet(survivor.centerx,survivor.centery,10,0,'e',survivor.get_bullet_type())
예제 #27
0
 def respawn():
     for character in Character.List:
         if character.name == 'Bill':
             character.x, character.y = Tile.get_tile(Tile.MAP['spawn'][0]).x, Tile.get_tile(Tile.MAP['spawn'][0]).y
         else:
             character.x, character.y = Tile.get_tile(Tile.MAP['spawn'][1]).x, Tile.get_tile(Tile.MAP['spawn'][1]).y
예제 #28
0
def player_input(screen,player):
	Mpos=pygame.mouse.get_pos() #[x,y]
	Mx=Mpos[0]//Tile.width
	My=Mpos[1]//Tile.height
	#print("Mx="+str(Mx)+" My="+str(My))
    #for all events check for terminate
	for event in pygame.event.get():

		if event.type == pygame.QUIT:
			pygame.quit()
			sys.exit()

		#Wall Creation & Removal
		if event.type == pygame.MOUSEBUTTONDOWN:
			#toggle tile solid/empty
			for tile in Tile.List:
				if tile.x==(Mx*Tile.width) and tile.y==(My*Tile.height):
					if tile.type=='empty':
						tile.type='solid'
						tile.walkable=False
					else:
						tile.type='empty'
						tile.walkable=True
					break

		#Player Weapon Selection
		if event.type==pygame.KEYDOWN:
			if event.key==pygame.K_e:
				player.gun=(player.gun+1)%3 #gun 0,1,2,0,1,2

	#Player Movement
	# if event.type == pygame.KEYDOWN:
	keys=pygame.key.get_pressed()
	if keys[pygame.K_w]: #North
		future_tile_number=player.get_number()-Tile.V
		if future_tile_number in range(1,Tile.total_tiles+1):
			future_tile=Tile.get_tile(future_tile_number)
			if future_tile.walkable:
				player.set_target(future_tile)
				player.rotate('n')
				# player.y-=player.height
	if keys[pygame.K_s]: #South
		future_tile_number=player.get_number()+Tile.V
		if future_tile_number in range(1,Tile.total_tiles+1):
			future_tile=Tile.get_tile(future_tile_number)
			if future_tile.walkable:
				player.set_target(future_tile)
				player.rotate('s')
				# player.y+=player.height
	if keys[pygame.K_a]: #West
		future_tile_number=player.get_number()-Tile.H
		if future_tile_number in range(1,Tile.total_tiles+1):
			future_tile=Tile.get_tile(future_tile_number)
			if future_tile.walkable:
				player.set_target(future_tile)
				player.rotate('w')
				# player.x-=player.width
	if keys[pygame.K_d]: #East
		future_tile_number=player.get_number()+Tile.H
		if future_tile_number in range(1,Tile.total_tiles+1):
			# print("Out of bounds",future_tile_number,Tile.get_tile(future_tile_number))
			future_tile=Tile.get_tile(future_tile_number)
			if future_tile.walkable:
				player.set_target(future_tile)
				player.rotate('e')
				# player.x+=player.width
	
	#Player Rotation
	if keys[pygame.K_LEFT]:
		player.rotate('w')
		Projectile(player.centerx,player.centery,-10,0,'w',player.get_bullet_type())
	elif keys[pygame.K_RIGHT]:
		player.rotate('e')
		Projectile(player.centerx,player.centery,10,0,'e',player.get_bullet_type())
	elif keys[pygame.K_UP]:
		player.rotate('n')
		Projectile(player.centerx,player.centery,0,-10,'n',player.get_bullet_type())
	elif keys[pygame.K_DOWN]:
		player.rotate('s')
		Projectile(player.centerx,player.centery,0,10,'s',player.get_bullet_type())
예제 #29
0
 def spawn(total_frames, FPS):
     if total_frames % (FPS * 3) == 0:
         r = randint(0, len(Zombie.spawn_tiles) - 1)
         tile_num = Zombie.spawn_tiles[r]
         spawn_node = Tile.get_tile(tile_num)
         Zombie(spawn_node.x, spawn_node.y)
예제 #30
0
def interaction(screen, bill, bull):

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

    keys = pygame.key.get_pressed()

#WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

    if keys[pygame.K_w] and not bill.has_target() and not bull.has_target(): # North

        future_tile_number_bill = bill.get_number() - Tile.V
        future_tile_number_bull = bull.get_number() - Tile.V

        if future_tile_number_bill and future_tile_number_bull in range(1, Tile.total_tiles + 1):

                if future_tile_number_bull == Tile.MAP['point'] and not Tile.get_tile(future_tile_number_bill).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))

                if future_tile_number_bill != bull.get_number():
                    if Tile.get_tile(future_tile_number_bill).walkable:
                        bill.set_target(Tile.get_tile(future_tile_number_bill))

                if future_tile_number_bull != bill.get_number():
                    if Tile.get_tile(future_tile_number_bull).walkable:
                        bull.set_target(Tile.get_tile(future_tile_number_bull))


#SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

    if keys[pygame.K_s] and not bill.has_target() and not bull.has_target(): # South

        future_tile_number_bill = bill.get_number() + Tile.V
        future_tile_number_bull = bull.get_number() + Tile.V

        if future_tile_number_bill and future_tile_number_bull in range(1, Tile.total_tiles + 1):

            if future_tile_number_bull == Tile.MAP['point'] and not Tile.get_tile(future_tile_number_bill).walkable:
                bull.set_target(Tile.get_tile(future_tile_number_bull))

            if future_tile_number_bill != bull.get_number():
                if Tile.get_tile(future_tile_number_bill).walkable:
                    bill.set_target(Tile.get_tile(future_tile_number_bill))

            if future_tile_number_bull != bill.get_number():
                if Tile.get_tile(future_tile_number_bull).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))

#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    if keys[pygame.K_a] and not bill.has_target() and not bull.has_target(): # West

        future_tile_number_bill = bill.get_number() - Tile.H
        future_tile_number_bull = bull.get_number() - Tile.H

        if future_tile_number_bill and future_tile_number_bull in range(1, Tile.total_tiles + 1):

            if future_tile_number_bull == Tile.MAP['point'] and not Tile.get_tile(future_tile_number_bill).walkable:
                bull.set_target(Tile.get_tile(future_tile_number_bull))

            if future_tile_number_bill != bull.get_number():
                if Tile.get_tile(future_tile_number_bill).walkable:
                    bill.set_target(Tile.get_tile(future_tile_number_bill))

            if future_tile_number_bull != bill.get_number():
                if Tile.get_tile(future_tile_number_bull).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))

#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

    if keys[pygame.K_d] and not bill.has_target() and not bull.has_target(): # East

        future_tile_number_bill = bill.get_number() + Tile.H
        future_tile_number_bull = bull.get_number() + Tile.H

        if future_tile_number_bill and future_tile_number_bull in range(1, Tile.total_tiles + 1):

            if future_tile_number_bull == Tile.MAP['point'] and not Tile.get_tile(future_tile_number_bill).walkable:
                bull.set_target(Tile.get_tile(future_tile_number_bull))

            if future_tile_number_bill != bull.get_number():
                if Tile.get_tile(future_tile_number_bill).walkable:
                    bill.set_target(Tile.get_tile(future_tile_number_bill))

            if future_tile_number_bull != bill.get_number():
                if Tile.get_tile(future_tile_number_bull).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))

    if keys[pygame.K_u] and not bill.has_target() and not bull.has_target(): # North
        bill.unnatural = True
        bill.set_target(Tile.get_tile(Tile.MAP['spawn'][1]))

    if keys[pygame.K_ESCAPE]:
        functions.state = 3
예제 #31
0
def interaction(screen, survivor):

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

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_e: # cycle through weapons array
                survivor.current_weapon +=1
                survivor.current_weapon %=2 # back to 0
             
    keys = pygame.key.get_pressed()

    if keys[pygame.K_w]: # North
        future_tile_number = survivor.get_number() - Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1): # stops from going out of bounds
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('n')
                  

    if keys[pygame.K_s]: # South
        future_tile_number = survivor.get_number() + Tile.V
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('s')


    if keys[pygame.K_a]: # West
        future_tile_number = survivor.get_number() - Tile.H

        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)    
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('w')


    if keys[pygame.K_d]: # East
        future_tile_number = survivor.get_number() + Tile.H
        if future_tile_number in range(1, Tile.total_tiles + 1):
            future_tile = Tile.get_tile(future_tile_number)
            if future_tile.walkable:
                survivor.set_target(future_tile)
                survivor.rotate('e')


    if keys[pygame.K_LEFT]:
        survivor.rotate('w')
        Bullet(survivor.centerx, survivor.centery, -10, 0, 'w', survivor.get_bullet_type())        

    elif keys[pygame.K_RIGHT]:
        survivor.rotate('e')
        Bullet(survivor.centerx, survivor.centery, 10, 0, 'e', survivor.get_bullet_type())
        
    elif keys[pygame.K_UP]:
        survivor.rotate('n')
        Bullet(survivor.centerx, survivor.centery, 0, -10, 'n', survivor.get_bullet_type())

    elif keys[pygame.K_DOWN]:
        survivor.rotate('s')
        Bullet(survivor.centerx, survivor.centery, 0, 10, 's', survivor.get_bullet_type())
예제 #32
0
 def spawn(total_frames, FPS):
     if total_frames % (FPS & 2) == 0:
         r = randint(0, len(Zombie.spawn_tiles) - 1)
         tile_num = Zombie.spawn_tiles[r]
         spawn_node = Tile.get_tile(tile_num)
         Zombie(spawn_node.x, spawn_node.y)
예제 #33
0
def interaction(screen, bill, bull):

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

    keys = pygame.key.get_pressed()

    #WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

    if keys[pygame.
            K_w] and not bill.has_target() and not bull.has_target():  # North

        future_tile_number_bill = bill.get_number() - Tile.V
        future_tile_number_bull = bull.get_number() - Tile.V

        if future_tile_number_bill and future_tile_number_bull in range(
                1, Tile.total_tiles + 1):

            if future_tile_number_bull == Tile.MAP[
                    'point'] and not Tile.get_tile(
                        future_tile_number_bill).walkable:
                bull.set_target(Tile.get_tile(future_tile_number_bull))

            if future_tile_number_bill != bull.get_number():
                if Tile.get_tile(future_tile_number_bill).walkable:
                    bill.set_target(Tile.get_tile(future_tile_number_bill))

            if future_tile_number_bull != bill.get_number():
                if Tile.get_tile(future_tile_number_bull).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))

#SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

    if keys[pygame.
            K_s] and not bill.has_target() and not bull.has_target():  # South

        future_tile_number_bill = bill.get_number() + Tile.V
        future_tile_number_bull = bull.get_number() + Tile.V

        if future_tile_number_bill and future_tile_number_bull in range(
                1, Tile.total_tiles + 1):

            if future_tile_number_bull == Tile.MAP[
                    'point'] and not Tile.get_tile(
                        future_tile_number_bill).walkable:
                bull.set_target(Tile.get_tile(future_tile_number_bull))

            if future_tile_number_bill != bull.get_number():
                if Tile.get_tile(future_tile_number_bill).walkable:
                    bill.set_target(Tile.get_tile(future_tile_number_bill))

            if future_tile_number_bull != bill.get_number():
                if Tile.get_tile(future_tile_number_bull).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))

#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    if keys[pygame.
            K_a] and not bill.has_target() and not bull.has_target():  # West

        future_tile_number_bill = bill.get_number() - Tile.H
        future_tile_number_bull = bull.get_number() - Tile.H

        if future_tile_number_bill and future_tile_number_bull in range(
                1, Tile.total_tiles + 1):

            if future_tile_number_bull == Tile.MAP[
                    'point'] and not Tile.get_tile(
                        future_tile_number_bill).walkable:
                bull.set_target(Tile.get_tile(future_tile_number_bull))

            if future_tile_number_bill != bull.get_number():
                if Tile.get_tile(future_tile_number_bill).walkable:
                    bill.set_target(Tile.get_tile(future_tile_number_bill))

            if future_tile_number_bull != bill.get_number():
                if Tile.get_tile(future_tile_number_bull).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))

#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

    if keys[pygame.
            K_d] and not bill.has_target() and not bull.has_target():  # East

        future_tile_number_bill = bill.get_number() + Tile.H
        future_tile_number_bull = bull.get_number() + Tile.H

        if future_tile_number_bill and future_tile_number_bull in range(
                1, Tile.total_tiles + 1):

            if future_tile_number_bull == Tile.MAP[
                    'point'] and not Tile.get_tile(
                        future_tile_number_bill).walkable:
                bull.set_target(Tile.get_tile(future_tile_number_bull))

            if future_tile_number_bill != bull.get_number():
                if Tile.get_tile(future_tile_number_bill).walkable:
                    bill.set_target(Tile.get_tile(future_tile_number_bill))

            if future_tile_number_bull != bill.get_number():
                if Tile.get_tile(future_tile_number_bull).walkable:
                    bull.set_target(Tile.get_tile(future_tile_number_bull))
예제 #34
0
 def get_tile(self):
     return Tile.get_tile(self.get_number())
예제 #35
0
def build_controls(screen):

    Mpos = pygame.mouse.get_pos()  # [x, y]
    Mx = Mpos[0] / Tile.width
    My = Mpos[1] / Tile.height
    LEFT = 1
    MIDDLE = 2
    RIGHT = 3

    block_type = block_default.get()

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            print Tile.MAP
            pygame.quit()
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == LEFT:
                for tile in Tile.List:
                    if tile.x == (Mx * Tile.width) and tile.y == (My * Tile.width):

                        print "Trying to create {} block on tile: {}".format(block_type, tile.number)

                        if block_type == "solid":
                            if tile.type == "empty":
                                Tile.MAP["solids"].append(tile.number)
                            elif tile.number == Tile.MAP["point"]:
                                tile.MAP["point"] = 0
                            elif tile.number in Tile.MAP["holes"]:
                                Tile.MAP["holes"].remove(tile.number)

                        elif block_type == "point":
                            if tile.type == "empty":
                                if Tile.get_tile(Tile.MAP["point"]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["point"]).type = "empty"
                                    Tile.get_tile(Tile.MAP["point"]).walkable = False
                                Tile.MAP["point"] = tile.number
                            if tile.number in Tile.MAP["solids"]:
                                if Tile.get_tile(Tile.MAP["point"]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["point"]).type = "empty"
                                    Tile.get_tile(Tile.MAP["point"]).walkable = False
                                Tile.MAP["point"] = tile.number
                                Tile.MAP["solids"].remove(tile.number)
                            elif tile.number in Tile.MAP["holes"]:
                                if Tile.get_tile(Tile.MAP["point"]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["point"]).type = "empty"
                                    Tile.get_tile(Tile.MAP["point"]).walkable = False
                                Tile.MAP["point"] = tile.number
                                Tile.MAP["holes"].remove(tile.number)

                        elif block_type == "hole":
                            if tile.type == "empty":
                                Tile.MAP["holes"].append(tile.number)
                            if tile.number in Tile.MAP["solids"]:
                                Tile.MAP["solids"].remove(tile.number)
                            elif tile.number == Tile.MAP["point"]:
                                Tile.MAP["point"] = 0

                        elif block_type == "spawnbill":
                            elements = 0
                            for i in range(0, Tile.total_tiles + 1):
                                if i in Tile.MAP["spawn"]:
                                    elements += 1

                            if elements == 1:
                                Tile.MAP["spawn"].append(1)
                            elif elements > 2 or elements == 0:
                                Tile.MAP["spawn"] = [1, 1]

                            if tile.type == "empty":
                                if Tile.get_tile(Tile.MAP["spawn"][0]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["spawn"][0]).type = "empty"
                                    Tile.get_tile(Tile.MAP["spawn"][0]).walkable = False
                                Tile.MAP["spawn"][0] = tile.number

                            if tile.number in Tile.MAP["solids"]:
                                if Tile.get_tile(Tile.MAP["spawn"][0]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["spawn"][0]).type = "empty"
                                    Tile.get_tile(Tile.MAP["spawn"][0]).walkable = False
                                Tile.MAP["spawn"][0] = tile.number

                            elif tile.number in Tile.MAP["holes"]:
                                if Tile.get_tile(Tile.MAP["spawn"][0]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["spawn"][0]).type = "empty"
                                    Tile.get_tile(Tile.MAP["spawn"][0]).walkable = False
                                Tile.MAP["spawn"][0] = tile.number
                                Tile.MAP["holes"].remove(tile.number)

                        elif block_type == "spawnbull":
                            elements = 0
                            for i in range(0, Tile.total_tiles + 1):
                                if i in Tile.MAP["spawn"]:
                                    elements += 1
                            if elements == 1:
                                Tile.MAP["spawn"].append(1)
                            elif elements > 2 or elements == 0:
                                Tile.MAP["spawn"] = [1, 1]

                            if tile.type == "empty":
                                if Tile.get_tile(Tile.MAP["spawn"][1]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["spawn"][1]).type = "empty"
                                    Tile.get_tile(Tile.MAP["spawn"][1]).walkable = False
                                Tile.MAP["spawn"][1] = tile.number

                            if tile.number in Tile.MAP["solids"]:
                                if Tile.get_tile(Tile.MAP["spawn"][1]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["spawn"][1]).type = "empty"
                                    Tile.get_tile(Tile.MAP["spawn"][1]).walkable = False
                                Tile.MAP["spawn"][1] = tile.number

                            elif tile.number in Tile.MAP["holes"]:
                                if Tile.get_tile(Tile.MAP["spawn"][1]) in Tile.List:
                                    Tile.get_tile(Tile.MAP["spawn"][1]).type = "empty"
                                    Tile.get_tile(Tile.MAP["spawn"][1]).walkable = False
                                Tile.MAP["spawn"][1] = tile.number
                                Tile.MAP["holes"].remove(tile.number)

                        tile.type = block_type
                        tile.walkable = True

                        if Tile.get_tile(tile.number).type == block_type:
                            print "Success!"
                        else:
                            print "Failed."

            elif event.button == RIGHT:
                for tile in Tile.List:
                    if tile.x == (Mx * Tile.width) and tile.y == (My * Tile.width):

                        i = 0

                        if tile.type == "empty":
                            print "Tile is already empty."
                        else:
                            print "Trying to remove {} block from tile: {}".format(tile.type, tile.number)
                            i = 1

                        if tile.type == "point":
                            Tile.MAP["point"] = 0
                        else:
                            if tile.number in Tile.MAP["solids"]:
                                Tile.MAP["solids"].remove(tile.number)
                            elif tile.number in Tile.MAP["holes"]:
                                Tile.MAP["holes"].remove(tile.number)
                            elif tile.number in Tile.MAP["spawn"]:
                                Tile.MAP["spawn"].remove(tile.number)

                        tile.type = "empty"
                        tile.walkable = False

                        if tile.type == "empty" and i == 1:
                            print "Sucess!"
                        else:
                            print "Failed."
예제 #36
0
    def get_tile(self):

        return Tile.get_tile(self.get_number())
예제 #37
0
 def respawn(bill, bull):
     bill.x, bill.y = Tile.get_tile(Tile.MAP['spawn'][0]).x, Tile.get_tile(Tile.MAP['spawn'][0]).y
     bull.x, bull.y = Tile.get_tile(Tile.MAP['spawn'][1]).x, Tile.get_tile(Tile.MAP['spawn'][1]).y