📄 screen.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 + -