home *** CD-ROM | disk | FTP | other *** search
- #include "WBTRIS.h"
-
- struct HiscorePart {
- int Position;
- char Name[40];
- int Score;
- int Rows;
- int Level;
- };
-
- struct RastPort *HiscoreRP = NULL;
- struct HiscorePart Hiscore[10];
- struct Window *HiscoreWindow = NULL;
-
- short win_width;
- short win_height;
-
- extern BOOL UseLace;
- extern struct Screen *myscreen;
- extern struct TextAttr helvetica13;
- extern struct TextAttr topaz8;
-
- void HiscoreList(char *Name, int Level, int Score, int Rows, int XOffset, int YOffset, BOOL ShowHiscore)
- {
- struct IntuiMessage *imsg = NULL;
- BOOL terminated = FALSE;
-
- if (UseLace) {
- win_width = MY_WIN_WIDTH;
- win_height = MY_WIN_HEIGHT + 7;
- } else {
- win_width = MY_WIN_WIDTH+32;
- win_height = MY_WIN_HEIGHT - 10;
- }
-
- if (HiscoreWindow = OpenWindowTags(NULL,
- WA_Left, XOffset,
- WA_Top, YOffset+(myscreen->Font->ta_YSize)+3,
- WA_Width, win_width,
- WA_Height, win_height+(myscreen->Font->ta_YSize),
- WA_Title, "<-- Click to close!",
- WA_Flags, WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_DRAGBAR | WFLG_DEPTHGADGET,
- WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_RAWKEY,
- TAG_END))
- {
- HiscoreRP = HiscoreWindow->RPort;
-
- LoadFile();
- UpdateHiscore(Name, Score, Rows, Level);
- OutHiscoreList();
- if (!ShowHiscore) {
- if (SaveFile() == FALSE)
- CloseWindow(HiscoreWindow);
- }
-
- while (!terminated) {
- Wait (1 << HiscoreWindow->UserPort->mp_SigBit);
-
- while (imsg = GT_GetIMsg(HiscoreWindow->UserPort)) {
- switch (imsg->Class) {
- case IDCMP_RAWKEY:
- if (imsg->Code == '\x45')
- terminated = TRUE;
- break;
-
- case IDCMP_CLOSEWINDOW:
- terminated = TRUE;
- break;
- }
- GT_ReplyIMsg(imsg);
- }
- }
- CloseWindow(HiscoreWindow);
- }
- }
-
-
-
- /*
- ** Ausgabe der Liste ins Fenster
- */
- void OutHiscoreList(void)
- {
- int i;
- char s[80];
- struct IntuiText Zeile;
- short Step = 0;
-
- if (UseLace)
- Step = 2;
- Zeile.FrontPen = 1;
- Zeile.BackPen = 0;
- Zeile.DrawMode = JAM2;
- Zeile.LeftEdge = 0;
- Zeile.TopEdge = 0;
- if (UseLace)
- Zeile.ITextFont = &helvetica13;
- else
- Zeile.ITextFont = &topaz8;
- Zeile.NextText = NULL;
-
- strcpy(s, "Pos.");
- Zeile.IText = s;
- PrintIText(HiscoreRP, &Zeile, 12, 8+(myscreen->Font->ta_YSize));
-
- strcpy(s, "Name");
- Zeile.IText = s;
- if (UseLace)
- PrintIText(HiscoreRP, &Zeile, 40, 8+(myscreen->Font->ta_YSize));
- else
- PrintIText(HiscoreRP, &Zeile, 50, 8+(myscreen->Font->ta_YSize));
-
- strcpy(s, "Score");
- Zeile.IText = s;
- PrintIText(HiscoreRP, &Zeile, 210, 8+(myscreen->Font->ta_YSize));
-
- strcpy(s, "Rows");
- Zeile.IText = s;
- if (UseLace)
- PrintIText(HiscoreRP, &Zeile, 250, 8+(myscreen->Font->ta_YSize));
- else
- PrintIText(HiscoreRP, &Zeile, 265, 8+(myscreen->Font->ta_YSize));
-
- strcpy(s, "Level");
- Zeile.IText = s;
- if (UseLace)
- PrintIText(HiscoreRP, &Zeile, 290, 8+(myscreen->Font->ta_YSize));
- else
- PrintIText(HiscoreRP, &Zeile, 313, 8+(myscreen->Font->ta_YSize));
-
- SetAPen(HiscoreRP, 1);
- if (UseLace) {
- Move(HiscoreRP, 10, 23+(myscreen->Font->ta_YSize));
- Draw(HiscoreRP, win_width - 10, 23+(myscreen->Font->ta_YSize));
- }
- else {
- Move(HiscoreRP, 10, 20+(myscreen->Font->ta_YSize));
- Draw(HiscoreRP, win_width - 10, 20+(myscreen->Font->ta_YSize));
- }
-
- for (i=0; i<10; i++) {
- sprintf(s, "%2d", i+1);
- Zeile.IText = s;
- PrintIText(HiscoreRP, &Zeile, 12, 26+(11 + Step)*i+(myscreen->Font->ta_YSize));
-
- sprintf(s, "%-23s", Hiscore[i].Name);
- Zeile.IText = s;
- if (UseLace)
- PrintIText(HiscoreRP, &Zeile, 40, 26+(11 + Step)*i+(myscreen->Font->ta_YSize));
- else
- PrintIText(HiscoreRP, &Zeile, 50, 26+(11 + Step)*i+(myscreen->Font->ta_YSize));
-
- sprintf(s, "%6d", Hiscore[i].Score);
- Zeile.IText = s;
- PrintIText(HiscoreRP, &Zeile, 203, 26+(11 + Step)*i+(myscreen->Font->ta_YSize));
-
- sprintf(s, "%5d", Hiscore[i].Rows);
- Zeile.IText = s;
- PrintIText(HiscoreRP, &Zeile, 250, 26+(11 + Step)*i+(myscreen->Font->ta_YSize));
-
- sprintf(s, "%3d", Hiscore[i].Level);
- Zeile.IText = s;
- if (UseLace)
- PrintIText(HiscoreRP, &Zeile, 290, 26+(11 + Step)*i+(myscreen->Font->ta_YSize));
- else
- PrintIText(HiscoreRP, &Zeile, 313, 26+(11 + Step)*i+(myscreen->Font->ta_YSize));
-
- }
- }
-
-
-
- /*
- ** Sortiert Liste neu
- */
- void UpdateHiscore(char *Name, int Score, int Rows, int Level)
- {
- int i = 0;
- int j;
- BOOL equal = FALSE;
-
- while ((equal == FALSE) && (Score <= Hiscore[i].Score) && (i <= 9)) {
- if (Score == Hiscore[i].Score)
- equal = TRUE;
- else
- i++;
- }
-
- if (equal == TRUE) {
- while ((Score == Hiscore[i].Score) && (Rows <= Hiscore[i].Rows) && (i<=9))
- i++;
- }
-
- for (j = 9; j > i; j--) {
- Hiscore[j].Score = Hiscore[j-1].Score;
- strcpy(Hiscore[j].Name, Hiscore[j-1].Name);
- Hiscore[j].Rows = Hiscore[j-1].Rows;
- Hiscore[j].Level = Hiscore[j-1].Level;
- }
-
- Hiscore[i].Score = Score;
- strcpy(Hiscore[i].Name, Name);
- Hiscore[i].Rows = Rows;
- Hiscore[i].Level = Level;
- }
-
-
-
- /*
- ** Speichert das Hiscorefile ab
- */
- BOOL SaveFile(void)
- {
- int i;
- FILE *fp = NULL;
- char FName[80];
-
- if (getenv("WBTRIS"))
- strcpy(FName, getenv("WBTRIS"));
- else
- strcpy(FName, FILENAME);
-
- if ((fp = fopen(FName, "w")) == NULL) {
- fprintf(stderr, "Couldn't open file '%s'.\n", FName);
- return(FALSE);
- }
- for (i=0; i<10; i++) {
- fprintf(fp, "%d/%s/%d/%d/%d\n", i+1, Hiscore[i].Name, Hiscore[i].Score, Hiscore[i].Rows, Hiscore[i].Level);
- }
- fclose(fp);
- return(TRUE);
- }
-
-
-
- /*
- ** Laedt das Hiscorefile ein
- */
- void LoadFile(void)
- {
- int i;
- FILE *fp;
- int c;
- char text[30];
- char *ptr;
- char FName[80];
-
- if (getenv("WBTRIS"))
- strcpy(FName, getenv("WBTRIS"));
- else
- strcpy(FName, FILENAME);
-
- if ((fp = fopen(FName, "r")) == NULL) {
- for (i=0; i<10; i++) {
- Hiscore[i].Position = i+1;
- strcpy(Hiscore[i].Name, "...");
- Hiscore[i].Score = 0;
- Hiscore[i].Rows = 0;
- Hiscore[i].Level = 0;
- }
- } else {
- i = 0;
- while ((c = fgetc(fp)) != EOF) {
- while (c != '/') {
- c = fgetc(fp);
- }
- Hiscore[i].Position = i+1;
-
- ptr = &text[0];
- *ptr = '\0';
- while ((c = fgetc(fp)) != '/') {
- *ptr = c;
- ptr++;
- }
- *ptr = '\0';
- strcpy(Hiscore[i].Name, text);
-
- ptr = &text[0];
- *ptr = '\0';
- while ((c = fgetc(fp)) != '/') {
- *ptr = c;
- ptr++;
- }
- *ptr = '\0';
- Hiscore[i].Score = atoi(text);
-
- ptr = &text[0];
- *ptr = '\0';
- while ((c = fgetc(fp)) != '/') {
- *ptr = c;
- ptr++;
- }
- *ptr = '\0';
- Hiscore[i].Rows = atoi(text);
-
- ptr = &text[0];
- *ptr = '\0';
- while ((c = fgetc(fp)) != '\n') {
- *ptr = c;
- ptr++;
- }
- *ptr = '\0';
- Hiscore[i].Level = atoi(text);
- i++;
- }
- fclose(fp);
- }
- }
-