刚开始学习C的时候写的一个东西,好像只有在一些老旧的机器上能跑,今天有机会接触到了这样的一台机器,试了一下,还是可以跑得动的,好激动(虽然程序在内存释放方面是有问题的)附上代码:
#include "stdio.h" #include "dos.h" #include "conio.h" #include "graphics.h" #include "stdlib.h" /***********************按键码***************************/ #define VK_LEFT 0x4b00 #define VK_RIGHT 0x4d00 #define VK_DOWN 0x5000 #define VK_UP 0x4800 #define VK_ESC 0x011b #define VK_ENTER 0x1c0d /*********************************************************/ #define MAXX 12 #define MAXY 23 /*You'd better not make it more! It's big enough now!!!!!!*/ #define BACKCOLOR LIGHTGRAY #define LINECOLOR LIGHTMAGENTA /*******************************************************/ int box[MAXX][MAXY]; /*0_empty,1_moving,2_fixed*/ int timelimite=18,key=0; int x,y,timecounter=0; int score=0,level=0,boxcolor[MAXX][MAXY]; char str1[20] ,str2[20]; struct diamond { int x[4]; int y[4]; int startx; int starty; int color; struct diamond *next; } ; /***********************************************************************************************************/ struct diamond * nowbox,*nextbox; /*************************************************************************************************************/ void interrupt ( *oldhandler)(); /**************************************/ void interrupt newhandler( ) { timecounter++; } /*************************************************************************/ void forelook(void) { int i; setfillstyle(SOLID_FILL,BLACK); bar(319,79,461,101) ; setfillstyle(SOLID_FILL,LIGHTBLUE); bar(320,80,460,100); setcolor(RED); settextstyle(TRIPLEX_FONT,HORIZ_DIR ,4 ); outtextxy(340,90,"The next one:"); setfillstyle(SLASH_FILL,BACKCOLOR); setcolor(LINECOLOR); bar(320,100,460,240); setfillstyle(SOLID_FILL ,BACKCOLOR); bar(330,110,450,230) ; for(i=0;i<7;i++) { line(330,110+20*i,450,110+20*i); } for(i=0;i<7;i++) { line(330+20*i,110,330+20*i,230); } } /*******************************************************/ void showlevel(void) { if(score>=1000) { level+=1; } sprintf(str1, "LEVEL : %d ", level); sprintf(str2, "SCORE : %d ", score); setfillstyle(SOLID_FILL,BLACK); bar(319,289,321,351) ; outtextxy(320,290,str1); outtextxy(320,350,str2); } /******************************************************/ void beginface(void) { int i,j; setfillstyle(SLASH_FILL,BACKCOLOR); setcolor(LINECOLOR); bar(60,20,60+20*MAXX,20+MAXY*20); setfillstyle(SOLID_FILL ,BACKCOLOR); bar(80,40,80+(MAXX-2)*20,40+(MAXY-2)*20) ; for(i=0;i<=MAXY-2;i++) { line(80,40+i*20,80+(MAXX-2)*20,40+i*20); } for(i=0;i<=MAXX-2;i++) { line(80+20*i,40,80+20*i,40+20*(MAXY-2)) ; } setfillstyle(SOLID_FILL,LIGHTBLUE); bar(0,0,639,20); setcolor(WHITE); settextstyle(TRIPLEX_FONT,HORIZ_DIR ,4 ); outtextxy(5,10,"ZY_1 Welcome to my game!And have a nice time!"); forelook(); for(i=0;i<=MAXX;i++) { for(j=0;j<=MAXY;j++) { box[i][j]=0; boxcolor[i][j]=BACKCOLOR; } } for(i=0;i<MAXY;i++) { box[0][i]=2; boxcolor[0][i]=-1; } for(i=0;i<MAXY;i++) { box[MAXX-1][i]=2; boxcolor[MAXX-1][i]=-1; } for(i=0;i<MAXX;i++) { box[i][0]=2; boxcolor[i][0]=-1; } for(i=0;i<MAXX;i++) { box[i][MAXY-1]=2; boxcolor[i][MAXY-1]=-1; } line(440,439,430,443);line(440,439,450,443);line(440,439,440,447); line(450,453,430,453);line(450,453,440,449);line(450,453,440,458); line(430,463,440,457);line(430,463,440,467);line(430,463,450,463); line(440,478,440,469);line(440,478,450,473);line(440,478,430,473); outtextxy(320,419,"DIRECTIONS :"); outtextxy(430,419,"ENTER:PAUSE"); outtextxy(430,429,"ESC:OVER"); outtextxy(440,439," :NEXT"); outtextxy(440,449," :RIGHT"); outtextxy(440,459," :LEFT"); outtextxy(440,469," :DOWEN"); } /*************************************/ struct diamond* box1(void) /****/ { struct diamond *first; struct diamond *tnext; first=(struct diamond *)malloc(sizeof(struct diamond)); tnext=(struct diamond *)malloc(sizeof(struct diamond)); first->next=tnext; tnext->next=first; first->x[0]=0; first->y[0]=0; first->x[1]=0; first->y[1]=1; first->x[2]=0; first->y[2]=2; first->x[3]=0; first->y[3]=3; first->startx=5; first->starty=1; first->color=BLUE; tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=1; tnext->y[1]=0; tnext->x[2]=2; tnext->y[2]=0; tnext->x[3]=3; tnext->y[3]=0; tnext->startx=5; tnext->starty=1; tnext->color=BLUE; if(random(2)) return first; else return first->next; } /******************************************/ struct diamond *box2(void) /* * */ { /* ** */ struct diamond *first;/* * */ struct diamond *tnext; first=(struct diamond *)malloc(sizeof(struct diamond)); tnext=(struct diamond *)malloc(sizeof(struct diamond)); first->next=tnext; tnext->next=first; first->x[0]=0; first->y[0]=0; first->x[1]=0; first->y[1]=1; first->x[2]=1; first->y[2]=1; first->x[3]=1; first->y[3]=2; first->startx=5; first->starty=2; first->color=GREEN; tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=1; tnext->y[1]=0; tnext->x[2]=1; tnext->y[2]=-1; tnext->x[3]=2; tnext->y[3]=-1; tnext->startx=5; tnext->starty=2; tnext->color=GREEN; if(random(2)) return first; else return first->next; } /********************************************/ struct diamond *box3() /* * */ { /* ** */ struct diamond *first; /* * */ struct diamond *tnext; first=(struct diamond *)malloc(sizeof(struct diamond)); tnext=(struct diamond *)malloc(sizeof(struct diamond)); first->next=tnext; tnext->next=first; first->x[0]=0; first->y[0]=0; first->x[1]=0; first->y[1]=1; first->x[2]=-1; first->y[2]=1; first->x[3]=-1; first->y[3]=2; first->startx=5; first->starty=1; first->color=RED; tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=1; tnext->y[1]=0; tnext->x[2]=1; tnext->y[2]=1; tnext->x[3]=2; tnext->y[3]=1; tnext->startx=5; tnext->starty=1; tnext->color=RED; if(random(2)) return first; else return first->next; } /*****************************************************/ struct diamond *box4() /* ** */ { /* ** */ struct diamond *first; first=(struct diamond *)malloc(sizeof(struct diamond)); first->next=first; first->x[0]=0; first->y[0]=0; first->x[1]=1; first->y[1]=0; first->x[2]=0; first->y[2]=1; first->x[3]=1; first->y[3]=1; first->startx=5; first->starty=1; first->color=YELLOW; return first; } /******************************************/ struct diamond *box5() /* * */ { /* *** */ struct diamond *first; struct diamond *midd; struct diamond *tnext; int ra=random(4)+1,i; first=(struct diamond *)malloc(sizeof(struct diamond)); first->x[0]=0; first->y[0]=0; first->x[1]=0; first->y[1]=1; first->x[2]=1; first->y[2]=1; first->x[3]=-1; first->y[3]=1; first->startx=5; first->starty=2; first->color=LIGHTBLUE; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=1; tnext->y[1]=0; tnext->x[2]=1 ; tnext->y[2]=1; tnext->x[3]=1; tnext->y[3]=-1; tnext->startx=5; tnext->starty=2; tnext->color=LIGHTBLUE; first->next=tnext; midd=tnext; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=1; tnext->y[1]=-1; tnext->x[2]=0; tnext->y[2]=-1; tnext->x[3]=-1; tnext->y[3]=-1; tnext->startx=5; tnext->starty=2; tnext->color=LIGHTBLUE; midd->next=tnext; midd=tnext; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=-1; tnext->y[1]=0; tnext->x[2]=-1; tnext->y[2]=1; tnext->x[3]=-1; tnext->y[3]=-1; tnext->startx=5; tnext->starty=2; tnext->color=LIGHTBLUE; midd->next=tnext; tnext->next=first; for(i=1;i<=ra;i++) { first=first->next; } return first; } /******************************************/ struct diamond *box6() /* * */ { /* * */ struct diamond *first; /* ** */ struct diamond *midd; struct diamond *tnext; int ra=random(4)+1,i; first=(struct diamond *)malloc(sizeof(struct diamond)); first->x[0]=0; first->y[0]=0; first->x[1]=0; first->y[1]=1; first->x[2]=0; first->y[2]=2; first->x[3]=1; first->y[3]=2; first->startx=5; first->starty=3; first->color=CYAN; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=1; tnext->y[1]=0; tnext->x[2]=2 ; tnext->y[2]=0; tnext->x[3]=2; tnext->y[3]=-1; tnext->startx=5; tnext->starty=3; tnext->color=CYAN; first->next=tnext; midd=tnext; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=0; tnext->y[1]=-1; tnext->x[2]=0 ; tnext->y[2]=-2; tnext->x[3]=-1; tnext->y[3]=-2; tnext->startx=5; tnext->starty=3; tnext->color=CYAN; midd->next=tnext; midd=tnext; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=-1; tnext->y[1]=0; tnext->x[2]=-2; tnext->y[2]=0; tnext->x[3]=-2; tnext->y[3]=1; tnext->startx=5; tnext->starty=3; tnext->color=CYAN; midd->next=tnext; tnext->next=first; for(i=1;i<=ra;i++) { first=first->next; } return first; } /******************************************/ struct diamond *box7() /* */ { /* *** */ struct diamond *first; struct diamond *midd; struct diamond *tnext; int ra=random(4)+1,i; first=(struct diamond *)malloc(sizeof(struct diamond)); first->x[0]=0; first->y[0]=0; first->x[1]=0; first->y[1]=1; first->x[2]=-1; first->y[2]=2; first->x[3]=0; first->y[3]=2; first->startx=5; first->starty=3; first->color=LIGHTCYAN; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=-1; tnext->y[1]=0; tnext->x[2]=-2; tnext->y[2]=0; tnext->x[3]=-2; tnext->y[3]=-1; tnext->startx=5; tnext->starty=3; tnext->color=LIGHTCYAN; first->next=tnext; midd=tnext; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=1; tnext->y[1]=0; tnext->x[2]=2; tnext->y[2]=0; tnext->x[3]=2; tnext->y[3]=1; tnext->startx=5; tnext->starty=3; tnext->color=LIGHTCYAN; midd->next=tnext; midd=tnext; tnext=(struct diamond *)malloc(sizeof(struct diamond)); tnext->x[0]=0; tnext->y[0]=0; tnext->x[1]=0; tnext->y[1]=-1; tnext->x[2]=0; tnext->y[2]=-2; tnext->x[3]=1; tnext->y[3]=-2; tnext->startx=5; tnext->starty=3; tnext->color=LIGHTCYAN; midd->next=tnext; tnext->next=first; for(i=1;i<=ra;i++) { first=first->next; } return first; } /*************************************************************************/ struct diamond *getbox(void) { struct diamond *box; switch (random(7)+1) { case 1:box=box1();break; case 2:box=box2();break; case 3:box=box3();break; case 4:box=box4();break; case 5:box=box5();break; case 6:box=box6();break; case 7:box=box7();break; } return box; } /*************************************************************************/ void shownext(struct diamond *Obox) { int i,j; forelook(); setfillstyle(SOLID_FILL ,Obox->color); for(i=0;i<4;i++) { floodfill(370+Obox->x[i]*20+1,150+Obox->y[i]*20+1,LINECOLOR) ; } } /*************************************************************************/ void drawbox(struct diamond *infor) { int i; setfillstyle(SOLID_FILL ,infor->color); for(i=0;i<=3;i++) { floodfill(80+(infor->x[i]+x-1)*20+1,40+(infor->y[i]+y-1)*20+1,LINECOLOR); box[x+infor->x[i]][y+infor->y[i]]=1; boxcolor[x+infor->x[i]][y+infor->y[i]]=infor->color; } } /********************************************************/ void clearbox(struct diamond *infor) { int i; setfillstyle(SOLID_FILL ,BACKCOLOR); for(i=0;i<=3;i++) { floodfill(80+(infor->x[i]+x-1)*20+1,40+(infor->y[i]+y-1)*20+1,LINECOLOR); box[x+infor->x[i]][y+infor->y[i]]=0; boxcolor[x+infor->x[i]][y+infor->y[i]]=BACKCOLOR; } } /*******************************************************************/ int ifboxfixed(void) { int i,flag=0; for(i=0;i<4;i++) { if(box[x+nowbox->x[i]][y+nowbox->y[i]+1]==2) { flag=1; break; } } if(flag==1) { for(i=0;i<4;i++) { box[x+nowbox->x[i]][y+nowbox->y[i]]=2; } return 1; } else return 0; } /*******************************************************************/ void goleft(void) { int i,flag=0; oldhandler=getvect(0x1c); disable(); setvect(0x1c,newhandler); enable(); for(i=0;i<4;i++) { if(box[x+nowbox->x[i]-1][y+nowbox->y[i]]==2) { flag=1; break; } } if(flag==0) { clearbox(nowbox); x-=1; drawbox(nowbox); } else flag=0; disable(); setvect(0x1c,oldhandler); enable(); } /******************************************************************/ void goright(void) { int i,flag=0; oldhandler=getvect(0x1c); disable(); setvect(0x1c,newhandler); enable(); for(i=0;i<4;i++) { if(box[x+nowbox->x[i]+1][y+nowbox->y[i]]==2) { flag=1 ; break; } } if(flag==0) { clearbox(nowbox); x+=1; drawbox(nowbox); } else flag=0; disable(); setvect(0x1c,oldhandler); enable(); } /******************************************************************/ void godown(void) { int i,flag=0; oldhandler=getvect(0x1c); disable(); setvect(0x1c,newhandler); enable(); for(i=0;i<4;i++) { if(box[x+nowbox->x[i]][y+nowbox->y[i]+1]==2) { flag=1; break; } } if(flag==0) { clearbox(nowbox); y+=1; drawbox(nowbox); } else flag=0; disable(); setvect(0x1c,oldhandler); enable(); } /******************************************************************/ void gonext(void) { int i,flag=0; oldhandler=getvect(0x1c); disable(); setvect(0x1c,newhandler); enable(); for(i=0;i<4;i++) { if(box[x+(nowbox->next)->x[i]][y+(nowbox->next)->y[i]]==2) { flag=1; break; } } if(flag==0) { clearbox(nowbox); nowbox=nowbox->next; drawbox(nowbox); } else flag=0; disable(); setvect(0x1c,oldhandler); enable(); } /******************************************************************/ int GAMEOVER(void) { cleardevice(); setbkcolor(RED) ; settextstyle(1, HORIZ_DIR,10); outtextxy(300,250,"YOU HAVE LOST !"); sleep(3); closegraph(); exit(0); } /*******************************************************************/ void clearline(int i) { int m,n,j; for(m=i;m>1;m--) { for(n=1;n<MAXX-1;n++) { box[n][m] = box[n][m-1]; boxcolor[n][m] =boxcolor[n][m-1]; setfillstyle(SOLID_FILL ,boxcolor[n][m]); floodfill(80+(n-1)*20+1,40+(m-1)*20+1,LINECOLOR); } } for(j=1;j<MAXX-1;j++) { box[j][1]=0; setfillstyle(SOLID_FILL ,BACKCOLOR); floodfill(80+(j-1)*20+1,40+1,LINECOLOR); } } /******************************************************************/ void check(void) { int i,j,flag1=0,flag2=0; for(i=1;i<MAXX-1;i++) { if(box[i][1]==2) { flag1=1; break; } } if(flag1==1) { flag1=0; GAMEOVER(); /*****************/ } for(i=MAXY-2;i>1;i--) { for(j=1;j<MAXX-1;j++) { if(box[j][i]!=2) { flag2=1; break; } } if(flag2==0) { clearline(i); score+=10; } else flag2=0; } } /******************************************************************/ void movedown(void) { int i,flag=0; for(i=0;i<4;i++) { if(box[x+nowbox->x[i]][y+nowbox->y[i]+1]==2) { flag=1; break; } } if(flag==0) { clearbox(nowbox); y+=1; drawbox(nowbox); } } /********************************************************************/ void pause(void) { disable(); setvect(0x1c,oldhandler); enable(); getch(); oldhandler=getvect(0x1c); disable(); setvect(0x1c, newhandler); enable(); } /*************************************************************************/ void Intro( void ) { setbkcolor(BLUE) ; setcolor(GREEN) ; settextstyle(1, HORIZ_DIR,10); outtextxy(270,250,"MADE BY ZXC"); sleep(3); cleardevice(); } /********************************************************************/ int main(void) { int m,gd=DETECT,gm,timelimite=36 ; initgraph(&gd,&gm,"c:\\"); randomize(); Intro(); beginface(); setbkcolor(BLACK) ; nowbox=getbox(); nextbox=getbox(); x=nowbox->startx; y=nowbox->starty; for(;;) { shownext(nextbox); drawbox(nowbox); oldhandler=getvect(0x1c); disable(); setvect(0x1c, newhandler); enable(); for(;;) { if(bioskey(1)) key=bioskey(0); else key=0; switch(key) { case 0:break; case VK_LEFT: goleft(); break; case VK_RIGHT: goright(); break; case VK_DOWN: godown(); break; case VK_UP: gonext(); break; case VK_ENTER: pause(); break; case VK_ESC: closegraph();exit(0); default :break; } if(timecounter>timelimite) { timecounter=0; movedown(); } if( ifboxfixed() ) { timecounter=0; break; } } check(); showlevel(); nowbox=nextbox; nextbox=getbox(); x=nowbox->startx; y=nowbox->starty; } return 0; }
图片: