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


 

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

82019. Строительство GPON (Гигабитной пассивной оптической сети) сети доступа в городе Тирасполь 1.27 MB
  Нисходящий поток (от центра к абонентам) и восходящий поток (от абонента в центр) передаются в одном волокне на разных длинах волн. Нисходящий поток – широковещательный, для защиты информации используется шифрование с открытым ключом.
82020. Деятельность интернет-подразделения в организации ООО “АСК-2” 221.77 KB
  Целью дипломной работы является создание и продвижение проекта, изучение специфики и особенности интернет-бизнеса, основные проблемы в данной сфере, разработка интернет-подразделения в компании и оценка экономической целесообразности проекта.
82021. Изображение социальной манипуляции в романе М. Е. Салтыкова-Щедрина «Господа Головлевы» 274.58 KB
  Целью нашей работы, прежде всего, является выявление социальных манипуляций среди персонажей романа «Господа Головлевы». На примере романа осуществляется попытка показать, как в литературном произведении осуществился процесс манипуляции, какими возможностями его изображения обладает художественный текст.
82022. ВИДЫ КОНТРОЛЯ И ДВИЖЕНИЯ ФИНАНСОВ 124.21 KB
  В данной дипломной работе представлено основные виды регламентирующих документов, федеральных законов и форм по управлению финансовом потоком во 2-м отряде федеральной противопожарной службы Министерства Российской Федерации по делам гражданской обороны, чрезвычайным ситуациям и ликвидации последствий стихийных бедствий.
82023. Проектирование базы данных. Защита информации 429.13 KB
  Концептуальное (инфологическое) проектирование — построение семантической модели предметной области, то есть информационной модели наиболее высокого уровня абстракции. Такая модель создаётся без ориентации на какую-либо конкретную СУБД и модель данных.
82024. Основы работы в программе Excel. Построение Диаграмм и графиков с помощью Excel 1.69 MB
  Существует специальная область информатики, изучающая методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов, – компьютерная графика. Она охватывает все виды и формы представления изображений, доступных для восприятия человеком либо на экране монитора...
82025. Роль фельдшера в организации специфической профилактики инфекционных заболеваний у детей 148 KB
  Иммунопрофилактика инфекционных болезней – это система мероприятий, осуществляемых в целях предупреждения, ограничения распространения и ликвидации инфекционных болезней путем проведения профилактических прививок согласно Национальному календарю профилактических прививок...
82026. БУХГАЛТЕРСКИЙ УЧЕТ И АНАЛИЗ ОСНОВНЫХ СРЕДСТВ ОРГАНИЗАЦИИ 531.24 KB
  Основные средства играют большую роль в воспроизводственном процессе труда, так как они образуют производственно-техническую базу и определяют производственную мощь предприятия, именно поэтому тема дипломной работы является актуальной на сегодняшний день.
82027. Взаимосвязь межличностных отношений и учебной мотивации детей младшего школьного возраста 496.5 KB
  Теоретические основы взаимосвязи межличностных отношений и мотивации учебной деятельности младших школьников. Мотивация учебной деятельности младших школьников. Влияние межличностных отношений на мотивацию учебной деятельности младших школьников.