Игра Хonix

Автор работы: Пользователь скрыл имя, 21 Января 2013 в 10:42, курсовая работа

Описание

В данном курсовом поекте разрабатывается игровая программа Xonix. В ходе разработки проанализирована литература в области компьютерных игр (как пользовательские обзоры, так и публикации разработчиков); проработаны источники по проектированию и программированию. Построены модели предметной области и программной системы, разработана архитектура программы и проведено кодирование на языке C++.

Содержание

ВВЕДЕНИЕ
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
2. КОНСТРУКТОРСКАЯ ЧАСТЬ
2.1 Листинг программы Xonix.cpp
2.2 Листинг класса VRAG_CLS
2.3 Листинг класса MOUS_CLS
2.4 Листинг класса MESS_CLS
2.5 Листинг класса LIST_CLS
2.6 Листинг класса GERO_CLS
2.7Листинг класса BUTT_CLS
3. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
ЗАКЛЮЧЕНИЕ

Работа состоит из  1 файл

курсовая.docx

— 1.03 Мб (Скачать документ)

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. АНАЛИТИЧЕСКАЯ ЧАСТЬ

2. КОНСТРУКТОРСКАЯ ЧАСТЬ

2.1 Листинг программы Xonix.cpp

2.2 Листинг класса VRAG_CLS

2.3 Листинг класса MOUS_CLS

2.4 Листинг класса MESS_CLS

2.5 Листинг класса LIST_CLS

2.6 Листинг класса GERO_CLS

2.7Листинг класса BUTT_CLS

3. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

ЗАКЛЮЧЕНИЕ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

В данном курсовом поекте разрабатывается игровая программа Xonix. В ходе разработки проанализирована литература в области компьютерных игр (как пользовательские обзоры, так и публикации разработчиков); проработаны источники по проектированию и программированию. Построены модели предметной области и программной системы, разработана архитектура программы и проведено кодирование на языке C++.

В результате разработки получено устойчиво фукционирующее приложение, соответствующее заданию.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. АНАЛИТИЧЕСКАЯ ЧАСТЬ

 

Программа-игра XONIX способствует развитию логического мышления и скорости реакции. В игре есть условия выигрыша и проигрыша, а также таблица рекордов, что вводит игрока в стремление победить и добиться определенного рекорда, чтобы быть рекордсменом.

Разработка  мини игр является трудоемким процессом, помогающим усовершенствовать навыки работы в разработке приложений. Для создания мини игры необходимо продумать всевозможные компоненты игры и ее логику, а именно процесс взаимодействия игры с пользователем, условия выигрыша, фиксации результатов и т.п.

Это обеспечивает актуальность тематики.

Целью данной курсовой работы является написание полнофункционального приложения-игры, эмулирующей процесс работы мини-игры XONIX.

Объектом данной курсовой работы является процесс игры XONIX.

Предметом является логическая игра XONIX

Для достижения поставленной цели были поставлены следующие задачи:

1. Изучить  предметную область игры;

2. Приобрести теоретические сведения и практические навыки по работе с языком программирования;

3. Разработать классы для проекта

4. Разработать удобный и понятный для пользователя интерфейс программы;

 

 

 

 

2.КОНСТРУКТОРСКАЯ ЧАСТЬ

Данный проект состоит непосредственно из файла проекта xonix.prj,

а также вспомогательных классов  и функций.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

Листинг программы

Xonix.cpp

 

#include <conio.h>

#include <stdio.h>

#include <bios.h>

#include <iostream.h>

#include <fstream.h>

#include <iomanip.h>

#include <dos.h>

#include <graphics.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

 

//КЛАССЫ//

#include <c:\borland\xonix\vrag_cls.cpp>  //класс врага

#include <c:\borland\xonix\gero_cls.cpp>  //класс глвного героя

#include <c:\borland\xonix\mous_cls.cpp>  //класс для работы с мышью

#include <c:\borland\xonix\butt_cls.cpp>  //класс кнопки

#include <c:\borland\xonix\mess_cls.cpp>  //класс сообщение

#include <c:\borland\xonix\list_cls.cpp>  //класс списка сохранений

//ФУНКЦИИ//

 

mouse *m;

#include <c:\borland\xonix\sort_fun.cpp>  //функции сортировки списка сохранений

#include <c:\borland\xonix\fun_fun.cpp>   //функции

#include <c:\borland\xonix\game_fun.cpp>  //функция игры

 

 

void main(void)

{

if(grOk!=opengraph()) return;

 

///////////////заставка/////////////////////

cleardevice();

setcolor(1);                               //рамка

setfillstyle(1,2); bar3d(0,0,639,479,0,0); //поле

 

setpalette(10,2);   //меняем 10  на 2

 

setcolor(15);settextstyle(4,0,9);

outtextxy(150,150,"XONIX");

 

vrag *v;v=NULL; v=add_vrag(v,100,109,1);

  add_vrag(v,50,309 ,2);

  add_vrag(v,70,309 ,3);

  add_vrag(v,40,249 ,4);

  add_vrag(v,210,349,1);

  add_vrag(v,410,470,2);

  add_vrag(v,400,109,3);

  add_vrag(v,440,50 ,4);

  add_vrag(v,354,350,1);

  add_vrag(v,444,349,2);

  add_vrag(v,333,470,3);

  add_vrag(v,567,109,4);

  add_vrag(v,561,50 ,1);

  add_vrag(v,254,399,2);

  add_vrag(v,344,349,3);

  add_vrag(v,193,470,4);

  add_vrag(v,197,90 ,1);

  add_vrag(v,191,59 ,3);

 

while(!bioskey(1)) //цикл движений объектов заставки

     {

     delay(1);

     v->pos();

     }

delete(v); cleardevice();

///////////////////////////////////////////////////////////

 

m=new mouse(); //объект для рабоы с мышью

 

button_1 *s,*e,*l,*h;

int i,k=0,key=0;

 

char name[15]; int level,life; long score,time; //исп для загрузки уровня

//аргументы//x,y,размер,цв.кнопки,цв.акт,кнопки,цв.текста,цв.акт.текста

s=new button_1 ("NEW GAME", 100,350,15,7,15,8,4); s->SHOV_PL();

l=new button_1 ("LOAD SAVE",250,350,15,7,15,8,4); l->SHOV_PL();

h=new button_1 ("info",     400,350,15,7,15,8,4); h->SHOV_PL();

e=new button_1 ("exit",     550,350,15,7,15,8,4); e->SHOV_PL();

 

while(bioskey(1)) getch(); //очистим буфер клавиатуры

setcolor(15);settextstyle(4,0,11);

outtextxy(100,120,"XONIX");

m->MOUSEshov();            //показать стрелку мыши

 

 

for(;k==0;) //цикл опроса кнопок

  {

  switch(s->BUT_STATUS(m)) //опрос кнопки "start"

{

case 0:break;

case 1:

case 7181: m->MOUSEhide();

       GAME_FUN("unknown",1,skill(),0,0); //(имя,уровень,жизнь,очки)

 

       setcolor(15);settextstyle(4,0,11);

       outtextxy(100,120,"XONIX");

       e->SHOV_PL(); //показать кнопки в обратном порядке

       h->SHOV_PL();

       l->SHOV_PL();

       s->SHOV_PL();

       m->MOUSEshov();

       break;

 

case 283: k=1;break;

 

default:m->MOUSEset(l->x,l->y);

break;

}

 

 

  switch(l->BUT_STATUS(m)) //опрос кнопки "load"

{

case 0:break;

case 1:

case 7181:m->MOUSEhide();

       cleardevice();

 

       if(1==open(name,&level,&life,&score,&time))

  GAME_FUN(name,level,life,score,time);

 

       setcolor(15);settextstyle(4,0,11);

       outtextxy(100,120,"XONIX");

 

       e->SHOV_PL();

       s->SHOV_PL();

       h->SHOV_PL();

       l->SHOV_PL();

       m->MOUSEshov();

       break;

 

case 283: k=1;break;

 

default:m->MOUSEset(h->x,h->y);

break;

}

 

  switch(h->BUT_STATUS(m)) //опрос кнопки "info"

{

case 0:break;

case 1:

case 7181: m->MOUSEhide();

   cleardevice();

   settextstyle(1,0,3);

   for(i=8;;)

   {

   setcolor(i);

   outtextxy(190,100,"КУРСОВОЙ ПРОЕКТ");

    delay(100);

   outtextxy(60,120,"по предмету Программирование на тему: игра XONIX");

    delay(100);

   outtextxy(30,140,"студента 1-го курса гр.3-11ИВТ2 БГТУ");

    delay(100);

   outtextxy(170,160,"специальности ИВТ");

    delay(100);

   outtextxy(100,180,"Арсюкова Василия Николаевича.");

    delay(100);

   outtextxy(80,400,"г.Брянск 2012. ");

    delay(100);

   if(i==15)break;

   if(i==7)i=15;

   if(i==8)i=7;

   }

   e->SHOV_PL();

   while(bioskey(1)) getch(); //очистим буфер клавиатуры

 

   m->MOUSEshov();

 

   for(i=0;i<1;)

   {

   switch(e->BUT_STATUS(m)) //опрос кнопки "exit"

{

 case  0: break;

 default: m->MOUSEhide();

  cleardevice();

  setcolor(15);settextstyle(4,0,11);

  outtextxy(100,120,"XONIX");

  s->SHOV_PL();

  l->SHOV_PL();

  h->SHOV_PL();

  e->SHOV_PL();

  m->MOUSEshov();

  i=1; //выход из цикла опроса "exit"

}

 

   if(bioskey(1))      //опрос клавиши

     {

     bioskey(0);

     m->MOUSEhide();

     cleardevice();

     setcolor(15);settextstyle(4,0,11);

     outtextxy(100,120,"XONIX");

     s->SHOV_PL();

     l->SHOV_PL();

     h->SHOV_PL();

     e->SHOV_PL();

     m->MOUSEshov();

     i=1;

     }

   }

   break;

 

case  283: k=1; break; //esc

default:m->MOUSEset(e->x,e->y);

break;

}

 

  switch(e->BUT_STATUS(m)) //опрос кнопки "exit"

{

case    0: break;

case    1:

case 7181:

case  283: k=1; break;

 

default: m->MOUSEset(s->x,s->y);

 break;

}

 

 

  if(bioskey(1))     //опрос клавиши esc

    {

    key=bioskey(0);

    switch(key)

  {

  case 283: k=1;break;

  default : m->MOUSEset(s->x,s->y);

  }

 

      }

  };//f конец цикла опроса кнопок

 

m->MOUSEhide();

cleardevice();

 

setcolor(1); settextstyle(1,0,3);

outtextxy(220,400,"г.Брянск 2012. БГТУ");

delay(2000);

closegraph();

delete(m);delete(s);delete(e);delete(l);delete(h);

return;

}

 

Листинг класса

VRAG_CLS

class vrag

   {

   void *temp,*img;    //указатель на память

   int color_s;

 

  public:

   int x,y,di;            //координаты

   vrag *next;         //указатель на следующий объект

 

   vrag(int a,int b,int c)         //конструктор

{

 x=a;

 y=b;

 di=c;                            //направление движения

 next=NULL;                       //на данный момент последний

 

 unsigned int size;               //содержит размер изображения

 size=imagesize(x-4,y-4,x+4,y+4); //размер

 

 color_s=getpixel(x,y);           //поставили на ? цвет

 

 if(color_s==1)                   //на синий

   {

   temp=malloc(size);             //выделить память под изоброжения

    img=malloc(size);

 

   getimage(x-4,y-4,x+4,y+4,temp);   //пишем почву в память

   setcolor(5);

   circle(x,y,4);

   setfillstyle(1,13); floodfill(x,y,5);

 

   getimage(x-4,y-4,x+4,y+4,img); //запомнить образ врага

   }

else                              //на не синий тоесть зелёный

   {

   temp=malloc(size);                //выделить память под изоброжения

    img=malloc(size);

 

   getimage(x-4,y-4,x+4,y+4,temp);   //пишем почву в память

 

   setcolor(10);

   bar3d(x-4,y-4,x+4,y+4,0,0);

   setcolor(15);

   circle(x,y,4);

   setcolor(7);

   circle(x,y,3);

   setfillstyle(1,14); floodfill(x,y,7);

 

   getimage(x-4,y-4,x+4,y+4,img);    //запоминаем образ врага

   }

}

 

  ~vrag(void)                      //деструктор

{

free(temp);

free(img );

if(next) delete(next);   //удаляет всех врагов

}

 

    int vrag::pos(void);           //измнть позицию объкта

   void vrag::VRAG_HIDE(void);     //стереть

   void vrag::VRAG_SHOV(void);     //покозать

   void vrag::VRAG_LYAP(int color);//закрасить

   };

 

void vrag::VRAG_HIDE(void)

     {

     putimage(x-4,y-4,temp,0); //рисуем почву по старым координатам

     };

 

 

void vrag::VRAG_SHOV(void)

     {

     getimage(x-4,y-4,x+4,y+4,temp);

     putimage(x-4,y-4,img,0);

     };

 

void vrag::VRAG_LYAP(int color)

     {

     if(color_s==2) //если создан на зелени то может закрашивать свою область

       {

       setfillstyle(1,color); floodfill(x,y,BLUE); //враг закрашивает под собой

       }

     if(next) next->VRAG_LYAP(color);

     }

 

 

int vrag::pos(void)           //измнть позицию объкта

     {

 

     VRAG_HIDE();

 

     switch(di)

       {

       case 1:if(getpixel(x,y+6)!=color_s)

   {

   if((getpixel(x,y+6)==0)||(getpixel(x,y+6)==3)) {VRAG_SHOV();return 1;}

   di=4;

   break;

   }

      if(getpixel(x-6,y)!=color_s)

 

   {

   if((getpixel(x-6,y)==0)||(getpixel(x-6,y)==3)) {VRAG_SHOV();return 1;}

   di=2;

   break;

   }

      if(getpixel(x-5,y+5)!=color_s)

 

   {

   if((getpixel(x-5,y+5)==0)||(getpixel(x-5,y+5)==3)) {VRAG_SHOV();return 1;}

   di=3;

   break;

   }

      x--;

      y++;

      break;

 

 

       case 2:if(getpixel(x,y+6)!=color_s)

   {

   if((getpixel(x,y+6)==0)||(getpixel(x,y+6)==3)) {VRAG_SHOV();return 1;}

   di=3;

   break;

   }

      if(getpixel(x+6,y)!=color_s)

 

  {

  if((getpixel(x+6,y)==0)||(getpixel(x+6,y)==3)) {VRAG_SHOV();return 1;}

  di=1;

  break;

  }

      if(getpixel(x+5,y+5)!=color_s)

 

  {

  if((getpixel(x+5,y+5)==0)||(getpixel(x+5,y+5)==3)) {VRAG_SHOV();return 1;}

  di=4;                                              break;

  }

      x++;

      y++;

      break;

   //

       case 3:if(getpixel(x,y-6)!=color_s)

 

   {

   if((getpixel(x,y-6)==0)||(getpixel(x,y-6)==3)) {VRAG_SHOV();return 1;}

   di=2;

   break;

   }

      if(getpixel(x+6,y)!=color_s)

 

   {

   if((getpixel(x+6,y)==0)||(getpixel(x+6,y)==3)) {VRAG_SHOV();return 1;}

   di=4;

   break;

   }

      if(getpixel(x+5,y-5)!=color_s)

 

   {

   if((getpixel(x+5,y-5)==0)||(getpixel(x+5,y-5)==3)) {VRAG_SHOV();return 1;}

   di=1;

   break;

   }

      x++;

      y--;

      break;

 

       case 4:if(getpixel(x-6,y)  !=color_s)

 

   {

   if((getpixel(x-6,y)==0)||(getpixel(x-6,y)==3)) {VRAG_SHOV();return 1;}

   di=3;

   break;

   }

      if(getpixel(x,y-6)  !=color_s)

 

   {

   if((getpixel(x,y-6)==0)||(getpixel(x,y-6)==3)) {VRAG_SHOV();return 1;}

   di=1;

   break;

   }

      if(getpixel(x-5,y-5)!=color_s)

 

   {

   if((getpixel(x-5,y-5)==0)||(getpixel(x-5,y-5)==3)) {VRAG_SHOV(); return 1;}

   di=2;

   break;

   }

      x--;

      y--;

      break;

       };

     if(next)

       {

       VRAG_SHOV();

       return next->pos();

       }

 

     VRAG_SHOV();

     return 0;  //шаг успешный

     }

 

Листинг класса

MOUS_CLS

 

class mouse

     {

 

     union REGS inregs, outregs;

 

 

   public:

     int x,y,buttons;

 

     mouse()

  {

  inregs.x.ax = 0x00; // подфункция 0 - инициализация

  int86(0x33, &inregs, &outregs);

  };  //0x33 номер прерывания мыши.

 

     void MOUSEshov()

   {

   inregs.x.ax = 0x01; // подфункция 1 - показать курсор

   int86(0x33, &inregs, &outregs);

   };

 

     void MOUSEhide()

   {

   inregs.x.ax = 0x02;   //УБРАТЬ КУРСОР;

   int86(0x33, &inregs, &outregs);

   }

 

     void MOUSEstatus()

     {

     inregs.x.ax = 0x03; // подфункция 3 - получить статус мыши

     int86(0x33, &inregs, &outregs);

   x=outregs.x.cx;  //извлечь информацию

   y=outregs.x.dx;

     buttons=outregs.x.bx;

     }

 

     void MOUSEset(int x,int y)

     {

     inregs.x.ax=0x04;

     inregs.x.cx=x;

     inregs.x.dx=y;

     int86(0x33,&inregs, &outregs);

     }

 

    };

Листинг класса

MESS_CLS

 

class message

    {

    int x,y,key;

    unsigned int size;

    void *image;

    button_1 *button;

    char text[20],text1[20];

   public:

 

    message(int a,int b,char *t,char *t1)

   {

   x=a;

   y=b;

   strcpy(text,t);

   strcpy(text1,t1);

   button=new button_1 ("",x,y+20,18,5,3,15,4);

   size=imagesize(x-91,y-61,x+91,y+61);   //размер

   image=malloc(size);

   }

    ~message()

   {

   delete(button);

   free(image);

   }

 

    int shov(void)

{

getimage(x-91,y-61,x+91,y+61,image);  //пишем изображения в память

 

setcolor(15); setfillstyle(1,0);

for(key=0;key<61;key++)

   {

   bar3d(x-90,y-key,x+90,y+key,0,0);

   delay(5);

   }

setcolor(7);

rectangle(x-91,y-61,x+91,y+61);

 

setcolor(15);

settextstyle(1,0,2); outtextxy(x-6*strlen(text)-4,y-6-38,text);

Информация о работе Игра Хonix