资源描述:
《连连看c语言源代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/**连连看游戏C语言源代码*/#include#include#include#include#include#definetrue1#definefalse0/*---------------------全局变量------------------------------------*/intBkGndColor=BLACK;intBorderColor=LIGHTGRAY;intLineColor=LIGHTBLUE;/*消除一对方块时时候的连线颜色*//*Pb-ProgressBar*/int
2、PbColor=LIGHTGREEN;intPbY=4;intPbHeight=4;intPbValue;/*进度条百分比,初始值为100.*/longStartTime;/*开始时间的秒数,只统计分钟,秒*/longTotalTime;/*游戏总共的最大秒数!,*//*BoardDatas:asmall-sizeboard*//*Board[x][y][0]-0:empty,1:filled*//*Board[x][y][1]-cell'skey;*/unsignedcharBoard[10][10][2];intCellSize=30;intBoardX=20;intBoardY=60;
3、intBoardWidth=10;intBoardHeight=10;intCellColor=WHITE;intSelColor=BLUE;/*selCell'sborderrectcolor*/intCurColor=RED;/*curCell'sborderrectcolor*/intEraColor=CYAN;/*用于擦除cell的颜色!*/intPairsCount;/*howmuchpairswehaveputonboard*//*用于存储逻辑坐标(索引)*/typedefstruct_tagCELL{charx;chary;}CELL;CELLselCell,curCell;/
4、*缓存前一个被选中的位置以及当前所处位置!*//*ScanCodesDefine*/enumKEYCODES{K_ESC=0x011b,K_UP=0x4800,/*upwardarrow*/K_LEFT=0x4b00,K_DOWN=0x5000,K_RIGHT=0x4d00,K_SPACE=0x3920,K_P=0x1970,K_RETURN=0x1c0d,/*Enter*/};/*---------------------函数列表------------------------------------*/voidInitGame(char*bgiPath);voidPlayGame();v
5、oidQuitGame();voidInitProgressBar();voidUpdateProgressBar(intpercent);voidDrawCell(intkey,intx,inty,intcolor);voidEraseCell(intx,inty);voidDrawBorderRect(CELL*c,intcolor);voidDrawGameOver(char*info);intGetKeyCode();intFindPath(CELL*c1,CELL*c2);/*绘制消除方块时候的连接路径!,用指定颜色!*/voidDrawPath(intx1,inty1,intx2
6、,inty2,intx3,inty3,intx4,inty4,intcolor);/*----------------------函数实现-----------------------------------*//*----------------------[核心算法]---------------------------------*先进行水平方向判断,找出两点所在的水平直线活动范围,*算出这两条线段在垂直方向的共同区域!!!,*遍历该区域判断能否在两线段间架起公垂线,能则两点连接上;*接着进行垂直方向判断,类同。无论两点在不在一条直线上,*都能使用该算法,因为两点同线只是两点作为矩形对
7、角点的特例而已。*//*找到两个CELL之间的路径,成功返回true*/intFindPath(CELL*c1,CELL*c2){inti,j,path,min1,max1,min2,max2,left,right,top,bottom;/*---------------(0)判断是否点中相同块!------------*/if(Board[c1->x][c1->y][1]!=Board[c2->x][c2-