49476

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

Курсовая

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

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

Русский

2014-01-15

97.38 KB

4 чел.

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

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

кафедра ИВТ

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

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

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

                                                           Выполнил: студент гр. ИВТ - 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


 

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

54026. Ліквідація Української козацької держави 52.5 KB
  Мета: ознайомити учнів з подіями що передували процесу ліквідації Української козацької держави; розвивати навички роботи з історичною картою; вміння визначати причиннонаслідкові звязки подій; Виховувати в учнів почуття патріотизму інтересу і поваги до історичного минулого своєї держави. Після цього уроку учні зможуть: розкривати зміст термінів Малоросія наказний гетьман кріпацтво; називати прізвища видатних осіб цього часу; показувати на карті підручника територію Гетьманщини Запорозької Січі; розповідати про...
54027. Цікава лінгвістика 31.5 KB
  Другорядні члени речення. Напишіть власний твір про однорідні члени речення уявивши велику світлу споруду в якій дружно живе сімя однорідних членів речення суворо дотримуючись законів співжиття як люди у суспільстві. Другорядні члени речення Плин життя завжди вимагає змін. Ой варто було б побачити що сталося із другорядними членами речення.
54028. Цікаві завдання з української мови для учнів шостого класу 401.5 KB
  Цікаві завдання що включені до розповіді про подорож у пошуках скарбів різноманітні ігрові ситуації допоможуть дітям легше засвоїти граматичні категорії що стосуються зазначених тем. Вступ Призначення цієї книги - сприяти засвоєнню тем Іменник та Прикметник зокрема завдання побудовано таким чином щоб сформувати уміння визначати граматичні категорії слів зазначених частин мови розвивати словниковий запас учня. Завдання побудовано в ігровій формі їх можна виконувати як поодинці так і удвох з товаришем тоді мандрівку сторінками...
54029. Урочиста лінійка присвячена врученню свідотства про базову середню освіту в 9 класі 53 KB
  Хай здійсняться всі ваші бажання Ми ласкаво запрошуєм вас Список учнів ведуча зачитує список виходять діти встають на райдугу СПИСОК УЧНІВ 9 КЛАСУ 1. Класний керівник 9 класу 2. Право підняти державний прапор України надається учням 9 класу та Звучить гімн України. Довгополому надається учням 9 класу та Ведуча.
54030. Розробка уроку з музичного мистецтва для 7 класу 183 KB
  Добрим будь щедрим будь І з мистецтвом в добрий путь Мотивація навчальної діяльності Учитель. Учитель звертає увагу на карту України на якій нотами позначені місця повязані з темою уроку Полтава Львів Запоріжжя Київ карта України. Учитель. Як ви вважаєте які риси характеру Наталки передає її пісня учні за допомогою вчителя дають характеристику образу Наталки одночасно заповнюючи першу графу таблиці Характеристика образу Наталки Полтавки Герой Характеристика образу Музична характеристика героя Наталка Полтавка Проста...
54031. Общая характеристика лишайников как симбиотических организмов. Значение лишайников в природе и в жизни человека 2.3 MB
  Тимирязев назвал лишайники растением-сфинксом И в конце урока у нас должен получиться опорный конспект который поможет вам лучше подготовить домашнее задание и усвоить материал. Объяснение домашнего задания прочитать 58 ответить на вопросы к 58 выучить понятия подготовиться к ТО составить кроссворды ребусы по теме Почему лишайники являются пионерами растительности Изучение нового материала 1. Прочитайте 58...
54033. Листок – бічний орган пагона 44 KB
  Освітня: Ознайомити з зовнішньою і внутрішньою будовою листка; різноманітністю листкової пластинки, а також розміщенням їх на стеблі; дати нові поняття щодо теми; особливу увагу звернути на функції листка.
54034. Интегрированная литература (русская и мировая) 9 класс 28 KB
  Слова Последняя в реке блестящая струя с потухшим небом угасает из стихотворения а Жуковского б Рылеева в Баратынского г Дельвига Баллады Лесной царь Перчатка перевел а Лермонтов б Карамзин в Жуковский г Давыдов По своей родовой принадлежности жанр роман в стихах а лирический б эпический в лироэпический г драматический Какие фрагменты романа Евгений Онегин не...