def __init__(self, screen, snake_sleep, quit_page, game_type):
      self.screen = screen
      self.snake_sleep = snake_sleep
      self.quit_page = quit_page
      self.draw_area = DrawArea(screen)
      self.players = []

      self.map0 = {  curses.KEY_UP : 3,
            curses.KEY_LEFT : 4,
            curses.KEY_DOWN : 1,
            curses.KEY_RIGHT : 2}
      self.player0 = Player(self.draw_area.width / 4,self.draw_area.height / 2, 3, 5, self.map0,self.draw_area,True)
      self.player0.add_to_obstacles(self.player0.snake)
      self.egg = Egg(self.draw_area, 9, 9)
      self.player0.add_to_food(self.egg)


      if game_type != 1:
         self.map1 = {  ord('w') : 3,
               ord('a') : 4,
               ord('s') : 1,
               ord('d') : 2}
         self.player1 = Player(9, 9, 1, 5, self.map1, self.draw_area,False)
         self.player1.add_to_obstacles(self.player0.snake)
         self.player1.add_to_obstacles(self.player1.snake)
         self.player1.add_to_food(self.egg)
         self.player0.add_to_obstacles(self.player1.snake)
      self.game_type = game_type
   def __init__(self, screen, quit_page, game_type):
      self.screen = screen
      self.draw_area = DrawArea(screen)

      self.menu_items = 3
      self.menu_ys = [40, 37, 34]
      self.menu_texts = ["Slow", "Medium", "Fast"]
      self.menu_sleeps = [0.200, 0.125, 0.080]
      self.game_type = game_type
      self.quit_page = quit_page
      self.current_item = 1
class SpeedMenuPage:
   def __init__(self, screen, quit_page, game_type):
      self.screen = screen
      self.draw_area = DrawArea(screen)

      self.menu_items = 3
      self.menu_ys = [40, 37, 34]
      self.menu_texts = ["Slow", "Medium", "Fast"]
      self.menu_sleeps = [0.200, 0.125, 0.080]
      self.game_type = game_type
      self.quit_page = quit_page
      self.current_item = 1

   def draw_loop(self):
	while True:
	
		keys = self.key_list()
		for key in keys:
			if key == curses.KEY_UP:
				self.move_pointer_up()
			if key == curses.KEY_DOWN:
				self.move_pointer_down()
			if key in [ord("\n"), ord(" ")]:
				snake_sleep = self.menu_sleeps[self.current_item]
				return GamingPage(self.screen, snake_sleep, self, self.game_type)
			if key == ord("r"):
				return self.quit_page

		# redraw the screen
		self.draw_area.clear()

		self.draw_menu_text()
		self.draw_menu_pointer()

		self.draw_area.paint_to_screen()

		time.sleep(0.001)
	
   def move_pointer_down(self): 
      if self.current_item < self.menu_items - 1:
         self.current_item += 1

   def move_pointer_up(self): 
      if self.current_item > 0:
         self.current_item += -1

   def draw_menu_text(self):

      self.draw_area.draw_str(25, 45, "SELECT SNAKE SPEED")

      text_x = 22

      for i in range(self.menu_items):
         self.draw_area.draw_str(text_x,self.menu_ys[i], self.menu_texts[i])

   def draw_menu_pointer(self):

      pointer_x = 42
      pointer_text = "<--"

      pointer_y = self.menu_ys[self.current_item]

      self.draw_area.draw_str(pointer_x, pointer_y, pointer_text)

   #Get list of keys since last gameloop
   def key_list(self):
      key_list = []
      switch = True
      while switch:
         key = self.screen.getch()
         if key == curses.ERR:
            switch = False
         else:
            key_list += [key]
      return key_list
class GamingPage:
   def __init__(self, screen, snake_sleep, quit_page, game_type):
      self.screen = screen
      self.snake_sleep = snake_sleep
      self.quit_page = quit_page
      self.draw_area = DrawArea(screen)
      self.players = []

      self.map0 = {  curses.KEY_UP : 3,
            curses.KEY_LEFT : 4,
            curses.KEY_DOWN : 1,
            curses.KEY_RIGHT : 2}
      self.player0 = Player(self.draw_area.width / 4,self.draw_area.height / 2, 3, 5, self.map0,self.draw_area,True)
      self.player0.add_to_obstacles(self.player0.snake)
      self.egg = Egg(self.draw_area, 9, 9)
      self.player0.add_to_food(self.egg)


      if game_type != 1:
         self.map1 = {  ord('w') : 3,
               ord('a') : 4,
               ord('s') : 1,
               ord('d') : 2}
         self.player1 = Player(9, 9, 1, 5, self.map1, self.draw_area,False)
         self.player1.add_to_obstacles(self.player0.snake)
         self.player1.add_to_obstacles(self.player1.snake)
         self.player1.add_to_food(self.egg)
         self.player0.add_to_obstacles(self.player1.snake)
      self.game_type = game_type
   #Get list of keys since last gameloop
   def key_list(self):
      key_list = []
      switch = True
      while switch:
         key = self.screen.getch()
         if key == curses.ERR:
            switch = False
         else:
            key_list += [key]
      return key_list

   def AI(self):
      if self.game_type != 1:
         direction = self.player0.snake.direction()
         egg_point_x = self.egg.position_x()
         snake_point_x = self.player0.snake.position_x()
         egg_point_y = self.egg.position_y()
         snake_point_y = self.player0.snake.position_y()
         screen_width = self.draw_area.width
         wall_right = screen_width - snake_point_x + egg_point_x
         plain_left = snake_point_x - egg_point_x
         wall_left = snake_point_x + screen_width - egg_point_x
         plain_right = egg_point_x - snake_point_x
         screen_height = self.draw_area.height
         wall_up = screen_height - snake_point_y + egg_point_y
         plain_down = snake_point_y - egg_point_y
         wall_down = snake_point_y + screen_height - egg_point_y
         plain_up = egg_point_y - snake_point_y
         if direction == 1 or 3:
            if snake_point_x < egg_point_x:
               if plain_right < wall_left:
                  return 2
               else:
                  return 4
            if snake_point_x > egg_point_x:
               if plain_left < wall_right:
                  return 4
               else:
                  return 2
         if direction == 2 or 4:
            if snake_point_y < egg_point_y:
               if plain_up < wall_down:
                  return 3
               else:
                  return 1
            if snake_point_y > egg_point_y:
               if plain_down < wall_up:
                  return 1
               else:
                  return 3
         return direction
   def draw_loop(self):

      while True:

         # Check for user input
         keys = self.key_list()
         for key in keys:
            if key == ord("r"):
               return self.quit_page
         if self.game_type != "Comp":
            dir = self.player0.key_decode(keys)
         elif self.game_type == "Comp":
            dir = self.AI()
         self.player0.snake.change_direction(dir)
         
         self.draw_area.clear()

         if self.game_type != 1:
            dir = self.player1.key_decode(keys)
            self.player1.snake.change_direction(dir)
            self.player1.player_functions()

         self.player0.player_functions()
         self.egg.draw()
         
         self.draw_area.paint_to_screen()
         
         # wait
         time.sleep(self.snake_sleep)