49886

Игра Кубики-перевертыши

Курсовая

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

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

Русский

2014-01-16

132.5 KB

1 чел.

Содержание:

1.Цель курсовой работы (Формулировка задачи) …………………………………3

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

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

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

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

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

 3.4.Реализация классов и объектов……………………………………………………………6

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

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

6.Приложение 1

    1)Диаграмма классов на стадии анализа…………………………………………9

    2)Диаграмма классов на стадии проектирования………………………9

    3)Диаграмма управления для тестирования…………………………………10

    4)Диаграмма модулей учебного процесса ……………………………………10  

7.Приложение 2

    1)Текст программы……………………………………………………………………………………………11

    2)Программа – драйвер тестирования………………………………………………18

    3) Результаты тестирования……………………………………………………………………19  

Список использованной литературы…………………………………………………………………21

  1.  Цель курсовой работы.

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

 

2.Формулировка задачи

Игра Кубики-перевертыши“.

Одинаковые кубики лежат в прямоугольной коробке. Каждый кубик окрашен в шесть цветов,по числу граней. Дно коробки разделено на квадраты. В каждом квадрате, кроме одного, лежит по кубику. За счет свободной ячейки кубики можно последовательно перекатывать из квадрата в квадрат. Вынимать и переворачивать кубики не разрешается. В исходном состоянии цветные грани кубиков располагаются одинаково. В головоломке требуется изменить цвет верхних граней кубиков на любой другой цвет, например, с белого на синий. При этом цвета боковых граней кубиков должны быть ориентированы одинаково. Пользователь должен иметь возможность указывать курсором перекатываемый кубик, возвращать ходы на любую глубину, восстанавливать начальное состояние игры. Возникновение целевой ситуации должно сопровождаться соответствующим сообщением.

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

2.1.Составление словаря системной области.

   

   2.1.1.Перечислим факты, которые характеризуют предметную область:

1.Одинаковые кубики лежат в прямоугольной коробке.

2.Каждый кубик окрашен в шесть цветов, по числу граней.

3.Дно коробки разделено на квадраты.

4.В каждом квадрате, кроме одного, лежит по кубику.

5.За счет свободной ячейки пользователь может перекатывать кубики из квадрата в квадрат.

6.В исходном состоянии цветные грани кубиков располагаются одинаково.

7.Вынимать и переворачивать кубики нельзя.

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

9.Возникновение целевой ситуации сопровождается соответствующим сообщением.

 

    2.1.2.  Перечислим все объекты (существительные) с указанием фактов, в которых они упоминаются.   

1.Коробка(1,3).

2.Кубик(1,2,4,5,6,7,8).

3.Квадрат(3,4,5,).

4.Грань(2,6,8).

5.Цвет(2,8).

6.Сообщение(9).

7.Курсор(8).

8.Дно коробки(3).

9.Начальное состояние(6,8).

   2.1.3. Разделим факты, относящиеся к каждому объекту, на три группы: “атрибуты”, ”поведение” и ”сообщения другим объектам”. В результате получим словарь системной области.

  •  Коробка(TBox)

 Атрибуты:

  •  Дно
  •  Квадраты
  •  Кубики (Cubics)

Действия:

Начать игру(Start)

Выполнить начальную расстановку(Initiate)

  •  Кубик(TCub)

Атрибуты:

  - Грани

  - Цвета граней куба

  •  Курсор(TCursor)

  Атрибуты:

  - Цвет курсора

  Действия:

   Рисование курсора.

    

  •  Сообщение(TMessage)

Атрибуты:

Цвет сообщения.

Звуковой сигнал.

  •  Игра (TGame)

Действия:

Выполнить моделирование.

Оределение действия

Реакция на действия.

Проверить на победу.

2.2. Техническое задание на проектирование

   2.2.1. Функции системы.

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

  •  Технические средства – ПЭВМ IBM PC;
  •  Операционная система – MS DOS;
  •  Процесс моделирования управляется одним оператором.

   2.2.3. Ограничения на процесс разработки.

  •  Срок выполнения проекта – 24 мая 1999 года.

   2.2.4. Диаграммы классов и объектов на стадии анализа приведены в    Приложении 1.

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

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

По отношению к программной системе должны возникать внешние события: звуковое сообщение и сигнал об окончании работы программной системы. Поэтому синтезируем класс «событие» (TEvent), в классе «Игра» (TGame) предусматриваем определение действия, реакцию на действие и проверку победы, в классе TMessage – звуковое сообщение.

Проектируемая система должна обеспечивать отображение моделируемых объектов в виде графических фигур на экране дисплея. Для этого предусмотрены классы прорисовки кубиков (TCub), коробки (TBox) и курсора (TCursor).  

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

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

Класс TCub. Этот класс предусматривает прорисовку кубиков и установку цвета граней. Поэтому у класса предусмотрены правила Show – прорисовка, InitSides – начальная установка цветов граней, Rotate – поворот кубиков, Hide – спрятать кубик  и SetPosition – установка позиции кубиков.

Класс TCursor. Класс отвечает за атрибуты курсора на экране, поэтому у него определены SetPosition – установка позиции курсора и Show – прорисовка.

Класс TBox. Этот класс отвечает за атрибуты коробки с кубиками. Этот класс отвечает за возврат хода MoveBack, удаление ходов DeleteMoves, начальную установку кубиков SetCubics, прорисовку коробки Show, выбор кубика Select_Cubic и проверку всех граней на заданный цвет CheckTopColor.

Класс TMessage. Содержит параметры звуковой мелодии Beep, Show – прорисовку и Hide – спрятать.

Класс TGame. В этом классе заданы условия, при которых присваивается победа, установки игры: определение действия – GetAction, реакция на действие – ActOnAction, проверка победы – CheckVictory, сама игра – PlayGame.

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

 

Класс TBox. В процессе моделирования всех отображаемых объектов  небходимо знать координаты кубиков для выполнения перемещения, возврата хода и перемещения курсора. Поэтому определяем операцию GetDistance получения расстояния от произвольной точки экрана до центра фигуры, SetPosition – установка позиции курсора и кубика.

 Класс TGame. Этот класс отвечает за игру, поэтому для него должны быть определены положение кубиков SetCubics, положение текста SetMessage и установки цвета GetCubicsTopColor. 

3.4. Реализация классов и объектов

Все разработанные классы и выявленные объекты должны быть включены в проект. Уточненные диаграммы классов и объектов показаны в Приложении 1. Для диаграммы объектов составлена диаграмма взаимодействия.

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

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

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

Тестирование программного модуля рассмотрим на примере метода MoveCursor(D_typ) класса Tсursor.

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

  •  Имя: MoveCursor;
  •  Назначение: переместить курсор;
  •  Квалификация: управление;
  •  Действия: если полученная координата по Y больше 1, то перемещать вверх, если полученная координата по X больше 1, то перемещать влево, если больше координаты коробки по X, то вниз, а если больше по Y – вправо.

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

N

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

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

1

X:5
Y:5
                             _Right

атрибут X:  Факт 6; ожидается 6
атрибут Y:  Факт 5; ожидается 5

2

X:5
Y:5
                              _Left.

атрибут X:  Факт 4; ожидается 4
атрибут Y:  Факт 5; ожидается 5

3

X:5
Y:5

                                
_Up.

атрибут X:  Факт 5; ожидается 5
атрибут Y:  Факт 4; ожидается 4

4

X:5
Y:5

                                
_Down.

атрибут X:  Факт 5; ожидается 5
атрибут Y:  Факт 6; ожидается 6

5

X:0
Y:0

                                    
_Left.

атрибут X:  Факт 0; ожидается 0
атрибут Y:  Факт 0; ожидается 0

6

X:8
Y:0

                               
_Right.

атрибут X:  Факт 8; ожидается 8
атрибут Y:  Факт 0; ожидается 0

7

X:5
Y:8

                               
_Down.

атрибут X:  Факт 5; ожидается 5
атрибут Y:  Факт 8; ожидается 8

8

X:5
Y:0

                                   
_Up.

атрибут X:  Факт 5; ожидается 5
атрибут Y:  Факт 0; ожидается 0

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

(A== D=Rigth)

(B== D=Left )

(C== D=Up  )

(D== D=Down )

(E== CX<BoxX )

(F== CX>1)

(J== CY<BoxY )

(G== CY>1 )

Условия

1

2

3

4

5

6

7

8

A

_Right

T

X

X

F

X

X

X

X

X

X

E: X:5
Y:5

T

X

F

X

X

X

X:8 Y:0

T

F

X

X

X

X

B

_Left.

T

X

X

F

X

X

X

X

X

X

F: X:5
Y:5

T

X

F

X

X

X

X:0 ;Y:0

T

F

X

X

X

X

C

_Up.

T

X

X

F

X

X

X

X

X

X

G:

X:5
Y:5

T

X

F

X

X

X

X:5;Y:0

T

F

X

X

X

X

D

Down.

T

X

X

F

X

X

X

X

X

X

J:

X:5

Y:5

T

X

F

X

X

X

X:5 Y:8

T

F

X

X

X

X

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

Построим диаграмму управления (Приложение1).

Приложение 1.

  1.  Диаграмма классов на стадии анализа

  1.  Диаграмма классов на стадии проектирования

  1.  Диаграмма управления для тестирования.

Приложение 2.

  1.  Текст программы

#ifndef _cubic
#define _cubic
#define CubSize 50
#define Backgrnd 0
#define BoxX 3  // максимум 8

#define BoxY 1  // максимум 7    дальше не влазит на экран

//************************************************************************

typedef enum D_typ{_Up,_Down,_Left,_Right};    //направления движения

typedef enum Action_typ{MUp,MDown,MLeft,MRight,MoveCub,Restart,Exit,MoveBack,Wait};

//************************************************************************

class TCub

 {

private:

int Top,Left,Right,

   Up,Down,Bottom;

int X,Y;

public:

TCub *Next;

void Rotate(D_typ Direction);

void SetPosition(int _x, int _y){X=_x;Y=_y;};

void GetPosition(int &_x, int &_y){_x=X;_y=Y;};

void InitSides();

int  GetTopColor(){return Top;};

void Show(int BaseX,int BaseY);

void Hide(int BaseX,int BaseY);

 };

//************************************************************************

class TCursor

{

private:

int X;

int Y;

public:

TCursor();

void GetPosition(int &_x, int &_y){_x=X;_y=Y;};

void SetPosition(int _x, int _y){X=_x;Y=_y;};

void Show(int BaseX,int BaseY);

void Hide(int BaseX,int BaseY);

};

//************************************************************************

class TBox

{

private:

TCursor Cursor;

TCub *Cubics,*Cub_ptr;

TCub *Moves;

int EmptyX,EmptyY;

public:

TBox();

void MoveCubic();

void MoveCursor(D_typ);

void MoveBack();

void DeleteMoves();

void SetCubics();

void Select_Cub(int x,int y);

int GetCubicTopColor(){return Cub_ptr->GetTopColor();};

int CheckTopColor(int Color);

void Show();

};

//************************************************************************

class TMessage

{

private:

char* Text;

public:

void SetText(char * T){Text=T;};

void Show();

void Hide();

void Beep();

};

//************************************************************************

class TGame

{

private:

TMessage Message;

int FirstColor;

int Victory;

TBox Box;

Action_typ GetAction();

void ActOnAction(Action_typ);

int CheckVictory();

public:

TGame();

void PlayGame();

void Show();

};

//************************************************************************

#endif

#include "D:\#Work\politech\boxes.h"
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#define BPX 200  //координаты верхнего

#define BPY 100  //левого угла коробки

//********** Поворот кубика ******************************************

void TCub::Rotate(D_typ D)

{

int Cl;

switch (D)

{

case _Up:Cl=Top;Top=Down;Down=Bottom;Bottom=Up;Up=Cl;break;//вверх

case _Down:Cl=Top;Top=Up;Up=Bottom;Bottom=Down;Down=Cl;break;//вниз

case _Left:Cl=Top;Top=Right;Right=Bottom;Bottom=Left;Left=Cl;break;//влево

case _Right:Cl=Top;Top=Left;Left=Bottom;Bottom=Right;Right=Cl;break;//вправо

};

};

//******Начальная установка цветов граней кубиков*********************

void TCub::InitSides()

{

Top=1;

Up=2;

Down=3;

Left=4;

Right=5;

Bottom=6;

};

//****************Прорисовка кубика***********************************

void TCub::Show(int BaseX, int BaseY)

{

setfillstyle(1,Top);

bar(BaseX+X*CubSize-1,BaseY+Y*CubSize-1,

   BaseX+(X-1)*CubSize+1,BaseY+(Y-1)*CubSize+1);

};

//********************************************************************

void TCub::Hide(int BaseX, int BaseY)

{

setfillstyle(1,Backgrnd);

bar(BaseX+X*CubSize-1,BaseY+Y*CubSize-1,

   BaseX+(X-1)*CubSize+1,BaseY+(Y-1)*CubSize+1);

};

//******************Прорисовка курсора********************************

void TCursor::Show(int BaseX, int BaseY)

{

setcolor(15);

rectangle(BaseX+(X-1)*CubSize,BaseY+(Y-1)*CubSize,

  BaseX+X*CubSize,BaseY+Y*CubSize);

};

//********************************************************************

void TCursor::Hide(int BaseX, int BaseY)

{

setcolor(Backgrnd);

rectangle(BaseX+(X-1)*CubSize,BaseY+(Y-1)*CubSize,

  BaseX+X*CubSize,BaseY+Y*CubSize);

};

//****************Конструктор курсора*********************************

TCursor::TCursor()

{

X=1;Y=1;

};

//*****Обработка действия Переместить Кубик***************************

void TBox::MoveCubic()

{

TCub*M;

int CurX,CurY,RX,RY;

Cursor.GetPosition(CurX,CurY);        //Определение координат курсора

Select_Cub(CurX,CurY);                //Выбор кубика под курсоров

Cub_ptr->Hide(BPX,BPY);               //спрятать кубик

RX=EmptyX-CurX;                       //Вычисление смещения кубика

RY=EmptyY-CurY;                       //относительно пустой клетки

if (RX==-1&&RY==0){                   //если кубик левее

    Cub_ptr->Rotate(_Right);       //повернуть вправо

    Cub_ptr->SetPosition(EmptyX,EmptyY); //поменять местами

    M=new(TCub);

    M->SetPosition(EmptyX,EmptyY);

    M->Next=Moves;

    Moves=M;

    EmptyX=CurX;EmptyY=CurY; //кубик и пустую клетку

   };

if (RX==1&&RY==0){ // если правее

    Cub_ptr->Rotate(_Left);

    Cub_ptr->SetPosition(EmptyX,EmptyY);

    M=new(TCub);

    M->SetPosition(EmptyX,EmptyY);

    M->Next=Moves;

    Moves=M;

    EmptyX=CurX;EmptyY=CurY;

   };

if (RX==0&&RY==1){ //если выше

    Cub_ptr->Rotate(_Down);

    Cub_ptr->SetPosition(EmptyX,EmptyY);

    M=new(TCub);

    M->SetPosition(EmptyX,EmptyY);

    M->Next=Moves;

    Moves=M;

    EmptyX=CurX;EmptyY=CurY;

   };

if (RX==0&&RY==-1){ //если ниже

    Cub_ptr->Rotate(_Up);

    Cub_ptr->SetPosition(EmptyX,EmptyY);

    M=new(TCub);

    M->SetPosition(EmptyX,EmptyY);

    M->Next=Moves;

    Moves=M;

    EmptyX=CurX;EmptyY=CurY;

   };

Cub_ptr->Show(BPX,BPY); //нарисовать кубик

};

//*****************Возврат хода***************************************

void TBox::MoveBack()

{

int x,y;

TCub * T;

if (Moves)

{

Moves->GetPosition(x,y);

Cursor.Hide(BPX,BPY);

Cursor.SetPosition(x,y);

Cursor.Show(BPX,BPY);

MoveCubic();

T=Moves;

Moves=Moves->Next;

       delete(T);

};

};

//*****************Удаление ходов*************************************

void TBox::DeleteMoves()

{

TCub*M;

while (Moves)

{

 M=Moves;

 Moves=Moves->Next;

 delete(M);

};

};

//*****************Перемещение курсора********************************

void TBox::MoveCursor(D_typ D)

{

int CX,CY;

Cursor.GetPosition(CX,CY); //получить координаты

Cursor.Hide(BPX,BPY);      //спратать

switch (D)

{

case _Up   : if (CY>1) CY--;break; //вверх

case _Down : if (CY<BoxY) CY++;break; //вниз

case _Left : if (CX>1) CX--;break;    //влево

case _Right: if (CX<BoxX) CX++;break; //вправо

};

Cursor.SetPosition(CX,CY); //установить

Cursor.Show(BPX,BPY);      //нарисовать

};

//***********Начальная установка кубиков******************************

void TBox::SetCubics()

{

DeleteMoves();           //Удалить ходы

int x=1,y=1;

TCub * Temp=Cubics;

while (Temp)

 {

 Temp->SetPosition(x,y);

 Temp->InitSides();

 Temp=Temp->Next;

 if (x==BoxX){x=1;y++;}else x++;

 };

EmptyX=BoxX;

EmptyY=BoxY;

};

//************Прорисовка коробки с кубиками***************************

void TBox::Show()

{

TCub * Temp=Cubics;

setcolor(4);

rectangle(BPX-1,BPY-1,BPX+BoxX*CubSize+1,BPY+BoxY*CubSize+1);

while(Temp)

{

Temp->Show(BPX,BPY);

Temp=Temp->Next;

}

Cursor.Show(BPX,BPY);

};

//***********Выбор кубика с координатами х и у ***********************

void TBox::Select_Cub(int x,int y)

{

int cx,cy;

TCub * Temp=Cubics;

Temp->GetPosition(cx,cy);

 while (Temp&&(x!=cx||y!=cy))

 {

 Temp=Temp->Next;

 if(Temp)Temp->GetPosition(cx,cy);

 };

if (Temp)Cub_ptr=Temp;

};

//*************Проверка всех верхних граней на заданный цвет *************

int TBox::CheckTopColor(int Color)

{

TCub * Temp=Cubics;

while (Temp)

{

if(Temp->GetTopColor()!=Color) return 0;

Temp=Temp->Next;

};

return 1;

};

//********************************************************************

TBox::TBox()

{

Moves=NULL;

Cubics=0;Cub_ptr=0;

TCub * Temp;

int x=1,y=1;

for(int t=1;t<BoxY*BoxX;t++)

 {

 Temp=new(TCub);             //Создание кубиков

 Temp->SetPosition(x,y);     //в коробке

 Temp->InitSides();

 Temp->Next=Cubics;

 Cubics=Temp;

 };

Cub_ptr=Cubics;

EmptyX=BoxX;

EmptyY=BoxY;

};

//*****************Звуковая мелодия***********************************

void TMessage::Beep()

{

sound(300);delay(600);nosound();

delay(50);

sound(370);delay(300);nosound();

sound(440);delay(300);nosound();

for (int i=1;i<=8;i++)

{sound(600);delay(75);nosound();};

for (i=1;i<=8;i++)

{sound(670);delay(75);nosound();};

sound(740);delay(600);nosound();

sound(670);delay(600);nosound();

sound(600);delay(300);nosound();

sound(440);delay(300);nosound();

sound(600);delay(300);nosound();

};

//********************************************************************

void TMessage::Show()

{

setfillstyle(1,7);

setcolor(8);

bar(200,10,400,60);

rectangle(202,12,398,59);

setcolor(4);

outtextxy(220,35,Text);

};

//********************************************************************

void TMessage::Hide()

{

setfillstyle(1,0);

bar(200,10,400,60);

};

//********************************************************************

TGame::TGame()

{

Victory=0;

Box.SetCubics();

Message.SetText("!!! Вы победили !!!");

Box.Show();

FirstColor=Box.GetCubicTopColor();

};

//**************Определение действия *********************************

Action_typ TGame::GetAction()

{

int k=getch();

if (k==0) k=getch();  //чтение дополнения

switch (k)

{

 case 77:return MRight;

 case 75:return MLeft;

 case 72:return MUp;

 case 80:return MDown;

 case 13:return MoveCub;

 case 32:return MoveCub;

 case 27:return Exit;

 case 8 :return MoveBack;

        case 19:return Restart;

 };

 return Wait;

};

//**************Реакция на действие***********************************

void TGame::ActOnAction(Action_typ A)

{

if (!Victory)   //Если ситуация не победная

switch(A)

{

case MUp:Box.MoveCursor(_Up);break;

case MDown:Box.MoveCursor(_Down);break;

case MLeft:Box.MoveCursor(_Left);break;

case MRight:Box.MoveCursor(_Right);break;

case MoveCub:Box.MoveCubic();break;

};

switch(A)

{

case MoveBack:Box.MoveBack();break;

case Exit:closegraph();exit(1);break;

case Restart:clearviewport();

      Box.SetCubics();

      Box.Show();break;

};

};

//***************Проверка победы**************************************

int TGame::CheckVictory()

{

int Color=Box.GetCubicTopColor();;

if (Color==FirstColor)return 0;else

return Box.CheckTopColor(Color);

};

//***************Игра*************************************************

void TGame::PlayGame()

{

Action_typ A;

do

{

A=GetAction();

ActOnAction(A);

Victory=CheckVictory();

if (Victory){

 Message.Show();

 Message.Beep();

    }

     else Message.Hide();

}

while(A!=Exit);

};

//********************************************************************

void main(void)

{

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "d:\\borlandc\\bgi");

errorcode = graphresult();

if (errorcode != grOk)  /* an error occurred */

{

  printf("Graphics error: %s\n", grapherrormsg(errorcode));

  printf("Press any key to halt:");

  getch();

  exit(1);             /* return with error code */

}

TGame Game;

Game.PlayGame();

closegraph();

};

  1.  Программа – драйвер тестирования

//Проект "Кубики перевертыши".Драйвер для тестирования подпрограммы
// void TBox::MoveCursor(D_typ D)
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include"boxes.h"

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

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

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

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

{int px,py;

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

 cout << "Cursor" << endl;

 cout << "атрибут X: ";

 Result.GetPosition(px,py);

 if (px!=tx) cout << "ОШИБКА!";

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

 cout << "атрибут Y: ";

 if (py!=ty) cout << "ОШИБКА!";

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

}

void Testing

(float NTest,float X,float Y,D_typ D,float TX,float TY)

{TBox Box;

cout <<"------- Тест № " << NTest << endl;

cout <<"Входные данные" << endl;

cout <<"Cursor" << endl;

cout <<"X:"<< X <<endl;

cout <<"Y:"<< Y <<endl;

if (D==_Left) cout <<"_Left." << endl;

if (D==_Right) cout <<"_Right." << endl;

if (D==_Up) cout <<"_Up." << endl;

if (D==_Down) cout <<"_Down." << endl;

Box.Cursor.SetPosition(X,Y);

Box.MoveCursor(D);

OutputResults(Box.Cursor,TX,TY);

getch();

}

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

int main()

{

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

cout <<

"void TBox::MoveCursor(D_typ D)"

<< endl << endl;

// установить графический режим для дисплея

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver,&gmode,"c:\\Langs\\bc\\bgi");

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

Testing(1,5,5,_Right,6,5);

Testing(2,5,5,_Left,4,5);

Testing(3,5,5,_Up,5,4);

Testing(4,5,5,_Down,5,6);

Testing(5,0,0,_Left,0,0);

Testing(6,BoxX,0,_Right,BoxX,0);

Testing(7,5,BoxY,_Down,5,BoxY);

Testing(8,5,0,_Up,5,0);

return 0;

;}

  1.  Результат тестирования

Тестирование подпрограммы
void TBox::MoveCursor(D_typ D)

------- Тест № 1
Входные данные
Cursor
X:5
Y:5
_Right.
Результаты теста.
Cursor
атрибут X:  Факт 6; ожидается 6
атрибут Y:  Факт 5; ожидается 5

------- Тест № 2

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

Cursor

X:5

Y:5

_Left.

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

Cursor

атрибут X:  Факт 4; ожидается 4

атрибут Y:  Факт 5; ожидается 5

------- Тест № 3

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

Cursor

X:5

Y:5

_Up.

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

Cursor

атрибут X:  Факт 5; ожидается 5

атрибут Y:  Факт 4; ожидается 4

------- Тест № 4

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

Cursor

X:5

Y:5

_Down.

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

Cursor

атрибут X:  Факт 5; ожидается 5

атрибут Y:  Факт 6; ожидается 6

------- Тест № 5

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

Cursor

X:0

Y:0

_Left.

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

Cursor

атрибут X:  Факт 0; ожидается 0

атрибут Y:  Факт 0; ожидается 0

------- Тест № 6

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

Cursor

X:8

Y:0

_Right.

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

Cursor

атрибут X:  Факт 8; ожидается 8

атрибут Y:  Факт 0; ожидается 0

------- Тест № 7

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

Cursor

X:5

Y:8

_Down.

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

Cursor

атрибут X:  Факт 5; ожидается 5

атрибут Y:  Факт 8; ожидается 8

------- Тест № 8

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

Cursor

X:5

Y:0

_Up.

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

Cursor

атрибут X:  Факт 5; ожидается 5

атрибут Y:  Факт 0; ожидается 0

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

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

     

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

   

  1.  «C++ for Dummis»


 

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

22110. J-K триггер (универсальный триггер) 24 KB
  Триггером JK типа называют автомат Мура с двумя устойчивыми состояниями и двумя входами J и K который при условии J K = 1 осуществляет инверсию предыдущего состояния т. при J K = 1 Qt1 = Qt а в остальных случаях функционируют в соответствии с таблицей истинности RS триггера при этом вход J эквивалентен входу S а вход K входу R. Этот триггер уже не имеет запрещенной комбинации входных сигналов и его таблица истинности т.
22111. Структурная схема конечного автомата 26.5 KB
  Комбинационная схема строится из логических элементов образующих функционально полную систему а память на элементарных автоматах обладающих полной системой переходов и выходов. Каждое состояние абстрактного автомата ai i=0n кодируется в структурных автоматах набором состояний элементов памяти Q2 R=1R. Здесь Q состояние автомата а ai = {0 1} Как и прежде Q Общее число необходимых элементов памяти можно определить из следующего неравенства 2R n 1.
22112. Табличный метод структурного синтеза конечных автоматов 75.5 KB
  На этапе структурного синтеза выбираем также способ кодирования состояний и выходных сигналов заданного автомата через состояния и выходные сигналы элементарных автоматов в результате чего составляют кодированные таблицы переходов и выходов. Функции возбуждения элементарных автоматов и функции выходов получаются на основе кодированной таблицы переходов и выходов. Рассмотрим примеры синтеза которые позволяют сформулировать общий алгоритм структурного синтеза конечных автоматов.
22113. Технические особенности конечных автоматов 36 KB
  Здесь u сигналы возбуждения триггера. На практике триггера часто выполняются в синхронном варианте синхронные триггера когда упомянутые элементы u включают в схему триггера. Например схему синхронного триггера RSтипа можно рассматривать как состоящую из асинхронного RSтриггера ко входам R и S которого подключены двухвходовые элементы И. Очевидно синхронные триггера будут сохранять свои состояния при С=0 а переходы в них возможны при С=1 то переходы в синхронном триггере будут осуществляться также как в асинхронном.
22114. Понятие устойчивости конечного автомата 48 KB
  Дело в том что триггера в схеме имеет различные времена задержек сигналов обратной связи которые поступают с выходов триггеров на их входы через комбинационную схему II. По этим причинам если при переходе автомата из состояния ai в as должны измениться состояния нескольких триггеров то между выходными сигналами этих триггеров начинаются гонки. изменит свое состояние раньше других триггеров может через цепь обратной связи изменить может изменить сигналы возбуждения на входах других триггеров до того момента как они изменят свои состояния....
22115. Синтез конечных автоматов 31.5 KB
  В ЦА выходные сигналы в данный момент времени зависят не только от значения входных сигналов в тот же момент времени но и от состояния схемы которое в свою очередь определяется значениями входных сигналов поступивших в предшествующие моменты времени. Понятие состояния введено в связи с тем что часто возникает необходимость в описании поведения систем выходные сигналы которых зависят не только от состояния входов в данный момент времени но и от некоторых предысторий т. Состояния как раз и соответствуют некоторой памяти о прошлом...
22116. Способы задания автомата 362 KB
  Существует несколько способов задания работы автомата но наиболее часто используются табличный и графический. Совмещенная таблица переходов и выходов автомата Мили: xj ai a0 an x1 a0x1 a0x1 anx1 anx1 xm a0xm a0xm anxm anxm Задание таблиц переходов и выходов полностью описывает работу конечного автомата поскольку задаются не только сами функции переходов и выходов но и также все три алфавита: входной выходной и алфавит состояний. Для задания автомата Мура требуется одна таблица поскольку в этом...
22117. Частичные автоматы 194 KB
  Оказывается что для любого автомата Мили существует эквивалентный ему автомат Мура и обратно для любого автомата Мура существует эквивалентный ему автомат Мили. Рассмотрим алгоритм перехода от произвольного конечного автомата Мили к эквивалентному ему автомату Мура. Требуется построить эквивалентный ему автомат Мура Sb = {Ab Xb Yb b b} у которого Xb = Xa Yb = Ya т. Для определения множества состояний Ab автомата Мура образуем всевозможные пары вида ai yg где yg выходной сигнал приписанный входящей в ai дуге.
22118. Абстрактный синтез конечных автоматов 25.5 KB
  Составить аналогичную таблицу описывающую работу конечного автомата не представляется возможным т. множество допустимых входных слов автомата вообще говоря бесконечно. Мы рассмотрим один из возможных способов формального задания автоматов а именно задание автомата на языке регулярных событий. Представление событий в автоматах.