49476

Моделирование тренажера для тенисистов

Курсовая

Информатика, кибернетика и программирование

Тренажер представляет собой комнату с тремя стенами ,у входа теннисист. Он может подавать мячи в произвольном направлении. Мячи отражаются от стен .Теннисист может отражать мячи двигаясь поперек входа. В процессе игры фиксируется число мячей ,поданных теннисистом и число пропущенных мячей.

Русский

2014-01-15

97.38 KB

3 чел.

     Министерство общего и профессионального образования Российской Федерации

владимирский государственный университет

кафедра ИВТ

КУРСОВАЯ РАБОТА 

по дисциплине

Технология программирования

                                                           Выполнил: студент гр. ИВТ - 297

                                                                              Калинкин М. Ю.

                                                          

                                                           Принял    : Дубов И. Р.

г. Владимир, 1999 г.

ЛИСТ ЗАДАНИЯ

Вариант 10. Игра "Тренажер теннисиста"

Тренажер представляет собой комнату с тремя стенами ,у входа теннисист. Он может подавать мячи в произвольном направлении. Мячи отражаются от стен .Теннисист может отражать мячи двигаясь поперек входа. В процессе игры фиксируется число мячей ,поданных  теннисистом и число пропущенных мячей.

               

     СОДЕРЖАНИЕ:

  1.  ОСНОВНАЯ ЧАСТЬ.  

I.1.     ВВЕДЕНИЕ    

I.2. СИСТЕМНЫЙ АНАЛИЗ  

II. ПРОЕКТИРОВАНИЕ.  

II.1.  ИДЕНТИФИКАЦИЯ КЛАССОВ И ОБЪЕКТОВ.

I.3.2. ИДЕНТИФИКАЦИЯ СОДЕРЖАНИЯ КЛАССОВ.

I.3.3. ИДЕНТИФИКАЦИЯ СВЯЗЕЙ МЕЖДУ КЛАССАМИ И ОБЪЕКТАМИ.

I.3.4 СПЕЦИФИКАЦИИ КЛАССОВ И ОБЪЕКТОВ   

I.4. ПРОГРАММИРОВАНИЕ.       

I.5. ТЕСТИРОВАНИЕ.         

ПРИЛОЖЕНИЕ 1          

РИС.1.  ДИАГРАММА КЛАССОВ НА СТАДИИ АНАЛИЗА .                             

РИС.2.  ДИАГРАММА ОБЪЕКТОВ НА СТАДИИ АНАЛИЗА .                           

РИС.3. ДИАГРАММА КЛАССОВ НА СТАДИИ  ПРОЕКТИРОВАНИЯ .

РИС.4. ДИАГРАММА ОБЪЕКТОВ НА СТАДИИ  ПРОЕКТИРОВАНИЯ .

РИС.5. ДИАГРАММА ВЗАИМОДЕЙСТВИЙ ОБЪЕКТОВ .                         

РИС.6. ДИАГРАММА МОДУЛЕЙ.

РИС.7.  ДИАГРАММА УПРАЛЕНИЯ ДЛЯ ТЕСТИРОВАНИЯ.                           

ПРИЛОЖЕНИЕ 2                                           

ТЕКСТ ПРОГРАММЫ ПРОЕКТА.                                             

ПРИЛОЖЕНИЕ 3.

ТЕКСТЫ ПРОГРАММЫ-ДРАЙВЕРА.

ПРИЛОЖЕНИЕ 4.

ЛИСТИНГ ТЕСТИРОВАНИЯ.              

I . ОСНОВНАЯ ЧАСТЬ .

I.1. Введение.

В результате выполнения работы были реализованы основные стадии разработки программного средства , имеющего признаки сложной системы :

  1.  системный анализ ;
  2.  проектирование ;
  3.  программирование ;
  4.  тестирование .

 

I.2. Системный анализ.

Определение границ системной области и составление словаря предметной области:

Выделяем абстракции из задачи:

комната с 3-мя стенами, теннисист , мяч , движение мяча ,подсчет мячей , движение теннисиста, вывод строки.

Анализ предметной области:

Выделяем классы объектов : “теннисист”(Board), “шар”(Ball) , “комната с 3-мя стенами”(Table),строка символов(String).

Выделим из словаря предметной области абстракции поведения :

   Движения курсора двигают теннисиста вдоль выхода, теннисист отбивает

мяч, мяч отражается от стен. Если теннисист пропускает мяч то выводится  сообщение .При нажатии на клавишу он запускает следующий мяч.

   Некоторые понятия из  словаря предметной области являются абстракциями сущности (атрибутами).

“Комната с 3-мя стенами”(Table)

  1.  Атрибуты :

Три стены

Тенисист

Мяч

  1.  Действия :

Начать игру

“Теннисист”(Board)

  1.  Действие :

Перемещение              (Move)

Рисование теннисиста (showhide)

Реакция на курсор        (newx)

“Мяч”(Ball)

  1.  Атрибуты :

             Радиус (Radius)

  1.  Направление движения шара (Direction)
  2.  Действие

   Движение мяча (Move)

Cообщение (MessagePutXY)

  1.  Действия :

Выводить соответствующее сообщение

Моделируемая действительность (GameOn)

  1.  Атрибуты :

Комната(Table)

  1.  Действия :

   Выполнить моделирование (Game)

 

Для решаемой задачи важным является отображение формы моделируемых объектов, при этом соотношение размеров следовало бы получить экспериментальным путем.

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

Результатом системного анализа является техническое задание на проектирование, составленное с использованием словаря предметной области и сопровождаемое диаграммой классов (рис.1), диаграммой объектов (рис. 2), обобщенными алгоритмами абстракций поведения. Техническое задание содержит следующие требования.

По анализу задания присутствие нескольких мячей на поле является одним из условий задания. Запуск нового мяча осуществляется с помощью нажатия клавиши. Также по нажатию клавиши будет осуществляться выход из программы.

Эксплуатационные требования:

- технические средства - ПЭВМ IBM PC 8088/8086;

- операционная система - MS-DOS;DRDOS;PTS-DOS. Дос-сессия windows95/98/NT , дос эмуляция  LiNUX

- управляется одним оператором (пользователем[USER]).

Функции системы :

- управление теннисистом осуществляется при помощи  клавиш <4> и <6>;

- для запуска нового мяча необходимо нажать клавишу <A>

- в игре возможно использование нескольких мячей одновременно.

- для выхода из игры необходимо нажать клавишу <Q> .

I.3. Проектирование.

  

I.3.1. Идентификация классов и объектов.

Строго говоря, классы и объекты, полученные на этапе системного анализа не являются классами и объектами программной системы. Здесь же требуется на их основе сконструировать соответствующие классы и объекты, которые составляют логическую модель именно программной системы. За некоторыми модельными классами и объектами оставим прежние названия, а некоторые уберем .

        Так например мы соединим два класса Комната(Table) и Моделируемая действительность (GameOn).

         Для обработки мячей введем класс список (List) который будет обрабатывать связный список мячей.

 

I.3.2. Идентификация содержания классов.

 На этом шаге последовательно рассмотрим все классы, полученные в процессе выполнения анализа и синтеза.

Класс Board имеет конструктор для инициализации доски , деструктор для деинициализации . А сам отвечает за  правила движения доски.

Класс Ball имеет конструктор для инициализации мяча , деструктор для его уничтожения  . А сам отвечает за  правила движения мяча, его  отражение от доски и от стен.

Класс List имеет конструктор для инициализации списка мячей , деструктор для его уничтожения . Класс представляет собой обработчик  связного списка из мячей , добавление ,уничтожение ,а также обработка и уничтожение мячей вылетевших за пределы поля.

Класс Table. Главной абстракцией поведения объекта класса Table  является операция выполнения моделирования Game. 

I.3.3. Идентификация связей между классами и объектами.

 Объект класса Table использует  объект класса Ball,а так же использует  объект класса Board ,обратного взаимодействия нет. Во взаимодействие класса Ball и класса Board нет необходимости. 

I.3.4 Спецификации классов и объектов

Спецификации классов:

  1.  имя: Table
  2.    назначение: реализует объект комната и моделирует   действительность .
  3.  видимость в категории: общедоступный
  4.  интерфейс: общедоступный
  5.  операции: Game,Init,DrawField,NewBall

  1.  имя: Board
  2.  назначение: реализует объект теннисист
  3.  видимость в категории: общедоступный
  4.  интерфейс общедоступный
  5.  операции: NewX,ShowHide,Move.

  1.  имя: Ball
  2.  назначение: реализует объект Мяч
  3.  видимость в категории: общедоступный
  4.  интерфейс общедоступный
  5.  операции: ShowHide , Move

  1.  имя: List
  2.  назначение: реализует обработку  связного списка  класса мяч(Ball)
  3.  видимость в категории: общедоступный
  4.  интерфейс общедоступный
  5.  операции: Add,Del,Draw

I.4. Программирование.

Программирование выполняется на языке С++, что определено общими требованиями к курсовой работе, но в реальном проекте выбор языка программирования должен быть обоснован. Основу для программирования составляют диаграммы и спецификации этапа проектирования. В данном примере подробнее останавливаться на данном этапе не будем, считая, что он не должен вызвать затруднений. Необходимые детали разъясняются комментариями в тексте программы.

I.5. Тестирование.

Тестирование программного модуля (подпрограммы) рассмотрим на примере  метода NewX класса Board . При восходящем тестировании сначала тестируются модули нижнего уровня. Модули последующих уровней тестируются в предположении, что используемые модули абсолютно надежны.

Спецификация тестируемого метода:

  1.  Имя: NewX
  2.  Hазначение: Реакция на нажатие клавиш управления
  3.  Квалификация: вспомогательная операция
  4.  Аргумент : ( char c ) -нажатая клавиша
  5.   Расширение: добавление;
  6.  Действия: возвращает -3 если C=”” , если  C=”6  то 3 , в противном случае возвращает 0

Тесты допустимых границ  сведем в таблицу.

N

Входные данные

Выходные данные

1

2

3

4

Введем обозначения для ветвлений:

A: (c = = “” );

B: (c = = “” );

Построим диаграмму управления (рис.7) и, руководствуясь ею составим матрицу учета ветвей.

Условия

A

(c = = “” );

T

X

F

X

X

X

B

(c = = “” );

T

X

F

X

X

X

Драйвер для выполнения тестов  и результаты тестирования приводятся в приложениях.

Приложение 1.Диаграммы к проекту "Тренажер теннисиста"

     ПРИЛОЖЕНИЕ 2. ТЕКСТ ПРОГРАММЫ ПРОЕКТА.

Ten.h

#include <conio.h>

#include<stdlib.h>

#include<dos.h>

#include<graphics.h>

#include<iostream.h>

//

//            КЛАСС  ДОСКА

//

class board

{ public:

 int x,dx;                          // Координата и смещение доски

board()                            // Конструктор доски

    {x=300;dx=0;}

// ПРАВИЛА  ДОСКИ

 int newx(char c)                  // Реакция на нажатие клавиш

    { if(c=='4')return -5; else

if(c=='6')return 5; else return 0;

}

 void showhide(int color)           // Рисует линию нужного цвета

   { setcolor(color);

line(x-40,400,x+40,400);

}

 void move()                        // Передвинуть доску

{ showhide(0);                       // спрятать доску

if((x+dx>620)||(x+dx<20)) dx=-dx;  // новое смещение доски

     x+=dx;

showhide(15);                      // показать доску

   }

~board()

{ setcolor(0);

line(x-30,400,x+30,400);

}

};

//

//            КЛАСС    ШАР

//

class ball

{ public:

 int x,y;                          // Координаты шара

int dx,dy;                        // Смещение шара

 ball *link;

 short int overboard;              // "шар находится над доской"

short int ballout;                // "шар вне поля"

ball(int a,int b, int c, int d)   // Конструктор шара

   { x=a;y=b;dx=c;dy=d;link=0;};

// ПРАВИЛА ШАРА

 void showhide(int color)          // Рисует окружность нужного цвета

   { setcolor(color);

circle(x,y,3);

}

 void move(int a)                 // Передвинуть шар

   { showhide(0);

if((x+dx>620)||(x+dx<20)) dx=-dx;

if(y+dy<20) dy=-dy;

if((y+dy>400)&&(overboard))

{ dy=-dy;

if(a<0)dx-=1;

if(a>0)dx+=1;

}

while(dx==0) dx=random(3)-1;

x+=dx;

y+=dy;

if((y+dy>410)&&(!overboard))ballout=1;

else ballout=0;

showhide(15);

}

~ball()

{ setcolor(0);

circle(x,y,3);

}

};

class list

{ public:

ball *head;

list (ball *a)

{ head=new ball(-1,-1,0,0);

head->link=a;

}

void add(ball *newelem)

{ newelem->link=head->link;

head->link=newelem;

}

void del(ball *elem)

{ elem->link=elem->link->link;

delete(elem->link->link);

}

void draw(int a,int b)

{ ball *ptr=head->link;

while(ptr!=0)

{ if((ptr->x<b+40)&&(ptr->x>b-40))ptr->overboard=1;

else ptr->overboard=0;

ptr->move(a);

ptr=ptr->link;

}  }

int del()

{ ball *ptr=head;

ball *ptr1;

int numout=0;

while(ptr->link!=0)

if(ptr->link->ballout==1)

{ ptr1=ptr->link;

ptr->link=ptr->link->link;

delete ptr1;

numout+=1;

}

else ptr=ptr->link;

return numout; }

~list()

{delete head;}

};

//

//            КЛАСС  СТОЛ

//

class table

{ public:

board *theboard;

ball *theball[1000];

list *thelist;

int balls;

int time;

void init()

{ theball[0]=new ball(300,300,0,-5);

theboard=new board();

thelist= new list(theball[0]);

}

void drawfield()

{ setcolor(3);                              //

   rectangle(10,10,630,400);                 // рисуем

   setcolor(10);                             //

outtextxy(10,450,"balls in:        out:");//

   setcolor(0);                              // поле

   line(10,400,630,400);                     //

}

void newball()

{

theball[balls]=new ball(theboard->x,400,0,-random(3)-2);

thelist->add(theball[balls]);

}

void game()

{ randomize();

drawfield();

int i,out=0;

char c,k,str[10];

balls=1;

init();

while(k!='q')

{ k=c='o';

while (!kbhit())

{

thelist->draw(theboard->dx,theboard->x);

theboard->move();

out+=thelist->del();

setcolor(12);

itoa(out,str,10);

outtextxy(200,450,str);

itoa(balls,str,10);

outtextxy(100,450,str);

delay(time);

setcolor(0);

itoa(out,str,10);

outtextxy(200,450,str);

itoa(balls,str,10);

outtextxy(100,450,str);

}

c=getch();

k=c;

theboard->dx=theboard->newx(c);

if(c=='a')

{ newball();

balls+=1;

}

}

}

};

Main.CPP

#include "ten.h"

//

//   ГОЛОВНАЯ  ПРОГРАММА

//

main()

{

randomize();

  table *t=new table;                         // инициализация всего

  cout<<"TIME ?  (0 .. 20)"<<endl;

cin>>t->time;

  int gdriver = DETECT, gmode, errorcode;     //  инициализация

initgraph(&gdriver, &gmode, "C:\\BC\\BGI"); //  графики

t->game();                                  // запуск

  closegraph();

return(0);

}

Приложение 3. Тексты программы-драйвера.

#include "ten.h"

#include <iostream.h>

void OutputNumberTest(int Number)

{

cout<<"  Тест #" <<Number << endl;

}

//Подпрограмма сравнения результатов

//с ожидаемыми значениями

void OutputResults(

int Result,  //результат выполнения процедуры

int True)   //ожидаемый результат

{cout <<"Результаты теста:"<<endl;

if (Result!=True) cout << "ОШИБКА !";

cout <<" Факт " << Result << "; ожидается " << True << endl;

 cout <<"{/\/\\/\/\/\/\/\/\/\/\/\/\/\/\/}" << endl;

}

//Головная программа драйвера

void main()

{

//Заголовок

cout << "Тестирование подпрограммы " << endl;

cout << "void newx(char c) "<<endl<<endl;

board *theboard;

//Реализация тестов:

//Тест 1

OutputNumberTest(1);

OutputResults(theboard->newx('4'),-3);

getch();

//Тест 2

OutputNumberTest(2);

OutputResults(theboard->newx('9'),0);

getch();

//Тест 3

OutputNumberTest(3);

OutputResults(theboard->newx('6'),3);

getch();

//Тест 4

OutputNumberTest(4);

OutputResults(theboard->newx('P'),0);

getch();

}

Приложение 4. Листинг тестирования.

Тестирование подпрограммы    

void newx(char c)  //Реакция на нажатие клавиш  

      

 Тест #1      

Результаты теста:     

Факт -3; ожидается -3     

{///////////////////}     

 Тест #2      

Результаты теста:     

Факт 0; ожидается 0     

{///////////////////}     

 Тест #3      

Результаты теста:     

Факт 3; ожидается 3    

{///////////////////}     

 Тест #4      

Результаты теста:     

Факт 0; ожидается 0     

{///////////////////}                                   

 

Список используемой литературы

1.Методические указания к курсовой работе .      Дубов,Барков,Долинин. Владимир 1999 48с. 

     

2.Курс лекций по дисциплине “Технологияпрограммирования”Дубов.

  1.  “C++ for Dummis”

19


 

А также другие работы, которые могут Вас заинтересовать

59155. Урок читання 56 KB
  На швидкість читання впливають багато факторів: рівень мовленнєвого розвитку кут зору читця вміння артикулювати постановка дихання характер тексту образ слова розвиток периферичного зору...
59157. Усі ми - діти своїх матерів 46.5 KB
  Стоїть на видноколі світла мати У неї вчись. Мати Що може бути на світі прекраснішим священним за це імя Учениця У нашім раї на землі Нічого кращого немає Ніж тая мати молодая З своїм дитяточком малим. Учень Чуєте Хто там З дороги Мати іде молода...
59158. Утворення Української козацької держави - Гетьманщини 40.5 KB
  В програмі висунутій гетьманом геніально систематизовані ідеї старої княжої Київської Русі з новою ідеєю козацької держави Запорізької Січі. 2ий учень дослідник: Найвищим органом влади Війська Запорізького вважали...
59159. Фізико-хімічна лабораторія 49.5 KB
  Серед форм навчання віддавати перевагу активним: семінарам дискусіям роботі у групах ігровій технології інтегрованим урокам. У разі відсутності відповіді учасників груп право відповіді надається іншим групам.
59160. Фрагменти уроків рідної мови за темою: Іменник 66.5 KB
  Мета: повторити узагальнити та поглибити знання учнів про іменник удосконалювати вміння розпізнавати іменник серед інших частин мови формувати вміння добирати аргументи на доведення своєї думки розвивати вміння аналізувати робити висновки повязувати навчальний матеріал з життєвим...
59161. Характеристика дійових осіб пєси Івана Карповича Карпенка - Карого Сто тисяч 31.5 KB
  Виставка книг драматурга підручник ілюстрації театрів. Робота в групах: кожна група представники з різних театрів: актори критики режисери постановники. У дітей відповідно цього бейджикі з назвами Театр імені Л.Українки Театр імені Т.
59162. Хвороби шкіри. Запобігання захворюванням шкіри дівчат і хлопців. Косметологічні проблеми підлітків 65.5 KB
  Мета: сформувати знання про ознаки хвороб шкіри косметичні проблеми підлітків формувати навички запобігання хворобам шкіри косметичним проблемам підлітків розвивати звички здорового способу життя виховувати охайність бережливе ставлення до свого життя...