荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Lg (创造人生的传奇), 信区: BBSAdmin
标 题: [转载] sao lei for firebird(转寄)
发信站: BBS 荔园晨风站 (Fri Oct 22 22:31:05 1999), 站内信件
【 以下文字转载自 Lg 的信箱 】
【 原文由 liugang.bbs@bbs.net.tsinghua.edu.cn 所发表 】
发信人: QuickBASIC (nju zhch), 信区: BBSMan_Dev
标 题: sao lei for firebird
发信站: BBS 水木清华站 (Sun Sep 26 11:04:46 1999)
信 息 潮 -- 文章阅读
--------------------------------------------------------------------------------
发信人: zhch@InfoTide (zhch), 信区: BBSBuilder
标 题: 扫雷for bbs
发信站: 信 息 潮 (Sun Sep 26 10:21:17 1999)
转信站: InfoTide (local)
扫雷和bbs结合得不是很紧密,
在list.c或其他.c文件里加上以下代码,
在合适的地方直接调用winmine()即可。
扫雷时按'h'可以得到帮助。
扫雷通过后deliver(自动发信系统)会在notepad版报告所用时间。
目前记录是114秒。(30*16, 99雷).
int a[32][18],gameover;/*add by zhch for winmine*/
int winmine()
{
int x,y;
do
{
clear();
gameover=0;
modify_user_mode(12345);
for (x=0;x<=31;x++)
for (y=0;y<=17;y++)
a[x][y]=0;
winrefresh();
winloop();
clear();
}
while(askyn("是否继续玩(Y/N)?",YEA,NA)==YEA);
return;
}
int wininit(int x1,int y1)
{
int n,x,y;
randomize();
for(n=1;n<=99;n++)
{
do
{
x=rand()%30+1;
y=rand()%16+1;
}
while(a[x][y]!=0||(abs(x-x1)<2&&abs(y-y1)<2));
a[x][y]=100;
}
for (x=1;x<=30;x++)
for (y=1;y<=16;y++)
if (a[x][y]==100)
{
if (a[x-1][y-1]<100)a[x-1][y-1]++;
if (a[x-1][y]<100)a[x-1][y]++;
if (a[x-1][y+1]<100)a[x-1][y+1]++;
if (a[x][y-1]<100)a[x][y-1]++;
if (a[x][y+1]<100)a[x][y+1]++;
if (a[x+1][y-1]<100)a[x+1][y-1]++;
if (a[x+1][y]<100)a[x+1][y]++;
if (a[x+1][y+1]<100)a[x+1][y+1]++;
}
}
int dblclick(int x,int y)
{
int s,c,dx,dy;
if(x<1||x>30||y<1||y>16)return;
c=a[x][y];
if(c<=512)return;
c-=512;
s=0;
for(dx=x-1;dx<=x+1;dx++)
for(dy=y-1;dy<=y+1;dy++)
if(a[dx][dy]>=256&&a[dx][dy]<512)s++;
if(s==c)
{
windig(x-1,y-1);
windig(x-1,y);
windig(x-1,y+1);
windig(x,y-1);
windig(x,y+1);
windig(x+1,y-1);
windig(x+1,y);
windig(x+1,y+1);
}
}
int windig(int x,int y)
{
int c;
if(x<1||x>30||y<1||y>16)return;
c=a[x][y];
if(c>=256)return;
a[x][y]+=512;
winsh(x,y,1);
if(c==100)
{
gameover=1;
return;
}
if(c==0)
{
windig(x-1,y-1);
windig(x-1,y);
windig(x-1,y+1);
windig(x,y-1);
windig(x,y+1);
windig(x+1,y-1);
windig(x+1,y);
windig(x+1,y+1);
}
}
int winsh(int x, int y, int cc)
{
int c,c1;
c=a[x][y];
if(cc!=0)move(y-1,x*2-2);
if (c<256){prints("※");return;}
if (c>=256&&c<512)prints("●");
c-=512;
c1=1;
if(c==0)c1=0;
if(c==0)prints("·");
if(c==1)prints("1");
if(c==2)prints("2");
if(c==3)prints("3");
if(c==4)prints("4");
if(c==5)prints("5");
if(c==6)prints("6");
if(c==7)prints("7");
if(c==8)prints("8");
if(c==100)prints("%c[31;1m雷%c[m",27,27);
}
int winloop()
{
int x,y,c,marked,clicks,t0;
x=10;
y=8;
marked=0;
clicks=0;
egetch();
move(y-1,x*2-2);
t0=time(0);
while(1)
{
c=egetch();
if(c==257&&y>1)y--;
if(c==258&&y<16)y++;
if(c==260&&x>1)x--;
if(c==259&&x<30)x++;
move(20,0);
prints("时间: %d ",time(0)-t0);
move(20,40);
prints("标记: %d ",marked);
move(22,0);
prints("坐标: %d, %d ",x,y);
move(y-1,x*2-2);
if(c=='h'||c=='H')winhelp();
if(c=='d'||c=='D')winrefresh();
if(c==65||c==97){
clicks++;
if(clicks==1)wininit(x,y);
dig(x,y);
}
if((c==83||c==115)&&a[x][y]<512)
{
if(a[x][y]>=256){a[x][y]-=256;marked--;}else{a[x][y]+=256;
marked++;}
winsh(x,y,1);
}
if(c=='q'||c=='Q')return;
if(checkwin()==1)
{
move(22,0);
prints("You win!");
win_report(time(0)-t0);
gameover=0;
pressreturn();
return;
}
if(gameover==1)
{
move(22,0);
prints("GAME OVER");
gameover=0;
pressreturn();
return;
}
move(y-1,x*2-2);
}
}
int checkwin()
{
int x,y,s;
s=0;
for(x=1;x<=30;x++)
for(y=1;y<=16;y++)
if(a[x][y]<512)s++;
if(s==99)return 1;
return 0;
}
int dig(int x,int y)
{
if (a[x][y]<512) windig(x,y);else dblclick(x,y);
}
int winrefresh()
{
int x,y;
clear();
prints("
扫 雷 \n");
prints("
~~~~~ \n");
move(23,0);
prints("扫雷for bbs v0.91 by zhch.nju 99.9, press 'h' to get help, 'q'
to exit.");
for(y=1;y<=16;y++)
{
move(y-1,0);
for(x=1;x<=30;x++)
winsh(x,y,0);
}
}
int winhelp()
{
clear();
prints("==欢迎参加键盘扫雷游戏
==\n---------------------------------\n\n");
prints("玩法很简单,和windows下的鼠标扫雷差不多.\n");
prints(" 'A'键的作用相当于鼠标的左键及双击的作用,程序根据你点击的位置
\n");
prints(" 自动判断要进行哪种操作。\n");
prints(" 'S'键则相当于鼠标右键的功能, 可用来标雷.\n");
prints(" 'H'键用来显示本帮助信息.\n");
prints(" 'Q'键退出游戏.\n");
prints(" 当屏幕乱掉时,可用'D'可用来刷新屏幕。\n");
prints("建议用Netterm或cterm来玩(当然njuterm也可以,:)),telnet效果不是太
好\n");
prints("第一次点击一定会开一片,很舒服吧。\n");
prints("熟练后,速度还是很快的,几乎可以达到鼠标扫雷的速度.\n");
pressreturn();
winrefresh();
}
int win_report(int dt)
{
FILE *fn;
char filename[STRLEN],buf1[40];
sprintf(filename,"tmp/record.%s",currentuser.userid);
sprintf(buf1,"%s扫雷成功,时间为%d秒。",currentuser.userid,dt);
if ((fn=fopen(filename,"w")) != NULL)
{
fprintf(fn,"如题。祝贺%s.\n",currentuser.userid);
fclose(fn);
postfile(filename, "notepad", buf1,1);
unlink(filename);
}
}
--
※ 来源:.信 息 潮 bbs.tide.dhs.org.[FROM: 202.119.46.31]
--------------------------------------------------------------------------------
分类讨论区 全部讨论区 上一篇 本讨论区 回文章
--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.119.37.7]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: ftp.szu.edu.cn]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店