По координатам
Программа с использованием текстового режима
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);
}