⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 screen.c

📁 这是老早前学生时代用TurboC++3.0写的dos程序
💻 C
字号:
#include "block.h"

void getstring( int,int,char * );
void draw_end_windows(void);
int read_into_order(ORDER *,FILE *);
int company_order(long int *score,ORDER *p);
void change_order(long int *score,struct time *tp,char *playname,ORDER *ord);
void print_order(ORDER *);
void write_into_disk(ORDER *,FILE *);

void headscreen( void )
     {
       FILE *zk;
       int gd=VGA,gm=VGAHI;
       if( (zk=fopen("hzk16","rb"))==NULL ) exit(-1);

       initgraph(&gd,&gm,"");
       setbkcolor(WHITE);
       setfillstyle(SOLID_FILL,RED);
       bar(180,180,430,185);
       bar(180,235,430,240);
       chputs(230,203,"俄  罗  斯  方  块",LIGHTBLUE,zk);
       bar(180,180,185,240);
       bar(435,180,430,240);

       chputs(10,440,"1995年12月10日 戴志强 作于 南京无线电仪器厂 版权所有 非法拷贝 后果自负!!",LIGHTBLUE,zk);
       bar(10,460,630,465);
       for( ;!iskey(); )
	  {
	    setcolor(RED);
	    outtextxy(300,400,"Press any key to continue......");
	    setcolor(LIGHTRED);
	    outtextxy(300,400,"Press any key to continue......");
	    delay(20);
	  }
       getkey();
       return;
     }
int  endscreen( struct time *tp,long int score )
     {

       unsigned char *ptr;
       static char ch[9]={' ',' ',' ',' ',' ',' ',' ',' ',0};
       static ORDER ord[10];
       int mark,chmark;
       FILE *fp,*zk;

       if( (zk=fopen("hzk16","rb"))==NULL ) exit(-1);

       ptr=(unsigned char *)malloc(imagesize(99,99,301,131));
       if( ptr==NULL ) exit(-1);

       getimage(100,200,400,250,ptr);
       drawblock(100,200,300,50);
       chputs(120,215,"确定结束游戏吗?(y/n): ",BLUE,zk);
       for(mark=1;mark; )
	  {
	    nosound();
	    chmark=getkey();
	    if(chmark==9)
		    {
		      putimage(100,200,ptr,COPY_PUT);
		      free(ptr);
		      return 0;
		    }
	    if(chmark==8) mark=0;
	    else{ sound(500); delay(100); }
	  }
       bar(120,215,380,235);
       chputs(120,215,"请你输入姓名: ",BLUE,zk);
       if( (fp=fopen("PLAYER.SAV","r+b"))==NULL ) exit(-1);

       read_into_order(ord,fp);

       if( company_order(&score,&ord[9]) )
	 {
	   getstring(250,215,ch);
	   change_order(&score,tp,ch,ord);
	 }
       draw_end_windows();
       write_into_disk(ord,fp);
       print_order(ord);

       free(ptr);
       fclose(zk);
       fclose(fp);
       getch();
       return 1;
    }
void setupscreen(int *para,long *hiscore)
     {
       static char *menu[]={
			     "初始行数: ","初始关数: ",
			     "难度设定: ","参数确定: ",
			   };
       static char *answer[]={
			       "接受","修改",
			     };
       static char *normal[]={
				"容易","较难",
			      };
       static int xy_2[8]={130,195,340,195,130,315,340,315};

       char ch[10];
       unsigned char *ptr;
       int MARK=1,num1,num2;
       ORDER *r;
       FILE *zk,*fp;

       if( (fp=fopen("player.sav","r+b"))==NULL ) exit(-1);
       if( (r=(ORDER  *)malloc(sizeof(ORDER)*10))==NULL ) exit(-1);
       if( !read_into_order(r,fp) ) exit(-1);
       *hiscore=r->order;
       fclose(fp);
       free(r);

       if( (zk=fopen("hzk16","rb"))==NULL ) exit(-1);

       settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
       drawblock(100,100,400,300);
       line(105,105,495,105);
       line(495,105,495,395);
       line(495,395,105,395);
       line(105,395,105,105);
       line(105,135,495,135);

       chputs(220,112,"系统参数初始设定",BLUE,zk);

       drawblock(120,180,150,50);
       drawblock(330,180,150,50);
       drawblock(120,300,150,50);
       drawblock(330,300,150,50);

       num1=3; num2=3;
       setfillstyle(SOLID_FILL,LIGHTRED);
       bar(xy_2[num1*2],xy_2[num1*2+1]-2,xy_2[num1*2]+77,xy_2[num1*2+1]+18);
       chputs(xy_2[num1*2],xy_2[num1*2+1],menu[num1],BLUE,zk);
       setfillstyle(SOLID_FILL,LIGHTGRAY);

       chputs(130,195,menu[0],BLUE,zk);
       chputs(340,195,menu[1],BLUE,zk);
       chputs(130,315,menu[2],BLUE,zk);
       chputs(340,315,menu[3],BLUE,zk);

       sprintf(ch,"%d",*para);
       chputs(xy_2[0]+80,xy_2[1],ch,BLUE,zk);
       sprintf(ch,"%d",para[1]);
       chputs(xy_2[2]+80,xy_2[3],ch,BLUE,zk);
       chputs(xy_2[4]+80,xy_2[5],normal[para[2]],BLUE,zk);
       chputs(xy_2[6]+80,xy_2[7],answer[para[3]],BLUE,zk);

       for(MARK=1;MARK; )
	  {
	    if( num1!=num2)
	      {
		setfillstyle(SOLID_FILL,LIGHTGRAY);
		bar(xy_2[num1*2],xy_2[num1*2+1]-2,xy_2[num1*2]+77,xy_2[num1*2+1]+18);
		chputs(xy_2[num1*2],xy_2[num1*2+1],menu[num1],BLUE,zk);
		num1=num2;
		setfillstyle(SOLID_FILL,LIGHTRED);
		bar(xy_2[num1*2],xy_2[num1*2+1]-2,xy_2[num1*2]+77,xy_2[num1*2+1]+18);
		chputs(xy_2[num1*2],xy_2[num1*2+1],menu[num1],BLUE,zk);
		setfillstyle(SOLID_FILL,LIGHTGRAY);
	      }

	    switch( getkey() ){
			case 6: if(++num2>3) num2=0;
				break;
			case 7: if(--num2<0) num2=3;
				break;
			case 4: switch(num2){
				case 0: if(++para[0]>13) para[0]=0;
					sprintf(ch,"%d",*para);
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],ch,BLUE,zk);
					break;
				case 1: if(++para[1]>9) para[1]=0;
					sprintf(ch,"%d",para[1]);
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],ch,BLUE,zk);
					break;
				case 2: if(++para[2]>1) para[2]=0;
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],normal[para[2]],BLUE,zk);
					break;
				case 3: if(++para[3]>1) para[3]=0;
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],answer[para[3]],BLUE,zk);
					break;
				default: break;
				}
				break;
			case 5: switch(num2){
				case 0: if(--para[0]<0) para[0]=13;
					sprintf(ch,"%d",para[0]);
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],ch,BLUE,zk);
					break;
				case 1: if(--para[1]<0) para[1]=9;
					sprintf(ch,"%d",para[1]);
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],ch,BLUE,zk);
					break;
				case 2: if(--para[2]<0) para[2]=1;
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],normal[para[2]],BLUE,zk);
					break;
				case 3: if(--para[3]<0) para[3]=1;
					setfillstyle(SOLID_FILL,LIGHTGRAY);
					bar(xy_2[num1*2]+80,xy_2[num1*2+1],xy_2[num1*2]+130,xy_2[num1*2+1]+20);
					chputs(xy_2[num1*2]+80,xy_2[num1*2+1],answer[para[3]],BLUE,zk);
					break;
				default: break;
				}
				break;
			case 10: if(num1==3&&!para[3]) MARK=0;
				break;
			default: break;
			}
	    }
       return;
     }
void getstring(int x,int y,char *str)
     {
       union{
	       char c[2];
	       int keys;
	    }k;
       register int i,j=0;
       char *c=str;
       unsigned char *ptr;
       int mark;

       setfillstyle(SOLID_FILL,BLUE);
       settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
       ptr=(unsigned char *)malloc(imagesize(x,y,x+16,y+20));
       getimage(x,y,x+16,y+20,ptr);
       bar(x+j*16,y,x+j*16+16,y+20);


       for(mark=1,i=0;mark&&i<8; )
	  {
	    k.keys=bioskey(0);
	    if( !k.c[0] )
		   switch( k.c[1] ){
			   case ARROW_LEFT:  putimage(x+j*16,y,ptr,COPY_PUT);
					     if(--j<0) j=7;
					     i=j;					     getimage(x+j*16,y,x+j*16+16,y+20,ptr);
					     bar(x+j*16,y,x+j*16+16,y+20);
					     break;
			   case ARROW_RIGHT: putimage(x+j*16,y,ptr,COPY_PUT);
					     if(++j>7) j=0;
					     i=j;
					     getimage(x+j*16,y,x+j*16+16,y+20,ptr);
					     bar(x+j*16,y,x+j*16+16,y+20);
					     break;
			   default: break;
		   }
	    else{
		  if( k.c[0]==0x0d ) { mark=0; continue; }
		  if( isprint(k.c[0]) )
		    {
			 c=str+j;
			 *c=k.c[0];  c++; i++;
			 if(++j>7) j=0;
			 setfillstyle(SOLID_FILL,LIGHTGRAY);
			 bar(x,y,x+140,y+20);
			 setfillstyle(SOLID_FILL,BLUE);
			 outtextxy(x,y,str);
			 getimage(x+j*16,y,x+j*16+16,y+20,ptr);
			 bar(x+j*16,y,x+j*16+16,y+20);
		    }
		}
	  }
       return;
     }

#define WINX 70
#define WINY 70
void draw_end_windows(void)
     {
       FILE *zk;
       register i;
       int x,y;
       if( (zk=fopen("hzk16","rb"))==NULL ) exit(-1);

       drawblock(WINX,WINY,500,300);
       line(WINX+20,WINY+20,WINX+500-20,WINY+20);
       line(WINX+20,WINY+300-20,WINX+500-20,WINY+300-20);
       line(WINX+20,WINY+20,WINX+20,WINY+300-20);
       line(WINX+500-20,WINY+20,WINX+500-20,WINY+300-20);

       line(WINX+20,WINY+50,WINX+480,WINY+50);
       line(WINX+20,WINY+80,WINX+480,WINY+80);

       x=WINY+100;
       for(i=0;i<9;i++)
	  {
	     line(WINX+20,x,WINY+480,x);
	     x+=20;
	  }

       line(WINX+90,WINY+50,WINX+90,WINY+280);
       line(WINX+220,WINY+50,WINX+220,WINY+280);
       line(WINX+350,WINY+50,WINX+350,WINY+280);

       chputs(WINX+170,WINY+27,"游 戏 成 绩 表",BLUE,zk);
       chputs(WINX+30,WINY+57,"名  次",BLUE,zk);
       chputs(WINX+110,WINY+57,"游戏者名称",BLUE,zk);
       chputs(WINX+240,WINY+57,"游戏者成绩",BLUE,zk);
       chputs(WINX+370,WINY+57,"游戏者时间",BLUE,zk);
       return;
     }
int read_into_order(ORDER *ptr,FILE *fp)
     {
       register i,count;

       fseek(fp,0l,SEEK_SET);
       for(i=0;i<10;i++)
	  {
	    count=fread(ptr,sizeof(ORDER),1,fp);
	    ptr++;
	    if(count!=1) break;
	  }
       if(i!=10) return 0;
       else return 1;
     }
void write_into_disk(ORDER *ptr,FILE *fp)
     {
       register i=0;

       fseek(fp,0L,SEEK_SET);
       for(i=0;i<10;i++)
	 {
	   fwrite(ptr,sizeof(ORDER),1,fp);
	   ptr++;
	 }

       return;
     }
int company_order(long *score,ORDER *p)
    {
      if(*score>p->order) return 1;
      else return 0;
    }
void print_order(ORDER *ptr)
     {
       register i,x=0;
       char buf[20];

       for(i=0;i<10;i++)
	  {
	    sprintf(buf,"   %d  ",i+1);
	    outtextxy(WINX+25,WINY+87+x,buf);
	    sprintf(buf,"   %s",ptr->name);
	    outtextxy(WINX+95,WINY+87+x,buf);
	    sprintf(buf,"   %ld",ptr->order);
	    outtextxy(WINX+225,WINY+87+x,buf);
	    sprintf(buf,"   %02d:%02d:%02d",ptr->playtime.ti_hour,
			       ptr->playtime.ti_min,ptr->playtime.ti_sec);
	    outtextxy(WINX+355,WINY+87+x,buf);
	    x+=20;	    ptr++;
	  }
       return;
     }
void change_order(long int *score,struct time *tp,char *playname,ORDER *ord)
     {
       static ORDER or;
       register i,count;

       strcpy(or.name,playname);
       or.playtime=*tp; or.order=*score;
       for(i=0;i<10;i++)
	  {
	    if(ord[i].order<*score) break;
	  }
       count=i;

       for(i=9; i>=count&&i>0; i--)
	  {
	    ord[i]=ord[i-1];
	  }
       ord[count]=or;
       return;
     }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -