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


 

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

83432. Як живуть птахи? 70.5 KB
  Мета: дати уявлення про довкілля птахів на прикладі ластівки і синички їх пристосованість до умов життя. Щоб гніздо було міцнішим ластівки додають до глини невеликі соломинки. Пташенята і дорослі ластівки голодують бо тоді комахи не літають. Ластівки знищують багато шкідливих комах.
83433. Дивовижний птах. Паперопластика 82 KB
  Форма: конкурс змагання на найкращій виріб Тип: урок творчості Обладнання: музика лісу зображення лебедя асоціативний куб послідовності роботи груп шаблони вироби лебедя. Германці вірили що сонце може перетворюватись в прекрасну Богиню білосніжного лебедя...
83434. А.С. Пушкин «Сказка о рыбаке и рыбке» 51 KB
  На какие две группы делятся все известные вам сказки Сказки бывают народные а бывают авторские. Чем авторская сказка отличается от народной Авторы народных сказок неизвестны сказки передаются из поколения в поколения с возможными изменениями.
83435. Система міжнародного права 33.8 KB
  Система міжнародного права - це обєктивно існуюча цілісність внутрішньо взаємозвязаних норм міжнародного права, що розподіляються по відносно відособленим комплексам, спрямованим на регулювання однорідних суспільних відносин. Вона включає галузі, інститути та норми.
83436. Співвідношення міжнародного публічного і міжнародного приватного права 36.01 KB
  Відбуваються постійні контакти між фізичними і юридичними особами різних держав відносини на рівні міжнародних неурядових організацій які регулюються нормами міжнародного приватного права. Норми міжнародного приватного права не повинні суперечити основним принципам міжнародного права. Крім того вони мають спільну мету забезпечення мирного співіснування та розвитку міжнародного співробітництва держав.
83437. Поняття та перелік джерел міжнародного права 37.16 KB
  У міжнародному праві відсутній єдиний нормотворчій орган а також відповідна система судових органів які б мали юрисдикцію тлумачення та визначення порядку застосування норм міжнародного права. Жодний з документів міжнародного права не містить вичерпного переліку його джерел. Загальновизнано що джерела сучасного міжнародного права названі у ст.
83438. Міжнародний звичай у системі джерел міжнародного права 37.26 KB
  Статут Міжнародного суду ООН визначає звичай як доказ загальної практики що визнана в якості правової норми. Доказами існування opinio juris є: конвенції що не набирали чинності; акти Міжнародного суду ООН; акти міжнародних органів та організацій; офіційні заяви щодо позицій держав законодавство та судова практика держав тощо. Для створення міжнародного звичаю потрібно стільки часу скільки вимагає ситуація.
83439. Міжнародний договір у системі джерел міжнародного права 31.03 KB
  міжнародний договір це міжнародна угодаукладена державами та іншими суб\'єктами міжнародного права в письмовій формі незалежно від того чи міститься така угода в одному двох або декількох пов\'язаних між собою документах а також незалежно від конкретного найменування. На відміну від звичаю міжнародний договір є більш сучасним та свідомим методом формулювання норм міжнародного права. Вплив договору на процес створення норм міжнародного права залежить від його природи.
83440. Загальні принципи права як джерело міжнародного права 32.76 KB
  У більшості випадків вони були сформульовані ще у римському праві і використовуються при застосуванні та тлумаченні норм міжнародного права. Не всі принципи права що властиві національним правовим системам можуть бути застосованими в міжнародному праві. Прикладом загальних принципів права що є застосовними в міжнародному праві можна вважати uditur et lter prs вислухаємо і іншу сторону res judict принцип остаточності рішень суду ut dedere ut punire видай або покарай lex specilis derogt legi generli спеціальний закон деталізує...