利用VC++6.0的depends工具打开dll动态链接库文件及函数封装
2012-11-18 15:21:54 来源:WEB开发网核心提示:Status push(Sqstack &L,int xu,int zbj) // 压入位置 q表示行,p表示列{ if(L.top-L.bottom >= L.stacksize) { L.bottom=(cun*)realloc(L.bottom,(L.stacksize+STACK_ADD)*sizeof
Status push(Sqstack &L,int xu,int zbj) // 压入位置 q表示行,p表示列
{
if(L.top-L.bottom >= L.stacksize)
{ L.bottom=(cun*)realloc(L.bottom,(L.stacksize+STACK_ADD)*sizeof(cun));
if(!L.bottom)
{
printf("内存分配失败!!");
exit(-1);
}
L.top=L.bottom+L.stacksize;
L.stacksize+=STACK_ADD;
}
L.top->xu=xu;
(L.top++)->zbj=zbj;
return OK;
}
{
if(L.top-L.bottom >= L.stacksize)
{ L.bottom=(cun*)realloc(L.bottom,(L.stacksize+STACK_ADD)*sizeof(cun));
if(!L.bottom)
{
printf("内存分配失败!!");
exit(-1);
}
L.top=L.bottom+L.stacksize;
L.stacksize+=STACK_ADD;
}
L.top->xu=xu;
(L.top++)->zbj=zbj;
return OK;
}
Status pop(Sqstack &L,int &xu,int&zbj) // 弹出 将栈顶的元素带回
{
if(L.top == L.bottom)
return ERROR;
xu=(--L.top)->xu; // 这点自己犯的问题 不能--L.top->i 这样就表示值减1 ,没意义,出错
zbj=L.top->zbj;
return OK;
}
{
if(L.top == L.bottom)
return ERROR;
xu=(--L.top)->xu; // 这点自己犯的问题 不能--L.top->i 这样就表示值减1 ,没意义,出错
zbj=L.top->zbj;
return OK;
}
Status emptystack(Sqstack L) // 判断栈为空
{
if(L.top == L.bottom)
return OK;
else
return ERROR;
}
{
if(L.top == L.bottom)
return OK;
else
return ERROR;
}
Status gettop(Sqstack L,int &xu,int &zbj)
{
if(L.top == L.bottom)
return ERROR;
else
{
xu=(L.top-1)->xu;
zbj=(L.top-1)->zbj;
return OK;
}
}
{
if(L.top == L.bottom)
return ERROR;
else
{
xu=(L.top-1)->xu;
zbj=(L.top-1)->zbj;
return OK;
}
}
void GotoConsoleXY(HANDLE hConsole,int x,int y) // 定位光标位置
{
COORD coordScreen={x,y};
SetConsoleCursorPosition(hConsole,coordScreen);
return;
}
void gotoxy(int x,int y) // 定位光标位置
{
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
GotoConsoleXY(hStdOut,x,y);
return;
}
{
COORD coordScreen={x,y};
SetConsoleCursorPosition(hConsole,coordScreen);
return;
}
void gotoxy(int x,int y) // 定位光标位置
{
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
GotoConsoleXY(hStdOut,x,y);
return;
}
void huatu(Sqstack &A,Sqstack &B,char (*b)[16],char (*a)[16],int e,int zbj,int l,int xu) // 画图
{
int xs,hs;
if(e<l) // 从左到右
{
for(int i=0;i<zbj-5;i++) // 从塔中出来到达顶端
{
gotoxy(e-xu+1,zbj-i); // 定位对应盘的起始盘子代号
printf("%s",*(b+xu-1)); // 输出对应的空格字符代号
gotoxy(e,zbj-i); // 定位盘子的位置
printf("|"); // 输出竖杠
gotoxy(e-xu+1,zbj-i-1); // 定位产生动画的下一个光标位置
printf("%s",*(a+xu-1)); // 打印出对应的盘子数
Sleep(50); // 暂停0.5毫秒
}
for(i=0;i<l-e;i++) // 平行移动
{
gotoxy(e-xu+1+i,5); // 定位平行的位置
printf("%s",*(b+xu-1)); // 将其对应的清除
gotoxy(e-xu+2+i,5); // 定位下一个单位
printf("%s",*(a+xu-1)); // 打印出对应的盘子
Sleep(20); // 暂停0.2毫秒
}
if(!emptystack(B)) //判断要移动到的盘子是否为空
gettop(B,xs,hs); // 得到该盘子的横行及序号
else
hs=14; // 将横行置为最底层
gotoxy(e-xu+1+i,5); // 将要入盘的第一个位置定位
printf("%s",*(b+xu-1)); // 输入对应空格覆盖
gotoxy(e-xu+1+i,6); // 定位入盘的光标位置
printf("%s",*(a+xu-1)); // 空格覆盖
Sleep(50); // 暂停0.5毫秒
for(int k=6;k<hs-1;k++) // 进入要移动的指定塔上
{
gotoxy(e-xu+1+i,k);
printf("%s",*(b+xu-1));
gotoxy(l,k);
printf("|");
gotoxy(e-xu+1+i,k+1);
printf("%s",*(a+xu-1));
Sleep(50);
}
push(B,xu,k); // 将序数和位置入栈
}
else // 从右到左
{
for(int i=0;i<zbj-5;i++)
{
gotoxy(e-xu+1,zbj-i);
printf("%s",*(b+xu-1));
gotoxy(e,zbj-i);
printf("|");
gotoxy(e-xu+1,zbj-i-1);
printf("%s",*(a+xu-1));
Sleep(50);
}
for(int k=e;k>=l;k--)
{
gotoxy(k-xu+1,5);
printf("%s",*(b+xu-1));
gotoxy(k-xu,5);
printf("%s",*(a+xu-1));
Sleep(20);
}
if(!emptystack(B))
gettop(B,xs,hs);
else
hs=14;
gotoxy(l-xu,5);
printf("%s",*(b+xu-1));
gotoxy(l-xu+1,6);
printf("%s",*(a+xu-1));
Sleep(50);
for( k=6;k<hs-1;k++)
{
gotoxy(l-xu+1,k);
printf("%s",*(b+xu-1));
gotoxy(l,k);
printf("|");
gotoxy(l-xu+1,k+1);
printf("%s",*(a+xu-1));
Sleep(50);
}
push(B,xu,k); // 将盘子序数和要入的光标位置
}
Sleep(500); // 暂停0.5秒
}
{
int xs,hs;
if(e<l) // 从左到右
{
for(int i=0;i<zbj-5;i++) // 从塔中出来到达顶端
{
gotoxy(e-xu+1,zbj-i); // 定位对应盘的起始盘子代号
printf("%s",*(b+xu-1)); // 输出对应的空格字符代号
gotoxy(e,zbj-i); // 定位盘子的位置
printf("|"); // 输出竖杠
gotoxy(e-xu+1,zbj-i-1); // 定位产生动画的下一个光标位置
printf("%s",*(a+xu-1)); // 打印出对应的盘子数
Sleep(50); // 暂停0.5毫秒
}
for(i=0;i<l-e;i++) // 平行移动
{
gotoxy(e-xu+1+i,5); // 定位平行的位置
printf("%s",*(b+xu-1)); // 将其对应的清除
gotoxy(e-xu+2+i,5); // 定位下一个单位
printf("%s",*(a+xu-1)); // 打印出对应的盘子
Sleep(20); // 暂停0.2毫秒
}
if(!emptystack(B)) //判断要移动到的盘子是否为空
gettop(B,xs,hs); // 得到该盘子的横行及序号
else
hs=14; // 将横行置为最底层
gotoxy(e-xu+1+i,5); // 将要入盘的第一个位置定位
printf("%s",*(b+xu-1)); // 输入对应空格覆盖
gotoxy(e-xu+1+i,6); // 定位入盘的光标位置
printf("%s",*(a+xu-1)); // 空格覆盖
Sleep(50); // 暂停0.5毫秒
for(int k=6;k<hs-1;k++) // 进入要移动的指定塔上
{
gotoxy(e-xu+1+i,k);
printf("%s",*(b+xu-1));
gotoxy(l,k);
printf("|");
gotoxy(e-xu+1+i,k+1);
printf("%s",*(a+xu-1));
Sleep(50);
}
push(B,xu,k); // 将序数和位置入栈
}
else // 从右到左
{
for(int i=0;i<zbj-5;i++)
{
gotoxy(e-xu+1,zbj-i);
printf("%s",*(b+xu-1));
gotoxy(e,zbj-i);
printf("|");
gotoxy(e-xu+1,zbj-i-1);
printf("%s",*(a+xu-1));
Sleep(50);
}
for(int k=e;k>=l;k--)
{
gotoxy(k-xu+1,5);
printf("%s",*(b+xu-1));
gotoxy(k-xu,5);
printf("%s",*(a+xu-1));
Sleep(20);
}
if(!emptystack(B))
gettop(B,xs,hs);
else
hs=14;
gotoxy(l-xu,5);
printf("%s",*(b+xu-1));
gotoxy(l-xu+1,6);
printf("%s",*(a+xu-1));
Sleep(50);
for( k=6;k<hs-1;k++)
{
gotoxy(l-xu+1,k);
printf("%s",*(b+xu-1));
gotoxy(l,k);
printf("|");
gotoxy(l-xu+1,k+1);
printf("%s",*(a+xu-1));
Sleep(50);
}
push(B,xu,k); // 将盘子序数和要入的光标位置
}
Sleep(500); // 暂停0.5秒
}
更多精彩
赞助商链接