- #include<stdio.h>
- #include<stdlib.h>/*随机产生数(rand())和结束(exit(0))函数*/
- #include<time.h>/*控制刷新时间函数,clock_t,clock()*/
- #include<bios.h>/*监控键盘,bioskey(1)*/
- #include<conio.h>/*定位坐标gotoxy(),清屏clrscr()*/
- #define X_MAX 79
- #define X_S 60
- #define Y_S 25
- #define GO(a,b) gotoxy(a,b),printf("*")
- #define B_J(a,b) (a==b?a_j(keyy):a_j(key))
- #define O_K(a) for(i=X_S+1;i<X_MAX;gotoxy(i,a),printf("-"),i++)
- #define D_W gotoxy(x,y),printf("$")
- double t;
- clock_t end;
- #define GO_T end=clock()+t*1.1;while(clock()<end)
- const int shang=0x4800,xia=0x5000,zuo=0x4b00,/*功能按键码*/
- you=0x4d00,jia=0xd3d,zan_t=0x3920,cai_d=0x3f00,
- du_q=0x3c00,bao_c=0x3b00,tui_c=0x11b,jian=0xc2d;
- void w_k();/*外层框架*/
- void k_s();/*游戏开始菜单*/
- void d_m();/*读秒函数*/
- void j_s();/*游戏结束框架*/
- void a_j(int);/*判断按键取运行方向*/
- void s_j();/*随机产生坐标*/
- void ou();/*保存数据*/
- void of(); /*读取数据*/
- void Y_S_J();/*初始化数据函数*/
- short n,x,y;
- int keyy;
- struct P{short x;short y;}p[300];
- /*主函数功能调用*/
- int main(){
- int key=1,i;
- w_k();
- k_s();
- clrscr();
- w_k();
- d_m();
- for(i=0;i<n;GO(p[i].x,p[i].y),i++);
- while(1){
- if(bioskey(1)){
- key=bioskey(0);
- if(key==shang)B_J(keyy,xia);
- else if(key==xia)B_J(keyy,shang);
- else if(key==zuo)B_J(keyy,you);
- else if(key==you)B_J(keyy,zuo);
- else if(key==zan_t){
- i=1;
- while(i!=key){
- clrscr();w_k();
- gotoxy(15,10);
- printf("\\a\\\\----@@@@ * STOP * @@@@----/\\a");
- bioskey(1);
- i=bioskey(0);}
- }
- else if(key==jia){if(t>1)t/=1.1;}
- else if(key==jian){if(t<15)t*=1.1;}
- else if(key==bao_c)ou();
- else if(key==cai_d)clrscr(),w_k(),k_s();
- else if(key==tui_c)exit(0);
- else s_j(),a_j(keyy);
- }
- else a_j(keyy);
- }
- return 0;
- }
- /*制框函数*/
- void w_k(){
- int i,j;
- for(j=1;j<=Y_S;j+=Y_S-1)
- for(i=1;i<=X_MAX;GO(i,j),i++);
- for(i=1;i<=Y_S;i++)
- GO(1,i),GO(X_S,i),GO(X_MAX,i);
- O_K(6);O_K(10);O_K(20);
- gotoxy(X_S+1,3),printf(" S-E-I-Z-O-F");
- gotoxy(X_S+1,5),printf("|-_-!- %-d -!-_-|",n);
- gotoxy(X_S+1,7),printf(" # Xiao Yi #");
- gotoxy(X_S+1,9),printf(" ^_^ ^_^");
- gotoxy(X_S+1,12),printf(" --M-E-N-U--");
- gotoxy(X_S+1,13),printf("------- -------");
- gotoxy(X_S+1,14),printf(" # Blank: stop");
- gotoxy(X_S+1,15),printf(" # Acceleration:+");
- gotoxy(X_S+1,16),printf(" # Slowdown: -");
- gotoxy(X_S+1,17),printf(" # Conserve: F1");
- gotoxy(X_S+1,18),printf(" # Main Menu: F5");
- gotoxy(X_S+1,19),printf(" # Quit: Esc");
- gotoxy(X_S+1,22),printf(" ^_^ E_Fabricator");
- }
- /*开始菜单*/
- void k_s(){
- int i,key,j=21;
- while(1){
- for(i=0;i<6;i++){
- GO(10,11+i);GO(17,11+i);GO(23,9+i);
- GO(27,9+i);GO(40,8+i);GO(46,8+i);
- GO(11+i,11);GO(31+i,6);GO(30+i,19);
- GO(14+i,5+i);GO(13-i,5+i);GO(48,13+i);
- GO(40+i,8);GO(40+i,13);GO(40+i,19);
- GO(48+i,5);GO(48+i,19);
- }
- GO(13,9);GO(50,4);GO(13,4);
- for(i=0;i<3;i++){
- GO(14-i,12+i);GO(12,14+i);GO(11-i,17+i);
- GO(14+i,14+i);GO(16+i,17+i);GO(24+i,9);
- GO(24+i,14);GO(30,4+i);GO(30-i,6+i);
- GO(29,16+i);GO(45+i,17+i);GO(53,17+i);
- GO(53-i,12+i);GO(53,5+i);GO(47,5+i);
- }
- for(i=0;i<2;i++){
- GO(50,8+i);GO(36,18+i);GO(50,15+i);
- }
- for(i=0;i<15;GO(43,4+i),i++);
- for(i=0;i<8;GO(29+i,9),GO(36-i,9+i),i++);
- for(i=0;i<4;GO(49,10+i),i++);
- for(i=2;i<59;gotoxy(i++,20),printf("=="));
- gotoxy(30,21);printf("# \\aStart");
- gotoxy(30,22);printf("# Read");
- gotoxy(30,23);printf("# Quit");
- gotoxy(25,j);printf("-->");
- gotoxy(1,1);
- while(!bioskey(1));
- key=bioskey(0);
- if(key==shang)
- { j--;
- if(j<21)j=23;
- }
- else if(key==xia){
- j++;
- if(j>23)j=21;}
- else if(key==0x1c0d){/*如果巧回车,判断在哪个选项中执行*/
- switch(j){
- case 21:Y_S_J();return;
- case 22:of();return;
- case 23:exit(0);
- }
- }
- clrscr();
- w_k();
- }
- }
- /*GAME OVER*/
- void j_s(){
- int i,key,j=20;
- while(1){
- for(i=0;i<13;i++){
- GO(16,4+i);GO(21,4+i);
- GO(23,4+i);GO(44,4+i);GO(52,4+i);
- }
- for(i=0;i<11;i++){
- GO(3,5+i);GO(37,4+i);GO(42,4+i);
- GO(10,6+i);GO(14,6+i);GO(18,16-i);GO(19,16-i);
- }
- for(i=0;i<5;i++){
- GO(4+i,16);GO(8,15-i);GO(10+i,11);
- GO(24+i,4);GO(24+i,9);GO(24+i,16);
- GO(45+i,4);GO(45+i,9);GO(45+i,16);
- GO(57-i,8+i);GO(53+i,12+i);
- }
- for(i=0;i<3;i++){
- GO(4+i,4);GO(6+i,4+i);GO(6+i,11);
- GO(17+i,4+i);GO(20-i,4+i);GO(12-i,4+i);
- GO(12+i,4+i);GO(33-i,4+i);GO(33+i,4+i);
- GO(33-i,16-i);GO(33+i,16-i);GO(37+i,14+i);
- GO(42-i,14+i);GO(53+i,4);GO(55+i,4+i);
- GO(57,6+i);
- }
- for(i=0;i<7;i++)
- GO(31,7+i),GO(35,7+i);
- /*以上是‘GAME OVER’坐标*/
- for(i=2;i<60;i++)gotoxy(i,18),printf("=");
- gotoxy(25,20);printf("\\a# Restart");
- gotoxy(25,21);printf("# Read");
- gotoxy(25,22);printf("# Quit");
- gotoxy(21,j);printf("-->");
- gotoxy(1,1);
- while(!bioskey(1));
- key=bioskey(0);
- if(key==shang){
- j--;
- if(j<20)j=22;
- }
- else if(key==xia){
- j++;
- if(j>22)j=20;
- }
- else if(key==0x1c0d)
- switch(j){
- case 20:Y_S_J();return;
- case 21:of();return;
- case 22:exit(0);
- }
- clrscr();
- w_k();
- }
- }
- /*判定:反键,撞墙,吃到点增长。*/
- void a_j(int key1){
- int i;clrscr();w_k();D_W;
- if(key1==shang){
- if(p[0].y-1==y&&p[0].x==x)n++,x=0;
- i=n;
- while(--i!=0)
- p[i]=p[i-1];
- p[0].y--;
- }
- else if(key1==xia){if(p[0].y+1==y&&p[0].x==x)n++,x=0;
- i=n;
- while(--i!=0)
- p[i]=p[i-1];
- p[0].y++;
- }
- else if(key1==zuo){if(p[0].y==y&&p[0].x-1==x)n++,x=0;
- i=n;
- while(--i!=0)
- p[i]=p[i-1];
- p[0].x--;
- }
- else {if(p[0].y==y&&p[0].x+1==x)n++,x=0;
- i=n;
- while(--i!=0)
- p[i]=p[i-1];
- p[0].x++;
- }
- keyy=key1;
- for(i=0;i<n;GO(p[i].x,p[i].y),i++);
- if(p[0].y>=Y_S||p[0].x>=X_S||p[0].y<=1||p[0].x<=1)
- clrscr(),w_k(),j_s(0);
- for(i=1;i<n;i++)
- if(p[0].x==p[i].x&&p[0].y==p[i].y)
- clrscr(),w_k(),j_s(0);
- GO_T;
- w_k();
- s_j();
- }
- /*(随机产生坐标)*/
- void s_j(){
- int i=0;
- if(x==0||y==0){
- while(1){
- srand(time(NULL));
- x=rand()%60;
- y=rand()%25;
- if(x>1&&y>1){
- for(i=0;i<n;i++)
- if(p[i].x==x&&p[i].y==y)
- break;
- }
- if(i==n)break;
- }
- }
- D_W;
- }
- /*保存函数*/
- void ou(){
- int i;
- FILE*pf;
- pf=fopen("D:\\\\T_C_S_data.txt","wb");
- fwrite(&n,sizeof(short),1,pf);
- fwrite(&t,sizeof(double),1,pf);
- fwrite(&keyy,sizeof(int),1,pf);
- for(i=0;i<n;i++)
- fwrite(&p[i],sizeof(struct P),1,pf);
- fclose(pf);
- }
- /*读取函数*/
- void of(){
- int i;
- FILE*pf;
- pf=fopen("D:\\\\T_C_S_data.txt","rb");
- fread(&n,sizeof(short),1,pf);
- fread(&t,sizeof(double),1,pf);
- fread(&keyy,sizeof(int),1,pf);
- for(i=0;i<n;i++)
- fread(&p[i],sizeof(struct P),1,pf);
- fclose(pf);
- if(!n)
- Y_S_J();
- }
- /*初始化数据*/
- void Y_S_J(){
- int i,j=8;
- n=5,
- x=0,
- y=0,
- t=10.0;
- keyy=0x4d00;
- for(i=0;i<5;i++,j--)
- p[i].x=j,p[i].y=3;
- }
- /*读秒*/
- void d_m(){
- int i=5;
- clock_t end1;
- while(i>2){
- end1=clock()+3*10;
- while(end1>clock()){
- gotoxy(23-i,8-i);printf("|");
- gotoxy(23-i,9-i);printf("|");
- gotoxy(23-i,18-i);printf("|");
- gotoxy(23-i,17-i);printf("|");
- gotoxy(17-i,13-i);
- printf("\\a-- %d -- ",i-2);
- }
- clrscr();w_k();
- i--;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/190620149817.html
来源: http://www.codesnippet.cn/detail/190620149817.html