1、c语言游戏#include graphics.h /*头文件*/ #include time.h #include stdlib.h #include bios.h #include dos.h #include stdio.h #define ESC 0x11b /*键盘扫描码*/ #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define F1 0x3b00 #define RIGHT 0x4d00 #define YES 0x1579 #define NO 0x316e #define RESTART 0x1372
2、struct diamond /*记录每种方块每种状态的信息*/ int x4; int y4; int start_x; int start_y; int color; struct diamond *next; ; int grid1223; /*记录所有格子的状态 (0)没有方块 (1)有固定方块 (2)有活动方块*/ int x; /*活动方块所在位置*/ int y; int level; /*游戏难度*/ int count; /*计数器*/ int score;/*得分*/ struct diamond *nowinfo; /*当前活动方块*/ struct diamond *n
3、extinfo; /*下一个方块*/ int color;/*画格子的颜色*/ int backcolor;/*游戏区域背景色*/ void show_interface (int mode);/*显示游戏界面*/ void show_copsign (int topx,int topy,int size,int color);/*显示公司标志-恒基伟业*/ void show_intro (int xs,int ys);/*显示软件介绍区*/ /*void print(); 测试用函数*/ void scandel();/*扫描所有格子看是否有可消除行*/ void show_down ()
4、;/*方块下落后的下一个状态*/ void show_next ();/*方块翻转后的下一个状态*/ void show_left ();/*方块向左移动后的下一个状态*/ void show_right ();/*方块向右移动后的下一个状态*/ void interrupt (*oldtimer)();/*指向未安装前的中断向量,即函数指针,指向一段可执行的代码*/ void install();/*安装新的中断向量,即将中断服务程序安装到中断向量表中*/ void interrupt newtimer();/*中断服务程序*/ struct diamond *get_diamond();/
5、*随机得到一个方块*/ struct diamond *create_I();/*函数用来构造各种类形方块的环形链表*/ struct diamond *create_T();/*返回链表中随机一个状态的指针*/ struct diamond *create_L(); struct diamond *create_J(); struct diamond *create_Z(); struct diamond *create_N(); struct diamond *create_H(); void delinfo (struct diamond *info);/*释放当前方块所占用的空间*/
6、void addtobuffer(int c);/*向键盘缓冲区中增加一个DOWN*/ /*void clrkey();调用dos中断清空键盘缓冲区,未使用此方法.*/ void showsubwin(struct diamond *next);/*在小窗口显示下一个方块*/ void showscore(int scoreget);/*显示分数*/ void startset();/*初始化游戏*/ main () int driver=VGA; int mode=VGAHI; int i;/*计数器*/ int j; int key;/*记录键盘扫描码*/ initgraph (&driv
7、er,&mode,);/*初始化*/ color=8; backcolor=7; level=1; score=298; count=0; show_interface (9);/*显示界面*/ setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,Press any key to start.); getch(); setfillstyle(SOLID_FILL,9); bar(0,465,640,480); showscore(0);/*显示分数*/ randomize(); nowinfo=get_diamond
8、();/*得到一个当前方块*/ oldtimer=getvect(0x1c); install(newtimer); for(i=0;i=21;i+)/*初始化grid1223*/ for(j=1;j=10;j+) gridj=0; for(i=0;i=22;i+) grid0=1; grid11=1; for(i=0;istart_x;/*初始化方块位置*/ y=nowinfo-start_y; nextinfo=get_diamond ();/*得到下一个方块*/ showsubwin(nextinfo);for (;)key=bioskey(0);/*得到键盘扫描码*/ if (key)
9、 switch(key) case DOWN: show_down (); break; case UP: show_next (); break; case LEFT: show_left(); break; case RIGHT: show_right(); break; case RESTART: install(oldtimer); setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,Are you sure to restart (Y/N).); for (;)key=bioskey(0);/*得到键盘扫描码
10、*/ if (key=YES) startset(); setfillstyle(SOLID_FILL,9); bar(0,465,640,480); break; if (key=NO) setfillstyle(SOLID_FILL,9); bar(0,465,640,480); install(newtimer); break; break; /* case F1: print(); break; */ case ESC: install(oldtimer); setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,
11、Are you sure to exit (Y/N).); for (;)key=bioskey(0);/*得到键盘扫描码*/ if (key=YES) closegraph(); exit(0); if (key=NO) setfillstyle(SOLID_FILL,9); bar(0,465,640,480); install(newtimer); break; struct diamond *get_diamond() struct diamond *now; switch (random(7)+1) case 1: now=create_I(); return now; case 2
12、: now=create_T(); return now; case 3: now=create_L(); return now; case 4: now=create_J(); return now; case 5: now=create_Z(); return now; case 6: now=create_N(); return now; case 7: now=create_H(); return now; void show_interface (int fill_mode) int i; setbkcolor (9); setcolor (color); setfillstyle
13、(SOLID_FILL,backcolor); bar (100,60,300,420); bar (360,60,440,140); rectangle (100,60,300,420); rectangle (96,56,304,424);rectangle (360,60,440,140); rectangle (356,56,444,144); setfillstyle (fill_mode,14); floodfill (97,57,color); floodfill (397,57,color); setcolor(1); rectangle(96,56,304,424); set
14、color (color); for (i=80;i=400;i+=20) line (100,i,300,i); for (i=120;i=280;i+=20) line (i,60,i,420); for (i=80;i=120;i+=20) line (360,i,440,i); for (i=380;i=420;i+=20) line (i,60,i,140); show_intro (360,180); show_copsign (475,320,40,1); setfillstyle(SOLID_FILL,1); setcolor(14); rectangle(420,405,53
15、4,417); floodfill (421,406,14); outtextxy(422,408,HI-TECH WEALTH); void show_copsign (int topx,int topy,int size,int color) int halfsize,qtrsize; int xadd,xdel,yadd1,yadd2; halfsize=0.5*size; qtrsize=0.25*size;xadd=topx+size; xdel=topx-size; yadd1=topy+size; yadd2=topy+2*size;setcolor(color); line (
16、topx,topy,xdel,yadd1); line (xdel,yadd1,topx,yadd2); line (topx,yadd2,xadd,yadd1); line (xadd,yadd1,topx,topy); rectangle (topx-halfsize,topy+halfsize,topx+halfsize,yadd1+halfsize); setfillstyle (SOLID_FILL,color); floodfill (topx,topy+1,color); floodfill (xdel+1,yadd1,color); floodfill (topx,yadd2-
17、1,color); floodfill (xadd-1,yadd1,color); rectangle (topx-halfsize,yadd1-qtrsize,topx-0.75*halfsize,yadd1+qtrsize); floodfill (topx-halfsize+1,yadd1-qtrsize+1,color); rectangle (topx-qtrsize,yadd1-halfsize,topx+qtrsize,yadd1-0.25*halfsize); floodfill (topx-qtrsize+1,yadd1-halfsize+1,color); rectangl
18、e (topx+0.75*halfsize,yadd1-qtrsize,topx+halfsize,yadd1+qtrsize); floodfill (topx+0.75*halfsize+1,yadd1-qtrsize+1,color); rectangle (topx-qtrsize,yadd1+0.25*halfsize,topx+qtrsize,yadd2-halfsize); floodfill (topx-qtrsize+1,yadd1+0.25*halfsize+1,color); setcolor(14); line (topx,topy-1,xdel-1,yadd1); l
19、ine (xdel-1,yadd1,topx,yadd2+1); line (topx,yadd2+1,xadd+1,yadd1); line (xadd+1,yadd1,topx,topy-1); setfillstyle (SOLID_FILL,14); floodfill (topx,yadd1,color); void show_intro (int xs,int ys) char stemp20; setcolor (15); rectangle(xs-3,ys-3,xs+239,ys+115); line (xs-3,ys+26,xs+239,ys+26); line (xs-3,
20、ys+72,xs+239,ys+72); outtextxy(xs,ys,Level:); outtextxy(xs,ys+15,Score:); sprintf(stemp, -Roll -Downwards); stemp0=24; stemp7=25; outtextxy(xs,ys+30,Help:); setcolor(14); outtextxy(xs+40,ys+30,stemp); outtextxy(xs+40,ys+45,-Turn Right); outtextxy(xs+40,ys+60,Esc-Exit R-Restart); outtextxy(xs,ys+75,R
21、ussia Diamonds Ver 1.0); outtextxy(xs,ys+90,CopyRight By GZ clever boy); outtextxy(xs,ys+105,Email:lihongx2007); struct diamond *create_I() struct diamond *info; struct diamond *first; first=(struct diamond *)malloc(sizeof(struct diamond); info=(struct diamond *)malloc(sizeof(struct diamond); first-
22、next=info; info-next=first; first-x0=0; first-y0=0; first-x1=-1; first-y1=0; first-x2=1; first-y2=0; first-x3=2; first-y3=0; first-start_x=5; first-start_y=3; first-color=2;info-x0=0; info-y0=0; info-x1=0; info-y1=-1; info-x2=0; info-y2=1; info-x3=0; info-y3=2; info-start_x=5; info-start_y=1; info-c
23、olor=2;if(random(2)=0) return first; else return first-next; struct diamond *create_T() struct diamond *info; struct diamond *first; struct diamond *last; int i;info=(struct diamond *)malloc(sizeof(struct diamond); info-x0=0; info-y0=0; info-x1=-1; info-y1=0; info-x2=0; info-y2=-1; info-x3=1; info-y
24、3=0; info-start_x=5; info-start_y=3; info-color=4; first=info; last=info;info=(struct diamond *)malloc(sizeof(struct diamond); info-x0=0; info-y0=0; info-x1=0; info-y1=1; info-x2=0; info-y2=-1; info-x3=1; info-y3=0; info-start_x=5; info-start_y=2; info-color=4; last-next=info; last=info;info=(struct
25、 diamond *)malloc(sizeof(struct diamond); info-x0=0; info-y0=0; info-x1=-1; info-y1=0; info-x2=1; info-y2=0; info-x3=0; info-y3=1; info-start_x=5; info-start_y=2; info-color=4; last-next=info; last=info;info=(struct diamond *)malloc(sizeof(struct diamond); info-x0=0; info-y0=0; info-x1=0; info-y1=1;
26、 info-x2=0; info-y2=-1; info-x3=-1; info-y3=0; info-start_x=5; info-start_y=2; info-color=4; last-next=info; last=info; last-next=first;for (i=0;inext; return first; struct diamond *create_L() struct diamond *info; struct diamond *first; struct diamond *last; int i;info=(struct diamond *)malloc(size
27、of(struct diamond); info-x0=0; info-y0=0; info-x1=0; info-y1=1; info-x2=0; info-y2=-1; info-x3=1; info-y3=1; info-start_x=5; info-start_y=2; info-color=5; first=info; last=info;info=(struct diamond *)malloc(sizeof(struct diamond); info-x0=0; info-y0=0; info-x1=-1; info-y1=0; info-x2=1; info-y2=0; in
28、fo-x3=-1; info-y3=1; info-start_x=5; info-start_y=2; info-color=5; last-next=info; last=info;info=(struct diamond *)malloc(sizeof(struct diamond); info-x0=0; info-y0=0; info-x1=0; info-y1=1; info-x2=0; info-y2=-1; info-x3=-1; info-y3=-1; info-start_x=5; info-start_y=2; info-color=5; last-next=info; last=info;info=(struct diamond *)malloc(sizeof(struct diamond); info-x0=0; i
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1