| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2096 人关注过本帖
标题:中国象棋棋盘
只看楼主 加入收藏
tandechun
Rank: 2
来 自:广西-南宁
等 级:论坛游民
帖 子:58
专家分:35
注 册:2010-3-14
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
中国象棋棋盘
刚写了一个很菜的代码【中国象棋棋盘】不会了,请教下各位大侠移动方格他改变了,这个怎么解决,请大家帮我完善优化,帮我把他做完,谢谢



#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)/*走了一步后恢复原来格子的状态*/
{

   我该怎么写呢?大家帮帮我
}*/
搜索更多相关主题的帖子: 中国象棋 棋盘 
2010-04-09 13:26
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:1 
移动棋子后重绘棋盘,老将也重绘,你如果就是画一个棋盘的话可以判断下老将的位置,当棋子经过老将时,别重画了,干脆吃掉就行了。
还有时间,和棋盘远点,免得再话,或者把设置时间的过程放在画棋盘中。当然实际玩不起来,要判断的东西很多。

离恨恰如春草,更行更远还生。
2010-04-09 14:35
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
收藏
得分:1 
      没有什么大的改动的情况下就不要重画了,我是这么想的,我也刚学这个不久。

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2010-04-09 22:25
inMyC
Rank: 1
等 级:新手上路
帖 子:8
专家分:9
注 册:2010-4-7
收藏
得分:1 
能弄个五子棋棋盘的代码么。

我找了好久没合适的、


2010-04-10 02:27
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:1 
2010-04-10 10:21
快速回复:中国象棋棋盘
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017413 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved