#if !defined (__PLAYER_HPP)
#define __PLAYER_HPP

#include "point.hpp"

class WormPoint : public Point
{
public:
  WormPoint(int initX, int initY, int initColor);
  WormPoint *Next;       // Pekare till n„sta nod i listan
  WormPoint *Prev;       // Pekare till f”reg†ende nod i listan
};

enum Direction   { right, down, left, up };

class Worm
{
public:
  int       head_x;                              // Huvudets x koord
  int       head_y;                              // Huvudets y koord
  Boolean   grow;                                // Status skall v„xa
  int       score;

  Worm();                                        // Konstruktor

  void Setup(int InitX, int InitY,               // Initierar en spelare
             Direction InitDir, int InitColor,
             char InitKeyR, char InitKeyL, char InitKeyT);
  void AddPoint();                               // L„gg till en maskpunkt
  int Kollision(int c1, int c2=-1, int c3=-1,    // Kolla efter kollision
                int c4=-1, int c5=-1);
  void CheckKeys(char Ch);                       // Kolla tangentbordet
  void CalcNewPos();                             // R„kna ut ny position
  void WormMove();                               // Flytta masken fram†t
  Boolean Bury(Boolean make_noice);              // Begrav masken
  int GetLength() { return length; };
  Boolean IsDead() { return dead; };
  Boolean IsBuried() { return buried; };
  void Kill() { dead = true; };

private:
  Direction dir;                                 // K”rriktning
  char      key_right;                           // Styrtangent h”ger
  char      key_left;                            // Styrtangent v„nster
  char      key_tail;                            // Styrtangent ”ka svans
  Boolean   dead;                                // Status d”d
  Boolean   buried;                              // Status begravd
  WormPoint *Head;                               // F”rsta punkten
  WormPoint *Tail;                               // Sista punkten
  int       cntr;                                // R„knare vid begravning
  int       color;                               // F„rg
  int       length;                              // L„ngd

  void RemovePoint();                            // Ta bort en maskpunkt
};

#endif // __PLAYER_HPP
