资源目录
压缩包内文档预览:(预览前20页/共31页)
编号:58745424
类型:共享资源
大小:209.44KB
格式:RAR
上传时间:2020-03-17
上传人:qq77****057
认证信息
个人认证
李**(实名认证)
江苏
IP属地:江苏
7.2
积分
- 关 键 词:
-
vc
象棋
程序
- 资源描述:
-
vc++象棋程序,vc,象棋,程序
- 内容简介:
-
中国象棋程序流程图计算机学院20034级程序设计高级实验C大型作业报告题目:中国象棋系统双人对下游戏程序。人员:谢剑(学号:3035211133 班级:计算机20034班) 俞雪永(学号:3035211138 班级:计算机20034班) 谭书舟(学号:3035211128 班级:计算机20034班) 金必培(学号:3035211119 班级:计算机20034班) 贺军 (学号:3035211118 班级:计算机20034班)联系电话:13777876231 13634111565 E-mail:xiaohui5551 任课教师:王云武报告递交日期:2004年 12 月 16 日一 系统功能说明本游戏程序为中国象棋双人对下,只要有一方的将(帅)被对方吃掉后系统自动判断输赢,并显示Black is winning the game或(Red is winning the game)。在走棋过程中,系统自动提示红(黑)方走。如果有一方想放弃本局,就可以点击象棋框右边的退出框。如果一局结束后想继续走,则只要用鼠标点击右边的开始框,则进行新一局游戏(具体游戏界面见附录二)。二 使用说明(1)本程序所使用库函数说明include stdio.h中的基本函数;include process.h中的exit(0)函数;include dos.h中相关鼠标操作设置;include math.h中的fabs()函数;includeinclude graphics.h中的 setcolor(),setfillstyle(),line(),moveto(), floodfill(),circle(),rectange()等函数;(2)程序使用说明 鼠标点击棋子一下(棋子外圈变红色),则可以移动当前的棋子;鼠标点击两下(棋子外圈变白色),则取消当前所选的棋子。三 程序结构1 程序结构说明见中国象棋流程图(附录一)。2 重要数据的说明见附录二棋子半径R=17,棋盘框窗口(60,50,380,410),操作者框窗口(460,40,570,90),开始框窗口(460,110,570,160),退出框窗口(460,180,570,230),游戏说明框窗口(460,240,570,410)。3 程序函数清单(1) 自己所编的小型汉字库void get_hz(int hanzi,unsigned char bur);(2) 显示汉字void print_hz(unsigned char *mat,int color,int x,int y);(3) 画棋子void drawQizi(struct mouse* mouse1,int color);(4) 初始化游戏(显示游戏棋盘包括操作、开始、退出、游戏说明框,棋子)void showQiPan();(5) 鼠标初始化void initmouse();(6) 初始鼠标位置void cursttoxy(int x,int y);(7) 显示开始框showKSK(int color);(8) 显示退出框showTCK(int color);(9) 显示说明框showSMK(int color);(10) 显示操作框showCZK(int color);(11) 取消当前鼠标位置void cancelMouse(int x,int y);(12) 显示鼠标位置void showMouse(int x,int y);(13) 读取当前鼠标位置void readmouse(int* bottom,int* mousex,int* mousey);(14) 判断各个棋子的步法int judgestepright(struct mouse* mouse0,struct mouse* mouse1,int a109);(15) 是否退出游戏int isoutgame(int mousex,int mousey);(16) 是否存在棋子int isexistQi(struct mouse *mouse,int a109,int number);(17) 是否开始游戏int begingame(int mousex,int mousey);(18) 判断输赢int checkwin(int temp);(19) 是否要取消当前要移动的起子int iscancelQizi(struct mouse* mouse0,struct mouse* mouse1)(20) 改变棋子void changeQizi(struct mouse* mouse0,struct mouse* mouse1);(21) 改变棋子边框颜色void changecolor(struct mouse* mouse0);(22) 游戏界面初始化void newGame();(23) 结束游戏void GameOver();四 系统设计难点及其解决方法(1) 由于本游戏是在TC下运行的,而TC不能直接输出汉字,则在游戏界面上的汉字输出有一定的问题。在本程序中,故我们采用自行设计1616 的点阵的汉字模型,采用汉字显示原理在TC中进行输出。(2) 由于本程序采用鼠标操作,则在鼠标移动的同时,必须同时消隐原位置的鼠标图案,并且重新附上鼠标处原游戏界面图案。由于鼠标移动的不确定性,从而使鼠标位置的原游戏界面图案较复杂。 本程序中采用的解决方法是:为鼠标静态申请相应大小的空间用以存储鼠标位置的原背景图案,当鼠标移动时,先在鼠标原位置附上所保存的图案,接着在新位置显示鼠标,从而使鼠标实现移动。(3) 由于棋子是动态移动,则同鼠标一样必须实现棋子的显示与消隐,但棋盘的边框线条较复杂。若采用(2)中鼠标消隐原理,则将要消耗很多空间。例如:为每个棋子申请相应大小的空间用以保存背景图案,则空间大小为:3234342=73984(B)=72.25(KB),从而可以看出所需空间较大。考虑到该方法与本程序的不兼容性及消耗空间较大,本程序采用每次移动棋子时,棋盘画面刷新一次的方法来实现棋子的消隐,但这也导致了棋盘画面由于刷新而不稳定的后果。(4) 象棋游戏程序中的步法正确性的判断是较复杂的,因为各个棋子的规则较复杂,考虑的情况较多。本游戏采用a109数组与棋盘的10行9列棋格一一相对应的方法来判断棋子从mouse0移到mouse1处的正确性(mouse0与mouse1是存储棋子相应的行列坐标的结构)。五 不足之处(1) 正如上面(3)所述:由于采用刷新方法来实现棋子的消隐,而导致了棋盘界面的不稳定,这是本游戏程序较大的不足,若采用棋盘棋子分块描绘的方法,则在移动棋子时,只能改变局部棋盘或棋子,从而能实现棋盘的稳定显示,但此方法与我们所编的程序的实现在本质上的区别,故我们未采用。六 人员分工说明谢剑(组长):流程图的设计,大部分的程序都是谢剑编的,包括最后程序的连接与调试。 最后实验报告有俞雪永与谢剑所完成。俞雪永:设计了游戏界面(附录二)及界面程序,画鼠标及程序。谭书舟、金必培、贺军:汉字模型的设计、描绘及数据统计和部分鼠标相关函数。 七 源程序见附录三附录一:中国象棋流程图附录二:游戏界面附录三: 源程序#include#include#include#include#include#include#define REDCHE 1#define REDXIANG 2#define REDHORSE 3#define REDSHI 4#define REDJIANG 5#define REDPAO 6#define REDBING 7#define BLACKCHE 11#define BLACKXIANG 12#define BLACKHORSE 13#define BLACKSHI 14#define BLACKJIANG 15#define BLACKPAO 16#define BLACKBING 17#define HONG 21#define HEI 22#define FANG 23#define TUI 24#define CHU 25#define KAI 26#define SHI 27#define lx 60#define ly 50#define dix 40 /* the distance of x */#define dy 40 /*the distance of y*/#define FIRST 0#define SECOND 1#define ROW 10#define COL 9int pixel326;struct mouse int x;int y;static int aROWCOL;int number;void get_hz(int hanzi,unsigned char bur)/*编小型汉字库*/ /* 军、马、炮、相、士、将、卒的走法正确性的判断*/ switch(hanzi) case REDCHE : case BLACKCHE : bur0=0x01;bur1=0x80;bur2=0x01;bur3=0x80;bur4=0x3f;bur5=0xfc;bur6=0x3f;bur7=0xfc;bur8=0x01;bur9=0x80;bur10=0x0f;bur11=0xf0;bur12=0x0d;bur13=0xb0;bur14=0x0f;bur15=0xf0;bur16=0x0d;bur17=0xb0;bur18=0x0f;bur19=0xf0;bur20=0x01;bur21=0x80;bur22=0x3f;bur23=0xfc;bur24=0x3f;bur25=0xfc;bur26=0x01;bur27=0x80;bur28=0x01;bur29=0x80; bur30=0x01;bur31=0x80; return; case REDXIANG : bur0=0x18;bur1=0x7f;bur2=0x18;bur3=0x7f;bur4=0x18;bur5=0x63;bur6=0x18;bur7=0x63;bur8=0xff;bur9=0x7f;bur10=0xff;bur11=0x7f;bur12=0x3c;bur13=0x63;bur14=0x3c;bur15=0x63;bur16=0x5a;bur17=0x63;bur18=0x5a;bur19=0x7f;bur20=0x5a;bur21=0x7f;bur22=0xdb;bur23=0x63;bur24=0x99;bur25=0x63;bur26=0x99;bur27=0x63;bur28=0x18;bur29=0x7f;bur30=0x18;bur31=0x7f; return; case BLACKXIANG : bur0=0x01;bur1=0xc0;bur2=0x3;bur3=0xe0;bur4=0x06;bur5=0x60;bur6=0x0c;bur7=0xc0;bur8=0x3f;bur9=0xfc;bur10=0x21;bur11=0x4;bur12=0x23;bur13=0x04;bur14=0x3f;bur15=0xfc;bur16=0x0e;bur17=0x00;bur18=0x1b;bur19=0x08;bur20=0x34;bur21=0x90;bur22=0x69;bur23=0x60;bur24=0x02;bur25=0x60;bur26=0x04;bur27=0x50;bur28=0x08;bur29=0x88;bur30=0x07;bur31=0x06; return; case REDHORSE : bur0=0x00;bur1=0x00;bur2=0x3f;bur3=0xf8;bur4=0x3f;bur5=0xf8;bur6=0x00;bur7=0x18;bur8=0x18;bur9=0x18;bur10=0x18;bur11=0x30;bur12=0x18;bur13=0x20;bur14=0x1f;bur15=0xfe;bur16=0x00;bur17=0x02;bur18=0x00;bur19=0x02;bur20=0x7f;bur21=0xf2;bur22=0x00;bur23=0x02;bur24=0x00;bur25=0x02;bur26=0x00;bur27=0x22;bur28=0x00;bur29=0x3e;bur30=0x00;bur31=0x00; return; case BLACKHORSE : bur0=0x00;bur1=0x00;bur2=0x3f;bur3=0xf8;bur4=0x3f;bur5=0xf8;bur6=0x00;bur7=0x18;bur8=0x18;bur9=0x18;bur10=0x18;bur11=0x30;bur12=0x18;bur13=0x20;bur14=0x1f;bur15=0xfe;bur16=0x00;bur17=0x02;bur18=0x00;bur19=0x02;bur20=0x7f;bur21=0xf2;bur22=0x00;bur23=0x02;bur24=0x00;bur25=0x02;bur26=0x00;bur27=0x22;bur28=0x00;bur29=0x3e;bur30=0x00;bur31=0x00; return; case REDSHI : bur0=0x00;bur1=0x00;bur2=0x07;bur3=0x00;bur4=0x0e;bur5=0x30;bur6=0x18;bur7=0x30;bur8=0x18;bur9=0x30;bur10=0x33;bur11=0xff;bur12=0x63;bur13=0xff;bur14=0xd8;bur15=0x30;bur16=0x18;bur17=0x30;bur18=0x18;bur19=0x30;bur20=0x18;bur21=0x30;bur22=0x18;bur23=0x30;bur24=0x18;bur25=0x30;bur26=0x19;bur27=0xfe;bur28=0x19;bur29=0xfe;bur30=0x00;bur31=0x00; return; case BLACKSHI : bur0=0x01;bur1=0x80;bur2=0x01;bur3=0x80;bur4=0x01;bur5=0x80;bur6=0x01;bur7=0x80;bur8=0x7f;bur9=0xfe;bur10=0x70;bur11=0xfe;bur12=0x01;bur13=0x80;bur14=0x01;bur15=0x80;bur16=0x01;bur17=0x80;bur18=0x01;bur19=0x80;bur20=0x01;bur21=0x80;bur22=0x01;bur23=0x80;bur24=0x1f;bur25=0xf8;bur26=0x1f;bur27=0xf8;bur28=0x00;bur29=0x00;bur30=0x00;bur31=0x00; return; case REDJIANG : bur0=0x04;bur1=0x0c;bur2=0x04;bur3=0x18;bur4=0x04;bur5=0x3f;bur6=0x04;bur7=0x63;bur8=0x44;bur9=0xd6;bur10=0x64;bur11=0x14;bur12=0x3c;bur13=0x08;bur14=0x1c;bur15=0x14;bur16=0x0d;bur17=0xff;bur18=0x04;bur19=0x04;bur20=0x0c;bur21=0x64;bur22=0x1c;bur23=0x34;bur24=0x34;bur25=0x14;bur26=0x24;bur27=0x04;bur28=0xc4;bur29=0x24;bur30=0x04;bur31=0x3c; return; case BLACKJIANG : bur0=0x0c;bur1=0x18;bur2=0x0c;bur3=0x18;bur4=0x0c;bur5=0x18;bur6=0xcc;bur7=0xff;bur8=0xcc;bur9=0xdb;bur10=0xcc;bur11=0xdb;bur12=0xcc;bur13=0xdb;bur14=0xcc;bur15=0xdb;bur16=0xcc;bur17=0xdb;bur18=0xcc;bur19=0xdb;bur20=0xc;bur21=0x18;bur22=0x18;bur23=0x18;bur24=0x18;bur25=0x18;bur26=0x30;bur27=0x18;bur28=0x30;bur29=0x18;bur30=0x60;bur31=0x18; return; case REDPAO : case BLACKPAO : bur0=0x30;bur1=0xc0;bur2=0x32;bur3=0xc0;bur4=0x36;bur5=0xff;bur6=0xb5;bur7=0x9e;bur8=0xfd;bur9=0x86;bur10=0x7b;bur11=0x76;bur12=0x3a;bur13=0xd6;bur14=0x32;bur15=0xd6;bur16=0x30;bur17=0xf6;bur18=0x30;bur19=0xf6;bur20=0x68;bur21=0xce;bur22=0xcc;bur23=0xcd;bur24=0xcc;bur25=0xc1;bur26=0xc6;bur27=0xc3;bur28=0x82;bur29=0xff;bur30=0x80;bur31=0xfe; return; case REDBING : bur0=0x00;bur1=0xc0;bur2=0x01;bur3=0xc0;bur4=0x0f;bur5=0x00;bur6=0x0e;bur7=0x00;bur8=0x0c;bur9=0x00;bur10=0x0f;bur11=0xf8;bur12=0x0f;bur13=0xf8;bur14=0x0c;bur15=0x60;bur16=0x0c;bur17=0x60;bur18=0x0c;bur19=0x60;bur20=0x0c;bur21=0x60;bur22=0xff;bur23=0xff;bur24=0xff;bur25=0xff;bur26=0x18;bur27=0x30;bur28=0x18;bur29=0x30;bur30=0x30;bur31=0x18; return; case BLACKBING : bur0=0x01;bur1=0x80;bur2=0x01;bur3=0x80;bur4=0x3f;bur5=0xfc;bur6=0x3f;bur7=0xfc;bur8=0x0e;bur9=0x70;bur10=0xe;bur11=0x70;bur12=0x1b;bur13=0xdb;bur14=0x1b;bur15=0xdb;bur16=0x01;bur17=0x80;bur18=0xff;bur19=0xff;bur20=0xff;bur21=0xff;bur22=0x01;bur23=0x80;bur24=0x01;bur25=0x80;bur26=0x01;bur27=0x80;bur28=0x01;bur29=0x80;bur30=0x01;bur31=0x80; return; case FANG:bur0=0x01;bur1=0x80;bur2=0x01;bur3=0x80;bur4=0x7f;bur5=0xfe;bur6=0x7f;bur7=0xfe;bur8=0x06;bur9=0x00;bur10=0x07;bur11=0xe0;bur12=0x07;bur13=0xf0;bur14=0x0c;bur15=0x18;bur16=0x0c;bur17=0x18;bur18=0x18;bur19=0x18;bur20=0x18;bur21=0x18;bur22=0x18;bur23=0x18;bur24=0x33;bur25=0x18;bur26=0x33;bur27=0x18;bur28=0x63;bur29=0xf0;bur30=0x00;bur31=0x00;return; case HEI: bur0=0x3f;bur1=0xfc;bur2=0x3f;bur3=0xfc;bur4=0x29;bur5=0x94;bur6=0x2d;bur7=0xb4;bur8=0x21;bur9=0x84;bur10=0x3f;bur11=0xfc;bur12=0x3f;bur13=0xfc;bur14=0x01;bur15=0x80;bur16=0x0f;bur17=0xf0;bur18=0x0f;bur19=0xf0;bur20=0x01;bur21=0x80;bur22=0xff;bur23=0xff;bur24=0xff;bur25=0xff;bur26=0x24;bur27=0x44;bur28=0x66;bur29=0x66;bur30=0xc3;bur31=0x33; return; case HONG: bur0=0x18;bur1=0x00;bur2=0x18;bur3=0x00;bur4=0x30;bur5=0x06;bur6=0x37;bur7=0xff;bur8=0x66;bur9=0x30;bur10=0xfc;bur11=0x30;bur12=0x0c;bur13=0x30;bur14=0x18;bur15=0x30;bur16=0x30;bur17=0x30;bur18=0xfe;bur19=0x30;bur20=0x60;bur21=0x30;bur22=0x00;bur23=0x30;bur24=0x01;bur25=0x30;bur26=0xf0;bur27=0x36;bur28=0x67;bur29=0xff;bur30=0x00;bur31=0x00; return; case CHU: bur0=0x00;bur1=0x00;bur2=0x01;bur3=0x80;bur4=0x01;bur5=0x80;bur6=0x01;bur7=0x80;bur8=0x31;bur9=0x8c;bur10=0x31;bur11=0x8c;bur12=0x3f;bur13=0xfc;bur14=0x3f;bur15=0xfc;bur16=0x01;bur17=0x80;bur18=0x01;bur19=0x80; bur20=0x01;bur21=0x80;bur22=0x31;bur23=0x8c;bur24=0x31;bur25=0x8c;bur26=0x3f;bur27=0xfc;bur28=0x1f;bur29=0xf8;bur30=0x00;bur31=0x00; return; case KAI: bur0=0x00;bur1=0x00;bur2=0x3f;bur3=0xf8;bur4=0x3f;bur5=0xf8;bur6=0x0c;bur7=0x60;bur8=0x0c;bur9=0x60;bur10=0xff;bur11=0xff;bur12=0xff;bur13=0xff;bur14=0x0c;bur15=0x60;bur16=0x0c;bur17=0x60;bur18=0x0c;bur19=0x60;bur20=0x0c;bur21=0x60;bur22=0x18;bur23=0x60;bur24=0x18;bur25=0x60;bur26=0x30;bur27=0x60;bur28=0x30;bur29=0x60;bur30=0x60;bur31=0x60; return; case TUI: bur0=0x00;bur1=0x00;bur2=0x07;bur3=0xf0;bur4=0x24;bur5=0x10;bur6=0x27;bur7=0xf0;bur8=0x04;bur9=0x10;bur10=0xf7;bur11=0xf0;bur12=0x15;bur13=0x00;bur14=0x24;bur15=0x80;bur16=0x44;bur17=0x40;bur18=0xf4;bur19=0x24;bur20=0x24;bur21=0x18;bur22=0x45;bur23=0x05;bur24=0x86;bur25=0x04;bur26=0x84;bur27=0x02;bur28=0x40;bur29=0x00;bur30=0x3f;bur31=0xff; return; case SHI: bur0=0x00;bur1=0x00;bur2=0x04;bur3=0x08;bur4=0x0c;bur5=0x10;bur6=0x18;bur7=0x70;bur8=0x30;bur9=0xc0;bur10=0xff;bur11=0x82;bur12=0x42;bur13=0xf0;bur14=0x34;bur15=0x01;bur16=0x34;bur17=0x00;bur18=0x18;bur19=0xfe;bur20=0x0c;bur21=0x82;bur22=0x16;bur23=0x82;bur24=0x32;bur25=0xfe;bur26=0x61;bur27=0x00;bur28=0x80;bur29=0x00;bur30=0x00;bur31=0x00; return; void print_hz(unsigned char *mat,int color,int x,int y)/*显示汉字*/ unsigned char mask=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01; int i,j,x0,y0=y,pos; for(i=0;i16;i+) x0=x; pos=2*i; for(j=0;jymouse1-x,mat); y=mouse1-y*dy+ly; x=mouse1-x*dix+lx; setcolor(WHITE); setfillstyle(1,WHITE); circle(x,y,17); floodfill(x,y,WHITE); setcolor(YELLOW); setfillstyle(1,YELLOW); circle(x,y,16); floodfill(x,y,YELLOW); y=y-8; x=x-8; print_hz(mat,color,x,y);void showQiPan()/*显示游戏界面,包括棋盘,棋子,各个框*/ int i,j; struct mouse mouse0; setcolor(CYAN);setfillstyle(1,CYAN);rectangle(38,36,395,432);line(38,36,42,32);line(395,432,398,428);floodfill(41,37,CYAN); setcolor(BROWN); setfillstyle(1,BROWN); rectangle(42,32,398,428); floodfill(58,59,BROWN); setcolor(RED); rectangle(60,50,380,410); /*棋框*/ for(i=0;i=8;i+)moveto(60+40*i,50); lineto(60+40*i,210);for(i=0;i=8;i+)moveto(60+40*i,250); lineto(60+40*i,410);for(j=0;j=9;j+)moveto(60,50+40*j); lineto(380,50+40*j); moveto(180,50); lineto(260,130); moveto(180,130); lineto(260,50); moveto(180,410); lineto(260,330); moveto(180,330); lineto(260,410); setcolor(YELLOW); moveto(95,125);/*上左炮位*/ lineto(95,115); moveto(95,125); lineto(85,125); moveto(95,135); lineto(95,145); moveto(95,135); lineto(85,135); moveto(105,125); lineto(105,115); moveto(105,125); lineto(115,125); moveto(105,135); lineto(105,145); moveto(105,135); lineto(115,135); moveto(335,125);/*上右炮位*/ lineto(335,115); moveto(335,125); lineto(325,125); moveto(325,135); lineto(335,135); moveto(335,135); lineto(335,145); moveto(345,125); lineto(345,115); moveto(345,125); lineto(355,125); moveto(345,135); lineto(345,145); moveto(345,135); lineto(355,135); moveto(95,315);/*下左炮位*/ lineto(95,325); moveto(95,325); lineto(85,325); moveto(95,335); lineto(95,345); moveto(95,335); lineto(85,335); moveto(105,325); lineto(105,315); moveto(105,325); lineto(115,325); moveto(105,335); lineto(105,345); moveto(105,335); lineto(115,335); moveto(335,325);/*下右炮位*/ lineto(335,315); moveto(335,325); lineto(325,325); moveto(325,335); lineto(335,335); moveto(335,335); lineto(335,345); moveto(345,325); lineto(345,315); moveto(345,325); lineto(355,325); moveto(345,335); lineto(345,345); moveto(345,335); lineto(355,335);for(i=0;i=3;i+)/*兵、卒位*/ line(65+80*i,155,65+80*i,165); line(65+80*i,165,75+80*i,165); line(135+80*i,155,135+80*i,165); line(135+80*i,165,125+80*i,165); line(65+80*i,185,65+80*i,175); line(65+80*i,175,75+80*i,175); line(135+80*i,185,135+80*i,175); line(135+80*i,175,125+80*i,175); line(65+80*i,275,65+80*i,285); line(65+80*i,285,75+80*i,285); line(135+80*i,275,135+80*i,285); line(135+80*i,285,125+80*i,285); line(65+80*i,305,65+80*i,295); line(65+80*i,295,75+80*i,295); line(135+80*i,305,135+80*i,295); line(135+80*i,295,125+80*i,295); for(i=0;i10;i+) for(j=0;j9;j+) if(aij!=0) mouse0.x=j; mouse0.y=i;if(aij10) drawQizi(&mouse0,RED);else drawQizi(&mouse0,BLACK); void initmouse()/*鼠标初始化*/ union REGS Inr,Outr; Inr.x.ax=0; int86(0x33,&Inr,&Outr); return ;void cursttoxy(int x,int y)/*初始鼠标位置*/ union REGS r; struct SREGS s; r.x.ax=4; r.x.cx=x; r.x.dx=y; int86x(0x33,&r,&r,&s);showKSK(int color)/*显示开始框*/ unsigned char mat32;setcolor(color); setfillstyle(1,color); rectangle(460,110,570,160); /* 开始框*/ floodfill(470,120,color); get_hz(KAI,mat); print_hz(mat,YELLOW,486,127); get_hz(SHI,mat); print_hz(mat,YELLOW,528,127);showTCK(int color) unsigned char mat32;setcolor(color); setfillstyle(1,color); rectangle(460,180,570,230); /* 退出框 */ floodfill(470,197,color); get_hz(TUI,mat); print_hz(mat,YELLOW,486,197); get_hz(CHU,mat); print_hz(mat,YELLOW,528,197); showSMK(int color) setcolor(color); setfillstyle(1,color); rectangle(460,240,570,410);/* 说明框 */ floodfill(470,250,color); setcolor(GREEN);settextstyle(4,0,2);settextjustify(CENTER_TEXT,1);outtextxy(520,245,please press);outtextxy(520,265,left bottom);outtextxy(520,285,of mouse one);outtextxy(520,305,time to move);outtextxy(520,325,the chess);outtextxy(520,335,n n);outtextxy(520,350,two times to);outtextxy(520,370,cancel the );outtextxy(520,390,moving chess); showCZK(int color) unsigned char mat32; setcolor(color); setfillstyle(1,color); rectangle(460,40,570,90);/* 操作者框 */ floodfill(470,50,color); if(number=FIRST) get_hz(HEI,mat); print_hz(mat,color,486,57); get_hz(FANG,mat); print_hz(mat,color,528,57); get_hz(HONG,mat); print_hz(mat,RED,486,57); get_hz(FANG,mat); print_hz(mat,RED,528,57); else get_hz(HONG,mat); print_hz(mat,color,486,57); get_hz(FANG,mat); print_hz(mat,color,528,57); get_hz(HEI,mat); print_hz(mat,BLUE,486,57); get_hz(FANG,mat); print_hz(mat,BLUE,528,57); void cancelMouse(int x,int y)/*取消当前鼠标位置*/ int x0=x,y0=y,k=1,m=0,j; for(;y0y+26;y0+) if(y0y+16) for(j=0;jk;j+) putpixel(x0+j,y0,pixelm+); x0-; k+=2; else x0=x-3; for(j=0;j7;j+) putpixel(x0+j,y0,pixelm+); void showMouse(int x,int y)/*显示鼠标位置*/ int x0=x,y0=y,k=1,m=0,j; for(;y0y+26;y0+) if(y0y+16) for(j=0;jk;j+) pixelm+=getpixel(x0+j,y0); x0-; k+=2; else x0=x-3; for(j=0;jxx8|mouse1-yy9) return 0; if(amouse0-ymouse0-xymouse1-x0&amouse1-ymouse1-xymouse0-x=11&amouse1-ymouse1-x=11) return 0;switch(amouse0-ymouse0-x) case REDCHE:case BLACKCHE: if(mouse0-x=mouse1-x) i=(mouse0-y=mouse1-y?mouse1-y:mouse0-y)+1; top=mouse0-y=mouse1-y?mouse0-y:mouse1-y; for(;ix) return 0; return 1; else if(mouse0-y=mouse1-y) i=(mouse0-x=mouse1-x?mouse1-x:mouse0-x)+1; top=mouse0-x=mouse1-x?mouse0-x:mouse1-x; for(;iyi) return 0; else if(mouse0-x!=mouse1-x&mouse0-y!=mouse1-y) return 0; return 1;case REDXIANG:case BLACKXIANG: /* Make sure there is no chess in the center */if(amouse0-ymouse0-x=2&mouse1-y=5|amouse0-ymouse0-x=12&mouse1-yx-mouse1-x)=2&fabs(mouse0-y-mouse1-y)=2) if(!(a(mouse0-y+mouse1-y)/2(mouse0-x+mouse1-x)/2) return 1; return 0;case REDHORSE:case BLACKHORSE: if(fabs(mouse0-x-mouse1-x)=1&fabs(mouse0-y-mouse1-y)=2)if(!a(mouse0-y+mouse1-y)/2mouse0-x) return 1; else return 0; else if(fabs(mouse0-y-mouse1-y)=1&fabs(mouse0-x-mouse1-x)=2) if(!amouse0-y(mouse0-x+mouse1-x)/2) return 1; else return 0; else return 0; case REDSHI: case BLACKSHI: if(mouse1-x=3&mouse1-xy=0&mouse1-yy=7&mouse1-yx-mouse1-x)=1&fabs(mouse0-y-mouse1-y)=1) return 1; else return 0; else return 0; case REDJIANG:case BLACKJIANG: if(amouse0-ymouse0-x=REDJIANG&amouse1-ymouse1-x=BLACKJIANG|amouse0-ymouse0-x=BLACKJIANG&amouse1-ymouse1-x=REDJIANG)return 1;if(mouse1-x=3&mouse1-xy=0&mouse1-yy=8&mouse1-yx=mouse1-x&fabs(mouse0-y-mouse1-y)=1|mouse0-y=mouse1-y&fabs(mouse0-x-mouse1-x)=1)return 1; else return 0; else return 0;case REDPAO:case BLACKPAO: if(mouse0-x=mouse1-x) i=(mouse0-ymouse1-y?mouse1-y:mouse0-y)+1; top=mouse0-ymouse1-y?mouse0-y:mouse1-y; for(;ix) flag+; if(flag=-1&amouse1-ymouse1-x=0|flag=0&amouse1-ymouse1-x!=0) return 1; else return 0; else if(mouse0-y=mouse1-y) i=(mouse0-xmouse1-x?mouse1-x:mouse0-x)+1; top=mouse0-xmouse1-x?mouse0-x:mouse1-x; for(;iyi) flag+; if(flag=-1&amouse1-ymouse1-x=0|flag=0&amouse1-ymouse1-x!=0) return 1; else return 0; else return 0;case REDBING: if(mouse0-yx=mouse1-x&mouse1-y-mouse0-y=1) return 1; else return 0; else if(mouse0-x=mouse1-x&mouse1-y-mouse0-y=1|mouse0-y=mouse1-y&fabs(mouse1-x-mouse0-x)=1) return 1; else return 0; case BLACKBING: if(mouse0-y=5) if(mouse0-x=mouse1-x&mouse0-y-mouse1-y=1)return 1; else return 0; else if(mouse0-x=mouse1-x&mouse0-y-mouse1-y=1|mouse0-y=mouse1-y&fabs(mouse0-x-mouse1-x)=1) return 1; else return 0; int isoutgame(int mousex,int mousey)/*是否退出游戏*/ if(mousex460&mousex180&mouseyymouse-x) case REDCHE:case REDXIANG:case REDHORSE: case REDSHI:case REDJIANG:case REDPAO:case REDBING: return 1;case 0: return 0;if(number=SECOND)switch(amouse-ymouse-x) case BLACKCHE:case BLACKXIANG: case BLACKHORSE:case BLACKSHI: case BLACKJIANG:case BLACKPAO: case BLACKBING: return 1;default: return 0;int begingame(int mousex,int mousey)/*开始游戏*/ if(mousex=460&mousex=110&mouseyx=mouse1-x&mouse0-y=mouse1-y) setcolor(WHITE);circle(mouse0-x*dix)+lx,(mouse0-y*dy)+ly,17);return 1;else return 0;void changeQizi(struct mouse* mouse0,struct mouse* mouse1) amouse1-ymouse1-x=amouse0-ymouse0-x;amouse0-ymouse0-x=0;showQiPan();void changecolor(struct mouse* mouse0)/*改变棋子边框颜色*/ setcolor(RED);circle(mouse0-x*dix)+lx,(mouse0-y*dy)+ly,17);void newGame()int graphdriver=DETECT,graphmode;struct palettetype palette;int i,j;struct mouse mouse0;/*初始棋子位置,0表示无棋子*/a00=1;a01=3;a02=2;a03=4;a04=5;a05=4;a06=2;a07=3;a08=1;a10=0;a11=0;a12=0;a13=0;a14=0;a15=0;a16=0;a17=0;a18=0;a20=0;a21=6;a22=0;a23=0;a24=0;a25=0;a26=0;a27=6;a28=0;a30=7;a31=0;a32=7;a33=0;a34=7;a35=0;a36=7;a37=0;a38=7;a40=0;a41=0;a42=0;a43=0;a44=0;a45=0;a46=0;a47=0;a48=0;a50=0;a51=0;a52=0;a53=0;a54=0;a55=0;a56=0;a57=0;a58=0;a60=17;a61=0;a62=17;a63=0;a64=17;a65=0;a66=17;a67=0;a68=17;a70=0;a71=16;a72=0;a73=0;a74=0;a75=0;a76=0;a77=16;a78=0;a80=0;a81=0;a82=0;a83=0;a84=0;a85=0;a86=0;a87=0;a88=0;a90=11;a91=13;a92=12;a93=14;a94=15;a95=14;a96=12;a97=13;a98=11; initgraph(&graphdriver,&graphmode,); setviewport(0,0,600,460,1); clearviewport(); getpalette(&palette); setbkcolor(BLUE); showQiPan(); showKSK(BROWN); showTCK(BROWN); showSMK(BROWN);void GameOver() setcolor(WHITE);setfillstyle(1,WHITE);rectangle(60,170,380,290); floodfill(80,190,WHITE);setcolor(RED);settextstyle(1,0,2);settextjustify(CENTER_TEXT,1);if(number=FIRST) outtextxy(215,210,Red is winning the game);else outtextxy(215,210,Black is winning the game);void main() struct mouse mouse2;int bottom=0,mousex,mousey,x=20,y=30; int temp,flag0,flag1;int flag2;do number=FIRST;newGame();initmouse();cursttoxy(20,30);do flag0=0; flag1=0; showCZK(BROWN);do flag0=0;showMouse(x,y); do readmouse(&bottom,&mousex,&mousey);while(x=mousex&y=mousey&bottom!=1);cancelMouse(x,y);x=mousex; y=mousey;if(bottom=1) if(isoutgam
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。