Новичок
Профиль
Группа: Участник
Сообщений: 5
Регистрация: 9.12.2013
Репутация: нет Всего: нет
|
Написал игру змейка на с++, но мне нужно теперь как нибудь эту же игру сделать, но только с элементами объектно-ориентированного программирование. Прошу помочь мне в написании. Код | #include <iostream> //стандартная библиотека #include <time.h> //случайные числа #include <stdio.h> //для printf #include <windows.h> // для HANDLE, курсора, цвета #include <conio.h> //для kbhit #include <locale.h> using namespace std; HANDLE hConsole; //HANDLE hStdout, hStdin; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); void GotoXY(int X, int Y) { COORD coord = { X, Y }; SetConsoleCursorPosition(hStdOut, coord); } //Цвет enum ConsoleColor { Black = 0, //черный Blue = 1, //синий Green = 2, //зеленый Cyan = 3, //голубой Red = 4, //красный Magenta = 5, //пурпурный Brown = 6, //коричневый LightGray = 7, //светло-серый DarkGray = 8, //темно-серый LightBlue = 9, //светло-синий LightGreen = 10, //светло-зеленый LightCyan = 11, //светло-голубой LightRed = 12, //светло-красный LightMagenta = 13, //светло-пурпурный Yellow = 14, //желтый White = 15 //белый }; void SetColor(ConsoleColor text, ConsoleColor background) { SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text)); } class Zmeja // структура змейка { public:COORD *t; //точки public:int PCount; //количество яблок }; enum uprawlenie{LEFT,UP,RIGHT,DOWN}; //направление змейки class Game //даные-точности: змейки, яблок, передвижение по X и Y, задержка, направление { public:Zmeja gaduka; //змейка public:COORD jabloko; //яблоко public:int dx,dy; //передвижение public:int pause; //задержка public:int nap; //направление }; void PlusJabloko(Game &g) //Функция разброски яблок { int i,x,y; int n = g.gaduka.PCount; do { x = rand() % 56+3; // y = rand() % 19+3; //координаты яблока for(i = 0; i < n; i++) { if(x == g.gaduka.t[i].X && y == g.gaduka.t[i].Y) // проверка чтоб яблоко не бросить на змею break; } } while(i < n); g.jabloko.X = x; // g.jabloko.Y = y; //запоминаем позицию яблока SetConsoleCursorPosition(hConsole, g.jabloko); //переносим курсор в эту позицию SetConsoleTextAttribute(hConsole,0x0c); //цвет яблока printf("%c", 4); //рисуем яблоко каким хотим символом } void skorostGame(Game &g) // Функция старта змейки ее координат и скорости { system("cls"); g.gaduka.PCount = 3; //сколько точек в змейке g.gaduka.t = new COORD [3];//создали точки for(int i = 0; i < 3; i++) { g.gaduka.t[i].X = 20 + i; g.gaduka.t[i].Y = 20; } g.dx = 1; g.dy = 0; g.pause = 100;//скорость передвижение змеи PlusJabloko(g);//рисуем яблока } void Level() { GotoXY(10,10);cout <<"Будьте внимательны"<<endl; } void ZmejaStart() { GotoXY(10,15);cout <<"Соберите 30 яблок"<<endl; } void STENA_2() //Вся информация, отображаемая на стене { GotoXY(64,2);cout << "Данные:" << endl ; //Данные GotoXY(64,3);cout << "Яблок:0" << endl ; //Яблок GotoXY(64,4); cout << "Длина:3"<< endl; //Длина GotoXY(64,5); cout << "Скорость:0" << endl; //Скорость GotoXY(64,7); cout << "Управление:" << endl; //Управление GotoXY(64,8); cout << "Esc:выход" << endl; //Выход GotoXY(64,9); cout << "P:Пауза" << endl; //Пауза GotoXY(64,10); cout <<"S:Старт" << endl; //Старт GotoXY(64,11); cout <<"L:Уровень" << endl; //Уровень GotoXY(64,13);printf("%c",24);cout <<":Вверх"<<endl; //Вверх GotoXY(64,14);printf("%c",25);cout<<":Вниз"<<endl; //Вниз GotoXY(64,15);printf("%c",27);cout<<":Влево"<<endl; //Влево GotoXY(64,16);printf("%c",26);cout<<":Вправо"<<endl; //Вправо {SetColor(LightMagenta , Black); GotoXY(2,2); //Рисуем верхнюю горизонтальную линию-стенку int m = 0; for(m = 0; m < 60; m++) { printf("-"); } } { GotoXY(2,24); //Рисуем нижнюю горизонтальную линию-стенку int m = 0; for(m = 0; m < 60;m++) { printf("-"); } } { //Рисуем левую вертикальную линию-стенку GotoXY(2,3); cout << "|"<<endl; GotoXY(2,4); cout << "|"<<endl; GotoXY(2,5); cout << "|"<<endl; GotoXY(2,6); cout << "|"<<endl; GotoXY(2,7); cout << "|"<<endl; GotoXY(2,8); cout << "|"<<endl; GotoXY(2,9); cout << "|"<<endl; GotoXY(2,10); cout << "|"<<endl; GotoXY(2,11); cout << "|"<<endl; GotoXY(2,12); cout << "|"<<endl; GotoXY(2,13); cout << "|"<<endl; GotoXY(2,14); cout << "|"<<endl; GotoXY(2,15); cout << "|"<<endl; GotoXY(2,16); cout << "|"<<endl; GotoXY(2,17); cout << "|"<<endl; GotoXY(2,18); cout << "|"<<endl; GotoXY(2,19); cout << "|"<<endl; GotoXY(2,20); cout << "|"<<endl; GotoXY(2,21); cout << "|"<<endl; GotoXY(2,22); cout << "|"<<endl; GotoXY(2,23); cout << "|"<<endl; } { //Рисуем правую вертикальную линию-стенку GotoXY(61,3); cout << "|"<<endl; GotoXY(61,4); cout << "|"<<endl; GotoXY(61,5); cout << "|"<<endl; GotoXY(61,6); cout << "|"<<endl; GotoXY(61,7); cout << "|"<<endl; GotoXY(61,8); cout << "|"<<endl; GotoXY(61,9); cout << "|"<<endl; GotoXY(61,10); cout << "|"<<endl; GotoXY(61,11); cout << "|"<<endl; GotoXY(61,12); cout << "|"<<endl; GotoXY(61,13); cout << "|"<<endl; GotoXY(61,14); cout << "|"<<endl; GotoXY(61,15); cout << "|"<<endl; GotoXY(61,16); cout << "|"<<endl; GotoXY(61,17); cout << "|"<<endl; GotoXY(61,18); cout << "|"<<endl; GotoXY(61,19); cout << "|"<<endl; GotoXY(61,20); cout << "|"<<endl; GotoXY(61,21); cout << "|"<<endl; GotoXY(61,22); cout << "|"<<endl; GotoXY(61,23); cout << "|"<<endl; } } //Функция которая двигает и рисует enum {KONEC, STENA, PLUS, MOVE}; int Move(Game &g) { int & n = g.gaduka.PCount; COORD head = g.gaduka.t[n - 1]; //голова COORD tail = g.gaduka.t[0]; //хвост COORD next; next.X = head.X + g.dx; next.Y = head.Y + g.dy; //проверка следующей точки по направлению if(next.X < 3 || next.Y < 3 || next.X > 60 || next.Y > 23)//не уперлась ли в стену? return STENA; if(n > 4) { for(int i = 0; i < n; i++) if(next.X == g.gaduka.t[i].X && next.Y == g.gaduka.t[i].Y) //не наехали ли на себя? return KONEC; } if(next.X == g.jabloko.X && next.Y == g.jabloko.Y) { COORD*temp = new COORD[ ++n ]; //новый массив больший на 1 for(int i = 0; i < n; i++) temp[i] = g.gaduka.t[i]; //перекопируем temp[n - 1] = next; //добавляем одну delete [] g.gaduka.t; g.gaduka.t = temp; SetConsoleCursorPosition(hConsole,head); SetConsoleTextAttribute(hConsole, 0x0a); //закрашиваем яблоко которое съели printf("*"); SetConsoleCursorPosition(hConsole,next); SetConsoleTextAttribute(hConsole,0x0a); printf("%c",1); PlusJabloko(g); return PLUS; } for(int i = 0; i < n - 1; i++) g.gaduka.t[i] = g.gaduka.t[i + 1]; g.gaduka.t[n - 1] = next; SetConsoleCursorPosition(hConsole,tail);//закрашиваем хвостик printf(" "); SetConsoleCursorPosition(hConsole,head); SetConsoleTextAttribute(hConsole, 0x0a);//красим хвост змеи в зелений цвет printf("*"); SetConsoleCursorPosition(hConsole,next); SetConsoleTextAttribute(hConsole,0x0f); //красим курсор в белый цвет (голову змеи) printf("%c",1); return MOVE; } int intro() { GotoXY(3,10); //Интро printf("Игра - Змейка. (Нажмите Enter...)"); getch(); } int main() { setlocale(LC_ALL, "russian_russia.1251"); hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //получаем дескриптор консоли intro(); int key = 0, count = 0; bool Pause=false; Game g; skorostGame(g); STENA_2(); srand(time(0)); bool pause = false; while(key != 27) { while(!kbhit()) //ждет пока нажмем { if(Pause==true) { Sleep(1); continue; } switch (Move(g))//движение { case PLUS: ++count; g.pause-=1; SetColor(LightBlue , Black); GotoXY(64,2);cout << "Данные:" << endl ; GotoXY(64,3); cout << "Яблок:" <<count << endl; GotoXY(64,4); cout << "Длина:" <<g.gaduka.PCount << endl; GotoXY(64,5); cout << "Скорость:" <<g.pause<< endl; GotoXY(64,7); cout << "Управление:" << endl; GotoXY(64,8); cout << "Esc:Выход" << endl; GotoXY(64,9); cout << "P:Пауза" << endl; GotoXY(64,10); cout <<"S:Старт" << endl; GotoXY(64,11); cout <<"L:Уровень" << endl; GotoXY(64,13);printf("%c",24);cout <<":Вверх"<<endl; GotoXY(64,14);printf("%c",25);cout<<":Вниз"<<endl; GotoXY(64,15);printf("%c",27);cout<<":Влево"<<endl; GotoXY(64,16);printf("%c",26);cout<<":Вправо"<<endl; if (count == 30) { SetColor(White , Black); GotoXY(24,1); cout << "Вы выйграли, поздравляю!" << endl; getch(); return(0); } break; case STENA: case KONEC: GotoXY(23,1); printf("Вы проиграли!!!\n\n\t\t\t"); getch(); break; } Sleep(g.pause); //Задержка } key = getch(); if(key=='P'||key=='p') Pause=!Pause; else if(key=='S'||key=='s') ZmejaStart(); else if(key=='L'||key=='l') Level(); else if(key==0||key==224) { key=getch(); if(key == 72 && g.nap != DOWN) { g.nap = UP; g.dx = 0; g.dy = -1; } else if(key == 80 && g.nap != UP) { g.nap = DOWN; g.dx = 0; g.dy = 1; } else if(key == 75 && g.nap != RIGHT) { g.nap = LEFT; g.dx = -1; g.dy = 0; } else if(key == 77 && g.nap != LEFT) { g.nap = RIGHT; g.dx = 1; g.dy = 0; } } } }
|
|