荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: noid (奥运在北京), 信区: Program
标  题: Re: 想用tc做个泡泡龙的程序,有什么好建议?
发信站: 荔园晨风BBS站 (Tue Dec 18 18:40:08 2001), 转信


源程序已经初步写出来了....还很不完善,

#include "graphics.h"
#include "stdlib.h"
#include "bios.h"
#include "math.h"
#define CENX 320
#define CENY 460
#define BL 10
#define BR 630
#define SIZE 20
#define BCLR 0
#define ASPD 3
#define TYPE 6
#define MAXSPD 600
#define ADDSPD 1
#define MINSPD 100

int pos[(BR-BL)/(SIZE*2)+2][CENY/SIZE],clr[TYPE+1],over=0,speed=MAXSPD;
int pmx=(BR-BL)/(SIZE*2)+2,pmy=CENY/SIZE,cc,pp,ppx[25],ppy[25];
long score=0;
double ang=90;

void draw();
void move(int);
void setoff();
void pd(int,int);
void xl(int,int,int);
int pox(int,int);
int poy(int,int);
int tx(int,int);
int ty(int,int);

main()
{
        int gd,gm,i=1,j=1,k;
        char key;
        gd=DETECT;
        randomize();
        registerbgidriver(EGAVGA_driver);/*如果提示这句出错就删了它吧*/
        initgraph(&gd,&gm,"");
        setbkcolor(BCLR);
        do{
                if(j==BCLR||j==6) j++;
                clr[i]=j;
                i++;
                j++;
        }while(i<=TYPE);
        for(i=0;i<pmx;i++)
                for(j=0;j<pmy;j++)
                        pos[i][j]=0;
        cc=random(TYPE)+1;
        draw();
        while(!over){
                do{
                        k=getch();
                        move(k);
                }while(k!=' ');
                setoff();
                draw();
        }
        printf("             GAME OVER!!!,press 0 to quit!");
        while(getch()!='0');
}

void draw()
{
        int i,j;
        setcolor(14);
        line(BL-2,0,BL-2,CENY);
        line(BL-2,CENY,BR+2,CENY);
        line(BR+2,CENY,BR+2,0);
        line(BL-2,0,BR+2,0);
        setcolor(clr[cc]);
        line(CENX,CENY,
        CENX+cos(ang*3.1416/180)*3*SIZE,
        CENY-sin(ang*3.1416/180)*3*SIZE);
        for(i=0;i<pmx;i++)
                for(j=0;j<pmy;j++)
                        if(pos[i][j]){
                                 setcolor(clr[pos[i][j]]);
                                 circle(tx(i,j),ty(i,j),SIZE);
                         }
}

void move(int key)
{
        if(key==75){
                setcolor(0);
                line(CENX,CENY,
                CENX+cos(ang*3.1416/180)*3*SIZE,
                CENY-sin(ang*3.1416/180)*3*SIZE);
                ang=ang+1;
                if(ang>178) ang=178;
                setcolor(clr[cc]);
                line(CENX,CENY,
                CENX+cos(ang*3.1416/180)*3*SIZE,
                CENY-sin(ang*3.1416/180)*3*SIZE);
        }
        if(key==77){
                setcolor(0);
                line(CENX,CENY,
                CENX+cos(ang*3.1416/180)*3*SIZE,
                CENY-sin(ang*3.1416/180)*3*SIZE);
                ang=ang-1;
                if(ang<2) ang=2;
                setcolor(clr[cc]);
                line(CENX,CENY,
                CENX+cos(ang*3.1416/180)*3*SIZE,
                CENY-sin(ang*3.1416/180)*3*SIZE);
        }
}

void setoff()
{
        int xx,yy,c,fx=1,fy=1,bx,by,i,q,w;
        double ta;
        ta=ang;
        bx=CENX;
        by=CENY;
        c=cc;
        cc=random(TYPE)+1;
        draw();
        i=4*SIZE;
        i=4*SIZE;
        for(;;){
                xx=bx+(cos(ta*3.1416/180)*i);
                yy=by-(sin(ta*3.1416/180)*i);
                if(bioskey(1)!=''){
                        if(bioskey(1)==19200) move(75);
                                else if(bioskey(1)==19712) move(77);
                        bioskey(0);
                }
                fx=pox(xx,yy);
                fy=poy(xx,yy);
                if(yy-SIZE<=1){
                        pos[fx][fy]=c;
                        setcolor(clr[c]);
                        circle(tx(fx,fy),ty(fx,fy),SIZE);
                        pd(fx,fy);
                        return;
                }
                for(q=-1;q<2;q++)
                        for(w=-1;w<2;w++){
                                if(fx+q<0||fy+w<0) continue;
                                if(((tx(q+fx,w+fy)-xx)*(tx(q+fx,w+fy)-xx)+
                                (ty(q+fx,w+fy)-yy)*(ty(q+fx,w+fy)-yy)<
                                (SIZE-1)*(SIZE-1)*4)&&pos[q+fx][w+fy]){
                                        pos[fx][fy]=c;
                                        setcolor(clr[c]);
                                        circle(tx(fx,fy),ty(fx,fy),SIZE);
                                        if(ty(fx,fy)+5*SIZE>=CENY) over=1;
                                                else pd(fx,fy);
                                        return;
                                }
                        }
                if(xx+SIZE>=BR&&i>10){
                        ta=180-ta;
                        bx=xx;by=yy;
                        i=1;
                        }
                else{
                        if((xx-SIZE)<=BL&&i>10){
                                ta=180-ta;
                                bx=xx;by=yy;
                                i=1;
                        }
                }
                setcolor(clr[c]);
                circle(xx,yy,SIZE);
                delay(speed);
                setcolor(0);
                circle(xx,yy,SIZE);
                i=i+2;
        }
}

void pd(int x,int y)
{
        int i,j;
        pp=1;
        ppx[0]=x;
        ppy[0]=y;
        xl(x,y,pos[x][y]);
        if(pp>=3){
                delay(8000);
                for(i=0;i<pp;i++){
                        pos[ppx[i]][ppy[i]]=0;
                        setcolor(0);
                        circle(tx(ppx[i],ppy[i]),ty(ppx[i],ppy[i]),SIZE);
                }
                for(i=0;i<pmx;i++)
                        for(j=1;j<pmy;j++){
                               pos[i][j]=pos[i][j]*(-1);
                        }
                for(i=0;i<pmx;i++) if(pos[i][0]!=0) xl(i,0,0);
                for(i=0;i<pmx;i++)
                        for(j=1;j<pmy;j++){
                                if(pos[i][j]<0){
                                        delay(3500);
                                        pos[i][j]=0;
                                        setcolor(0);
                                        circle(tx(i,j),ty(i,j),SIZE);
                                }
                        }

        }

}
void xl(int x,int y,int c)
{
        int i,j,xx,yy,k;
        for(i=-1;i<=1;i++)
                for(j=-1;j<=1;j++){
                        if(y%2&&j&&i==-1) continue;
                        if((!y%2)&&j&&i==1) continue;
                        if(!(i||j)) continue;
                        xx=x+i;
                        yy=y+j;
                        if(xx<0||yy<0) continue;
                        if(c!=0){
                                if(pos[xx][yy]==c){
                                        for(k=0;k<pp;k++)
                                                if(xx==ppx[k]&&yy==ppy[k])
                                                        break;
                                        if(k==pp){
                                                ppx[pp]=xx;
                                                ppy[pp]=yy;
                                                pp++;
                                                xl(xx,yy,c);
                                        }
                                }
                        }
                        else{
                                if(pos[xx][yy]<0){
                                        pos[xx][yy]=pos[xx][yy]*(-1);
                                        xl(xx,yy,0);
                                }
                        }
                }
}

int pox(int x,int y)
{
        if(poy(x,y)%2) return (int)((x-SIZE-BL)/(2*SIZE));
        return (int)((x-BL)/(2*SIZE));
}
int poy(int x,int y)
{
        return (int)((y-SIZE)/(1.8*SIZE)+0.5);
}
int tx(int x,int y)
{
        if(y%2) return (x+1)*SIZE*2+BL;
        return x*SIZE*2+SIZE+BL;
}

int ty(int x,int y)
{
        return SIZE+y*SIZE*1.8;
}

【 在 WinXP (winxp) 的大作中提到: 】
: 源程序写出来共享,呵呵,不胜感激
: 【 在 noid (奥运在北京) 的大作中提到: 】
: : 用什么方法实现比较好?大家说说自己的想法吧..


--
※ 修改:·noid 於 Dec 18 19:43:13 修改本文·[FROM: 192.168.32.243]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.32.243]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店