Автор работы: Пользователь скрыл имя, 14 Ноября 2013 в 13:44, курсовая работа
В даній курсовій роботі розглядається програма, що оформлена в вигляді гри. Гра доволі проста в управлінні і має не дуже складний алгоритм.
Метою даної курсової роботи є ознайомлення з принципами об’єктно-орієнтовного програмування, набуття навичків їх практичного використання, побудова власних класів.
Рисунок 4.4 – Заставка
Рисунок 4.5 – Меню гри
Натискаємо “Enter”. На екрані з’являється квадратик, острівки та рахунок, так званий інтерфейс гри.
Рисунок 4.6 – Інтерфейс гри
4.6 Тестування програми
Протестуємо різні етапи гри:
Рисунок 4.7 – Заставка
Рисунок 4.8 – Меню гри
Рисунок 4.9 – Початок гри
Рисунок 4.10 – Рух квадратика вправо
Рисунок 4.11 – Рух квадратика вліво
Рисунок 4.12 – Запит імені
ВИСНОВОК
В даній курсовій роботі
була розроблена програма у вигляді
гри, із використанням основних принципів
об’єктно-орієнтованого
Гра має великий потенціал для розширення та вдосконалення. Наприклад, можна додати у меню можливість змінювати швидкість руху у грі, що впливало б на складність гри, але й підвищувало кількість очок. Також гарно було б, аби деякі з острівків були іншого кольору і на них не можна було б стрибати. Або щоб на деяких острівках з’являлися спеціальні бонуси. Перспективи гри величезні, а із використанням ООП удосконалення програми гри можна провести без особливих труднощів.
2006. – 916 с.
ОПИС ПРОГРАМНОГО КОДУ
Файл SHAFT.H
typedef struct
{
int score;
char name[10];
}HighScoreList;
//----------------------------
class THighScore
{
private:
HighScoreList list[10];
public:
THighScore();
void Load();
void Save();
void Print();
void Add(char *name, int score);
};
//----------------------------
class TBar
{
protected:
int x;
int y;
private:
void Write(int k);
public:
TBar();
void Up();
void Down();
void Left();
void Right();
int GetY();
int Getpixel();
};
//----------------------------
class TIsland : public TBar
{
private:
void Write(int k);
public:
TIsland(int X);
void Up();
void Reset(int X);
};
//----------------------------
THighScore *highscore;
Файл SHAFT.CPP
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include "SHAFT.H"
//----------------------------
THighScore::THighScore()
{
for(int i=0; i<10; i++)
{
list[i].score=0;
strcpy(list[i].name, "");
}
}
//----------------------------
void THighScore::Print()
{
setcolor(YELLOW);
settextstyle(0,0,2);
outtextxy(100, 170,"HIGH SCORE");
settextstyle(0,0,1);
int y=200;
char buffer[10];
for(int i=0;i<10;i++)
{
y+=20;
sprintf(buffer,"%d.",i+1);
outtextxy(110,y,buffer);
outtextxy(135,y,list[i].name);
sprintf(buffer,"%d",list[i].
outtextxy(230,y,buffer);
}
}
//----------------------------
void THighScore::Add(char *name, int score)
{
for(int i=0;i<10;i++)
{
if(score>=list[i].score)
{
for(int k=8;k>=i;k--)
{
list[k+1].score=list[k].score;
strncpy(list[k+1].name,list[k]
}
list[i].score=score;
strncpy(list[i].name,name,10);
break;
}
}
}
//----------------------------
void THighScore::Load()
{
int r;
FILE *f;
if((f=fopen("Score.dat","r"))!
{
for(int i=0;i<10;i++)
{
fscanf(f,"%s", list[i].name);
fscanf(f,"%d", &r); list[i].score=r;
}
fclose(f);
}
}
//----------------------------
void THighScore::Save()
{
FILE *f;
char buffer[10];
if((f=fopen("Score.dat","w"))!
{
for(int i=0;i<10;i++)
{
fprintf(f,"%s ",list[i].name);
sprintf(buffer,"%d",list[i].
fprintf(f,"%s ",buffer);
}
fclose(f);
}
}
//----------------------------
TIsland::TIsland(int X) : TBar()
{
x=10+X*80;
y=390;
}
//----------------------------
void TIsland::Write(int k)
{
setfillstyle(1,k);
bar(x,y,x+79,y+19);
}
//----------------------------
void TIsland::Up()
{
if(y>10)
{
Write(0);
y-=1;
Write(12);
}
}
//----------------------------
void TIsland::Reset(int X)
{
Write(0);
x=10+X*80; y=390;
}
//----------------------------
void TBar::Write(int k)
{
setfillstyle(1,k);
bar(x,y,x+19,y+19);
}
//----------------------------
TBar::TBar()
{
x=150; y=20;
Write(4);
}
//----------------------------
void TBar::Up()
{
Write(0);
y-=1;
Write(4);
}
//----------------------------
void TBar::Down()
{
if(y<389)
{
Write(0);
y+=1;
Write(4);
}
}
//----------------------------
void TBar::Left()
{
if(x>10 && (getpixel(x-1,y)+getpixel(x-1,
{
Write(0);
x-=5;
Write(4);
}
}
//----------------------------
void TBar::Right()
{
if(x<310 && (getpixel(x+20,y)+getpixel(x+
{
Write(0);
x+=5;
Write(4);
}
}
//----------------------------
int TBar::Getpixel()
{
return(getpixel(x,y+20)+
}
//----------------------------
int TBar::GetY()
{
return(y);
}
//----------------------------
void Introduction()
{
int i=0,x=0,y=0,x0=0,y0=20,k=4,r=
randomize();
setfillstyle(1,7);
bar(x,y,x+19,y+19);
while(i==0)
{
while(r==R)
R=1+random(15);
r=R;
if(maxY<y0)
break;
delay(4);
switch(k)
{
case 1:// UP
if(y>y0+19)
{
y=y-20;
setfillstyle(1,r);
bar(x,y,x+19,y+19);
}
else
{
k=4;
y0=y0+20;
}
break;
case 2://DOWN
if(y<maxy-19)
{
y=y+20;
setfillstyle(1,r);
bar(x,y,x+19,y+19);
}
else
{
k=3;
maxy=maxy-20;
}
break;
case 3://LEFT
if(x>x0+19)
{
x=x-20;
setfillstyle(1,r);
bar(x,y,x+19,y+19);
}
else
{
k=1;
x0=x0+20;
}
break;
case 4://RiGHT
if(x<maxx-19)
{
x=x+20;
setfillstyle(1,r);
bar(x,y,x+19,y+19);
}
else
{
k=2;
maxx=maxx-20;
}
break;
}
}
}
//----------------------------
void Play()
{
cleardevice();
setbkcolor(0);
setcolor(WHITE);
setlinestyle(0,0,0);
line(9,9,330,9);
line(9,9,9,410);
line(9,410,330,410);
line(330,9,330,410);
setcolor(YELLOW);
settextstyle(0,0,3);
outtextxy(435, 100,"SCORE");
setcolor(WHITE);
settextstyle(0,0,2);
outtextxy(35, 435,"Press ESC to stop");
int game=0,
key,
k=0,
i=0,
score=0;
char buffer[10],name[10],*p;
TBar *Bar=new TBar;
randomize();
TIsland island[5]={TIsland(random(4)),
TIsland(random(4)),TIsland(
TIsland(random(4)),};
while(game==0)
{
delay(1);
if(kbhit()!=0)
{
key=getch();
switch(key)
{
case 75://Vlevo
Bar->Left();
break;
case 77://Vpravo
Bar->Right();
break;
case 27://Esc
game=-1;
break;
}
}
if(Bar->Getpixel()==0)
Bar->Down();
if(Bar->Getpixel()==0)
Bar->Down();
if(Bar->Getpixel()==0)
Bar->Down();
else
{
Bar->Up();
Bar->Up();
}
if(k==0)
{
if(i<5)
i++;
k=75;
score++;
setfillstyle(1,0);
bar(350,180,640,300);
setcolor(YELLOW);
settextstyle(0,0,10);
sprintf(buffer,"%d",score);
if(score<10)
outtextxy(455,200,buffer);
else
if(score<100)
outtextxy(410,200,buffer);
else
outtextxy(370,200,buffer);
}
k--;
for(int j=0;j<i;j++)
island[j].Up();
for(j=0;j<5;j++)
{
if(island[j].GetY()==10)
island[j].Reset(random(4));
}
if(Bar->GetY()==10||Bar->GetY(
break;
}
restorecrtmode();
textmode(C4350);
clrscr();
gotoxy(27,25);
cprintf("Enter your name: ");
p=cgets(name);
highscore->Add(p,score);
setgraphmode(getgraphmode());
}
//----------------------------
void Logo()
{
cleardevice();
setbkcolor(RED);
setcolor(GREEN);
settextstyle(0,0,15);
outtextxy(35, 20,"SHAFT");
setcolor(LIGHTGRAY);
setlinestyle(0,0,3);
line(0,137,640,137);
line(0,140,640,140);
setcolor(LIGHTBLUE);
settextstyle(0,0,3);
outtextxy(420, 200,"ENTER");
outtextxy(380, 230,"to start");
outtextxy(440, 320,"ESC");
outtextxy(390, 350,"to quit");
setcolor(WHITE);
settextstyle(0,0,0);
outtextxy(350, 445,"WWW: http://vkontakte.ru/id10238537
outtextxy(350, 460,"E-mail: eugenegrig@gmail.com");
highscore->Print();
}
//----------------------------
void graph()
{
int gdriver=VGA,gmode=VGAHI,
initgraph(&gdriver,&gmode,"");
errorcode=graphresult();
if(errorcode!=grOk)
{
printf("Oshibka grafiki:: %s\n", grapherrormsg(errorcode));
printf("Nagmite lubuy klavishy dly vihoda.");
getch();
exit(1);
}
}
//----------------------------
void main(void)
{
int game=0,key;
graph();
highscore=new THighScore;
Introduction();
highscore->Load();
while(game==0)
{
Logo();
do
key=getch();
while(key!=13 && key!=27);
switch(key)
{
case 13://Enter
Play();
break;
case 27://Esc
game=-1;
break;
}
}
highscore->Save();
closegraph();
}