中国象棋棋盘
刚写了一个很菜的代码【中国象棋棋盘】不会了,请教下各位大侠移动方格他改变了,这个怎么解决,请大家帮我完善优化,帮我把他做完,谢谢#include <graphics.h> /*图形系统头文件*/
#include<bios.h> /*包含BIOS.H库函数*/
#define VK_LEFT 0x4b00 /*向左方向键*/
#define VK_RIGHT 0X4d00 /*向右方向键*/
#define VK_DOWN 0X5000 /*向下方向键*/
#define VK_UP 0X4800 /*向上方向键*/
#define VK_ESC 0X011B /*ESC键*/
#define SCREENWIDTH 640 /*屏幕宽度*/
#define SCREENHEIGHT 480 /*屏幕高度*/
#define SIZE 45 /*移动方格的边长*/
#define scoreinterval 45 /*每次移动的像素*/
#define FORECOLOR YELLOW /*定义前景色*/
#define BGCOLOR BLACK /*定义屏幕的颜色*/
enum direct{left,up,right,down};/*枚举类型,定义上下左右方向*/
enum bool{false,true};
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
void MoveColor();/*恢复棋盘*/
void DrawQp(void);/*画棋盘函数*/
void qizi(void);
void drawblock();/*在(0,0)位置画形块*/
enum bool moveable();/*判断是否可以继续移动,dir为移动方向在dir指向的方向键能移动返回True不能移动返回False*/
void moveblock();/*移动方格x,y指示当方格的位置dir代表方向*/
time_t td;
int main(void)
{
int x=0,y=0;
int key;
enum bool fgameover=false; /*游戏状态,false表示未完*/
int gd=DETECT,gr;
initgraph(&gd,&gr,""); /*初始化图形系统*/
setbkcolor(BLUE);/*设计背景颜色*/
cleardevice();
setcolor(LIGHTMAGENTA);/*设计作图颜色*/
DrawQp();/*画棋盘*/
/*打开时间*/
tzset();
time(&td);
gotoxy(22,202);
printf("%s",asctime(localtime(&td)));
qizi();
drawblock(x,y,FORECOLOR); /*在(0,0)位置画形块*/
for(;;)
{
if(bioskey(1))key=bioskey(0);/*获取键值赋给key*/
else key=0;
switch(key)
{
case VK_LEFT: /*左移*/
if(moveable(x,y,left))
moveblock(&x,&y,left);
break;
case VK_RIGHT: /*右移*/
if(moveable(x,y,right))
moveblock(&x,&y,right);
break;
case VK_UP: /*上移*/
if(moveable(x,y,up))
moveblock(&x,&y,up);
break;
case VK_DOWN: /*下移*/
if(moveable(x,y,down))
moveblock(&x,&y,down);
break;
case VK_ESC: /*结束*/
fgameover=true;
break;
}
if(fgameover)break;
}
getch();
closegraph();/*关闭图形系统*/
}
void DrawQp()/*画棋盘*/
{
int x,y,border,color; int fillstyle;
for(x=20;x<=380;x+=45){line(x,20,x,200);line(x,245,x,425);}/*上半和下半【竖】*/
for(x=20;x<=45;x+=45){line(x,20,x,380);}/*【左】旁边*/
for(x=380;x<=380;x+=45){line(x,200,x,425);}/*【右】旁边*/
for(y=20;y<=200;y+=45){line(20,y,380,y);}/*上半【行】*/
for(y=20;y<=460;y+=45){line(20,y,380,y);}/*下半【行】*/
for(y=105;y<=111;y+=95){line(45,y,60,y);line(85,y,70,y);}/*画星号【行】*/
for(x=60;x<=100;x+=100){line(x,105,x,90);line(x,130,x,116);}
for(y=115;y<=130;y+=95){line(45,y,60,y);line(85,y,70,y);}/*行*/
for(x=70;x<=100;x+=100){line(x,105,x,90);line(x,130,x,116);}/*画星号【竖】*/
/*第二个星号右上*/
for(y=105;y<=105;y+=105){line(355,y,340,y);line(330,y,315,y);}/*行*/
for(x=340;x<=340;x+=340){line(x,130,x,115);line(x,90,x,105);}/*画星号【竖】*/
for(y=115;y<=115;y+=115){line(340,y,355,y);line(315,y,330,y);}/*行*/
for(x=330;x<=340;x+=340){line(x,130,x,116);line(x,105,x,90);}/*竖*/
/*第三个星号*/
for(y=330;y<=340;y+=340){line(355,y,340,y);line(330,y,315,y);}/*行*/
for(x=330;x<=340;x+=340){line(x,340,x,355);line(x,315,x,330);}/*画星号【竖】*/
for(y=340;y<=340;y+=340){line(355,y,340,y);line(315,y,330,y);}/*行*/
for(x=340;x<=444;x+=340){line(x,315,x,330);line(x,340,x,355);}/*竖*/
/*第四个星号*/
for(x=60;x<=60;x+=60){line(x,340,x,355);line(x,315,x,330);}/*左下星号【竖】*/
for(y=340;y<=340;y+=340){line(45,y,60,y);line(70,y,85,y);}/*行*/
for(y=330;y<=330;y+=330){line(45,y,60,y);line(70,y,85,y);}/*画星号【行】*/
for(x=70;x<=70;x+=70){line(x,340,x,355);line(x,315,x,330);}/*竖*/
/*上【将位】*/
line(245,20,155,110);
line(155,20,245,110);
/*帅位*/
line(155,425,245,335);
line(155,335,245,425);
fillstyle=SOLID_FILL;/*把填充模式设计为SOLID_FILL颜色设置为青色*/
setfillstyle(fillstyle,CYAN);
bar(22,202,378,243);/*棋盘中间*/
}
void qizi()
{
int color,border;
setcolor(8);/*作图颜色为红色*/
color=DARKGRAY;
circle(200,26,15);/*在200,28处画以17为半径的图形*/
setcolor(12);
circle(200,26,16);
setfillstyle(SOLID_FILL,color);
floodfill(200,26,color);
}
void drawblock(int x,int y,int color)
{
setfillstyle(SOLID_FILL,color);
bar(SIZE*x,SIZE*y,SIZE*(x+1),SIZE*(y+1));
}
/*判断是否可以继续移动,dir为移动方向*/
/*在dir指向的方向键能移动返回True不能移动返回False*/
enum bool moveable(int x,int y,enum direct dir)
{
switch(dir)
{
case left:
if(x>0)return true;
break;
case up:
if(y>0)return true;
break;
case right:
if(x<SCREENWIDTH/SIZE-1)return true;
break;
case down:
if(y<SCREENHEIGHT/SIZE-1)return true;
break;
}return false;
}
/*移动方格x,y指示当方格的位置dir代表方向*/
void moveblock(int *x,int *y,enum direct dir)
{
drawblock(*x,*y,BGCOLOR); /*清除行块*/
switch(dir) /*根据参数dir值改变方格位置*/
{
case left:
(*x)--;
break;
case up:
(*y)--;
break;
case right:
(*x)++;
break;
case down:
(*y)++;
break;
}
drawblock(*x,*y,FORECOLOR); /*在新的位置重画方格*/
}
/*没调好*/
/*void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/
{
我该怎么写呢?大家帮帮我
}*/