По координатам

Программа с использованием текстового режима

Else

Реализация меню.

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

Простейшее меню можно реализовать следующим образом:

// ------------------------------------------------------

// Простейшее меню - Easy Menu

// ------------------------------------------------------

#include "mylib.cpp"

void function_1() { cout<<"Input"; }

void function_2() { cout<<"Work"; }

void function_3() { cout<<"Print"; }

int main()

{ while(1)

{

clrscr();

int pos;

cout<<" 1.Input data"<<endl;

cout<<" 2.Work data"<<endl;

cout<<" 3.Print data"<<endl;

cout<<" 4.Exit "<<endl;

cout<<" -->"; cin>>pos;

switch (pos)

{

case 1: function_1(); break;

case 2: function_2(); break;

case 3: function_3(); break;

case 4: return 0;

}

getch();

}

}

//------------------------------------------------------

Вначале выводится нумерованный список функций, затем вводится номер выбранной функции, которая исполняется. Процесс повторяется до ввода номера выхода.

Более сложная реализация меню показана ниже. В этом случае выбор позиции выполняется перемещением метки по меню, активизация происходит по нажатию клавиш Enter или пробела.

Метка по меню перемещается клавишами курсора вверх (Up) и вниз (Down).

Интересно, что эти клавиши при нажатии возвращают два кода, вначале 0, затем 80 (Up) или 72 (Down). Поэтому вначале анализируется, клавиша из какой группы нажата, алфавитной или управляющей.

// -----------------------------------------------------

// Простое меню. Управление клавишами курсора.

// ------------------------------------------------------

#include "mylib.cpp"

const ms=4; // {- количество позиций меню -}

char L[ms][32]= // {- наименования позиций ----}

{"1.Input data",

"2.Work data",

"3.Print data",

"4.Exit "};

void CF(int c,int f) { textcolor(c); textbackground(f);}

void OutMenu(int j) // { вывод МЕНЮ на экран ------}

{ int i; // { j-местоположение курсора -}

for(i=0;i<ms;i++)

{ if (i==j-1)CF(0,7);else CF(7,0);

gotoxy(6,i+2); cprintf("%s",L[i]);}

}

int main() // {--------- MAIN ------------}

{

clrscr();

int j=1; int ch; int b1=0; int J;

OutMenu(1);

while (!b1)

{gotoxy(1,1);

ch=getch();

if(ch==0)

{ ch=getch();

switch (ch)

{case 80: if(j<ms)j++;

else j=1;

OutMenu(j); break; //-Up--

case 72: if (j>1) j--;

else j=ms;

OutMenu(j); break; //-Down-

}

}

{ switch (ch)

{case 13: b1=1; break; // {---- Enter -----}

case 32: b1=1; break; // {---- Space -----}

}

}

}

switch (j)

{case 1: gotoxy(10,12); printf("Procedure - 1"); break;

case 2: gotoxy(20,14); printf("Procedure - 2"); break;

case 3: gotoxy(30,16); printf("Procedure - 3"); break;

case 4: gotoxy(40,18); printf("Procedure - 4"); break;

}

getch();

}

// -----------------------------------------------------

 

В качестве примера приводим небольшую программу анимации "Tank", в которой используется работа с цветом:

 

// ------------------------------------------------

// Animation of text. Танковая атака

// ------------------------------------------------

#include "mylib.cpp"

void Tank(int x, int y, int c) // Отрисовка танка

{ textcolor(c);

gotoxy(x,y); cprintf("%s","_(#)==");

gotoxy(x,y+1); cprintf("%s","<oooo>");

}

void BaBax(int x, int y, int c) // Отрисовка снаряда

{ gotoxy(x,y); textcolor(c); cprintf("%s","*");}

void Wzriv(int x, int y, int c) // Взрыв снаряда

{ textcolor(c);

gotoxy(x,y-1); cprintf("%s","\\|/");

gotoxy(x,y); cprintf("%s"," 0");

gotoxy(1,1); delay(300); textcolor(0);

gotoxy(x,y-1); cprintf("%s","\\|/");

gotoxy(x,y); cprintf("%s"," 0");

}

//--------------------------------------------------

void main ()

{ int i,j; int CTank=2; int Tropa=10;

clrscr();

for (i=2;i<74;i++) // Основной цикл движения танка

if (i%20==0) // Через 20 шагов остановка и

выстрел!

{

Tank(i,Tropa,CTank);

gotoxy(1,1);

for (j=i+7;j<74;j++) // Цикл движения снаряда

{ BaBax(j,Tropa,12);

gotoxy(1,1); delay(50);

BaBax(j,Tropa,0);

}

Wzriv(j+2,Tropa,14); // Взрыв снаряда

Tank(i,Tropa,0);

}