Пятница, 29 Марта 2024, 15:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Ваши проекты » Готовые проекты » Первая игра(С++) (Пример консольной игры)
Первая игра(С++)
TrueNathanДата: Воскресенье, 10 Марта 2013, 22:03 | Сообщение # 1
частый гость
Сейчас нет на сайте
Изучаю С++ совсем недавно. Буквально неделю назад освоил функцию _getch(), после чего появилась идея создания такого вот лабиринта. Пример похоже заезженный, ибо, при перерисовке массива просил помощи у знающих, те и показали пример то ли из книги то ли из какой то статьи. Но остальное сам доделал.

Игрой можно назвать с натяжкой. Реализовал разные размеры карт, вывод очков. Выкладываю только чтобы поделиться исходным кодом. Код доступен и выводится в отдельный файл только после прохождения. 3 простых уровня.
exe файл
zip файл
----------------------------------------------------------------------------------------------------------------------------
Обновление!


С использованием звука в меню(FMOD).

//-----------------------------------------------------------------------------------------------------------------------------------
Закончил работу.
Генератор не реализовал, ибо есть свои задумки для другого формата игры.
мало чего знаю пока, потому не реализовал ряд улучшений в коде.
хотя есть куча примеров, мог бы всё сдувать от туда.. ну ладно, зато было интересно, ощущения, будто ты не программируешь а в конструктор играешь.
игра с исходниками (((0))) в процессе улучшения


Сообщение отредактировал TrueNathan - Вторник, 21 Мая 2013, 00:24
SEvgДата: Понедельник, 11 Марта 2013, 15:26 | Сообщение # 2
Алхимик
Сейчас нет на сайте
Цитата (TrueNathan)
Код доступен и выводится в отдельный файл только после прохождения. 3 простых уровня.

И зачем?

Как играть? У меня игра уходит в бесконечный цикл...
TrueNathanДата: Понедельник, 11 Марта 2013, 16:14 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата
Как играть? У меня игра уходит в бесконечный цикл...

Понять не могу почему так. Вроде всё просто, ничего сложного в коде нет. Может быть чтото не то с вашей системой(?). У меня ХР SP2 64bit
WPhoeniXWДата: Понедельник, 11 Марта 2013, 16:38 | Сообщение # 4
участник
Сейчас нет на сайте
На 64bit работает .

Я так понимаю ты освоил массивы и сразу создавать игру ? Здорово !

Изучай дальше там ещё много всего интересного ! Не теряй энтузиазма !


" Кто в страхе живет, тот и гибнет от страха. "
Леонардо Да Винчи
SEvgДата: Понедельник, 11 Марта 2013, 16:46 | Сообщение # 5
Алхимик
Сейчас нет на сайте
Она не работает, если кодировка в консоли не виндовская...
А так заработала smile

Не надоело третий уровень в текстовом редакторе набивать?
stalker5889Дата: Понедельник, 11 Марта 2013, 17:01 | Сообщение # 6
Свободный игродел
Сейчас нет на сайте
Круто но есть пара минусов:
1. Раз юзаешь ООП то надо было разбить код на методы (функции-члены). Например move_up(), draw(x,y) и проч. Создать отдельный класс для мапы тоже было бы неплохо. Для ПЕРВОЙ игры это не критично smile
2. Метод отрисовки. У меня чуть глазаврыши не вытекли. wacko Зачем в одном такте два раза обновлять экран?


TrueNathanДата: Вторник, 12 Марта 2013, 19:03 | Сообщение # 7
частый гость
Сейчас нет на сайте
Всем спасибо.
Цитата (stalker5889)
Круто но есть пара минусов:
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;

}
Deeem_ERДата: Вторник, 12 Марта 2013, 19:32 | Сообщение # 8
был не раз
Сейчас нет на сайте
Возможно это только моя проблема, но когда я открыл исходник, то весь код был выравнен по левой стороне с некоторыми отклонениями и лишними пустыми строками. Это просто вырвимозгно.
Также присоединюсь к замечаниям об ООП:
Я понимаю, что ты только начал изучать C++, но раз уж ты решил использовать классы, то старайся использовать их по назначению.
А раз уж ты даже для каждой карты делаешь личный обработчик нажатий, то к ООП мог бы вообще не прибегать.


Удачи ;3
МаркерДата: Вторник, 12 Марта 2013, 19:54 | Сообщение # 9
Я таки выше этого
Сейчас нет на сайте
Здорово. Это очень хорошая идея - кидать сюда все говноигры, которые вы делаете при обучении! Надо будет мне закинуть мой "Хелло ворлд".


Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом.
Андрей, 14 лет
Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов.
Андрей, 14 лет
Deeem_ERДата: Вторник, 12 Марта 2013, 20:07 | Сообщение # 10
был не раз
Сейчас нет на сайте
Цитата (Маркер)
Это очень хорошая идея - кидать сюда все говноигры, которые вы делаете при обучении!

Если не хочешь видеть игры, сделанные при обучении, то что могло быть лучше, чем зайти в тему с названием "Первая игра(C++)".
stalker5889Дата: Вторник, 12 Марта 2013, 20:22 | Сообщение # 11
Свободный игродел
Сейчас нет на сайте
Цитата (TrueNathan)
хм а ведь при каждом нажатии, происходит 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)
Мелькание будет еле заметно.


МаркерДата: Вторник, 12 Марта 2013, 20:48 | Сообщение # 12
Я таки выше этого
Сейчас нет на сайте
Цитата (Deeem_ER)
Если не хочешь видеть игры, сделанные при обучении, то что могло быть лучше, чем зайти в тему с названием "Первая игра(C++)".

Вы, батенька, крышу давно проверяли? Откуда мне, бедному телепату всего лишь во втором поколении, знать, какого качества у него первая игра? Я бы и игрой это назвал разве что формально.



Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом.
Андрей, 14 лет
Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов.
Андрей, 14 лет
Deeem_ERДата: Вторник, 12 Марта 2013, 21:45 | Сообщение # 13
был не раз
Сейчас нет на сайте
Цитата (Маркер)
какого качества у него первая игра?

Точно, ведь все-таки бывают первые "игры" на C++, сделанные с мастерством, на оттачивание которых у обычных смертных программистов-игроделов уходят года.
МаркерДата: Вторник, 12 Марта 2013, 21:56 | Сообщение # 14
Я таки выше этого
Сейчас нет на сайте
Цитата (Deeem_ER)
Точно, ведь все-таки бывают первые "игры" на C++, сделанные с мастерством, на оттачивание которых у обычных смертных программистов-игроделов уходят года.

Под первой игрой обычно подразумевается первая поделка в публичном доступе. Я бы постыдился выкладывать такое на форум. То же самое, что сделать по уроку идиотский арканоид и поспешно выложить его вместо того, чтобы оставить в закромах жесткого диска, и дальше оттачивать навыки. Теперь острый камень моих мыслей упал в глубины твоего бездонного сознания?



Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом.
Андрей, 14 лет
Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов.
Андрей, 14 лет
TrueNathanДата: Пятница, 22 Марта 2013, 23:33 | Сообщение # 15
частый гость
Сейчас нет на сайте
Маркер,
Цитата (TrueNathan)
Игрой можно назвать с натяжкой.

Цитата (TrueNathan)
Выкладываю только чтобы поделиться исходным кодом.

----------------------------------------------------------------------------------------------------------

Добавлено (22.03.2013, 23:33)
---------------------------------------------
up
update сверху


Сообщение отредактировал TrueNathan - Пятница, 22 Марта 2013, 23:34
Форум игроделов » Ваши проекты » Готовые проекты » Первая игра(С++) (Пример консольной игры)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг