# include # include # include "Ausgang.h" /* dient zur bearbeitung der Eintraege der Bestenliste */ struct Zeil{char nach[256],vor[256];int grad;char day[3],mon_[3],year[5],z[6];}Zl[25]; const char *Zahlen[13]={"","1","2","3","4","5","6","7","8","9","10","11","12"}; /*---------------------------------------------------------------------------*/ /* Berechnet 3*6 Punkte fuer die darstellung der 13 kleinen Kreise aus den 3 */ /* grossen Kreisen. */ /*---------------------------------------------------------------------------*/ void Punkte(float xx[],float yy[],float x[],float y[]) { float x1,y1,rad; /* rad=minimierung von den 3 grossen Radien */ int i,j; rad=0.25; for(i=0;i<=2;i++) { x1=(sin(i*2.094))/rad; y1=(cos(i*2.094))/rad; for(j=0;j<=5;j++) { x[(i*6)+j]=((sin(j*1.047))/rad)+x1; y[(i*6)+j]=((cos(j*1.047))/rad)+y1; } } j=0; for(i=0;i<18;i++) { if((i<6)||(((i>6)&&(i<11))||(i>14))) { xx[j]=x[i]; yy[j]=y[i]; j++; } } } /*--------------------------------------------------------------------------*/ /* stellt das HintergrundBild des Spieles dar */ /*--------------------------------------------------------------------------*/ void Bild(float xx[],float yy[],float x[],float y[],int zahl) { int i,j,r; float kreisd=1.25; char *z="letzte Zahl ="; char *n="neue Zahl ="; color(0); clear(); color(3); textsize(1.,1.); move2(-8.,-9.); drawstr(z); move2(-8.,-10.); drawstr(n); move2(0.,-9.); for(r=0;r<=12;r++) { if(zahl==r) drawstr(Zahlen[r]); else ; } color(WHITE); /* Zeichnet die Striche */ for(i=0;i<3;i++) { move2(x[i*6],y[i*6]); for(j=1;j<=6;j++) { if(j==6) draw2(x[(i*6)],y[(i*6)]); else draw2(x[((i*6)+j)],y[((i*6)+j)]); } } /* Zeichnet die Kreise */ for(i=0;i<=12;i++) { color(RED); polyfill(1); circle(xx[i],yy[i],kreisd+0.01); color(GREEN); circle(xx[i],yy[i],kreisd); } } void test() { /* switch(getkey()) { default: break; } */ (void) getkey(); } /*---------------------------------------------------------------------------*/ /* liest alle daten aus der Datei "Bestlist" ein und Speicher sie in dem */ /* struct Zeilen[].daten und gibt die Anzahl der Zeilen zurueck. */ /*---------------------------------------------------------------------------*/ int Best() { FILE *datei; int i=0,z,a=1,n=1,b=1; char c; for(z=0;z<25;z++) { Zl[z].vor[0]='\0'; Zl[z].nach[0]='\0'; } z=0; clear(); /* oefnet Datei-"Bestlist" */ datei=fopen("Bestlist","r"); /* wenn datei nicht vorhanden */ if(datei==NULL) { return 0; } else { z=1; /* Einlesen der Zeichen in der Datei */ while((c=fgetc(datei))!=EOF) { /* Wenn eingelesenes Zeichen = Lehrzeichen oder Zeilenvorschub */ if((c==32)||(c=='\n')) { /* Lehrzeichen */ if((a==0)&&(c==32)) { b=i; i=0; a=1; n++; } /* Zeilenvorschub */ if(c=='\n') { n=1; z++; i=0; a=1; } } else { if(n%7) { if(n==1) {a=0;Zl[z-1].nach[i++]=c;} if((n==2)&&(a)) Zl[z-1].nach[b]='\0'; if(n==2) {a=0;Zl[z-1].vor[i++]=c;} if((n==3)&&(a)) Zl[z-1].vor[b]='\0'; if(n==3) {a=0;Zl[z-1].day[i++]=c;} if(n==4) {a=0;Zl[z-1].mon_[i++]=c;} if(n==5) {a=0;Zl[z-1].year[i++]=c;} if(n==6) {a=0;Zl[z-1].grad=(c-48);} } else {a=0;Zl[z-1].z[i++]=c;} } } } fclose(datei); return z; } /*---------------------------------------------------------------------------*/ /* Gibt die Bestenliste aus (dabei werden die Daten erst in Best() eingelesen*/ /*---------------------------------------------------------------------------*/ void Best_aus() { int i,n,j=0,a=1; char *leicht="leicht",*mittel="mittel",*schwer="schwer"; char *text="Nachname Vorname Datum Stufe Zuege "; char *text1="Beliebige Taste druecken"; char *text2=".",*nicht1="Keine Bestenliste",*nicht2="vorhanden."; n=Best(); if(n>25) n=25; font("cursive"); /* Gibt jeweils erst 15 Eintraege und dann 10 Zeilen der Bestlist aus */ /* sovern so viele Zeilen vorhanden sind */ while((n>0)&&(a)) { color(0); clear(); color(3); textsize(0.8,0.8); move(-9.5,9.); drawstr(text); color(2); /* Ausgabe der Eintraege der Bestenliste */ for(i=(j*15);i-1) { if((n1[y]=='\0')&&(n2[y]=='\0')) return -1; if(n1[y]!='\0') { b1=n1[y]; if(b1>96) b1=b1-32; } else b1=255; if(n2[y]!='\0') { b2=n2[y]; if(b2>96) b2=b2-32; } else return x; if(b1==b2) { y++; } if(b1>b2) {x++;y=-1;} if(b13)&&(i==0)) y=(datum[i]-48)*1000; if((x>3)&&(i==1)) y=y+((datum[i]-48)*100); if((x>1)&&(i==2)) { if(x==2) y=y+((datum[0]-48)*10); else y=y+((datum[i]-48)*10); } if((x>1)&&(i==3)) { if(x==2) y=y+((datum[1]-48)); else y=y+(datum[i]-48); } } return y; } /*--------------------------------------------------*/ /* Filterung des Eintrages mit dem aeltesten Datum */ /* gibt Zeile zurueck wo der aelteste Eintrag steht */ /*--------------------------------------------------*/ int zu_gross(int alt1) { int i,c=1,dat[3],odat[3],alt=alt1; for(i=0;i99999)||(zuege<0)) zuege=0; /* Wenn Datei 25 Eintraege hat wird der aelteste Eintrag gesucht */ /* und sie Zeile in "alt" festgehalten damit dieser Eintrag nicht */ /* wieder mit in die Bestenliste eingetragen wird. */ if(z>24) { z=25; alt=zu_gross(z-1); } datei=fopen("Bestlist","w"); color(0); clear(); color(RED); textsize(1.,1.); font("cursive"); /* Textausgabe */ move(-10.,9.); drawstr(text); move(-10.,8.); drawstr(textw); color(GREEN); /* Eingabe der Namen */ move(-10.,7.); drawstr(text1); getstring(3,vor1); move(-10.,6.); drawstr(text2); getstring(3,nach1); vor=vor1; nach=nach1; /* Ermittlung des Datums und uebergabe an die Variablen */ time(&cur_t); tmptr=localtime(&cur_t); tag=tmptr->tm_mday; mon=tmptr->tm_mon; ja=tmptr->tm_year; /* Berechnung des Jahres,da das nicht richtig uebergeben wird */ ja=2000+(ja%100); for(i=0;i-1) x1=x; else { x=Sortieren(vor1,Zl[i].vor,x1); if(x==-1) x=x1; x1=x; } } /* Abspeicherung der ganzen Bestenliste mit neuem Eintrag */ if(x==0) fprintf(datei,"%s %s %02d %02d %04d %d %05d",nach,vor,tag,mon,ja,art,zuege); for(i=0;(i0)) fprintf(datei,"\n%s %s %02d %02d %04d %d %05d",nach,vor,tag,mon,ja,art,zuege); if(((i>0)||(x==0))&&(i!=alt)) fprintf(datei,"\n"); if(i!=alt)fprintf(datei,"%s %s %s %s %s %d %s",Zl[i].nach,Zl[i].vor,Zl[i].day,Zl[i].mon_,Zl[i].year,Zl[i].grad,Zl[i].z); } if((x>=z)&&(z>0)) fprintf(datei,"\n%s %s %02d %02d %04d %d %05d",nach,vor,tag,mon,ja,art,zuege); fclose(datei); }