Написання гри на мові С++

Автор работы: Пользователь скрыл имя, 14 Ноября 2013 в 13:44, курсовая работа

Описание работы

В даній курсовій роботі розглядається програма, що оформлена в вигляді гри. Гра доволі проста в управлінні і має не дуже складний алгоритм.
Метою даної курсової роботи є ознайомлення з принципами об’єктно-орієнтовного програмування, набуття навичків їх практичного використання, побудова власних класів.

Файлы: 1 файл

Документация.doc

— 273.50 Кб (Скачать файл)

Рисунок 4.4 – Заставка

 

 

 

 

 

Рисунок 4.5 – Меню гри

Натискаємо “Enter”. На екрані з’являється квадратик, острівки та рахунок, так званий інтерфейс гри.

Рисунок 4.6 – Інтерфейс гри

 

 

 

4.6 Тестування програми

 

Протестуємо різні етапи  гри:

  1. Запустимо гру. На екрані має з’явитися заставка та меню гри.

Рисунок 4.7 – Заставка

Рисунок 4.8 – Меню гри

  1. Натискаємо “Enter”. На екрані з’являється квадратик, острівки та рахунок.

Рисунок 4.9 – Початок гри

  1. Перевіримо рух квадратика вбік. Натиснемо вправо, потім вліво.

Рисунок 4.10 – Рух квадратика вправо

Рисунок 4.11 – Рух квадратика вліво

  1. Коли квадратик впаде, на екрані з’являється запит імені для збереження результату.

Рисунок 4.12 – Запит імені

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВИСНОВОК

 

В даній курсовій роботі була розроблена програма у вигляді  гри, із використанням основних принципів  об’єктно-орієнтованого програмування, що дозволяє упевнитися у  перевазі над процедурно-орієнтованим програмуванням. Завдяки простоті коду програми гри, кожен може розібратися в усіх методах її складання.

Гра має великий потенціал  для розширення та вдосконалення. Наприклад, можна додати у меню можливість змінювати  швидкість руху у грі, що впливало б на складність гри, але й підвищувало  кількість очок. Також гарно було б, аби деякі з острівків були іншого кольору і на них не можна було б стрибати. Або щоб на деяких острівках з’являлися спеціальні бонуси. Перспективи гри величезні, а із використанням ООП удосконалення програми гри можна провести без особливих труднощів.

 

ПЕРЕЛІК ПОСИЛАНЬ

 

  1. http://uk.wikipedia.org/wiki/C%2B%2B – 16.09.11р.
  2. http://vkontakte.ru/club432 – 16.09.11р.
  3. Х. Дейтел Как программировать на C [Текст]: учеб. пособие / Х. Дейтел, П. Дейтел ;

 2006. – 916 с.

  1. Карпов Ю.Г. Теория и технология программирования. Основи построения трансяторов [Текст] / Карпов Ю.Г. - СПб.: БВХ-Петербургб 2005. – 272 с.
  2. Вильямс И.Д. С#: ускоринній курс для профессионалов. [Текст] / И.Д. Вильямс – 2010. – 592 с.
  3. Хоменко А. Работа с базами данных в С++ Builder. [Текст] : учеб. / А. Хоменко, С.Алаудов; СПБ.: БВХ-Петербург, 2006. – с.5-8,15-23;
  4. Глинський Я.М. C++ & Builder [Текст]: учебное пособие / Я.М.Глинский, В.Є.Анохін, В.А.Ряжський; 2006. – с. 30-35, 85-93;
  5. Лаптев В.В. С++ Объектно-ориентированное программрование. Задачи и упражения [Текст]: учебное пособие / В.В. Лаптев, А.В. Морозов, Бокова А.В. - СПБ.:Питер, 2007. – с.11-28;

 

 

додаток А

 

ОПИС ПРОГРАМНОГО КОДУ

 

Файл 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].score);

     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].name,10);

   }

        list[i].score=score;

        strncpy(list[i].name,name,10);

        break;

       }

    }

}

 

//-------------------------------------

 

void THighScore::Load()

{

int r;

FILE *f;

if((f=fopen("Score.dat","r"))!=NULL)

   {

    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"))!=NULL)

   {

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

       {

        fprintf(f,"%s ",list[i].name);

        sprintf(buffer,"%d",list[i].score);

        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,y+19))==0)

{

Write(0);

x-=5;

Write(4);

}

}

 

//-------------------------------------

 

void TBar::Right()

{

if(x<310 && (getpixel(x+20,y)+getpixel(x+20,y+19))==0)

{

Write(0);

x+=5;

Write(4);

   }

}

 

//-------------------------------------

 

int TBar::Getpixel()

{

return(getpixel(x,y+20)+getpixel(x+19,y+20));

}

 

//-------------------------------------

 

int TBar::GetY()

{

return(y);

}

 

//-------------------------------------

 

void Introduction()

{

int i=0,x=0,y=0,x0=0,y0=20,k=4,r=2,R=1,kl,maxx=getmaxx(),maxy=getmaxy(),maxY=maxy;

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(random(4)),TIsland(random(4)),

    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()==389)

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,errorcode;

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();

}

 


Информация о работе Написання гри на мові С++