优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

vc++象棋程序

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

一. 系统功能说明
本游戏程序为中国象棋双人对下,只要有一方的将(帅)被对方吃掉后系统自动判断输赢,并显示Black is winning the game或(Red is winning the game)。在走棋过程中,系统自动提示红(黑)方走。如果有一方想放弃本局,就可以点击象棋框右边的退出框。如果一局结束后想继续走,则只要用鼠标点击右边的开始框,则进行新一局游戏(具体游戏界面见附录二)。 [来源:http://www.think58.com]

二. 使用说明 本文来自think58 [资料来源:http://think58.com]

(1)本程序所使用库函数说明
include<stdio.h>    
stdio.h中的基本函数;
include<process.h>  
  process.h中的exit(0)函数;
include<dos.h>    
dos.h中相关鼠标操作设置;
include<math.h>    
math.h中的fabs()函数;
include<conio.h>
include<graphics.h>
    graphics.h中的 setcolor(),setfillstyle(),line(),moveto(),
    floodfill(),circle(),rectange()等函数; copyright think58

[来源:http://think58.com]

(2)程序使用说明
     鼠标点击棋子一下(棋子外圈变红色),则可以移动当前的棋子;鼠标点击两下(棋子外圈变白色),则取消当前所选的棋子。 think58好,好think58

[来源:http://www.think58.com]

三. 程序结构
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) 取消当前鼠标位置 本文来自think58

[来源:http://www.think58.com]


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 a[10][9]);
(15) 是否退出游戏
int isoutgame(int mousex,int mousey);
(16) 是否存在棋子
int isexistQi(struct mouse *mouse,int a[10][9],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(); think58
[资料来源:http://www.THINK58.com]

四. 系统设计难点及其解决方法 [资料来源:http://THINK58.com]

(1)     由于本游戏是在TC下运行的,而TC不能直接输出汉字,则在游戏界面上的汉字输出有一定的问题。在本程序中,故我们采用自行设计16×16 的点阵的汉字模型,采用汉字显示原理在TC中进行输出。
(2)     由于本程序采用鼠标操作,则在鼠标移动的同时,必须同时消隐原位置的鼠标图案,并且重新附上鼠标处原游戏界面图案。由于鼠标移动的不确定性,从而使鼠标位置的原游戏界面图案较复杂。
          本程序中采用的解决方法是:为鼠标静态申请相应大小的空间用以存储鼠标位置的原背景图案,当鼠标移动时,先在鼠标原位置附上所保存的图案,接着在新位置显示鼠标,从而使鼠标实现移动。
(3)     由于棋子是动态移动,则同鼠标一样必须实现棋子的显示与消隐,但棋盘的边框线条较复杂。若采用(2)中鼠标消隐原理,则将要消耗很多空间。例如:为每个棋子申请相应大小的空间用以保存背景图案,则空间大小为:32×34×34×2=73984(B)=72.25(KB),从而可以看出所需空间较大。
考虑到该方法与本程序的不兼容性及消耗空间较大,本程序采用每次移动棋子时,棋盘画面刷新一次的方法来实现棋子的消隐,但这也导致了棋盘画面由于刷新而不稳定的后果。

内容来自think58

[版权所有:http://think58.com]


(4)     象棋游戏程序中的步法正确性的判断是较复杂的,因为各个棋子的规则较复杂,考虑的情况较多。本游戏采用a[10][9]数组与棋盘的10行9列棋格一一相对应的方法来判断棋子从mouse[0]移到mouse[1]处的正确性(mouse[0]与mouse[1]是存储棋子相应的行列坐标的结构)。 [来源:http://think58.com]

五. 不足之处
(1)    正如上面(3)所述:由于采用刷新方法来实现棋子的消隐,而导致了棋盘界面的不稳定,这是本游戏程序较大的不足,若采用棋盘棋子分块描绘的方法,则在移动棋子时,只能改变局部棋盘或棋子,从而能实现棋盘的稳定显示,但此方法与我们所编的程序的实现在本质上的区别,故我们未采用。

think58

[资料来源:http://think58.com]

[资料来源:http://think58.com]

六. 人员分工说明
谢剑(组长):流程图的设计,大部分的程序都是谢剑编的,包括最后程序的连接与调试。
             最后实验报告有俞雪永与谢剑所完成。
俞雪永:设计了游戏界面(附录二)及界面程序,画鼠标及程序。
谭书舟、金必培、贺军:汉字模型的设计、描绘及数据统计和部分鼠标相关函数。
   

think58

[资料来源:http://www.THINK58.com]

[来源:http://www.think58.com]

七. 源程序
见附录三 think58好,好think58

[资料来源:http://think58.com]

附录一:
中国象棋流程图
 

think58 [来源:http://www.think58.com]

[资料来源:www.THINK58.com]


附录二:
游戏界面

内容来自think58

[资料来源:THINK58.com]

[资料来源:THINK58.com]

附录三:
   源程序 think58

[来源:http://www.think58.com]


#include<stdio.h>
#include<process.h>
#include<dos.h>
#include<math.h>
#include<conio.h>
#include<graphics.h>
#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 9
int pixel[326];
struct mouse
{
    int x;
 int y;

[资料来源:http://think58.com]

};
static int a[ROW][COL];
int number;
void get_hz(int hanzi,unsigned char bur[])/*编小型汉字库*/
{   /*  军、马、炮、相、士、将、卒的走法正确性的判断*/
   switch(hanzi){
   case REDCHE :
      case BLACKCHE :
    {
     bur[0]=0x01;bur[1]=0x80;bur[2]=0x01;bur[3]=0x80;bur[4]=0x3f;
bur[5]=0xfc;bur[6]=0x3f;bur[7]=0xfc;bur[8]=0x01;bur[9]=0x80;
bur[10]=0x0f;bur[11]=0xf0;bur[12]=0x0d;bur[13]=0xb0;bur[14]=0x0f;
bur[15]=0xf0;bur[16]=0x0d;bur[17]=0xb0;bur[18]=0x0f;bur[19]=0xf0;
bur[20]=0x01;bur[21]=0x80;bur[22]=0x3f;bur[23]=0xfc;bur[24]=0x3f;
bur[25]=0xfc;bur[26]=0x01;bur[27]=0x80;bur[28]=0x01;bur[29]=0x80; bur[30]=0x01;bur[31]=0x80;
     return;
    }
      case REDXIANG :
    {
     bur[0]=0x18;bur[1]=0x7f;bur[2]=0x18;bur[3]=0x7f;bur[4]=0x18;
bur[5]=0x63;bur[6]=0x18;bur[7]=0x63;bur[8]=0xff;bur[9]=0x7f;

think58.com [来源:http://think58.com]


bur[10]=0xff;bur[11]=0x7f;bur[12]=0x3c;bur[13]=0x63;bur[14]=0x3c;
bur[15]=0x63;bur[16]=0x5a;bur[17]=0x63;bur[18]=0x5a;bur[19]=0x7f;
bur[20]=0x5a;bur[21]=0x7f;bur[22]=0xdb;bur[23]=0x63;bur[24]=0x99;
bur[25]=0x63;bur[26]=0x99;bur[27]=0x63;bur[28]=0x18;bur[29]=0x7f;
bur[30]=0x18;bur[31]=0x7f;
     return;
    }
      case BLACKXIANG :
    {
    bur[0]=0x01;bur[1]=0xc0;bur[2]=0x3;bur[3]=0xe0;bur[4]=0x06;
bur[5]=0x60;bur[6]=0x0c;bur[7]=0xc0;bur[8]=0x3f;bur[9]=0xfc;
bur[10]=0x21;bur[11]=0x4;bur[12]=0x23;bur[13]=0x04;bur[14]=0x3f;
bur[15]=0xfc;bur[16]=0x0e;bur[17]=0x00;bur[18]=0x1b;bur[19]=0x08;
bur[20]=0x34;bur[21]=0x90;bur[22]=0x69;bur[23]=0x60;bur[24]=0x02;
bur[25]=0x60;bur[26]=0x04;bur[27]=0x50;bur[28]=0x08;bur[29]=0x88;
bur[30]=0x07;bur[31]=0x06;
    return;
    }
   case  REDHORSE :
    {
             bur[0]=0x00;bur[1]=0x00;bur[2]=0x3f;bur[3]=0xf8;bur[4]=0x3f; [版权所有:http://think58.com]
bur[5]=0xf8;bur[6]=0x00;bur[7]=0x18;bur[8]=0x18;bur[9]=0x18;
bur[10]=0x18;bur[11]=0x30;bur[12]=0x18;bur[13]=0x20;bur[14]=0x1f;
bur[15]=0xfe;bur[16]=0x00;bur[17]=0x02;bur[18]=0x00;bur[19]=0x02;
bur[20]=0x7f;bur[21]=0xf2;bur[22]=0x00;bur[23]=0x02;bur[24]=0x00;
bur[25]=0x02;bur[26]=0x00;bur[27]=0x22;bur[28]=0x00;bur[29]=0x3e;
bur[30]=0x00;bur[31]=0x00;
    return;
    }
      case BLACKHORSE :
    {
              bur[0]=0x00;bur[1]=0x00;bur[2]=0x3f;bur[3]=0xf8;bur[4]=0x3f;
bur[5]=0xf8;bur[6]=0x00;bur[7]=0x18;bur[8]=0x18;bur[9]=0x18;
bur[10]=0x18;bur[11]=0x30;bur[12]=0x18;bur[13]=0x20;bur[14]=0x1f;
bur[15]=0xfe;bur[16]=0x00;bur[17]=0x02;bur[18]=0x00;bur[19]=0x02;
bur[20]=0x7f;bur[21]=0xf2;bur[22]=0x00;bur[23]=0x02;bur[24]=0x00;
bur[25]=0x02;bur[26]=0x00;bur[27]=0x22;bur[28]=0x00;bur[29]=0x3e;
bur[30]=0x00;bur[31]=0x00;
     return; [来源:http://think58.com]
    }
     case REDSHI :
    {
        bur[0]=0x00;bur[1]=0x00;bur[2]=0x07;bur[3]=0x00;bur[4]=0x0e;
bur[5]=0x30;bur[6]=0x18;bur[7]=0x30;bur[8]=0x18;bur[9]=0x30;
bur[10]=0x33;bur[11]=0xff;bur[12]=0x63;bur[13]=0xff;bur[14]=0xd8;
bur[15]=0x30;bur[16]=0x18;bur[17]=0x30;bur[18]=0x18;bur[19]=0x30;
bur[20]=0x18;bur[21]=0x30;bur[22]=0x18;bur[23]=0x30;bur[24]=0x18;
bur[25]=0x30;bur[26]=0x19;bur[27]=0xfe;bur[28]=0x19;bur[29]=0xfe;
bur[30]=0x00;bur[31]=0x00;
     return;
    }
    case BLACKSHI :
    {
     bur[0]=0x01;bur[1]=0x80;bur[2]=0x01;bur[3]=0x80;bur[4]=0x01;
bur[5]=0x80;bur[6]=0x01;bur[7]=0x80;bur[8]=0x7f;bur[9]=0xfe;
bur[10]=0x70;bur[11]=0xfe;bur[12]=0x01;bur[13]=0x80;bur[14]=0x01;
bur[15]=0x80;bur[16]=0x01;bur[17]=0x80;bur[18]=0x01;bur[19]=0x80;
bur[20]=0x01;bur[21]=0x80;bur[22]=0x01;bur[23]=0x80;bur[24]=0x1f; think58 [资料来源:http://think58.com]
bur[25]=0xf8;bur[26]=0x1f;bur[27]=0xf8;bur[28]=0x00;bur[29]=0x00;
bur[30]=0x00;bur[31]=0x00;
     return;
     }
  case REDJIANG :
    {
     bur[0]=0x04;bur[1]=0x0c;bur[2]=0x04;bur[3]=0x18;bur[4]=0x04;
bur[5]=0x3f;bur[6]=0x04;bur[7]=0x63;bur[8]=0x44;bur[9]=0xd6;
bur[10]=0x64;bur[11]=0x14;bur[12]=0x3c;bur[13]=0x08;bur[14]=0x1c;
bur[15]=0x14;bur[16]=0x0d;bur[17]=0xff;bur[18]=0x04;bur[19]=0x04;
bur[20]=0x0c;bur[21]=0x64;bur[22]=0x1c;bur[23]=0x34;bur[24]=0x34;
bur[25]=0x14;bur[26]=0x24;bur[27]=0x04;bur[28]=0xc4;bur[29]=0x24;
bur[30]=0x04;bur[31]=0x3c;
     return;
    }
   case BLACKJIANG :
    {
     bur[0]=0x0c;bur[1]=0x18;bur[2]=0x0c;bur[3]=0x18;bur[4]=0x0c;
bur[5]=0x18;bur[6]=0xcc;bur[7]=0xff;bur[8]=0xcc;bur[9]=0xdb;
bur[10]=0xcc;bur[11]=0xdb;bur[12]=0xcc;bur[13]=0xdb;bur[14]=0xcc;
bur[15]=0xdb;bur[16]=0xcc;bur[17]=0xdb;bur[18]=0xcc;bur[19]=0xdb;

[资料来源:THINK58.com]


bur[20]=0xc;bur[21]=0x18;bur[22]=0x18;bur[23]=0x18;bur[24]=0x18;
bur[25]=0x18;bur[26]=0x30;bur[27]=0x18;bur[28]=0x30;bur[29]=0x18;
bur[30]=0x60;bur[31]=0x18;
     return;
    }

[资料来源:www.THINK58.com]