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


 

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

17465. Экспертные системы. Подсистемы ЭКС 66 KB
  Лекция №10 Экспертные системы Идея подобных систем способных сделать знания специалистов экспертов достоянием пользователей зародилась в 50 60е гг. XX в. По мнению многих исследователей экспертные системы ЭС являются наиболее перспективным и быстроразвивающимся н...
17466. Обеспечивающие компоненты (подсистемы) АИС 114.5 KB
  Лекция №3 Обеспечивающие компоненты подсистемы АИС Важным аспектом рассмотрения АИС является описание структуры обеспечивающих подсистем табл. 1.10 соответствующая вышеупомянутым компонентам техническим программным информационным средствам интегрированным ...
17467. Программное обеспечение (ПО, software) АИС 74.5 KB
  Лекция №4 Программное обеспечение Программное обеспечение ПО software является следующей компонентой обеспечения АИС и разделяется на три группы [6 29 30]: операционные системы operating system ОС; системы программирования application development system software development system СП; ...
17468. Состав и структура информационного обеспечения АИС 68 KB
  Состав и структура информационного обеспечения АИС Информационное обеспечение АИС включает в себя две компоненты: /. Лингвистическое обеспечение ЛО к которому относятся: форматная база типы форматы структуры информации данных записей документов; лексиче
17469. Структуры баз данных 129.5 KB
  Лекция №6 Структуры баз данных Рассмотрим вкратце обобщенные логическую и физическую структуры БД. Логическая структура БД Логическая структура рис. 1.19 предполагает следующие уровни рассмотрения БД: база данных database включает одну или несколько подбаз
17470. БАЗОВЫЕ ТИПЫ ИС 95 KB
  Лекция № 7 БАЗОВЫЕ ТИПЫ ИС Рассмотренная ранее классификация АИС является чрезмерно детальной с точки зрения наиболее распространенных и перспективных типов к которым относятся табл. 2.1: фактографические; документальные; интеллектуальные экспертные; гиперт...
17471. Документальные системы АИС 189.5 KB
  Лекция Документальные системы Документальные системы предназначенные для обработки поиска представления полнотекстовых документов или справочнореферативной информации ведут свое происхождение от библиотечнореферативных служб или информационных центров вы...
17472. ТЕХНОЛОГИИ ПРОЕКТИРОВАНИЯ АИС 84.5 KB
  Тема ТЕХНОЛОГИИ ПРОЕКТИРОВАНИЯ АИС Современные информационные технологии предоставляют широкий набор способов реализации ИС выбор которых осуществляется на основе требований со стороны предполагаемых пользователей которые как правило изменяются в процессе раз...
17473. АВТОМАТИЗИРОВАННЫЕ ИС ПО ОБЛАСТЯМ ПРИМЕНЕНИЯ 51 KB
  Лекция АВТОМАТИЗИРОВАННЫЕ ИС ПО ОБЛАСТЯМ ПРИМЕНЕНИЯ Рассмотрим некоторые основные типы АИС ориентированные на различные области применения. Автоматизированные информационные системы по законодательству Законодательство Российской Федерации в настоящее ...