Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream> // ЗМЕЙКА САМОДЕЛЬНАЯ
- #include <windows.h>
- #include <stdio.h>
- #include <conio.h>
- #include <locale.h>
- 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment