Изучаю С++ совсем недавно. Буквально неделю назад освоил функцию _getch(), после чего появилась идея создания такого вот лабиринта. Пример похоже заезженный, ибо, при перерисовке массива просил помощи у знающих, те и показали пример то ли из книги то ли из какой то статьи. Но остальное сам доделал.
Игрой можно назвать с натяжкой. Реализовал разные размеры карт, вывод очков. Выкладываю только чтобы поделиться исходным кодом. Код доступен и выводится в отдельный файл только после прохождения. 3 простых уровня. exe файл zip файл ---------------------------------------------------------------------------------------------------------------------------- Обновление!
С использованием звука в меню(FMOD).
//----------------------------------------------------------------------------------------------------------------------------------- Закончил работу. Генератор не реализовал, ибо есть свои задумки для другого формата игры. мало чего знаю пока, потому не реализовал ряд улучшений в коде. хотя есть куча примеров, мог бы всё сдувать от туда.. ну ладно, зато было интересно, ощущения, будто ты не программируешь а в конструктор играешь. игра с исходниками (((0))) в процессе улучшения
Сообщение отредактировал TrueNathan - Вторник, 21 Мая 2013, 00:24
Круто но есть пара минусов: 1. Раз юзаешь ООП то надо было разбить код на методы (функции-члены). Например move_up(), draw(x,y) и проч. Создать отдельный класс для мапы тоже было бы неплохо. Для ПЕРВОЙ игры это не критично 2. Метод отрисовки. У меня чуть глазаврыши не вытекли. Зачем в одном такте два раза обновлять экран?
Круто но есть пара минусов: 1. Раз юзаешь ООП то надо было разбить код на методы (функции-члены). Например move_up(), draw(x,y) и проч. Создать отдельный класс для мапы тоже было бы неплохо. Для ПЕРВОЙ игры это не критично smile 2. Метод отрисовки. У меня чуть глазаврыши не вытекли. wacko Зачем в одном такте два раза обновлять экран?
1. обязательно разобью, попытаюсь покрайней мере. 2. процессор особе не загружен двойной отрисовкой. я так понял, сначала отрисовывается карта, потом после ввода(нажатия WASD), отрисовывается новое положение Р на карте..хм а ведь при каждом нажатии, происходит 1 отрисовывание, пока не нажмётся Esc
Код
while (step != 27) // esc {
cout << "Points: "<< points; step = _getch();
switch (step) {
case 77: // right if (gamefield[y][x + 1] != '#') { if (gamefield[y][x + 1] == '$') { ++points; } gamefield[y][x] = ' '; ++x; gamefield[y][x] = 'P'; } break;
case 75: // left if (gamefield[y][x - 1] != '#') { if (gamefield[y][x - 1] == '$') { ++points; } gamefield[y][x] = ' '; --x; gamefield[y][x] = 'P'; } break;
case 80: // down if (gamefield[y + 1][x] != '#') { if (gamefield[y + 1][x] == '$') { ++points; } if (gamefield[y + 1][x] == 'X') { return 1; } gamefield[y][x] = ' '; ++y; gamefield[y][x] = 'P'; } break;
case 72: // up if (gamefield[y - 1][x] != '#') { if (gamefield[y - 1][x] == '$') { ++points; } gamefield[y][x] = ' '; --y; gamefield[y][x] = 'P'; } break; }
system("cls");
for(int v = 0; v < 10; ++v) { for(int h = 0; h < 10; ++h) cout << gamefield[v][h]; cout << endl;
Возможно это только моя проблема, но когда я открыл исходник, то весь код был выравнен по левой стороне с некоторыми отклонениями и лишними пустыми строками. Это просто вырвимозгно. Также присоединюсь к замечаниям об ООП: Я понимаю, что ты только начал изучать C++, но раз уж ты решил использовать классы, то старайся использовать их по назначению. А раз уж ты даже для каждой карты делаешь личный обработчик нажатий, то к ООП мог бы вообще не прибегать.
Я тоже делал подобные "игрушки", когда только начинал изучать C++. Вот отрыл одну из таких игрушек, где я, как мне кажется, весьма хорошо применил классы: Скачать Описание: Карта для игры загружается из текстового файла(Map_1.txt). Жать нужно только на стрелки на клавиатуре. Есть два наитупейших бота, идущих к тебе.
Здорово. Это очень хорошая идея - кидать сюда все говноигры, которые вы делаете при обучении! Надо будет мне закинуть мой "Хелло ворлд". Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом. Андрей, 14 лет Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов. Андрей, 14 лет
хм а ведь при каждом нажатии, происходит 1 отрисовывание
Тем не менее ВИДНО что отрисовка идёт два раза. Вместо банальной отчистки юзай функцию
Код
void setcur(int x, int y)//установка курсора на позицию x y { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); };
Стираешь все обновления экрана и заместо них пишешь setcur(0,0) Мелькание будет еле заметно.
Если не хочешь видеть игры, сделанные при обучении, то что могло быть лучше, чем зайти в тему с названием "Первая игра(C++)".
Вы, батенька, крышу давно проверяли? Откуда мне, бедному телепату всего лишь во втором поколении, знать, какого качества у него первая игра? Я бы и игрой это назвал разве что формально. Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом. Андрей, 14 лет Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов. Андрей, 14 лет
Точно, ведь все-таки бывают первые "игры" на C++, сделанные с мастерством, на оттачивание которых у обычных смертных программистов-игроделов уходят года.
Точно, ведь все-таки бывают первые "игры" на C++, сделанные с мастерством, на оттачивание которых у обычных смертных программистов-игроделов уходят года.
Под первой игрой обычно подразумевается первая поделка в публичном доступе. Я бы постыдился выкладывать такое на форум. То же самое, что сделать по уроку идиотский арканоид и поспешно выложить его вместо того, чтобы оставить в закромах жесткого диска, и дальше оттачивать навыки. Теперь острый камень моих мыслей упал в глубины твоего бездонного сознания? Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом. Андрей, 14 лет Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов. Андрей, 14 лет