Программирование компьютерной графики. Создание игры «Опасный лабиринт», страница 3

}

void ShowPlayer (int x, int y) //рисование игрока

{

setcolor (7);

ellipse (x,y-6,20,20,10,14);

line (x-10,y-6,x-5,y+15);

line (x+8,y-4,x+5,y+15);

line (x-5,y+15,x-3,y+10);

line (x+5,y+15,x+3,y+10);

line (x-3,y+10,x,y+20);

line (x+3,y+10,x,y+20);

setfillstyle (1,7);

floodfill (x,y-6,7);

floodfill (x,y+10,7);

setcolor (14);

ellipse (x-4,y-11,20,20,3,4);

ellipse (x+4,y-11,20,20,3,4);

setfillstyle (1,14);

floodfill (x-4,y-11,14);

floodfill (x+4,y-11,14);

setcolor (12);

circle (x-4,y-10,1);

circle (x+4,y-10,1);

setfillstyle (1,12);

floodfill (x-4,y-10,12);

floodfill (x+4,y-10,12);

setcolor (6);

arc (x,y-6,210,330,7);

line (x-7,y-2,x+7,y-2);

}

void HidePlayer (int x, int y) //закрашивание игро

{

setcolor (0);

ellipse (x,y-6,20,20,10,14);

line (x-10,y-6,x-5,y+15);

line (x+8,y-4,x+5,y+15);

line (x-5,y+15,x-3,y+10);

line (x+5,y+15,x+3,y+10);

line (x-3,y+10,x,y+20);

line (x+3,y+10,x,y+20);

setfillstyle (1,0);

floodfill (x,y-6,0);

floodfill (x,y+10,0);

setcolor (0);

ellipse (x-4,y-11,20,20,3,4);

ellipse (x+4,y-11,20,20,3,4);

setfillstyle (1,0);

floodfill (x-4,y-11,0);

floodfill (x+4,y-11,0);

setcolor (0);

circle (x-4,y-10,1);

circle (x+4,y-10,1);

setfillstyle (1,0);

floodfill (x-4,y-10,0);

floodfill (x+4,y-10,0);

setcolor (0);

arc (x,y-6,210,330,7);

line (x-7,y-2,x+7,y-2);

}

#include "graphics.h"

#include<stdio.h>

#include "function.h"

#include<time.h>

#include<string.h>

#include<stdlib.h>

#include <process.h>

class User_Menu //описание пользователького меню

{

public:

int yc, xc, key;

User_Menu ()

{

yc=110; xc=205;

key=0;

}

int UserMenu ()

{

while (1)

{

CurShow (xc,yc);

if (kbhit())

{

key=getch();

switch (key)

{

case KEY_UP:

CurHide (xc,yc);

yc-=90; 

if (yc<110)

yc=380;

CurShow(xc,yc);

break;

case KEY_DOWN:

CurHide (xc,yc);

yc+=90; 

if (yc>380)

yc=110;

CurShow (xc, yc);

break;

case 13:

if (yc==110)

{    

cleardevice();

return 0;

}

if (yc==200)

{

cleardevice();

return 1;

}

if (yc==290)

{

cleardevice();

return 2;

}

if (yc==380)

exit (0);

break;

default: break;

}

}

}

}

};

class Best //создание таблицы лучших игроков

{

public:

struct Rank

{

char Name[10];

float Time;

}

Spisok[10], tmp, rex;

int key;

FILE *fin;

Best()

{

key=0;

}

void OpenFileRank(char ch[4]) //открытие файла, если его нет, то создаем

{

int j=0;

fin=fopen("Result.dat",ch);

if(fin==NULL)

{

CreateFileRank();

}

else

{

while(j<10)

{

fread(&Spisok[j],sizeof(Rank),1,fin);

j++;

}

}

}

void ReadFileRank(void) //показывать список лучших

{

int i=9, y=105, j=0, count=1;

char str[20]="", buff[20]="";

OpenFileRank("rb");

cleardevice();

setcolor (3);

settextstyle( DEFAULT_FONT, HORIZ_DIR, 30 );

settextjustify(CENTER_TEXT,CENTER_TEXT);

outtextxy( 320, 20, "Таблица рекордов" );

settextstyle( DEFAULT_FONT, HORIZ_DIR, 20 );

outtextxy( 155, 70, "Место" );

outtextxy( 300, 70, "Имя игрока" );

outtextxy( 470, 70, "Время" );

setcolor (13);

rectangle (120,50,520,420);

line (190,50,190,420);

line (430,50,430,420);

for (int i=0; i<10; i++)

{

line (120,90+33*i,520,90+33*i);

}

while(j<10)

{

fread(&Spisok[j],sizeof(Rank),1,fin);

outtextxy(155,y,itoa(count,str,10));

outtextxy(300,y,Spisok[j].Name);

outtextxy(470,y,itoa(Spisok[j].Time,str,10));

i--;

y+=33;

j++;

count++;

}

key=0;

while(key!=27)

key=getch();

fclose(fin);

}

void AddFileRank(void) //записывает в файл список лучших

{

int i=0;

OpenFileRank("wb");

while(i<10)

{

fwrite(&Spisok[i],sizeof(Rank),1,fin);

i++;

}

fclose(fin);

}

void CreateFileRank(void) //создает файл

{

sleep(200);

int i=9;

OpenFileRank("wb");

while(i>=0)

{

strcpy(Spisok[i].Name,"gamer");

Spisok[i].Time=0;

fwrite(&Spisok[i],sizeof(Rank),1,fin);

i--;

}

fclose(fin);

}

void AddNewUser(float time) //добавление нового пользователя в список лучших

{

this->OpenFileRank("rb");               

fclose(fin);

int i=0, j;

int k;

char ch;

char us_name[6]="";

cleardevice();

setcolor(3);

sleep(200);

settextstyle( TRIPLEX_FONT, HORIZ_DIR, 32 );

settextjustify(CENTER_TEXT,CENTER_TEXT);

outtextxy(getmaxx()/2,getmaxy()/3,"Введите Ваше имя:");

do

{

ch=k=getch();

if(ch>='a'&&ch<='z')