package com.game;

import java.util.Vector;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
public class SnakeMap_Canvas extends Canvas
{
   private Vector Snake_List=new Vector() ;//用来储存蛇的单元容器
   
   private int Canvas_Width=0;//画板的宽度
   private int Canvas_Height=0;//画板的高度
   static Snake_Element element;
   static Snake_Element element1;
   static Snake_Element element2;
   static Snake_Element headSanke;
   int i=0;
   int j =0;
    public SnakeMap_Canvas()
    {
     Canvas_Width=getWidth();
     Canvas_Height=getHeight();
    
     for(int i=0;i<8;i++)//初始化开始蛇身共有八段
     {
     Snake_List.addElement(new Snake_Element(40-i*Snake_Direction.SNAKE_SIZE,50));
     }
    
     new SnakeMoveThread().start();
    }
protected void paint(Graphics g)
{
/*****************
* 清屏相当于重画
* ***************/
  g.setColor(255, 255, 255);
  g.fillRect(0, 0, Canvas_Width, Canvas_Height);
  g.setColor(0,0,0);
  for(i=0;i<Snake_List.size();i++)
  {
  element =(Snake_Element)Snake_List.elementAt(i);   
  g.fillRect(element.getPoint_x(), element.getPoint_Y(), element.getSize(),  element.getSize());
  }   
}
   private class  SnakeMoveThread extends Thread
   {
public void run()
{
while(true)
{
 sanke_Move();
 repaint();
 try 
 {
Thread.sleep(200);
 }
 catch (InterruptedException e)
 {
e.printStackTrace();
 }
 
}
 }
public void sanke_Move()
{
 for(j=Snake_List.size()-1;j>0;j--){
 element1=(Snake_Element)Snake_List.elementAt(j);   
 element2=(Snake_Element)Snake_List.elementAt(j-1);
  element1.setDirection(element2.getDirection());
  element1.setPoint_x(element2.getPoint_x());
  element1.setPoint_Y(element2.getPoint_Y());   
  }   
 
 headSanke =(Snake_Element)Snake_List.elementAt(0);
 
 //headSanke.setPoint_x(headSanke.getPoint_x()+Snake_Direction.SNAKE_SIZE); 按键游戏
// System.out.println("x: "+headSanke.getPoint_x()+" / y:"+headSanke.getPoint_Y());
// System.out.println("width: "+Canvas_Width);
 
 if(headSanke.getDirection()==Snake_Direction.RIGHT||headSanke.getDirection()==Snake_Direction.RIGHT_x){
 if(headSanke.getPoint_x()+Snake_Direction.SNAKE_SIZE>Canvas_Width-30)
 {
  if(headSanke.getPoint_Y()+Snake_Direction.SNAKE_SIZE<Canvas_Height-20)
  {
 headSanke.setPoint_Y(headSanke.getPoint_Y()+Snake_Direction.SNAKE_SIZE);
 headSanke.setDirection(Snake_Direction.DOWN);
  }
  else {
  headSanke.setPoint_Y(headSanke.getPoint_Y()-Snake_Direction.SNAKE_SIZE);
 headSanke.setDirection(Snake_Direction.UP);
  }  
 }
 else  
 headSanke.setPoint_x(headSanke.getPoint_x()+Snake_Direction.SNAKE_SIZE); 
 
 }
 else if(headSanke.getDirection()==Snake_Direction.UP||headSanke.getDirection()==Snake_Direction.UP_y)
 {
 if(headSanke.getPoint_Y()-Snake_Direction.SNAKE_SIZE<0)
 {
  if(headSanke.getPoint_x()-Snake_Direction.SNAKE_SIZE<1)
  {
  headSanke.setDirection(Snake_Direction.RIGHT) ;
  headSanke.setPoint_x(headSanke.getPoint_x()+Snake_Direction.SNAKE_SIZE);
  }
  else
  {
  headSanke.setDirection(Snake_Direction.LEFT) ;
  headSanke.setPoint_x(headSanke.getPoint_x()-Snake_Direction.SNAKE_SIZE);
  }
 }
 else
 headSanke.setPoint_Y(headSanke.getPoint_Y()-Snake_Direction.SNAKE_SIZE)  ;
 
 }
 else if(headSanke.getDirection()==Snake_Direction.LEFT||headSanke.getDirection()==Snake_Direction.LEFT_x)
 {
 if(headSanke.getPoint_x()-Snake_Direction.SNAKE_SIZE<1)
 {
 if(headSanke.getPoint_Y()-Snake_Direction.SNAKE_SIZE<1)
 {
 headSanke.setPoint_Y(headSanke.getPoint_Y()+Snake_Direction.SNAKE_SIZE);
 headSanke.setDirection(Snake_Direction.DOWN);
 }
 else
 {
 headSanke.setPoint_Y(headSanke.getPoint_Y()-Snake_Direction.SNAKE_SIZE);
 headSanke.setDirection(Snake_Direction.UP); 
 }
 }
 else
 headSanke.setPoint_x(headSanke.getPoint_x()-Snake_Direction.SNAKE_SIZE);
 }
 else if(headSanke.getDirection()==Snake_Direction.DOWN||headSanke.getDirection()==Snake_Direction.DOWN_y)
 {
 if(headSanke.getPoint_Y()+Snake_Direction.SNAKE_SIZE>Canvas_Height-20)
 {
 if(headSanke.getPoint_x()-Snake_Direction.SNAKE_SIZE<1)
 {
  headSanke.setDirection(Snake_Direction.RIGHT) ;
  headSanke.setPoint_x(headSanke.getPoint_x()+Snake_Direction.SNAKE_SIZE);
 }  
 else
 {  
  headSanke.setDirection(Snake_Direction.LEFT) ;
  headSanke.setPoint_x(headSanke.getPoint_x()-Snake_Direction.SNAKE_SIZE);  
 }
 }
 else
 headSanke.setPoint_Y(headSanke.getPoint_Y()+Snake_Direction.SNAKE_SIZE)  ;
 }
}
private boolean gameIsOver()
{
 Snake_Element headSanke=(Snake_Element)Snake_List.elementAt(Snake_List.size()-1);
 if(headSanke.getPoint_x()+Snake_Direction.SNAKE_SIZE>Canvas_Width||headSanke.getPoint_x()<0)
 return true;
 if(headSanke.getPoint_Y()+Snake_Direction.SNAKE_SIZE>Canvas_Height||headSanke.getPoint_Y()<0)
 return true;
 
 return false;
}
 
 
   }

}