#include // ЗМЕЙКА САМОДЕЛЬНАЯ #include #include #include #include using namespace std; void ConsolePrint(int Y, int X, const char* str, int Colour); // void way(int c); // функция для определения нажатой клавиши int nX = 1; // запоминает позицию в строке для перемещения влево вправо int nY = 2; // переменная для движения вверх и вниз ////////////////////////////////////////////////// int main() // { setlocale(LC_ALL, "rus"); int nkey; // переменная для хранения нажатие клавиши в настоящий момент int noldkey = 0; // переменная для хранения предидущей нажатой кнопки while(true) // цикл для проверки нажатия клавиши { nkey =_getch(); // функция возвращающая номер нажатой клавиши if(nkey!= noldkey) //условие для проверки { //noldkey = nkey;// для хранения последней нажатой кнопки if(nkey == 224) // условие для отбрасывания числа 225 на клавишах стрелках { nkey =_getch(); //noldkey = nkey; way(nkey); } } if(nkey == 27) break; //если нажата клавиша esc(27) выходим из программы } cout<< "nkey = " << nkey << endl; ConsolePrint(3, nX++,"x", 7); // функция для цвета по координатам } /////////////////////////////////////////////////// //cout << "Нажата клавиша ВВЕРХ"<< endl; void way(int c) // { char sz[17]; switch(c) { case 72: ConsolePrint(1, 1,"Нажата клавиша ВВЕРХ ", 7); // функция для цвета по координатам if(nY<=1) { ConsolePrint(14, 35,"YOU LOSE", 14); break; } ConsolePrint(nY, nX,"x",0); nY--; ConsolePrint(nY, nX,"x",14); break; case 80: sprintf(sz,"Нажата клавиша ВНИЗ %d", nX); //cout << "Нажата клавиша ВНИЗ" << endl; //ConsolePrint(1, 1,"Нажата клавиша ВНИЗ ", 13); if(nY>=27) { ConsolePrint(14, 35,"YOU LOSE", 14); break; } ConsolePrint(1, 1,sz, 13); ConsolePrint(nY, nX,"x",0); nY++; ConsolePrint(nY, nX,"x",12); break; case 77: ConsolePrint(1, 1,"Нажата клавиша ВПРАВО", 11); //cout << "Нажата клавиша ВПРАВО" << endl; if(nX>=119) { ConsolePrint(14, 35,"YOU LOSE", 14); break; } ConsolePrint(nY, nX,"x",0); nX++; ConsolePrint(nY, nX,"x",13); // функция для цвета по координатам break; case 75: ConsolePrint(1, 1,"Нажата клавиша ВЛЕВО ", 6); //cout << "Нажата клавиша ВЛЕВО" << endl; ConsolePrint(nY, nX,"x",0); nX--; ConsolePrint(nY, nX,"x", 11); // функция для цвета по координатам break; default: cout<< "неизвестный код" << endl; } } /* какой цвет как обозначается: (HEX) 0 0 = черный 1 1 = синий 2 2 = зеленый 3 3 = голубой 4 4 = красный 5 5 = лиловый 6 6 = желтый 7 7 = белый 8 8 = серый 9 9 = светло-синий 10 a = светло-зеленый 11 b = светло-голубой 12 c = светло-красный 13 d = светло-лиловый 14 e = светло-желтый 15 f = ярко-белый */ ////////////////////////////////////////////////////////////////////////////////////////////////////////// LPCSTR Rus(LPCTSTR pszIn) { static char szBuffer[MAX_PATH]; CharToOemBuff(pszIn, szBuffer, MAX_PATH); return szBuffer; } // Y - это строка, X - это позиция в строке // ============================================ void ConsolePrint(int Y, int X, const char* str, int Colour) { DWORD result; COORD coord; HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout, Colour); coord.X = X; // Выбираем позицию coord.Y = Y; // Выбираем строку SetConsoleCursorPosition(hStdout, coord); WriteConsole(hStdout, Rus(str), strlen(str), &result, 0); }