#include <avr/io.h>
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <math.h>
#define F_CPU 16000000UL
#include <avr/sleep.h>
#include <util/delay.h>
#include <string.h>
#include <stdio.h>

#include "character.h"
#include "uart.h"
#include "uart.c"
// UART file descriptor
// putchar and getchar are in uart.c
FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);

#define begin {
#define end }
#define MAINPAGE 1
#define PLAY 2
#define SETTINGS 3
#define LCD_RESET_0 PORTD &= ~( 1<<PD4 )
#define LCD_RESET_1 PORTD |= 1<<PD4
#define LCD_CS_SET PORTB |= 1<<PB0
#define LCD_CS_CLR PORTB &= ~( 1<<PB0 )
#define LCD_RS_SET PORTB |= 1<<PB1
#define LCD_RS_CLR PORTB &= ~( 1<<PB1 )
#define LCD_WR_SET PORTD |= 1<<PD7
#define LCD_WR_CLR PORTD &= ~( 1<<PD7 )
#define LCD_RD_SET PORTD |= 1<<PD3
#define LCD_RD_CLR PORTD &= ~( 1<<PD3 )
#define DATA_H PORTC
#define DATA_L PORTA
#define WIDE_HZ 16
#define HIGH_HZ 16
//control signals for touch panel
#define DCLK_UP PORTB|=(1<<PB7)
#define DCLK_DOWN PORTB&=~(1<<PB7)

#define CS_UP PORTB|=(1<<PB6)
#define CS_DOWN PORTB&=~(1<<PB6)

#define DIN_UP PORTB|=(1<<PB4)
#define DIN_DOWN PORTB&=~(1<<PB4)

//#define BUSY_UP pB5
//#define BUSY_DOWN

//#define DOUT_UP pB2
//#define DOUT_DOWN

//#define IRQ_UP pd2
//#define IRQ_DOWN
//============================new added define====================
#define radius 10
#define width 239
#define height 319

volatile int target_x;
volatile int target_y;

enum direct{left,up,right,down};
enum bool{false,true};
typedef struct {
int x;
int y;
char c;
int pre_x;
int pre_y;
int blong;
int id;
char property; //0,1,2,3,4,5,6???????K,?A,?Bishop,?Knight,?Rook,?Cannon,?Pawn
} chessman;
chessman ball1[16];
chessman ball2[16];
char cu1[]="RIVER";
// tables for DDS
signed char sineTable1[256] ;
signed char sineTable2[256] ;
char rampTable[256] ;
char buffer[12];
volatile unsigned long accumulator1 ;
volatile unsigned char highbyte1 ;
volatile unsigned long increment1;
volatile unsigned long accumulator2 ;
volatile unsigned char highbyte2 ;
volatile unsigned long increment2;
volatile unsigned long accumulator3 ;
volatile unsigned char highbyte3 ;
volatile unsigned long increment3;
volatile unsigned long f1,f;
volatile unsigned long f2;
volatile unsigned int time,time2,sample, rampCount;
volatile char count,countMS;
volatile unsigned int debouncecount;
volatile unsigned int debouncetimes=500;
unsigned int xpositionbuffer[40];
unsigned int ypositionbuffer[40];
unsigned int xplus;
unsigned int yplus;
unsigned int xmean;
unsigned int ymean;
unsigned int xmax;
unsigned int ymax;
unsigned int xmin;
unsigned int ymin;
unsigned int backgroundcolor=0xffff;

#define RAMPUPEND 250 // = 4*62.5 or 4mSec * 62.5 samples/mSec NOTE:max=255
#define RAMPDOWNSTART 6500 // = 104*62.5
#define RAMPDOWNEND 6750 // = 108*62.5 NOTE: RAMPDOWNEND-RAMPDOWNSTART<255
//===========================================
void delay_ms( unsigned int n )
{
unsigned int i,j;
unsigned int temp = n * ( F_CPU / 1000000 );

for( i=0;i<temp;i++ )
for( j=0;j<50;j++ );

}
//**************************************function definitions FOR TOUCHSCREEN************

void spi_initialize(); //spi initialize function
void IO_definition(); //define IOs
void WriteSPI(unsigned char num); //write to SPI
unsigned int ReadSPI(); //read SPI
void LCD_Write_Com( unsigned int reg );
void LCD_Write_Data( unsigned int value );
void LCD_Write_Com_Data( unsigned int reg, unsigned int value );
unsigned int LCD_Read_Data( unsigned int reg );
void LCD_Clear();
void LCD_Init(); //initialize the LCD
void Set_Cursor( unsigned int X_Pos, unsigned int Y_Pos );
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2); //Set the filling address
void draw_pixel(unsigned int x, unsigned int y, unsigned int color); //draw a pixel on LCD
void Paint(unsigned int color);
void show_colour_bar (void); //Color Bar on LCD
void colour_setting (void); // choose the color you want to be the backgroundcolor
void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned int color); //draw a line on LCD
void draw_circle(unsigned int x, unsigned int y, unsigned int r,unsigned int color); //draw a circle on LCD
void showcharacter(unsigned int x,unsigned int y,unsigned char value,unsigned int dcolor,unsigned int bgcolor); //show a character on LCD
void showcharacterstr(unsigned int x,unsigned int y, char *str,unsigned int dcolor,unsigned int bgcolor); //showa a string on LCD
void drawrectangle(unsigned int x1, unsigned int y1,unsigned int x2,unsigned int y2, unsigned int color); //draw the rectangle on LCD
void draw_mainpage(); //draw the mainpage
void draw_playpage();
void draw_settingspage();
void chinese_chessboard_init();
void sound_init(); //init the condition to produce sounds
void sine2(); // produce sine wave for sound effect
void eat_chessman(int id,int to_x,int to_y,int eaten_id);
void move_chessman(int id,int to_x,int to_y);
void remove_prev(int x, int y,unsigned int col);
void task();


/*******************************variable definition ***********************/
volatile int TP_X =0;
volatile int TP_Y =0;

volatile int lx =0;
volatile int ly =0;

volatile unsigned char mode = MAINPAGE;
volatile char map[90]={
1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 10, 0, 0, 0, 0, 0, 11, 0,
12, 0, 13, 0, 14, 0, 15, 0, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
28, 0, 29, 0, 30, 0, 31, 0, 32,
0, 26, 0, 0, 0, 0, 0, 27, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
17, 18, 19, 20, 21, 22, 23, 24, 25
} ;
volatile char flag=0;
char sign=0; // 0 means fail

//==============================added variable definition for implementing chess rules===================================

volatile int selected=0; // the id of selected chessman
//=====================================================================================================
void spi_initialize() //SPI start
{

DCLK_DOWN;
CS_UP;

DIN_UP;
DCLK_UP;
CS_DOWN;
}

void IO_definition()
{

PORTA = 0x00;
DDRA = 0xFF;
PORTC = 0x00;
DDRC = 0xFF;
PORTB = 1<<PB5;
//PORTB = 1<<PB3;
DDRB = 0b11011011;
PORTD = 0x04;
DDRD=0b11110010; //PD2 as input

EIMSK = 1<<INT0 ; // turn on int0
EICRA = 2 ; // falling edge is 2
}

void WriteSPI(unsigned char num) //SPI write, with frequency 16MHz/5
{
unsigned char count=0;
DCLK_DOWN;
for(count=0;count<8;count++)
{
if (num & 0x80)
{
DIN_UP;
}
else
{
DIN_DOWN;
}
num<<=1;
DCLK_DOWN;
asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");
DCLK_UP;
asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");

}
}

unsigned int ReadSPI() //SPI read
{
unsigned char count=0;
unsigned int Num=0;
for(count=0;count<12;count++)
{
Num<<=1;
DCLK_UP;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
DCLK_DOWN;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
if(PINB&0b00000100)
{ Num++;
}
}
return Num;
}

ISR(INT0_vect){
if ((PIND&0b00000100) == 0) //if irq==0
{
CS_DOWN;
delay_ms(1);
WriteSPI(0x90); // differential reference mode, see XPT2046 datasheet
delay_ms(1);
DCLK_UP;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
DCLK_DOWN;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
TP_Y=ReadSPI();
WriteSPI(0xD0); // differential reference mode
DCLK_UP;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
DCLK_DOWN;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
TP_X=ReadSPI();
CS_UP;

//get the (x, y) coordinate
lx=0.067*TP_X-10.67;
ly=341-0.086*TP_Y;
debouncetimes=500;
xpositionbuffer[debouncecount]=TP_X;
ypositionbuffer[debouncecount]=TP_Y;
debouncecount++;
lx=((TP_X-220)/14);
ly=320-((TP_Y-300)/11);
fprintf(stdout,"TP_X=%d TP_Y=%d\n\r",TP_X,TP_Y) ;

}
}

//===================================
//=====================================
void task(){
chessman b1;
if((ymean>2350) && (ymean<4000) && (mode==MAINPAGE) )
{
chinese_chessboard_init();
mode=PLAY;
delay_ms(1);
}
else if ((ymean<2350) && (mode==MAINPAGE) )
{
mode=SETTINGS;
colour_setting ();
delay_ms(1);
}

else if ((ymean>3500) && (ymean<6000) &&(mode==SETTINGS))
{
backgroundcolor=0xfe93;
}
else if ((ymean>3100) && (ymean<3450) &&(mode==SETTINGS))
{
backgroundcolor=0x07e0;
}
else if ((ymean>2600) && (ymean<3000) &&(mode==SETTINGS))
{
backgroundcolor=0x001f;
}
else if ((ymean>2200) && (ymean<2500) &&(mode==SETTINGS))
{
backgroundcolor=0xffe0;
}
else if ((ymean>1800) && (ymean<2100) &&(mode==SETTINGS))
{
backgroundcolor=0xf81f;
}
else if ((ymean>1400) && (ymean<1700) &&(mode==SETTINGS))
{
backgroundcolor=0x07ff;
}
else if ((ymean>900) && (ymean<1300) &&(mode==SETTINGS))
{
backgroundcolor=0xffff;
}
else if ( (ymean<800) &&(mode==SETTINGS))
{
mode=MAINPAGE;
draw_mainpage();
}
else if ( (mode==PLAY) && (xmean>0) && (xmean<=450) && (ymean>3400) && (ymean<=3700) )
{
if((map[0]<17)&&(map[0]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){
selected=map[0];

}
else if ((map[0]<17)&&(map[0]>0)&&(selected>16)&&(flag==1)){ //manipulate 2 eat 1
eat_chessman(selected,12,38,map[0]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[0]=selected;
selected=0;
}

}
else if((map[0]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // manipulate 1 eat 2
eat_chessman(selected,12,38,map[0]);
if(sign){
flag=1; //2 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[0]=selected;
selected=0;
}
}
else if( (map[0]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[0];
}
else if(map[0]==0){// no chessman move chess
if((selected>16)&&(flag==1)){
move_chessman(selected,12,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[0]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[0]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)

else if ( (xmean>570) && (xmean<840) && (ymean>3400) && (ymean<3700)&& (mode==PLAY) )
{
if((map[1]<17)&&(map[1]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){
selected=map[1];
}
else if ((map[1]<17)&&(map[1]>0)&&(selected>16)&&(flag==1)){
eat_chessman(selected,39,38,map[1]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[1]=selected;
selected=0;
}

}
else if((map[1]>16)&&(selected<17)&&(selected>0)&&(flag==0)){
eat_chessman(selected,39,38,map[1]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[1]=selected;
selected=0;
}
}
else if( (map[1]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[1];
}
else if(map[1]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[1]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[1]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<1290) && (ymean>3400) && (ymean<3700)&& (mode==PLAY) )
{
if((map[2]<17)&&(map[2]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[2];
}
else if ((map[2]<17)&&(map[2]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,38,map[2]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[2]=selected;
selected=0;
}

}
else if((map[2]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,38,map[2]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[2]=selected;
selected=0;
}
}
else if( (map[2]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[2];
}
else if(map[2]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[2]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[2]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<1750) && (ymean>3400) && (ymean<3700)&& (mode==PLAY) )
{
if((map[3]<17)&&(map[3]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[3];
}
else if ((map[3]<17)&&(map[3]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,38,map[3]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[3]=selected;
selected=0;
}

}
else if((map[3]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,38,map[3]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[3]=selected;
selected=0;
}
}
else if( (map[3]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[3];
}
else if(map[3]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[3]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[3]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<2160) && (ymean>3400) && (ymean<3700)&& (mode==PLAY) )
{
if((map[4]<17)&&(map[4]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[4];
}
else if ((map[4]<17)&&(map[4]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,38,map[4]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[4]=selected;
selected=0;
}

}
else if((map[4]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,38,map[4]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[4]=selected;
selected=0;
}
}
else if( (map[4]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[4];
}
else if(map[4]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[4]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[4]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<2560) && (ymean>3400) && (ymean<3700)&& (mode==PLAY) )
{
if((map[5]<17)&&(map[5]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[5];
}
else if ((map[5]<17)&&(map[5]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,38,map[5]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[5]=selected;
selected=0;
}

}
else if((map[5]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,38,map[5]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[5]=selected;
selected=0;
}
}
else if( (map[5]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[5];
}
else if(map[5]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[5]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[5]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<2990) && (ymean>3400) && (ymean<3700)&& (mode==PLAY) )
{
if((map[6]<17)&&(map[6]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[6];
}
else if ((map[6]<17)&&(map[6]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,38,map[6]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[6]=selected;
selected=0;
}

}
else if((map[6]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,38,map[6]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[6]=selected;
selected=0;
}
}
else if( (map[6]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[6];
}
else if(map[6]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[6]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[6]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<3410) && (ymean>3400) && (ymean<3700)&& (mode==PLAY) )
{
if((map[7]<17)&&(map[7]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[7];
}
else if ((map[7]<17)&&(map[7]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,38,map[7]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[7]=selected;
selected=0;
}

}
else if((map[7]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,38,map[7]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[7]=selected;
selected=0;
}
}
else if( (map[7]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[7];
}
else if(map[7]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[7]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[7]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<3790) && (ymean>3400) && (ymean<3700)&& (mode==PLAY))
{
if((map[8]<17)&&(map[8]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[8];
}
else if ((map[8]<17)&&(map[8]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,38,map[8]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[8]=selected;
selected=0;
}

}
else if((map[8]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,38,map[8]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[8]=selected;
selected=0;
}
}
else if( (map[8]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[8];
}
else if(map[8]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,38);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[8]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,38);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[8]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>0) && (xmean<=450) && (ymean>3100) && (ymean<=3300))
{
if((map[9]<17)&&(map[9]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[9];
}
else if ((map[9]<17)&&(map[9]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,65,map[9]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[9]=selected;
selected=0;
}

}
else if((map[9]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,65,map[9]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[9]=selected;
selected=0;
}
}
else if( (map[9]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[9];
}
else if(map[9]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[9]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,65);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[9]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>570) && (xmean<=840) && (ymean>3100) && (ymean<=3300))
{
if((map[10]<17)&&(map[10]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[10];
}
else if ((map[10]<17)&&(map[10]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,65,map[10]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[10]=selected;
selected=0;
}

}
else if((map[10]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,65,map[10]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[10]=selected;
selected=0;
}
}
else if( (map[10]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[10];
}
else if(map[10]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[10]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,65);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[10]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>970) && (xmean<=1290) && (ymean>3100) && (ymean<=3300))
{
if((map[11]<17)&&(map[11]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[11];
}
else if ((map[11]<17)&&(map[11]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,65,map[11]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[11]=selected;
selected=0;
}

}
else if((map[11]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,65,map[11]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[11]=selected;
selected=0;
}
}
else if( (map[11]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[11];
}
else if(map[11]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[11]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,65);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[11]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>1410) && (xmean<=1750) && (ymean>3100) && (ymean<=3300))
{
if((map[12]<17)&&(map[12]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[12];
}
else if ((map[12]<17)&&(map[12]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,65,map[12]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[12]=selected;
selected=0;
}

}
else if((map[12]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,65,map[12]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[12]=selected;
selected=0;
}
}
else if((map[12]>16)&& ((selected>16)||(selected==0))&&(flag==1)){
selected=map[12];
}
else if(map[12]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[12]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,65);
if(sign){
flag=1;
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[12]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>1820) && (xmean<=2160) && (ymean>3100) && (ymean<=3300))
{
if((map[13]<17)&&(map[13]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[13];
}
else if ((map[13]<17)&&(map[13]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,65,map[13]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[13]=selected;
selected=0;
}

}
else if((map[13]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,65,map[13]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[13]=selected;
selected=0;
}
}
else if((map[13]>16)&&((selected>16)||(selected==0))&&(flag==1)){
selected=map[13];
}
else if(map[13]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[13]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,65);
if(sign){
flag=1; //2 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[13]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ((mode==PLAY) && (xmean>2240) && (xmean<=2560) && (ymean>3100) && (ymean<=3300))
{
if((map[14]<17)&&(map[14]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[14];
}
else if ((map[14]<17)&&(map[14]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,65,map[14]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[14]=selected;
selected=0;
}

}
else if((map[14]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,65,map[14]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[14]=selected;
selected=0;
}
}
else if( (map[14]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[14];
}
else if(map[14]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[14]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,65);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[14]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>2660) && (xmean<=2990) && (ymean>3100) && (ymean<=3300))
{
if((map[15]<17)&&(map[15]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[15];
}
else if ((map[15]<17)&&(map[15]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,65,map[15]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[15]=selected;
selected=0;
}

}
else if((map[15]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,65,map[15]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[15]=selected;
selected=0;
}
}
else if( (map[15]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[15];
}
else if(map[15]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[15]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,65);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[15]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>3110) && (xmean<=3410) && (ymean>3100) && (ymean<=3300))
{
if((map[16]<17)&&(map[16]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[16];
}
else if ((map[16]<17)&&(map[16]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,65,map[16]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[16]=selected;
selected=0;
}

}
else if((map[16]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,65,map[16]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[16]=selected;
selected=0;
}
}
else if( (map[16]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[16];
}
else if(map[16]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[16]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,65);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[16]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (mode==PLAY) && (xmean>3450) && (xmean<=3790) && (ymean>3100) && (ymean<=3300))
{
if((map[17]<17)&&(map[17]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[17];
}
else if ((map[17]<17)&&(map[17]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,65,map[17]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[17]=selected;
selected=0;
}

}
else if((map[17]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,65,map[17]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[17]=selected;
selected=0;
}
}
else if( (map[17]>16) &&( (selected>16) || (selected==0)) &&(flag==1)){
selected=map[17];
}
else if(map[17]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,65);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[17]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,65);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[17]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if((map[18]<17)&&(map[18]>0)&&(selected<17)&&(selected>=0)&&(flag==0)){ //? 1???,??????
selected=map[18];
}
else if ((map[18]<17)&&(map[18]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,92,map[18]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[18]=selected;
selected=0;
}

}
else if((map[18]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,92,map[18]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[18]=selected;
selected=0;
}
}
else if( (map[18]>16) &&( (selected>16) || (selected==0))&&(flag==1) ){
selected=map[18];
}
else if(map[18]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[18]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[18]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[19]<17) && (map[19]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[19];
}
else if ((map[19]<17)&&(map[19]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,92,map[19]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[19]=selected;
selected=0;
}

}
else if((map[19]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,92,map[19]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[19]=selected;
selected=0;
}
}
else if((map[19]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[19];
}
else if(map[19]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[19]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[19]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[20]<17) && (map[20]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[20];
}
else if ((map[20]<17)&&(map[20]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,92,map[20]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[20]=selected;
selected=0;
}

}
else if((map[20]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,92,map[20]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[20]=selected;
selected=0;
}
}
else if((map[20]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[20];
}
else if(map[20]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[20]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[20]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[21]<17) && (map[21]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[21];
}
else if ((map[21]<17)&&(map[21]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,92,map[21]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[21]=selected;
selected=0;
}

}
else if((map[21]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,92,map[21]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[21]=selected;
selected=0;
}
}
else if((map[21]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[21];
}
else if(map[21]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[21]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[21]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[22]<17) && (map[22]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[22];
}
else if ((map[22]<17)&&(map[22]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,92,map[22]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[22]=selected;
selected=0;
}

}
else if((map[22]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,92,map[22]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[22]=selected;
selected=0;
}
}
else if((map[22]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[22];
}
else if(map[22]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[22]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[22]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[23]<17) && (map[23]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[23];
}
else if ((map[23]<17)&&(map[23]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,92,map[23]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[23]=selected;
selected=0;
}

}
else if((map[23]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,92,map[23]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[23]=selected;
selected=0;
}
}
else if((map[23]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[23];
}
else if(map[23]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[23]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[23]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[24]<17) && (map[24]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[24];
}
else if ((map[24]<17)&&(map[24]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,92,map[24]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[24]=selected;
selected=0;
}

}
else if((map[24]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,92,map[24]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[24]=selected;
selected=0;
}
}
else if((map[24]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[24];
}
else if(map[24]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[24]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[24]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[25]<17) && (map[25]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[25];
}
else if ((map[25]<17)&&(map[25]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,92,map[25]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[25]=selected;
selected=0;
}

}
else if((map[25]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,92,map[25]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[25]=selected;
selected=0;
}
}
else if((map[25]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[25];
}
else if(map[25]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[25]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[25]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>2800) && (ymean<3000)&& (mode==PLAY))
{
if( (map[26]<17) && (map[26]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[26];
}
else if ((map[26]<17)&&(map[26]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,92,map[26]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[26]=selected;
selected=0;
}

}
else if((map[26]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,92,map[26]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[26]=selected;
selected=0;
}
}
else if((map[26]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[26];
}
else if(map[26]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,92);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[26]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,92);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[26]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[27]<17) && (map[27]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[27];
}
else if ((map[27]<17)&&(map[27]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,119,map[27]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[27]=selected;
selected=0;
}

}
else if((map[27]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,119,map[27]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[27]=selected;
selected=0;
}
}
else if((map[27]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[27];
}
else if(map[27]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[27]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[27]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[28]<17) && (map[28]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[28];
}
else if ((map[28]<17)&&(map[28]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,119,map[28]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[28]=selected;
selected=0;
}

}
else if((map[28]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,119,map[28]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[28]=selected;
selected=0;
}
}
else if((map[28]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[28];
}
else if(map[28]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[28]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[28]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[29]<17) && (map[29]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[29];
}
else if ((map[29]<17)&&(map[29]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,119,map[29]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[29]=selected;
selected=0;
}

}
else if((map[29]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,119,map[29]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[29]=selected;
selected=0;
}
}
else if((map[29]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[29];
}
else if(map[29]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[29]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[29]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[30]<17) && (map[30]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[30];
}
else if ((map[30]<17)&&(map[30]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,119,map[30]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[30]=selected;
selected=0;
}

}
else if((map[30]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,119,map[30]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[30]=selected;
selected=0;
}
}
else if((map[30]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[30];
}
else if(map[30]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[30]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[30]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[31]<17) && (map[31]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[31];
}
else if ((map[31]<17)&&(map[31]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,119,map[31]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[31]=selected;
selected=0;
}

}
else if((map[31]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,119,map[31]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[31]=selected;
selected=0;
}
}
else if((map[31]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[31];
}
else if(map[31]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[31]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[31]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[32]<17) && (map[32]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[32];
}
else if ((map[32]<17)&&(map[32]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,119,map[32]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[32]=selected;
selected=0;
}

}
else if((map[32]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,119,map[32]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[32]=selected;
selected=0;
}
}
else if((map[32]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[32];
}
else if(map[32]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[32]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[32]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[33]<17) && (map[33]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[33];
}
else if ((map[33]<17)&&(map[33]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,119,map[33]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[33]=selected;
selected=0;
}

}
else if((map[33]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,119,map[33]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[33]=selected;
selected=0;
}
}
else if((map[33]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[33];
}
else if(map[33]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[33]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[33]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[34]<17) && (map[34]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[34];
}
else if ((map[34]<17)&&(map[34]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,119,map[34]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[34]=selected;
selected=0;
}

}
else if((map[34]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,119,map[34]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[34]=selected;
selected=0;
}
}
else if((map[34]>16) && ((selected>16)||selected==0)&&(flag==1)){
selected=map[34];
}
else if(map[34]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[34]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[34]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>2476) && (ymean<2676)&& (mode==PLAY))
{
if( (map[35]<17) && (map[35]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[35];
}
else if ((map[35]<17)&&(map[35]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,119,map[35]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[35]=selected;
selected=0;
}

}
else if((map[35]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,119,map[35]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[35]=selected;
selected=0;
}
}
else if((map[35]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[35];
}
else if(map[35]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,119);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[35]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,119);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[35]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[36]<17) && (map[36]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[36];
}
else if ((map[36]<17)&&(map[36]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,146,map[36]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[36]=selected;
selected=0;
}

}
else if((map[36]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,146,map[36]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[36]=selected;
selected=0;
}
}
else if((map[36]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[36];
}
else if(map[36]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[36]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[36]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[37]<17) && (map[37]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[37];
}
else if ((map[37]<17)&&(map[37]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,146,map[37]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[37]=selected;
selected=0;
}

}
else if((map[37]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,146,map[37]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[37]=selected;
selected=0;
}
}
else if((map[37]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[37];
}
else if(map[37]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[37]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[37]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[38]<17) && (map[38]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[38];
}
else if ((map[38]<17)&&(map[38]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,146,map[38]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[38]=selected;
selected=0;
}

}
else if((map[38]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,146,map[38]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[38]=selected;
selected=0;
}
}
else if((map[38]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[38];
}
else if(map[38]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[38]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[38]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[39]<17) && (map[39]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[39];
}
else if ((map[39]<17)&&(map[39]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,146,map[39]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[39]=selected;
selected=0;
}

}
else if((map[39]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,146,map[39]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[39]=selected;
selected=0;
}
}
else if((map[39]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[39];
}
else if(map[39]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[39]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[39]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[40]<17) && (map[40]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[40];
}
else if ((map[40]<17)&&(map[40]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,146,map[40]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[40]=selected;
selected=0;
}

}
else if((map[40]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,146,map[40]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[40]=selected;
selected=0;
}
}
else if((map[40]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[40];
}
else if(map[40]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[40]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[40]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[41]<17) && (map[41]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[41];
}
else if ((map[41]<17)&&(map[41]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,146,map[41]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[41]=selected;
selected=0;
}

}
else if((map[41]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,146,map[41]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[41]=selected;
selected=0;
}
}
else if((map[41]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[41];
}
else if(map[41]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[41]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[41]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[42]<17) && (map[42]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[42];
}
else if ((map[42]<17)&&(map[42]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,146,map[42]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[42]=selected;
selected=0;
}

}
else if((map[42]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,146,map[42]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[42]=selected;
selected=0;
}
}
else if((map[42]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[42];
}
else if(map[42]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[42]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[42]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[43]<17) && (map[43]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[43];
}
else if ((map[43]<17)&&(map[43]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,146,map[43]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[43]=selected;
selected=0;
}

}
else if((map[43]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,146,map[43]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[43]=selected;
selected=0;
}
}
else if((map[43]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[43];
}
else if(map[43]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[43]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[43]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>2176) && (ymean<2376)&& (mode==PLAY))
{
if( (map[44]<17) && (map[44]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[44];
}
else if ((map[44]<17)&&(map[44]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,146,map[44]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[44]=selected;
selected=0;
}

}
else if((map[44]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,146,map[44]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[44]=selected;
selected=0;
}
}
else if((map[44]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[44];
}
else if(map[44]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,146);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[44]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,146);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[44]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[45]<17) && (map[45]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[45];
}
else if ((map[45]<17)&&(map[45]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,173,map[45]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[45]=selected;
selected=0;
}

}
else if((map[45]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,173,map[45]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[45]=selected;
selected=0;
}
}
else if((map[45]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[45];
}
else if(map[45]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[45]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[45]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[46]<17) && (map[46]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[46];
}
else if ((map[46]<17)&&(map[46]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,173,map[46]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[46]=selected;
selected=0;
}

}
else if((map[46]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,173,map[46]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[46]=selected;
selected=0;
}
}
else if((map[46]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[46];
}
else if(map[46]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[46]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[46]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[47]<17) && (map[47]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[47];
}
else if ((map[47]<17)&&(map[47]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,173,map[47]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[47]=selected;
selected=0;
}

}
else if((map[47]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,173,map[47]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[47]=selected;
selected=0;
}
}
else if((map[47]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[47];
}
else if(map[47]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[47]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[47]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[48]<17) && (map[48]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[48];
}
else if ((map[48]<17)&&(map[48]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,173,map[48]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[48]=selected;
selected=0;
}

}
else if((map[48]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,173,map[48]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[48]=selected;
selected=0;
}
}
else if((map[48]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[48];
}
else if(map[48]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[48]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[48]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[49]<17) && (map[49]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[49];
}
else if ((map[49]<17)&&(map[49]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,173,map[49]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[49]=selected;
selected=0;
}

}
else if((map[49]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,173,map[49]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[49]=selected;
selected=0;
}
}
else if((map[49]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[49];
}
else if(map[49]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[49]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[49]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[50]<17) && (map[50]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[50];
}
else if ((map[50]<17)&&(map[50]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,173,map[50]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[50]=selected;
selected=0;
}

}
else if((map[50]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,173,map[50]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[50]=selected;
selected=0;
}
}
else if((map[50]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[50];
}
else if(map[50]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[50]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[50]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[51]<17) && (map[51]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[51];
}
else if ((map[51]<17)&&(map[51]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,173,map[51]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[51]=selected;
selected=0;
}

}
else if((map[51]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,173,map[51]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[51]=selected;
selected=0;
}
}
else if((map[51]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[51];
}
else if(map[51]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[51]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[51]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[52]<17) && (map[52]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[52];
}
else if ((map[52]<17)&&(map[52]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,173,map[52]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[52]=selected;
selected=0;
}

}
else if((map[52]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,173,map[52]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[52]=selected;
selected=0;
}
}
else if((map[52]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[52];
}
else if(map[52]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[52]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[52]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>1877) && (ymean<2077)&& (mode==PLAY))
{
if( (map[53]<17) && (map[53]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[53];
}
else if ((map[53]<17)&&(map[53]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,173,map[53]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[53]=selected;
selected=0;
}

}
else if((map[53]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,173,map[53]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[53]=selected;
selected=0;
}
}
else if((map[53]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[53];
}
else if(map[53]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,173);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[53]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,173);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[53]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[54]<17) && (map[54]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[54];
}
else if ((map[54]<17)&&(map[54]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,200,map[54]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[54]=selected;
selected=0;
}

}
else if((map[54]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,200,map[54]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[54]=selected;
selected=0;
}
}
else if((map[54]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[54];
}
else if(map[54]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[54]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[54]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[55]<17) && (map[55]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[55];
}
else if ((map[55]<17)&&(map[55]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,200,map[55]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[55]=selected;
selected=0;
}

}
else if((map[55]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,200,map[55]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[55]=selected;
selected=0;
}
}
else if((map[55]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[55];
}
else if(map[55]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[55]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[55]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[56]<17) && (map[56]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[56];
}
else if ((map[56]<17)&&(map[56]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,200,map[56]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[56]=selected;
selected=0;
}

}
else if((map[56]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,200,map[56]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[56]=selected;
selected=0;
}
}
else if((map[56]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[56];
}
else if(map[56]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[56]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[56]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[57]<17) && (map[57]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[57];
}
else if ((map[57]<17)&&(map[57]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,200,map[57]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[57]=selected;
selected=0;
}

}
else if((map[57]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,200,map[57]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[57]=selected;
selected=0;
}
}
else if((map[57]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[57];
}
else if(map[57]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[57]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[57]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[58]<17) && (map[58]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[58];
}
else if ((map[58]<17)&&(map[58]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,200,map[58]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[58]=selected;
selected=0;
}

}
else if((map[58]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,200,map[58]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[58]=selected;
selected=0;
}
}
else if((map[58]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[58];
}
else if(map[58]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[58]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[58]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[59]<17) && (map[59]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[59];
}
else if ((map[59]<17)&&(map[59]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,200,map[59]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[59]=selected;
selected=0;
}

}
else if((map[59]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,200,map[59]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[59]=selected;
selected=0;
}
}
else if((map[59]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[59];
}
else if(map[59]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[59]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[59]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[60]<17) && (map[60]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[60];
}
else if ((map[60]<17)&&(map[60]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,200,map[60]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[60]=selected;
selected=0;
}

}
else if((map[60]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,200,map[60]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[60]=selected;
selected=0;
}
}
else if((map[60]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[60];
}
else if(map[60]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[60]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[60]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[61]<17) && (map[61]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[61];
}
else if ((map[61]<17)&&(map[61]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,200,map[61]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[61]=selected;
selected=0;
}

}
else if((map[61]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,200,map[61]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[61]=selected;
selected=0;
}
}
else if((map[61]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[61];
}
else if(map[61]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[61]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[61]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>1596) && (ymean<1796)&& (mode==PLAY))
{
if( (map[62]<17) && (map[62]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[62];
}
else if ((map[62]<17)&&(map[62]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,200,map[62]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[62]=selected;
selected=0;
}

}
else if((map[62]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,200,map[62]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[62]=selected;
selected=0;
}
}
else if((map[62]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[62];
}
else if(map[62]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,200);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[62]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,200);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[62]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[63]<17) && (map[63]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[63];
}
else if ((map[63]<17)&&(map[63]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,227,map[63]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[63]=selected;
selected=0;
}

}
else if((map[63]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,227,map[63]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[63]=selected;
selected=0;
}
}
else if((map[63]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[63];
}
else if(map[63]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[63]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[63]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[64]<17) && (map[64]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[64];
}
else if ((map[64]<17)&&(map[64]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,227,map[64]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[64]=selected;
selected=0;
}

}
else if((map[64]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,227,map[64]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[64]=selected;
selected=0;
}
}
else if((map[64]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[64];
}
else if(map[64]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[64]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[64]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[65]<17) && (map[65]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[65];
}
else if ((map[65]<17)&&(map[65]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,227,map[65]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[65]=selected;
selected=0;
}

}
else if((map[65]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,227,map[65]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[65]=selected;
selected=0;
}
}
else if((map[65]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[65];
}
else if(map[65]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[65]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[65]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[66]<17) && (map[66]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[66];
}
else if ((map[66]<17)&&(map[66]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,227,map[66]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[66]=selected;
selected=0;
}

}
else if((map[66]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,227,map[66]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[66]=selected;
selected=0;
}
}
else if((map[66]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[66];
}
else if(map[66]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[66]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[66]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[67]<17) && (map[67]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[67];
}
else if ((map[67]<17)&&(map[67]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,227,map[67]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[67]=selected;
selected=0;
}

}
else if((map[67]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,227,map[67]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[67]=selected;
selected=0;
}
}
else if((map[67]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[67];
}
else if(map[67]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[67]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[67]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[68]<17) && (map[68]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[68];
}
else if ((map[68]<17)&&(map[68]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,227,map[68]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[68]=selected;
selected=0;
}

}
else if((map[68]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,227,map[68]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[68]=selected;
selected=0;
}
}
else if((map[68]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[68];
}
else if(map[68]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[68]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[68]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[69]<17) && (map[69]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[69];
}
else if ((map[69]<19)&&(map[69]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,227,map[69]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[69]=selected;
selected=0;
}

}
else if((map[69]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,227,map[69]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[69]=selected;
selected=0;
}
}
else if((map[69]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[69];
}
else if(map[69]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[69]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[69]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[70]<17) && (map[70]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[70];
}
else if ((map[70]<19)&&(map[70]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,227,map[70]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[70]=selected;
selected=0;
}

}
else if((map[70]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,227,map[70]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[70]=selected;
selected=0;
}
}
else if((map[70]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[70];
}
else if(map[70]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[70]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[70]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>1268) && (ymean<1468)&& (mode==PLAY))
{
if( (map[71]<17) && (map[71]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[71];
}
else if ((map[71]<19)&&(map[71]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,227,map[71]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[71]=selected;
selected=0;
}

}
else if((map[71]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,227,map[71]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[71]=selected;
selected=0;
}
}
else if((map[71]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[71];
}
else if(map[71]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,227);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[71]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,227);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[71]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[72]<17) && (map[72]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[72];
}
else if ((map[72]<19)&&(map[72]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,254,map[72]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[72]=selected;
selected=0;
}

}
else if((map[72]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,254,map[72]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[72]=selected;
selected=0;
}
}
else if((map[72]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[72];
}
else if(map[72]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[72]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[72]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[73]<17) && (map[73]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[73];
}
else if ((map[73]<19)&&(map[73]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,254,map[73]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[73]=selected;
selected=0;
}

}
else if((map[73]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,254,map[73]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[73]=selected;
selected=0;
}
}
else if((map[73]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[73];
}
else if(map[73]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[73]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[73]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[74]<17) && (map[74]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[74];
}
else if ((map[74]<19)&&(map[74]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,254,map[74]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[74]=selected;
selected=0;
}

}
else if((map[74]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,254,map[74]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[74]=selected;
selected=0;
}
}
else if((map[74]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[74];
}
else if(map[74]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[74]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[74]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[75]<17) && (map[75]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[75];
}
else if ((map[75]<19)&&(map[75]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,254,map[75]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[75]=selected;
selected=0;
}

}
else if((map[75]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,254,map[75]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[75]=selected;
selected=0;
}
}
else if((map[75]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[75];
}
else if(map[75]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[75]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[75]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[76]<17) && (map[76]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[76];
}
else if ((map[76]<17)&&(map[76]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,254,map[76]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[76]=selected;
selected=0;
}

}
else if((map[76]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,254,map[76]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[76]=selected;
selected=0;
}
}
else if((map[76]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[76];
}
else if(map[76]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[76]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[76]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[77]<17) && (map[77]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[77];
}
else if ((map[77]<19)&&(map[77]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,254,map[77]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[77]=selected;
selected=0;
}

}
else if((map[77]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,254,map[77]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[77]=selected;
selected=0;
}
}
else if((map[77]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[77];
}
else if(map[77]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[77]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[77]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[78]<17) && (map[78]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[78];
}
else if ((map[78]<19)&&(map[78]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,254,map[78]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[78]=selected;
selected=0;
}

}
else if((map[78]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,254,map[78]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[78]=selected;
selected=0;
}
}
else if((map[78]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[78];
}
else if(map[78]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[78]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[78]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[79]<17) && (map[79]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[79];
}
else if ((map[79]<19)&&(map[79]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,254,map[79]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[79]=selected;
selected=0;
}

}
else if((map[79]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,254,map[79]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[79]=selected;
selected=0;
}
}
else if((map[79]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[79];
}
else if(map[79]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[79]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[79]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>925) && (ymean<1125)&& (mode==PLAY))
{
if( (map[80]<17) && (map[80]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[80];
}
else if ((map[80]<19)&&(map[80]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,254,map[80]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[80]=selected;
selected=0;
}

}
else if((map[80]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,254,map[80]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[80]=selected;
selected=0;
}
}
else if((map[80]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[80];
}
else if(map[80]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,254);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[80]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,254);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[80]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>0) && (xmean<=450) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[81]<17) && (map[81]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[81];
}
else if ((map[81]<19)&&(map[81]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,12,281,map[81]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[81]=selected;
selected=0;
}

}
else if((map[81]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,12,281,map[81]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[81]=selected;
selected=0;
}
}
else if((map[81]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[81];
}
else if(map[81]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,12,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[81]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,12,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[81]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>570) && (xmean<=840) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[82]<17) && (map[82]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[82];
}
else if ((map[82]<19)&&(map[82]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,39,281,map[82]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[82]=selected;
selected=0;
}

}
else if((map[82]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,39,281,map[82]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[82]=selected;
selected=0;
}
}
else if((map[82]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[82];
}
else if(map[82]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,39,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[82]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,39,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[82]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>970) && (xmean<=1290) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[83]<17) && (map[83]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[83];
}
else if ((map[83]<19)&&(map[83]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,66,281,map[83]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[83]=selected;
selected=0;
}

}
else if((map[83]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,66,281,map[83]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[83]=selected;
selected=0;
}
}
else if((map[83]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[83];
}
else if(map[83]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,66,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[83]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,66,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[83]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1410) && (xmean<=1750) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[84]<17) && (map[84]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[84];
}
else if ((map[84]<19)&&(map[84]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,93,281,map[84]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[84]=selected;
selected=0;
}

}
else if((map[84]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,93,281,map[84]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[84]=selected;
selected=0;
}
}
else if((map[84]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[84];
}
else if(map[84]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,93,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[84]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,93,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[84]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>1820) && (xmean<=2160) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[85]<17) && (map[85]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[85];
}
else if ((map[85]<19)&&(map[85]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,120,281,map[85]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[85]=selected;
selected=0;
}

}
else if((map[85]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,120,281,map[85]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[85]=selected;
selected=0;
}
}
else if((map[85]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[85];
}
else if(map[85]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,120,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[85]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,120,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[85]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2240) && (xmean<=2560) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[86]<17) && (map[86]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[86];
}
else if ((map[86]<19)&&(map[86]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,147,281,map[86]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[86]=selected;
selected=0;
}

}
else if((map[86]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,147,281,map[86]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[86]=selected;
selected=0;
}
}
else if((map[86]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[86];
}
else if(map[86]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,147,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[86]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,147,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[86]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>2660) && (xmean<=2990) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[87]<17) && (map[87]>0) && (selected<17) && (selected>=0)&&(flag==0) ){ //? 1???,??????
selected=map[87];
}
else if ((map[87]<19)&&(map[87]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,174,281,map[87]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[87]=selected;
selected=0;
}

}
else if((map[87]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,174,281,map[87]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[87]=selected;
selected=0;
}
}
else if((map[87]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[87];
}
else if(map[87]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,174,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[87]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,174,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[87]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3110) && (xmean<=3410) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[88]<17) && (map[88]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[88];
}
else if ((map[88]<19)&&(map[88]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,201,281,map[88]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[88]=selected;
selected=0;
}

}
else if((map[88]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,201,281,map[88]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[88]=selected;
selected=0;
}
}
else if((map[88]>16) && ((selected>16)||selected==0)&&(flag==1) ){
selected=map[88];
}
else if(map[88]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,201,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[88]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,201,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[88]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ( (xmean>3450) && (xmean<=3790) && (ymean>603) && (ymean<803)&& (mode==PLAY))
{
if( (map[89]<17) && (map[89]>0) && (selected<17) && (selected>=0) &&(flag==0)){ //? 1???,??????
selected=map[89];
}
else if ((map[89]<19)&&(map[89]>0)&&(selected>16)&&(flag==1)){ //????
eat_chessman(selected,228,281,map[89]);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[89]=selected;
selected=0;
}

}
else if((map[89]>16)&&(selected<17)&&(selected>0)&&(flag==0)){ // chi qi
eat_chessman(selected,228,281,map[89]);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[89]=selected;
selected=0;
}
}
else if((map[89]>16) && ((selected>16)||selected==0) &&(flag==1)){
selected=map[89];
}
else if(map[89]==0){// no chessman
if((selected>16)&&(flag==1)){
move_chessman(selected,228,281);
if(sign){
flag=0; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[89]=selected;
selected=0;
}

}
else if( (selected<=16) && (selected>0) && (flag==0) ){
move_chessman(selected,228,281);
if(sign){
flag=1; //1 ZOU
for(int i=0;i<90;i++){
if (map[i]==selected)
map[i]=0;
}
map[89]=selected;
selected=0;
}

}
}

//delay_ms(1);
} // end if(mode)
else if ((ymean>0) && (ymean<603)&& (mode==PLAY)){
draw_mainpage();
mode=MAINPAGE;
}


}
ISR (TIMER0_COMPA_vect)
begin
//if (time1>0)
--debouncetimes;
end
//=============================================
/*ISR (TIMER0_OVF_vect)
begin

//the actual DDR
accumulator1 = accumulator1 + increment1 ;
highbyte1 = (char)(accumulator1 >> 24) ;
accumulator2 = accumulator2 + increment2 ;
highbyte2 = (char)(accumulator2 >> 24) ;

// output the wavefrom sample
OCR0A = 128 + (((sineTable1[highbyte1]+sineTable2[highbyte2]) * rampTable[rampCount])>>7);

sample++ ;
if (sample <= RAMPUPEND) rampCount++ ;
if ((sample > RAMPUPEND && sample <= RAMPDOWNSTART )) rampCount = 255 ;
else
{
if (sample > RAMPDOWNSTART && sample <= RAMPDOWNEND ) rampCount-- ;
if (sample > RAMPDOWNEND)rampCount = 0;
}

// generate time base for MAIN
// 62 counts is about 1 mSec
count--;
if (0 == count )
begin
count=64;
debouncetimes--;
time++; //in mSec
time2++;
end

end
//=============================================
void sound_init(){
for (int i=0; i<256; i++)
begin
sineTable1[i] = (char)(63.0 * sin(6.283*((float)i)/256.0)) ;
sineTable2[i] = (char)(63.0 * sin(6.283*((float)i)/256.0)) ;
// the following table needs
// rampTable[0]=0 and rampTable[255]=127
rampTable[i] = i>>1 ;
end


//crank up the ISRs
sei() ;
}
//==============================================
void //sine2(unsigned long f)
begin

// make B.3 an output
//DDRB = (1<<PINB3) ;

// timer 0 runs at full rate
TCCR0B = 1 ;
//turn on timer 0 overflow ISR
TIMSK0 = (1<<TOIE0) ;
// turn on PWM
// turn on fast PWM and OC0A output
// at full clock rate, toggle OC0A (pin B3)
// 16 microsec per PWM cycle sample time
TCCR0A = (1<<COM0A0) | (1<<COM0A1) | (1<<WGM00) | (1<<WGM01) ;
OCR0A = 128 ; // set PWM to half full scale
// init ramp variables

// init the DDS phase increment
// for a 32-bit DDS accumulator, running at 16e6/256 Hz:
// increment = 2^32*256*Fout/16e6 = 68719 * Fout
// Fout=1000 Hz, increment= 68719000
increment1 = 70093 * f ;
increment2 =0;
sample = 0 ;
rampCount = 0;
accumulator1 = 0 ;
accumulator2 = 0 ;
sei() ;

// phase lock the sine generator DDS

while (time<100){

}
accumulator1 = 0 ;
accumulator2 = 0 ;


end //end sine
*/
//==============================================
//write register
void LCD_Write_Com( unsigned int reg )
{
LCD_RS_CLR; //command
LCD_CS_CLR;

DATA_H = reg >> 8 ;
DATA_L = reg;

LCD_WR_CLR;
// delay_ms( 1 );
LCD_WR_SET;
LCD_CS_SET;
}

// write data
void LCD_Write_Data( unsigned int value )
{
LCD_RS_SET; //??
LCD_CS_CLR;

DATA_H = value >> 8;
DATA_L = value;

LCD_WR_CLR;
// delay_ms( 1 );
LCD_WR_SET;
LCD_CS_SET;
}

//write data to register
void LCD_Write_Com_Data( unsigned int reg, unsigned int value )
{
LCD_Write_Com( reg );
LCD_Write_Data( value );
}

//
unsigned int LCD_Read_Data( unsigned int reg )
{
LCD_Write_Com( reg );

unsigned int i;

LCD_RS_SET; //

DDRA = 0x00;
DDRC = 0x00;

LCD_CS_CLR;

LCD_RD_CLR;

i = PINC; //DATA_H
i <<= 8;
i |= PINA;//DATA_L

LCD_RD_SET;
LCD_CS_SET;

DDRA = 0xFF;
DDRC = 0xFF;

return i;
}

void LCD_Clear()
{
unsigned int i,j;
LCD_Write_Com_Data(0x004f,0); //???0
LCD_Write_Com_Data(0x004e,0); //???0

LCD_Write_Com( 0x0022 );

LCD_RS_SET;
LCD_CS_CLR;

DATA_H = 0xF8;
DATA_L = 0x00;

for(i=0;i<240;i++)
for(j=0;j<320;j++)
{
LCD_WR_CLR;
LCD_WR_SET;
}

LCD_CS_SET;
}

void Set_Cursor( unsigned int X_Pos, unsigned int Y_Pos )
{
LCD_Write_Com_Data( 0x004e, X_Pos ); //??
LCD_Write_Com_Data( 0x004f, Y_Pos ); //??
}

//initialize LCD
void LCD_Init()
{
//reset LCD
LCD_RESET_1;
delay_ms(5);
LCD_RESET_0;
delay_ms(5);
LCD_RESET_1;
delay_ms(5);

LCD_CS_CLR ;
LCD_Write_Com_Data(0x0000,0x0001); delay_ms(1);
LCD_Write_Com_Data(0x0003,0xA8A4); delay_ms(1);
LCD_Write_Com_Data(0x000C,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x000D,0x080C); delay_ms(1);
LCD_Write_Com_Data(0x000E,0x2B00); delay_ms(1);
LCD_Write_Com_Data(0x001E,0x00B0); delay_ms(1);
LCD_Write_Com_Data(0x0001,0x2B3F); delay_ms(1); //??????320*240 0x6B3F
LCD_Write_Com_Data(0x0002,0x0600); delay_ms(1);
LCD_Write_Com_Data(0x0010,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0011,0x6070); delay_ms(1); //0x4030 //?????? 16??
LCD_Write_Com_Data(0x0005,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0006,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0016,0xEF1C); delay_ms(1);
LCD_Write_Com_Data(0x0017,0x0003); delay_ms(1);
LCD_Write_Com_Data(0x0007,0x0233); delay_ms(1); //0x0233
LCD_Write_Com_Data(0x000B,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x000F,0x0000); delay_ms(1); //??????
LCD_Write_Com_Data(0x0041,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0042,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0048,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0049,0x013F); delay_ms(1);
LCD_Write_Com_Data(0x004A,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x004B,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0044,0xEF00); delay_ms(1);
LCD_Write_Com_Data(0x0045,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0046,0x013F); delay_ms(1);
LCD_Write_Com_Data(0x0030,0x0707); delay_ms(1);
LCD_Write_Com_Data(0x0031,0x0204); delay_ms(1);
LCD_Write_Com_Data(0x0032,0x0204); delay_ms(1);
LCD_Write_Com_Data(0x0033,0x0502); delay_ms(1);
LCD_Write_Com_Data(0x0034,0x0507); delay_ms(1);
LCD_Write_Com_Data(0x0035,0x0204); delay_ms(1);
LCD_Write_Com_Data(0x0036,0x0204); delay_ms(1);
LCD_Write_Com_Data(0x0037,0x0502); delay_ms(1);
LCD_Write_Com_Data(0x003A,0x0302); delay_ms(1);
LCD_Write_Com_Data(0x003B,0x0302); delay_ms(1);
LCD_Write_Com_Data(0x0023,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0024,0x0000); delay_ms(1);
LCD_Write_Com_Data(0x0025,0x8000); delay_ms(1);
LCD_Write_Com_Data(0x004e,0); //???0
LCD_Write_Com_Data(0x004f,0); //???0

LCD_CS_SET;

}
//set filling area
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
unsigned int x3;
x2=x2 << 8;
x3=x2|x1;
LCD_Write_Com_Data(0x004e,x1);
LCD_Write_Com_Data(0x004f,y1);
LCD_Write_Com_Data(0x0044,x3);
LCD_Write_Com_Data(0x0045,y1);
LCD_Write_Com_Data(0x0046,y2);
LCD_Write_Com(0x0022);
}

//draw a pixel
void draw_pixel(unsigned int x, unsigned int y, unsigned int color)
{
LCD_CS_CLR;
LCD_Write_Com_Data(0x004e,x);
LCD_Write_Com_Data(0x004f,y);
LCD_Write_Com(0x0022);
LCD_Write_Data(color);
LCD_CS_SET;


}

//pant LCD
void Paint(unsigned int color)
{
int i,j;
LCD_CS_CLR;
Address_set(0,0,239,319);
for(i=0;i<320;i++)
{
for (j=0;j<240;j++)
{
LCD_Write_Data(color);
}

}
LCD_CS_SET;
}

//show color bar
void show_colour_bar (void)

{
int V,H;
LCD_CS_CLR;
Address_set(0,0,239,319);//320x240

for(H=0;H<240;H++)
{
for(V=0;V<140;V++)
LCD_Write_Data(0xf800); //red
}

for(H=0;H<240;H++)
{
for(V=140;V<280;V++)
LCD_Write_Data(0x07e0); //green
}

for(H=0;H<240;H++)
{
for(V=280;V<320;V++)
LCD_Write_Data(0x0000); //black
}
/*
for(H=0;H<240;H++)
{
for(V=80;V<120;V++)
LCD_Write_Data(0x001f); //blue
}

for(H=0;H<240;H++)
{
for(V=120;V<160;V++)
LCD_Write_Data(0xffe0); //yellow
}

for(H=0;H<240;H++)
{
for(V=160;V<200;V++)
LCD_Write_Data(0xf81f); //pink
}

for(H=0;H<240;H++)
{
for(V=200;V<240;V++)
LCD_Write_Data(0x07ff); //shadow blue
}

for(H=0;H<240;H++)
{
for(V=240;V<280;V++)
LCD_Write_Data(0xffff); //white
}

for(H=0;H<240;H++)
{
for(V=280;V<320;V++)
LCD_Write_Data(0x0000); //black
}
*/
LCD_CS_SET;
return ;
}

void colour_setting (void)

{
int V,H;
LCD_CS_CLR;
Address_set(0,0,239,319);//320x240

for(H=0;H<240;H++)
{
for(V=0;V<140;V++)
LCD_Write_Data(0xfe93); //chessboardyellow
}

for(H=0;H<240;H++)
{
for(V=140;V<280;V++)
LCD_Write_Data(0x07e0); //green
}

for(H=0;H<240;H++)
{
for(V=280;V<320;V++)
LCD_Write_Data(0x0000); //black
}

for(H=0;H<240;H++)
{
for(V=80;V<120;V++)
LCD_Write_Data(0x001f); //blue
}

for(H=0;H<240;H++)
{
for(V=120;V<160;V++)
LCD_Write_Data(0xffe0); //yellow
}

for(H=0;H<240;H++)
{
for(V=160;V<200;V++)
LCD_Write_Data(0xf81f); //pink
}

for(H=0;H<240;H++)
{
for(V=200;V<240;V++)
LCD_Write_Data(0x07ff); //shadow blue
}

for(H=0;H<240;H++)
{
for(V=240;V<280;V++)
LCD_Write_Data(0xffff); //white
}

for(H=0;H<240;H++)
{
for(V=280;V<320;V++)
LCD_Write_Data(0x0000); //black
}
showcharacterstr(30,160, "Choose_the_Color_You_Like",0x0000,0xFFFF);
showcharacterstr(60,300,"Tap_to_main_menu",0xffff,0x0000);
LCD_CS_SET;
return ;
}
//draw a line on LCD
void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned int color)
{
int dx,dy,e;
dx=x2-x1;
dy=y2-y1;
if(dx>=0)
{
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 1/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
draw_pixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
draw_pixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 8/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
draw_pixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
draw_pixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
else //dx<0
{
dx=-dx; //dx=abs(dx)
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 4/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
draw_pixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
draw_pixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 5/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
draw_pixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 6/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
draw_pixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
}

//draw a circle on LCD

void draw_circle(unsigned int x, unsigned int y, unsigned int r,unsigned int color)
{
int a, b, num;
a = 0;
b = r;
while(2 * b * b >= r * r) //
{
draw_pixel(x + a, y - b,color); // 0~1
draw_pixel(x - a, y - b,color); // 0~7
draw_pixel(x - a, y + b,color); // 4~5
draw_pixel(x + a, y + b,color); // 4~3

draw_pixel(x + b, y + a,color); // 2~3
draw_pixel(x + b, y - a,color); // 2~1
draw_pixel(x - b, y - a,color); // 6~7
draw_pixel(x - b, y + a,color); // 6~5

a++;
num = (a * a + b * b) - r*r;
if(num > 0)
{
b--;
a--;
}
}
}

void draw_settingspage()
{

Paint(0xffff);
drawrectangle(70,125,120,145,0x0000);

}
void inttostr(int dd,unsigned char *str)
{
str[0]=dd/10000+48;
str[1]=(dd/1000)-((dd/10000)*10)+48;
str[2]=(dd/100)-((dd/1000)*10)+48;
str[3]=(dd/10)-((dd/100)*10)+48;
str[4]=dd-((dd/10)*10)+48;
str[5]=0;
}

void showcharacter(unsigned int x,unsigned int y,unsigned char value,unsigned int dcolor,unsigned int bgcolor)
{
unsigned char i,j;
unsigned char *temp=character;
LCD_CS_CLR;
Address_set(x,y,x+7,y+11);
temp+=(value-32)*12;
for(j=0;j<12;j++)
{
for(i=0;i<8;i++)
{
if((*temp&(1<<(7-i)))!=0)
{
LCD_Write_Data(dcolor);
}
else
{
LCD_Write_Data(bgcolor);
}
}
temp++;
}
LCD_CS_SET;
}

void showcharacterstr(unsigned int x,unsigned int y, char *str,unsigned int dcolor,unsigned int bgcolor)
{
unsigned int x1,y1;
x1=x;
y1=y;
while(*str!='\0')
{
showcharacter(x1,y1,*str,dcolor,bgcolor);
x1+=7;
str++;
}
}

void drawrectangle(unsigned int x1, unsigned int y1,unsigned int x2,unsigned int y2, unsigned color)
{
unsigned int i;
for (i=0;i<x2-x1;i++)
{
draw_line(x1+i, y1, x1+i, y2, color );

}

 

}

void draw_mainpage()
{
Paint(0xffff);
show_colour_bar();
/*showcharacterstr(20,300,"Tap",0xffff,0x0000);
showcharacterstr(44,300,"Lowerleft",0xffff,0x0000);
showcharacterstr(110,300,"To",0xffff,0x0000);
showcharacterstr(130,300,"Back",0xffff,0x0000);
showcharacterstr(167,300,"Mainpage",0xffff,0x0000);

showcharacterstr(83,250,"LITTLELAMB",0xffff,0x0000);
showcharacterstr(80,210,"TWINKLESTAR",0xffff,0x0000);
showcharacterstr(100,170,"PIANO",0xffff,0x0000);

showcharacterstr(97,90,"RECORD",0xffff,0x0000);
showcharacterstr(97,130,"REPLAY",0xffff,0x0000);*/
showcharacterstr(100, 200, "Settings", 0xffff, 0x07e0);
showcharacterstr(90,80,"New_Game",0xffff,0xf800);
}

//============================================new added functions==========================

void video_chessmate(int x, int y, char c,unsigned color)
{
float arc=3.14/50;
for (int i=0; i<50; i++){
draw_line((x+radius*sin(i*arc)),(y+radius*(1-cos(i*arc))),(x+radius*sin((i+1)*arc)),(y+radius*(1-cos((i+1)*arc))),color);
draw_line((x-radius*sin(i*arc)),(y+radius*(1-cos(i*arc))),(x-radius*sin((i+1)*arc)),(y+radius*(1-cos((i+1)*arc))),color);
}
showcharacter(x-3,y+radius*0.3,c,color,backgroundcolor);

}
void draw_chessboard(){
Paint(backgroundcolor);
//Print "river" message
showcharacterstr(105,155, cu1,0x0000,backgroundcolor);
draw_line(12,38,12,281,0x0000);
draw_line(228,38,228,281,0x0000);
//draw upper half vertical lines
for (int i=1; i<8; i++){
int b=12+27*i;
draw_line(b,38,b,146,0x0000);
}
for (int i=1; i<9; i++){
int b=12+27*i;
draw_line(b,173,b,281,0x0000);
}
// drwan horizontal lines
for (int i=0; i<10; i++){
int b=38+27*i;
draw_line(12,b,width-12,b,0x0000);
}
draw_line(93,38,147,92,0x0000);
draw_line(93,92,147,38,0x0000);
draw_line(93,227,147,281,0x0000);
draw_line(93,281,147,227,0x0000);
}
void chinese_chessboard_init()
{
draw_chessboard();

//?
ball1[0].x=12;
ball1[0].y=38;
ball1[0].c='r';
ball1[0].pre_x=12;
ball1[0].pre_y=38;
ball1[0].blong=0;
ball1[0].id=1;
ball1[0].property=4;
//?
ball1[1].x=39;
ball1[1].y=38;
ball1[1].c='n';
ball1[1].pre_x=39;
ball1[1].pre_y=38;
ball1[1].blong=0;
ball1[1].id=2;
ball1[1].property=3;
//?
ball1[2].x=66;
ball1[2].y=38;
ball1[2].c='b';
ball1[2].pre_x=66;
ball1[2].pre_y=38;
ball1[2].blong=0;
ball1[2].id=3;
ball1[2].property=2;

//?
ball1[3].x=93;
ball1[3].y=38;
ball1[3].c='m';
ball1[3].pre_x=93;
ball1[3].pre_y=38;
ball1[3].blong=0;
ball1[3].id=4;
ball1[3].property=1;
//?
ball1[4].x=120;
ball1[4].y=38;
ball1[4].c='k';
ball1[4].pre_x=120;
ball1[4].pre_y=38;
ball1[4].blong=0;
ball1[4].id=5;
ball1[4].property=0;
//?
ball1[5].x=147;
ball1[5].y=38;
ball1[5].c='m';
ball1[5].pre_x=147;
ball1[5].pre_y=38;
ball1[5].blong=0 ;
ball1[5].id=6;
ball1[5].property=1;
//?
ball1[6].x=174;
ball1[6].y=38;
ball1[6].c='b';
ball1[6].pre_x=174;
ball1[6].pre_y=38;
ball1[6].blong=0;
ball1[6].id=7;
ball1[6].property=2;
//?
ball1[7].x=201;
ball1[7].y=38;
ball1[7].c='n';
ball1[7].pre_x=201;
ball1[7].pre_y=38;
ball1[7].blong=0;
ball1[7].id=8;
ball1[7].property=3;
//?rook
ball1[8].x=228;
ball1[8].y=38;
ball1[8].c='r';
ball1[8].pre_x=228;
ball1[8].pre_y=38;
ball1[8].blong=0;
ball1[8].id=9;
ball1[8].property=4;
//10=gun ?
ball1[9].x=39;
ball1[9].y=92;
ball1[9].c='g';
ball1[9].pre_x=39;
ball1[9].pre_y=92;
ball1[9].blong=0;
ball1[9].id=10;
ball1[9].property=5;
//11=gun?
ball1[10].x=201;
ball1[10].y=92;
ball1[10].c='g';
ball1[10].pre_x=201;
ball1[10].pre_y=92;
ball1[10].blong=0;
ball1[10].id=11;
ball1[10].property=5;
//12 pawn ?
ball1[11].x=12;
ball1[11].y=119;
ball1[11].c='p';
ball1[11].pre_x=12;
ball1[11].pre_y=119;
ball1[11].blong=0;
ball1[11].id=12;
ball1[11].property=6;
//13 pawn?
ball1[12].x=66;
ball1[12].y=119;
ball1[12].c='p';
ball1[12].pre_x=66;
ball1[12].pre_y=119;
ball1[12].blong=0;
ball1[12].id=13;
ball1[12].property=6;
//14 pawn
ball1[13].x=120;
ball1[13].y=119;
ball1[13].c='p';
ball1[13].pre_x=120;
ball1[13].pre_y=119;
ball1[13].blong=0;
ball1[13].id=14;
ball1[13].property=6;
//15 pawn
ball1[14].x=174;
ball1[14].y=119;
ball1[14].c='p';
ball1[14].pre_x=174;
ball1[14].pre_y=119;
ball1[14].blong=0;
ball1[14].id=15;
ball1[14].property=6;
//16?
ball1[15].x=228;
ball1[15].y=119;
ball1[15].c='p';
ball1[15].pre_x=228;
ball1[15].pre_y=119;
ball1[15].blong=0;
ball1[15].id=16;
ball1[15].property=6;
//=======================chessman for another side =========================
//?
ball2[0].x=12;
ball2[0].y=281;
ball2[0].c='R';
ball2[0].pre_x=12;
ball2[0].pre_y=281;
ball2[0].blong=2;
ball2[0].id=17;
ball2[0].property=4;
//?
ball2[1].x=39;
ball2[1].y=281;
ball2[1].c='N';
ball2[1].pre_x=39;
ball2[1].pre_y=281;
ball2[1].blong=2;
ball2[1].id=18;
ball2[1].property=3;
//?
ball2[2].x=66;
ball2[2].y=281;
ball2[2].c='B';
ball2[2].pre_x=66;
ball2[2].pre_y=281;
ball2[2].blong=2;
ball2[2].id=19;
ball2[2].property=2;
//?
ball2[3].x=93;
ball2[3].y=281;
ball2[3].c='M';
ball2[3].pre_x=93;
ball2[3].pre_y=281;
ball2[3].blong=2;
ball2[3].id=20;
ball2[3].property=1;
//?
ball2[4].x=120;
ball2[4].y=281;
ball2[4].c='Q';
ball2[4].pre_x=120;
ball2[4].pre_y=281;
ball2[4].blong=2;
ball2[4].id=21;
ball2[4].property=0;
//?
ball2[5].x=147;
ball2[5].y=281;
ball2[5].c='M';
ball2[5].pre_x=147;
ball2[5].pre_y=281;
ball2[5].blong=2;
ball2[5].id=22;
ball2[5].property=1;
//7?
ball2[6].x=174;
ball2[6].y=281;
ball2[6].c='B';
ball2[6].pre_x=174;
ball2[6].pre_y=281;
ball2[6].blong=2;
ball2[6].id=23;
ball2[6].property=2;
//8knight ?
ball2[7].x=201;
ball2[7].y=281;
ball2[7].c='N';
ball2[7].pre_x=201;
ball2[7].pre_y=281;
ball2[7].blong=2;
ball2[7].id=24;
ball2[7].property=3;
//9rook?
ball2[8].x=228;
ball2[8].y=281;
ball2[8].c='R';
ball2[8].pre_x=228;
ball2[8].pre_y=281;
ball2[8].blong=2;
ball2[8].id=25;
ball2[8].property=4;
//10=gun ?
ball2[9].x=39;
ball2[9].y=227;
ball2[9].c='G';
ball2[9].pre_x=39;
ball2[9].pre_y=227;
ball2[9].blong=2;
ball2[9].id=26;
ball2[9].property=5;
//11=gun ?
ball2[10].x=201;
ball2[10].y=227;
ball2[10].c='G';
ball2[10].pre_x=201;
ball2[10].pre_y=227;
ball2[10].blong=2;
ball2[10].id=27;
ball2[10].property=5;
//12 pawn ?
ball2[11].x=12;
ball2[11].y=200;
ball2[11].c='P';
ball2[11].pre_x=12;
ball2[11].pre_y=200;
ball2[11].blong=2;
ball2[11].id=28;
ball2[11].property=6;
//13 pawn?
ball2[12].x=66;
ball2[12].y=200;
ball2[12].c='P';
ball2[12].pre_x=66;
ball2[12].pre_y=200;
ball2[12].blong=2;
ball2[12].id=29;
ball2[12].property=6;
//14 pawn
ball2[13].x=120;
ball2[13].y=200;
ball2[13].c='P';
ball2[13].pre_x=120;
ball2[13].pre_y=200;
ball2[13].blong=2;
ball2[13].id=30;
ball2[13].property=6;
//15 pawn
ball2[14].x=174;
ball2[14].y=200;
ball2[14].c='P';
ball2[14].pre_x=174;
ball2[14].pre_y=200;
ball2[14].blong=2;
ball2[14].id=31;
ball2[14].property=6;
//16
ball2[15].x=228;
ball2[15].y=200;
ball2[15].c='P';
ball2[15].pre_x=228;
ball2[15].pre_y=200;
ball2[15].blong=2;
ball2[15].id=32;
ball2[15].property=6;

for (int i =0; i<16; i++){
video_chessmate(ball1[i].x,(ball1[i].y-radius),ball1[i].c,0xf800);
video_chessmate(ball2[i].x,(ball2[i].y-radius),ball2[i].c,0x0000);
}
showcharacterstr(60,300,"Tap_to_main_menu",0x0000,backgroundcolor);
}

//=================================================================
void eat_chessman(int id,int to_x,int to_y,int eaten_id){
int sp,from_x,from_y,dx,dy,party;
chessman b1,b2;

if((id<17)&&(id>0)){
b1=ball1[id-1];
b2=ball2[eaten_id-17];
sp=ball1[id-1].property;
from_x=ball1[id-1].x;
from_y=ball1[id-1].y;
}
else if(id>=17){
b1=ball2[id-17];
b2=ball1[eaten_id-1];
sp=ball2[id-17].property;
from_x=ball2[id-17].x;
from_y=ball2[id-17].y;
}
party=b1.blong;
dx=abs(from_x-to_x);
dy=abs(from_y-to_y);

switch (sp)
{
case 0:
{
if(((93<=to_x)&&(to_x<=147)&&(to_y<=92)&&(to_y>=38))||((93<=to_x)&&(to_x<=147)&&(to_y<=281)&&(to_y>=227))){//if destination is inside the grid

if((dx<=27)&&(dy<=27)){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;

}
}
else{
//sine2(f);
sign=0;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}
}
case 1:
{
if(((93<=to_x)&&(to_x<=147)&&(to_y<=92)&&(to_y>=38))||((93<=to_x)&&(to_x<=147)&&(to_y<=281)&&(to_y>=227))){ //if destination is inside the grid
if((dx==27)&&(dy==27)){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}
}

case 2:
{
//?????
if(((id<=16)&&(to_y<=96))||((id>=17)&&(to_y>=113))){
if ((dx==54)&&(dy==54)){ //???

int a=(to_x+from_x)/2;
int b=(to_y+from_y)/2;
for (int i=0;i<16;i++){
if(((ball1[i].x==a)&&(ball1[i].y==b))||((ball2[i].x==a)&&(ball2[i].y==b))){ //?xiang?
//sine2(f);
sign=0;
break;
}



} //end for
//can move ??xiang?
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
else{ //????
//sine2(f);
sign=0;
break;
}
} //end ????
else{
//sine2(f);
sign=0;
break ;
}
} // end case

case 3: //?
{

if((dx==54)&&(dy==27)){ //??????
for(int i=0;i<16;i++){
if((((to_x-from_x)>0)&&(ball1[i].x==(from_x+27))&&(ball1[i].y==from_y))){//???
//sine2(f);
sign=0;
break;
}
else if(((to_x-from_x)<0)&&(ball1[i].x=(from_x-27))&&(ball1[i].y==from_y)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_x-from_x)>0)&&(ball2[i].x=(from_x+27))&&(ball2[i].y==from_y)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_x-from_x)<0)&&(ball2[i].x=(from_x-27))&&(ball2[i].y==from_y)){//???
//sine2(f);
sign=0;
break;
}


} //end for
//????
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}//end if ????
else if ((dx==27)&&(dy==54)){ //?????
for(int i=0;i<16;i++){
if((((to_y-from_y)>0)&&(ball1[i].y==(from_y+27))&&(ball1[i].x==from_x))){//???
//sine2(f);
sign=0;
break;
}
else if(((to_y-from_y)<0)&&(ball1[i].y=(from_y-27))&&(ball1[i].x==from_x)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_y-from_y)>0)&&(ball2[i].y=(from_y+27))&&(ball2[i].x==from_x)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_y-from_y)<0)&&(ball2[i].y=(from_y-27))&&(ball2[i].x==from_x)){//???
//sine2(f);
sign=0;
break;
}



} // end for
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
} // end if ????
else{ //???
//sine2(f);
sign=0;
break;
}
} // end case 3

case 4:
{
int dx3;
int dy3;
dx3=to_x-from_x;
dy3=to_y-from_y;
int a=0;
if ( ((dx3==0) && (dy3!=0))||((dx3!=0)&&(dy3==0)) ){//right move
if ((dy3 >0)){ //sit1
for (int j=1; j< ((dy3/27)) ;j++){//detect that if the path has an obstacle
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y+27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y+27*j)) ){
//sine2(f);
sign=0;
a=1;
break;//if the occurrance of obstacle
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x, to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
}
else if ( dy3<0){//sit2
for (int j=1; j<( abs(dy3)/27);j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y-27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y-27*j)) ){
//sine2(f);
sign=0;
a=1;
break;
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x, to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
}

else if (dx3>0){ //sit3
for (int j=1; j<dx3/27;j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x+27*j)&&(ball1[i].y=from_y)) || ((ball2[i].x==from_x+27*j)&&(ball2[i].y==from_y)) ){
//sine2(f);
sign=0;
a=1;
break;
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x, to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break ;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break ;
}
}
}
else if (dx3<0){ //sit4
for (int j=1;j< (( abs(dx3)/27));j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x-27*j)&&(ball1[i].y=from_y)) || ((ball2[i].x==from_x-27*j)&&(ball2[i].y==from_y)) ){
//sine2(f);
sign=0;
a=1;
break;
}


}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x, to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break ;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break ;
}
}
}
}
else{
//sine2(f);
sign=0;
break;
}

}

case 5:
{
int dx2;
int dy2;
int signalforpao=0;
dx2=to_x-from_x;
dy2=to_y-from_y;
if ( ((dx2==0) && (dy2!=0))||((dx2!=0)&&(dy2==0)) ){//right place
if ((dy2 >0)){ //situation 1
for (int j=1; j< (dy2/27);j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y+27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y+27*j)) ){
signalforpao++;
}
}
}
if (signalforpao==1) {//
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}

b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}

}
else if ( dy2<0){ // situation2
for (int j=1; j< ( abs(dy2)/27) ;j++){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y-27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y-27*j)) ){
signalforpao++;
}
}
}
if (signalforpao==1 ) {
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}

}

else if ( dx2>0){ //situation 3
for (int j=1; j< dx2/27; j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x+27*j)&&(ball1[i].y==from_y)) || ((ball2[i].x==from_x+27*j)&&(ball2[i].y==from_y)) ){
signalforpao++;
break;
}
}
}
if (signalforpao==1){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
}
else{
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
}
}

else{
//sine2(f);
sign=0;
break;
}

}
else if (dx2<0){ // situation 4
for (int j=1; j< ( abs(dx2)/27) ;j++){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x-27*j)&&(ball1[i].y==from_y)) || ((ball2[i].x==from_x-27*j)&&(ball2[i].y==from_y)) ){
signalforpao++;
}
}
}
if (signalforpao==1) {
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}
}
} // end right place
else{ //not in the right place
//sine2(f);
sign=0;
break;
}
//break ;
}

case 6:
{
int dy1;
dy1=to_y-from_y;
if ((id<17) && (id>0)){ //chess of red
if ( from_y >172){ //have accrossed the river
if ( ((dx==27)&&(dy1==0)) || ((dy1==27) && (dx==0)) ){ //can move
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
}
else { //illeagal move
//sine2(f);
sign=0;
break;
}
}
else { //have not accross the river
if ( (dx==0)&&(dy1==27) ){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
}
else {
//sine2(f);
sign=0;
break;
}
}
} // end red
else { // black
if ( (from_y<147)&& (from_y>0)){// have accross the river
if ( ((dx==27)&&(dy1==0)) || ((dy1==-27) && (dx==0)) ){ //right place
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
}
else {
//sine2(f);
sign=0;
break;
}
}
else { //have not accross the river
if ( (dx==0)&&(dy1==-27) ){
remove_prev(from_x, from_y,backgroundcolor);
remove_prev(to_x,to_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if (eaten_id==5){
showcharacterstr(30,160, "The_Red_Won!", 0x0000, backgroundcolor);
}
if (eaten_id==21){
showcharacterstr(30,160, "The_Black_Won!", 0x0000, backgroundcolor);
}
b2.x=-1;
b2.y=-1;
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
}
else{
//sine2(f);
sign=0;
break;
}
}
}
break;
} //end case 6
//default break;
}//end switch
}//end function

//================================================================
void move_chessman(int id,int to_x,int to_y){

int sp,from_x,from_y,dx,dy,party;
chessman b1;

if((id<17)&&(id>0)){
b1=ball1[id-1];
sp=ball1[id-1].property;
from_x=ball1[id-1].x;
from_y=ball1[id-1].y;
}
else if(id>=17){
b1=ball2[id-17];
sp=ball2[id-17].property;
from_x=ball2[id-17].x;
from_y=ball2[id-17].y;
}
party=b1.blong;
dx=abs(from_x-to_x);
dy=abs(from_y-to_y);

switch (sp)
{
case 0:
{
if(((93<=to_x)&&(to_x<=147)&&(to_y<=92)&&(to_y>=38))||((93<=to_x)&&(to_x<=147)&&(to_y<=281)&&(to_y>=227))){//if destination is inside the grid

if((dx<=27)&&(dy<=27)){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;

}
}
else{
//sine2(f);
sign=0;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}
}
case 1:
{
if(((93<=to_x)&&(to_x<=147)&&(to_y<=92)&&(to_y>=38))||((93<=to_x)&&(to_x<=147)&&(to_y<=281)&&(to_y>=227))){ //if destination is inside the grid
if((dx==27)&&(dy==27)){

remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);

if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}
}
else{
//sine2(f);
sign=0;
break;
}
}

case 2: //?
{
//?????
if(((id<=16)&&(to_y<=96))||((id>=17)&&(to_y>=113))){
if ((dx==54)&&(dy==54)){ //???

int a=(to_x+from_x)/2;
int b=(to_y+from_y)/2;
for (int i=0;i<16;i++){
if(((ball1[i].x==a)&&(ball1[i].y==b))||((ball2[i].x==a)&&(ball2[i].y==b))){ //?xiang?
//sine2(f);
sign=0;
break;
}



} //end for
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);

if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
else{ //????
//sine2(f);
sign=0;
break;
}
} //end ????
else{
//sine2(f);
sign=0;
break ;
}
} // end case

case 3: //?
{

if((dx==54)&&(dy==27)){ //??????
for(int i=0;i<16;i++){
if((((to_x-from_x)>0)&&(ball1[i].x==(from_x+27))&&(ball1[i].y==from_y))){//???
//sine2(f);
sign=0;
break;
}
else if(((to_x-from_x)<0)&&(ball1[i].x=(from_x-27))&&(ball1[i].y==from_y)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_x-from_x)>0)&&(ball2[i].x=(from_x+27))&&(ball2[i].y==from_y)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_x-from_x)<0)&&(ball2[i].x=(from_x-27))&&(ball2[i].y==from_y)){//???
//sine2(f);
sign=0;
break;
}


} //end for
//????
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);

if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}//end if ????
else if ((dx==27)&&(dy==54)){ //?????
for(int i=0;i<16;i++){
if((((to_y-from_y)>0)&&(ball1[i].y==(from_y+27))&&(ball1[i].x==from_x))){//???
//sine2(f);
sign=0;
break;
}
else if(((to_y-from_y)<0)&&(ball1[i].y=(from_y-27))&&(ball1[i].x==from_x)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_y-from_y)>0)&&(ball2[i].y=(from_y+27))&&(ball2[i].x==from_x)){//???
//sine2(f);
sign=0;
break;
}
else if(((to_y-from_y)<0)&&(ball2[i].y=(from_y-27))&&(ball2[i].x==from_x)){//???
//sine2(f);
sign=0;
break;
}



} // end for
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);

if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
} // end if ????
else{ //???
//sine2(f);
sign=0;
break;
}
} // end case 3

case 4:
{
int dx3;
int dy3;
dx3=to_x-from_x;
dy3=to_y-from_y;
int a=0;
if ( ((dx3==0) && (dy3!=0))||((dx3!=0)&&(dy3==0)) ){//right move
if ((dy3 >0)){ //sit1
for (int j=1; j< ((dy3/27)) ;j++){//detect that if the path has an obstacle
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y+27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y+27*j)) ){
//sine2(f);
sign=0;
a=1;
break;//if the occurrance of obstacle
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
}
else if ( dy3<0){//sit2
for (int j=1; j<( abs(dy3)/27);j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y-27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y-27*j)) ){
//sine2(f);
sign=0;
a=1;
break;
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
}

else if (dx3>0){ //sit3
for (int j=1; j<dx3/27;j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x+27*j)&&(ball1[i].y=from_y)) || ((ball2[i].x==from_x+27*j)&&(ball2[i].y==from_y)) ){
//sine2(f);
sign=0;
a=1;
break;
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break ;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break ;
}
}
}
else if (dx3<0){ //sit4
for (int j=1;j< (( abs(dx3)/27));j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x-27*j)&&(ball1[i].y=from_y)) || ((ball2[i].x==from_x-27*j)&&(ball2[i].y==from_y)) ){
//sine2(f);
sign=0;
a=1;
break;
}


}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break ;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break ;
}
}
}
}
else{
//sine2(f);
sign=0;
break;
}

}

case 5:
{
int dx3;
int dy3;
dx3=to_x-from_x;
dy3=to_y-from_y;
int a=0;
if ( ((dx3==0) && (dy3!=0))||((dx3!=0)&&(dy3==0)) ){//right move
if ((dy3 >0)){ //sit1
for (int j=1; j< ((dy3/27)) ;j++){//detect that if the path has an obstacle
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y+27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y+27*j)) ){
//sine2(f);
sign=0;
a=1;
break;//if the occurrance of obstacle
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
}
else if ( dy3<0){//sit2
for (int j=1; j<( abs(dy3)/27);j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x)&&(ball1[i].y==from_y-27*j)) || ((ball2[i].x==from_x)&&(ball2[i].y==from_y-27*j)) ){
//sine2(f);
sign=0;
a=1;
break;
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break;
}
}
}

else if (dx3>0){ //sit3
for (int j=1; j<dx3/27;j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x+27*j)&&(ball1[i].y=from_y)) || ((ball2[i].x==from_x+27*j)&&(ball2[i].y==from_y)) ){
//sine2(f);
sign=0;
a=1;
break;
}
}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break ;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break ;
}
}
}
else if (dx3<0){ //sit4
for (int j=1;j< (( abs(dx3)/27));j++ ){
for (int i=0; i<16;i++){
if (((ball1[i].x==from_x-27*j)&&(ball1[i].y=from_y)) || ((ball2[i].x==from_x-27*j)&&(ball2[i].y==from_y)) ){
//sine2(f);
sign=0;
a=1;
break;
}


}
}

if (a==0){
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
if ((id<17)&&(id>0)){
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
break ;
}
else {
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
break ;
}
}
}
}
else{
//sine2(f);
sign=0;
break;
}

}

case 6:
{
int dy1;
dy1=to_y-from_y;
if ((id<17) && (id>0)){ //chess of red
if ( from_y >172){ //have accrossed the river
if ( ((dx==27)&&(dy1==0)) || ((dy1==27) && (dx==0)) ){ //across the river, "left " ,"right", "forward"
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
}
else { //illeagal move
//sine2(f);
sign=0;
break;
}
}
else { //have not accross the river
if ( (dx==0)&&(dy1==27) ){//just "forward"
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
ball1[id-1].pre_x=from_x;
ball1[id-1].pre_y=from_y;
ball1[id-1].x=to_x;
ball1[id-1].y=to_y;
sign=1;
}
else {//movement illegal
//sine2(f);
sign=0;
break;
}
}
} // end red
else { // black
if ( (from_y<147)&& (from_y>0)){// have accross the river
if ( ((dx==27)&&(dy1==0)) || ((dy1==-27) && (dx==0)) ){ //across the river, "left " ,"right", "forward"
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
}
else {//illegal
//sine2(f);
sign=0;
break;
}
}
else if (from_y>170){ //have not accross the river
if ( (dx==0)&&(dy1==-27) ){//just "forward"
remove_prev(from_x, from_y,backgroundcolor);
if(party==0)
video_chessmate(to_x,(to_y-radius),b1.c,0xf800);
else
video_chessmate(to_x,(to_y-radius),b1.c,0x0000);
ball2[id-17].pre_x=from_x;
ball2[id-17].pre_y=from_y;
ball2[id-17].x=to_x;
ball2[id-17].y=to_y;
sign=1;
}
else{
//sine2(f);
sign=0;
break;
}
}
}
break;
} //end case 6
//default break;
}//end switch
}//end function

void remove_prev(int x, int y,unsigned col){
if( (y==38) && (x==12)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x,y+radius,0x0000);
draw_line(x,y,x+radius,y,0x0000);
}
else if((x==228)&&(y==38)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x,y+radius,0x0000);
draw_line(x-radius,y,x,y,0x0000);
}
else if((y==281) && (x==12)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x,y-radius,0x0000);
draw_line(x,y,x+radius,y,0x0000);
}
else if((y==281) && (x==228)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x,y-radius,0x0000);
draw_line(x,y,x-radius,y,0x0000);
}
else if (((x==120) && (y==281)) ||((x==39) && (y==281)) || ((x==66) && (y==281)) || ((x==174) && (y==281)) || ((x==201) && (y==281)) || ((x==39) && (y==146)) || ((x==66) && (y==146)) || ((x==93) && (y==146))|| ((x==120) && (y==146)) || ((x==147) && (y==146)) || ((x==174) && (y==146)) || ((x==201) && (y==146))){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x,y-radius,0x0000);
draw_line(x-radius,y,x+radius,y,0x0000);
}
else if (((x==39) && (y==38)) || ((x==66) && (y==38)) || ((x==174) && (y==38)) || ((x==201) && (y==38))||((y==173)&&((x>=39)&&(x<=201)))||((x==120) && (y==38)))
{
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x,y+radius,0x0000);
draw_line(x-radius,y,x+radius,y,0x0000);
}
else if (((x==39)&&(y==65)) || ((x==66)&&(y==65)) ||((x==39)&&(y==92)) ||((x==66)&&(y==92))||((x==174)&&(y==65)) || ((x==201)&&(y==65)) ||((x==174)&&(y==92)) ||((x==201)&&(y==92))||((x==39)&&(y==227)) || ((x==66)&&(y==227)) ||((x==39)&&(y==254)) ||((x==66)&&(y==254))||((x==174)&&(y==227)) || ((x==201)&&(y==227)) ||((x==174)&&(y==254)) ||((x==201)&&(y==254)) || ((y==119) && ((x>=39)&&(x<=201)))||((y==200) && ((x>=39)&&(x<=201)))){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y-radius,x,y+radius,0x0000);
draw_line(x-radius,y,x+radius,y,0x0000);
}
else if((x==12)&& ((y>=65) && (y<=254))){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x+radius,y,0x0000);
draw_line(x,y-radius,x,y+radius,0x0000);

}
else if((x==228)&& ((y>=65) && (y<=254))){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x,y,x-radius,y,0x0000);
draw_line(x,y-radius,x,y+radius,0x0000);

}

else if ((x==120) && ((y==65 )|| (y==254))){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x-radius,y+radius,x+radius,y-radius,0x0000);
draw_line(x-radius,y-radius,x+radius,y+radius,0x0000);

}

else if((x==93)&& (y==38)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y,x,y+radius,0x0000);
draw_line(x,y,x+radius,y+radius,0x0000);
}
else if((x==147)&& (y==38)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y,x,y+radius,0x0000);
draw_line(x,y,x-radius,y+radius,0x0000);
}
else if((x==93)&& (y==281)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y,x,y-radius,0x0000);
draw_line(x,y,x+radius,y-radius,0x0000);

}
else if((x==147)&& (y==281)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y,x,y-radius,0x0000);
draw_line(x,y,x-radius,y-radius,0x0000);
}
else if (((x==93) && (y==65)) ||((x==147) && (y==65))||((x==120) && (y==92))||((x==93) && (y==254))||((x==147) && (y==254))||((x==120) && (y==227))){
drawrectangle(x-radius, y-radius,x+radius,y+radius, 0xffff);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y-radius,x,y+radius,0x0000);
}
else if ((x==93)&&(y==92)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y-radius,x,y+radius,0x0000);
draw_line(x,y,x+radius,y-radius,0x0000);
}
else if ((x==147)&&(y==92)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y-radius,x,y+radius,0x0000);
draw_line(x,y,x-radius,y-radius,0x0000);
}
else if ((x==93)&&(y==227)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y-radius,x,y+radius,0x0000);
draw_line(x,y,x+radius,y+radius,0x0000);
}
else if ((x==147)&&(y==227)){
drawrectangle(x-radius, y-radius,x+radius,y+radius, col);
draw_line(x-radius,y,x+radius,y,0x0000);
draw_line(x,y-radius,x,y+radius,0x0000);
draw_line(x,y,x-radius,y+radius,0x0000);
}
}

//=================================================================
int main()
{

uart_init();
stdout = stdin = stderr = &uart_str;
//set up timer 0 for 1 mSec timebase
TIMSK0= (1<<OCIE0A); //turn on timer 0 cmp match ISR
OCR0A = 249; //set the compare reg to 250 time ticks
//set prescalar to divide by 64
TCCR0B= 3;
// turn on clear-on-match
TCCR0A= (1<<WGM01) ;
//==================================================================
IO_definition();

spi_initialize();
sei();

delay_ms(500);

LCD_RESET_0;
delay_ms(100);
LCD_RESET_1;
delay_ms(100);
LCD_CS_SET;
LCD_WR_SET;
LCD_RD_SET;
LCD_Init();

LCD_Clear();
draw_mainpage();

while(1)
begin
if (debouncetimes==0){
debouncetimes=500;
xmax=xpositionbuffer[0];
xmin=xpositionbuffer[0];
ymax=ypositionbuffer[0];
ymin=ypositionbuffer[0];
fprintf(stdout,"debouncecounts=%d\n\r",debouncecount) ;
for(int i=0; i<debouncecount;i++ ){
if (xmax<=xpositionbuffer[i])
xmax=xpositionbuffer[i];
if (xmax<=ypositionbuffer[i])
ymax=ypositionbuffer[i];
if (xpositionbuffer[i]<=xmin)
xmin=xpositionbuffer[i];
if (ypositionbuffer[i]<=ymin)
ymin=ypositionbuffer[i];
xplus+=xpositionbuffer[i];
yplus+=ypositionbuffer[i];
}
if(debouncecount!=0){
if(debouncecount>2){
xmean=(xplus-xmax-xmin)/(debouncecount-2);
ymean=(yplus-ymax-ymin)/(debouncecount-2);
}
else{
xmean=xplus/debouncecount;
ymean=yplus/debouncecount;
}
debouncecount=0;
xplus=0;
yplus=0;
fprintf(stdout,"flag=%d\n\r",flag) ;

task();
}

end
}
}