char KeyPress(void)
{
char keyp=0;
union REGS regs0;
regs0.h.ah=1;
int86(0x16,®s0,®s0);
if((regs0.x.flags & 0x0040)==0)
{
regs0.h.ah=0;
int86(0x16,®s0,®s0);
keyp=regs0.h.al;
KeyScan=regs0.h.ah;
}
return(keyp);
}
void OpenBmpFile(void)
{
char FileName[20];
strcpy(FileName,BMP_FILE);
fp = fopen(FileName,"rb"); /* open for read, bit mode */
if ( fp == NULL)
{ printf("\nFile %s open fail...\n",FileName);
getch();
exit(1);
}
}
void GetFileInfo(void)
{
int i;
unsigned char ch1,ch2,ch3,ch4;
fseek(fp,0,SEEK_SET);
ch1 = fgetc(fp);
ch2 = fgetc(fp);
if(ch1!=0x42||ch2!=0x4d) /* must be 0x42,0x4d = 'BM' */
{
printf("\nFile format error, must be BMP file\n");
getch();
exit(2);
}
fseek(fp,0x0a,SEEK_SET);
ch1 = fgetc(fp);
ch2 = fgetc(fp);
ch3 = fgetc(fp);
ch4 = fgetc(fp);
FileHead.bfOffBits = ch1+ch2*0x100L+ch3*0x10000L+ch4*0x1000000L;
fseek(fp,0x12,SEEK_SET);
ch1 = fgetc(fp);
ch2 = fgetc(fp);
ch3 = fgetc(fp);
ch4 = fgetc(fp);
InfoHead.biWidth = ch1+ch2*0x100L+ch3*0x10000L+ch4*0x1000000L;
fseek(fp,0x16,SEEK_SET);
ch1 = fgetc(fp);
ch2 = fgetc(fp);
ch3 = fgetc(fp);
ch4 = fgetc(fp);
InfoHead.biHeight = ch1+ch2*0x100L+ch3*0x10000L+ch4*0x1000000L;
/* FileHead.bfOffBits = 0x76;
InfoHead.biWidth = 0x29f;
InfoHead.biHeight = 0x1df; */
fseek(fp,0x1c,SEEK_SET);
ch1 = fgetc(fp);
ch2 = fgetc(fp);
if(ch1!=0x04||ch2!=0x00) /* must be 4 */
{
printf("\nFile format error, must be 16 colors (4 bits) BMP file\n");
getch();
exit(3);
}
InfoHead.biBitCount = 4;
DataSizePerLine = (InfoHead.biWidth*InfoHead.biBitCount+31)/8;
DataSizePerLine= (DataSizePerLine/4)*4;
OneLine = malloc(DataSizePerLine);
/* printf("FileHead.bfOffBits=%ld",FileHead.bfOffBits);
printf("InfoHead.biWidth=%ld",InfoHead.biWidth);
printf("InfoHead.biHeight=%ld",InfoHead.biHeight);
printf("DataSizePerLine=%d",DataSizePerLine);
getch(); */
for(i=0;i<DataSizePerLine;i++) OneLine[i]=0;
}
void GetUnit(int x,int y,int i) /* 计算并获得每单元位图信息 */
{
int read_from_x,read_from_y;
int read_to_x,read_to_y;
int ix,iy,ux,uy,unx,uny,how=0;
long FileLocation;
unsigned char ch;
/* unx=unitx;uny=unity;
unx=unitx%12;
if(unx>12)
uny=2;
if(unx>24)
uny=3; */
read_from_y = START_FROM_Y + (y-1)*UNIT_HIGH_ALL + HIGH_FROM + UNIT_HIGH - 1;
read_to_y = START_FROM_Y + (y-1)*UNIT_HIGH_ALL + HIGH_FROM;
read_from_x = START_FROM_X + (x-1)*UNIT_WIDE_ALL + WIDE_FROM;
read_to_x = START_FROM_X + (x-1)*UNIT_WIDE_ALL + WIDE_FROM + UNIT_WIDE - 1;
for(iy=read_from_y,uy=0;iy>=read_to_y;iy--,uy++)
{
FileLocation = FileHead.bfOffBits + DataSizePerLine*(InfoHead.biHeight-1-iy);
fseek(fp,FileLocation,SEEK_SET);
fread(OneLine,DataSizePerLine,1,fp);
for(ix=read_from_x,ux=0;ix<=read_to_x;ix++,ux++)
{
ch = OneLine[ix/2];
if(ix%2) CharList[i][how] = ch&0x0f; /* it is odd, exp: 17 */
else CharList[i][how] = (ch&0xf0)>>4;
how++;
}
} /* of iy */
}
int ColorConvert(int ccolor)
/*
表3 有关屏幕颜色的符号常数表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 含义 符号常数 数值 含义
───────────────────────────────────
BLACK 0 黑色 DARKGRAY 8 深灰
BLUE 1 兰色 LIGHTBLUE 9 深兰
GREEN 2 绿色 LIGHTGREEN 10 淡绿
CYAN 3 青色 LIGHTCYAN 11 淡青
RED 4 红色 LIGHTRED 12 淡红
MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红
BROWN 6 棕色 YELLOW 14 黄色
LIGHTGRAY 7 淡灰 WHITE 15 白色
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
*/
{
switch(ccolor)
{
case 0: return(0);
case 1: return(4);
case 2: return(2);
case 3: return(6);
case 4: return(1);
case 5: return(5);
case 6: return(3);
case 7: return(8);
case 8: return(7);
case 9: return(12);
case 10: return(10);
case 11: return(14);
case 12: return(9);
case 13: return(13);
case 14: return(11);
case 15: return(15);
}
}
void InitialGraph(void)
{
int gdriver=DETECT, gmode, errorcode;
registerbgidriver(&EGAVGA_driver);
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
SrcMaxX=getmaxx();SrcMaxY=getmaxy();
TimeCol=SrcMaxX/2+98;
}
void ClearMsgLine(void)
{
int i=0;
setfillstyle(1,7);
/* setfillstyle(EMPTY_FILL,0); fill with black */
if(MouseX>=DRAW_START_X-16&&MouseX<=SrcMaxX-71&&MouseY>=SrcMaxY-36)
{MouseOff(MouseX,MouseY);i=1;}
bar(DRAW_START_X,SrcMaxY-20,SrcMaxX-71,SrcMaxY);
if(i==1) {MouseGetXY();MouseOn(MouseX,MouseY); }
setcolor(4);
MsgFlag=0;
}
int GetCharNum(void) /*获得相关单元距阵*/
/* input: unitx, unity
output: the location of char in Char.List */
{
int ch;
ch = matrix[unitx][unity];
/* printf("ch=%d\t",ch); getch(); */
if(ch==0) return(EMPTY_CHAR);/* it ts empty }*/
/* if(ch>='0'&&ch<='9') ch = ch-'0';
else if(ch>='a'&&ch<='z') ch = ch+10-'a';
else if(ch>='A'&&ch<='Z') ch = ch+36-'A'; */
/*else ch = MAX_CHAR+1; impossible, will draw a special block */
return(ch);
}
void MatrixSave(void)
{
char FileName[20];
FILE *fp;
int xxx,yyy;
char ch;
strcpy(FileName,MATRIX_FILE);
fp = fopen(FileName,"wa"); /* creat for write */
if ( fp == NULL)
{ gotoxy(1,SCREEN_Y-1);
printf("File %s creat fail...",FileName);
getch();
exit(1);
}
for(yyy=1;yyy<=MAX_Y;yyy++)
{
for(xxx=1;xxx<=MAX_X;xxx++)
{
ch = matrix[xxx][yyy];
if(!ch) ch=SPACE;
fputc(ch,fp);
}
fputc('\n',fp);
}
fclose(fp);
}
void MatrixLoad(void)
{
char FileName[20];
FILE *fp;
int xxx,yyy;
char ch;
strcpy(FileName,MATRIX_FILE);
fp = fopen(FileName,"ra"); /* open for read */
if ( fp == NULL)
{ gotoxy(1,SCREEN_Y-1);
printf("File %s open fail...",FileName);
getch();
exit(1);
}
for(yyy=1;yyy<=MAX_Y;yyy++)
{
for(xxx=1;xxx<=MAX_X;xxx++)
{
ch = fgetc(fp);
if(ch=='\n') ch = fgetc(fp);
if(ch==SPACE) ch = 0;
if(ch<32||ch>=127) ch = 0;
matrix[xxx][yyy]=ch;
}
}
fclose(fp);
}
int IsMatrixEmpty(void) /* 测试是否已全部清空 */
{
int xxx,yyy;
for(xxx=1;xxx<=MAX_X;xxx++)
{
for(yyy=1;yyy<=MAX_Y;yyy++)
{
if(matrix[xxx][yyy]) return(0);
}
}
return(1);
}
int IsMatrixDie(void) /* 测试是否还有链接*/
{
int save1x,save1y,save2x,save2y;
if(IsMatrixEmpty()) return(0); /* 测试是否已全部清空303 */
save1x = selected1x;
save1y = selected1y;
save2x = selected2x;
save2y = selected2y;
FindLinkPair(); /*查找可能存在的�
DOS版连连看 源代码
需积分: 10 133 浏览量
2008-01-13
18:29:27
上传
评论
收藏 190KB RAR 举报
myes001
- 粉丝: 0
- 资源: 7
最新资源
- XILINXFPGA源码Xilinxspratan3xcs100E(VGAPS2)
- XILINXFPGA源码XilinxSPARTAN-3E入门开发板实例
- XILINXFPGA源码XilinxSdramVerilog和VHDL版本文档
- 物联网智能家居方案-基于Nucleo-STM32L073&机智云(大赛作品,文档齐全,可直接运行)(文档加Matlab源码)
- XILINXFPGA源码XilinxISE9.xFPGACPLD设计源码
- 成都市地图含高新区(高新南区,高新西区),天府新区,东部新区虚拟行政区划
- XILINXFPGA源码XilinxEDK设计试验
- XILINXFPGA源码XilinxEDKMicroBlaze内置USB固件程序
- 基于 django 的视频点播后台管理系统源代码+数据库
- 基于Java的网上医院预约挂号系统的设计与实现(部署视频)-kaic.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈