add: Food
This commit is contained in:
		
							parent
							
								
									bbc92b1ca9
								
							
						
					
					
						commit
						ec9b9c90ef
					
				
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							@ -32,12 +32,13 @@ class filler():
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
            ],
 | 
			
		||||
            "enemy_spawns": [
 | 
			
		||||
                 { "x" : 1, "y" : 2 },
 | 
			
		||||
                 { "x" : 3, "y" : 12 },
 | 
			
		||||
                 { "x" : 1, "y" : 6 },
 | 
			
		||||
                 { "x" : 10, "y" : 10 }
 | 
			
		||||
            ],
 | 
			
		||||
            "enemy_spawns": [[
 | 
			
		||||
                 { "x" : 1, "y" : 3, "tier": 1, "sleep": 600, "delay": 600},
 | 
			
		||||
                 { "x" : 12, "y" : 7,"tier": 1, "sleep": 9000, "delay": 9000 },
 | 
			
		||||
                 { "x" : 1, "y" : 4, "tier": 1,"sleep": 800, "delay": 800 },
 | 
			
		||||
                 { "x" : 10, "y" : 0,"tier": 1, "sleep": 600, "delay": 600 }
 | 
			
		||||
            ]],
 | 
			
		||||
            
 | 
			
		||||
            "size" : [],
 | 
			
		||||
            "floor": []
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										102
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								main.py
									
									
									
									
									
								
							@ -1,11 +1,18 @@
 | 
			
		||||
import arcade
 | 
			
		||||
import json
 | 
			
		||||
import math
 | 
			
		||||
import random
 | 
			
		||||
from fill_level import filler
 | 
			
		||||
 | 
			
		||||
SCREEN_WIDTH = 800
 | 
			
		||||
SCREEN_HEIGHT = 600
 | 
			
		||||
 | 
			
		||||
class food():
 | 
			
		||||
    def __init__(self, x, y, healf = 1):
 | 
			
		||||
        self.x = x
 | 
			
		||||
        self.y = y
 | 
			
		||||
        self.healf = healf
 | 
			
		||||
    
 | 
			
		||||
class body():
 | 
			
		||||
    def __init__(self, x, y, rotate, type):
 | 
			
		||||
        self.x = x
 | 
			
		||||
@ -19,16 +26,32 @@ class SNAKE():
 | 
			
		||||
            body(star_point_x, star_point_y, start_rotate, "head"),
 | 
			
		||||
            body(star_point_x - 1, star_point_y, start_rotate, "tail")
 | 
			
		||||
        ]
 | 
			
		||||
    def check_contact(self,x,y):
 | 
			
		||||
        cont = 0
 | 
			
		||||
        for body in self.body:
 | 
			
		||||
            if body.x == x and body.y == y:
 | 
			
		||||
                cont = 1
 | 
			
		||||
        return cont
 | 
			
		||||
    def add_dody(self):
 | 
			
		||||
        self.body[len(self.body)-1].type = "body"
 | 
			
		||||
        last_body = self.body[len(self.body)-1]
 | 
			
		||||
        new_body = body(0,0, last_body.rotate, "tail")
 | 
			
		||||
        v_x = int(-math.sin(-last_body.rotate * math.pi / 180))
 | 
			
		||||
        new_body.x = -v_x + last_body.x
 | 
			
		||||
        v_y = int(math.cos(-last_body.rotate * math.pi / 180))
 | 
			
		||||
        new_body.y = -v_y + last_body.y
 | 
			
		||||
        self.body.append(new_body)
 | 
			
		||||
 | 
			
		||||
    def move(self, vector):
 | 
			
		||||
        self.body[0].rotate = vector * 90
 | 
			
		||||
        i = 0
 | 
			
		||||
        while i < len(self.body):
 | 
			
		||||
        i = len(self.body)-1
 | 
			
		||||
        while i > 0:
 | 
			
		||||
            if self.body[i].type == "body" or self.body[i].type == "tail":
 | 
			
		||||
                self.body[i].x = self.body[i-1].x
 | 
			
		||||
                self.body[i].y = self.body[i-1].y
 | 
			
		||||
                self.body[i].rotate = self.body[i-1].rotate 
 | 
			
		||||
            i = i + 1
 | 
			
		||||
        a = int(math.cos(-self.body[0].rotate * math.pi / 180))
 | 
			
		||||
            i = i - 1
 | 
			
		||||
            
 | 
			
		||||
        self.body[0].x = int(-math.sin(-self.body[0].rotate * math.pi / 180)) + self.body[0].x
 | 
			
		||||
        self.body[0].y = int(math.cos(-self.body[0].rotate * math.pi / 180)) + self.body[0].y
 | 
			
		||||
 | 
			
		||||
@ -68,15 +91,20 @@ class MYGAME(arcade.Window):
 | 
			
		||||
        
 | 
			
		||||
        self.player_list = arcade.SpriteList()
 | 
			
		||||
        self.floor_list = arcade.SpriteList()
 | 
			
		||||
        self.eat_list = arcade.SpriteList()
 | 
			
		||||
        
 | 
			
		||||
        self.enemies_list = arcade.SpriteList()
 | 
			
		||||
        self.enemy_spanw = arcade.SpriteList()
 | 
			
		||||
        self.enemy_spawn = arcade.SpriteList()
 | 
			
		||||
 | 
			
		||||
        grid = fill_empty_grid()
 | 
			
		||||
        self.floor_grid = self.arr2grid(self.Lvl_data.floor, grid)
 | 
			
		||||
        self.print_grid(self.floor_grid)
 | 
			
		||||
        self.snake = SNAKE(self.Lvl_data.start_point["x"], self.Lvl_data.start_point["y"])
 | 
			
		||||
 | 
			
		||||
        # food
 | 
			
		||||
        self.food_list = arcade.SpriteList()
 | 
			
		||||
        self.food_sleep = 300
 | 
			
		||||
        self.delay = 400
 | 
			
		||||
        self.food = []
 | 
			
		||||
        # Счет
 | 
			
		||||
        self.score = 0
 | 
			
		||||
        self.scale_ = 1.3
 | 
			
		||||
@ -103,9 +131,22 @@ class MYGAME(arcade.Window):
 | 
			
		||||
        # if "enemies" in self.level_data:
 | 
			
		||||
        #     for enemy in self.level_data["enemies"]:
 | 
			
		||||
        #         enemy_sprite = arcade.Sprite(enemy["sprite"], 1)
 | 
			
		||||
        #         enemy_sprite.center_x = enemy["x"] * 32
 | 
			
		||||
        #         enemy_sprite.center_y = enemy["y"] * 32
 | 
			
		||||
        #         enemy_sprite.center_x = self.level_start[0] - 16 + ( enemy["x"] + 1 ) * 32 * self.scale_
 | 
			
		||||
        #         enemy_sprite.center_y = self.level_start[0] - 16 + ( enemy["y"] + 1 ) * 32 * self.scale_
 | 
			
		||||
        #         self.enemies_list.append(enemy_sprite)
 | 
			
		||||
    def spawn_food(self):
 | 
			
		||||
        spawn = False
 | 
			
		||||
        while spawn == False:
 | 
			
		||||
            x = random.randint(0, 14)
 | 
			
		||||
            y = random.randint(0, 14)
 | 
			
		||||
            if self.floor_grid[y][x] == 1 and not(self.snake.check_contact(x,y)):
 | 
			
		||||
                self.food.append(food(x,y))
 | 
			
		||||
                food_sprite = arcade.Sprite(f"./DATA/Sprites/Enemies/Tier 0/healthy_food.png", self.scale_)
 | 
			
		||||
                food_sprite.angle = 0
 | 
			
		||||
                food_sprite.center_x = self.level_start[0] - 16 + ( x + 1 ) * 32 * self.scale_
 | 
			
		||||
                food_sprite.center_y = self.level_start[1] - 16 + ( y + 1 ) * 32 * self.scale_
 | 
			
		||||
                self.food_list.append(food_sprite)
 | 
			
		||||
                spawn = True
 | 
			
		||||
 | 
			
		||||
    def update(self):
 | 
			
		||||
        if len(self.snake.body) > 0:
 | 
			
		||||
@ -116,12 +157,37 @@ class MYGAME(arcade.Window):
 | 
			
		||||
                self.player_list[i].center_x = self.level_start[0] - 16 + ( self.snake.body[i].x + 1 ) * 32 * self.scale_
 | 
			
		||||
                self.player_list[i].center_y = self.level_start[1] - 16 + ( self.snake.body[i].y + 1 ) * 32 * self.scale_
 | 
			
		||||
                i = i + 1
 | 
			
		||||
            
 | 
			
		||||
        # Food
 | 
			
		||||
        self.food_sleep -= 1
 | 
			
		||||
        if self.food_sleep <= 0:
 | 
			
		||||
            self.spawn_food()
 | 
			
		||||
            self.food_sleep = self.delay
 | 
			
		||||
        i = 0
 | 
			
		||||
        while i < len(self.food_list):
 | 
			
		||||
            if self.snake.check_contact(self.food[i].x, self.food[i].y):
 | 
			
		||||
                self.food_list[i].kill()
 | 
			
		||||
                self.food.pop(i)
 | 
			
		||||
                self.score += 1
 | 
			
		||||
                self.snake.add_dody()
 | 
			
		||||
                self.player_list.append(arcade.Sprite())
 | 
			
		||||
            i += 1
 | 
			
		||||
        # Enemy_spawn
 | 
			
		||||
        for spawn in self.Lvl_data.enemy_spawns[0]:
 | 
			
		||||
            spawn["sleep"] -= 1
 | 
			
		||||
            if spawn["sleep"] <= 0:
 | 
			
		||||
                spawn["sleep"] = spawn["delay"]
 | 
			
		||||
                self.spawn_enemy(spawn["y"], spawn["x"], spawn["tier"])
 | 
			
		||||
 | 
			
		||||
    def spawn_enemy(self, y, x, tier):
 | 
			
		||||
        type = random.randint(0, len(self.Lvl_data.enemy_types[tier-1]))
 | 
			
		||||
        print_spawn("tier: " + str(type), x, y)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def print_grid(self, grid):
 | 
			
		||||
        x = 0 
 | 
			
		||||
        y = 15
 | 
			
		||||
        y = 14
 | 
			
		||||
        print_ = ''
 | 
			
		||||
        while y > 0:
 | 
			
		||||
        while y >= 0:
 | 
			
		||||
            while x < 15:
 | 
			
		||||
                print_ += "  " if grid[y][x] == 0 else "1 "
 | 
			
		||||
                x += 1 
 | 
			
		||||
@ -144,21 +210,21 @@ class MYGAME(arcade.Window):
 | 
			
		||||
 | 
			
		||||
        # Get the first sprite (head) from the player list
 | 
			
		||||
        if len(self.player_list) > 0:
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            if key in (arcade.key.UP, arcade.key.W):
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 180:   
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 180 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y+1)):   
 | 
			
		||||
                    self.snake.move(0)
 | 
			
		||||
                
 | 
			
		||||
            elif key in (arcade.key.DOWN, arcade.key.S):
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 0:   
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 0 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y-1)):   
 | 
			
		||||
                    self.snake.move(2)
 | 
			
		||||
 | 
			
		||||
            elif key in (arcade.key.LEFT, arcade.key.A):
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 90:   
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 90 and not(self.snake.check_contact(self.snake.body[0].x - 1,self.snake.body[0].y)):   
 | 
			
		||||
                    self.snake.move(3)
 | 
			
		||||
 | 
			
		||||
            elif key in (arcade.key.RIGHT, arcade.key.D):
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 270:   
 | 
			
		||||
                if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 270 and not(self.snake.check_contact(self.snake.body[0].x + 1,self.snake.body[0].y)):   
 | 
			
		||||
                    self.snake.move(1)
 | 
			
		||||
 | 
			
		||||
    def on_key_release(self, key, modifiers):
 | 
			
		||||
@ -177,9 +243,11 @@ class MYGAME(arcade.Window):
 | 
			
		||||
        # Отрисовываем все спрайты
 | 
			
		||||
        self.floor_list.draw()
 | 
			
		||||
        self.enemies_list.draw()
 | 
			
		||||
        self.eat_list.draw()
 | 
			
		||||
        self.food_list.draw()
 | 
			
		||||
        self.player_list.draw()
 | 
			
		||||
 | 
			
		||||
def print_spawn(who, x, y):
 | 
			
		||||
    print(f"Spawn: {who}\nx: {x}\ny: {y}")
 | 
			
		||||
 | 
			
		||||
def fill_empty_grid():
 | 
			
		||||
    grid = []
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user