Команда начинающих программистов!
Модератор: Злобный
- DiMoN
- Отец
- Сообщения: 4456
- Зарегистрирован: Вт май 24, 2005 19:06
- Откуда: Молдова\г. Кишинёв
- Контактная информация:
sadman,
хм.. простенькое говоришь?
ну вот на этом форуме www.simplegames.org/frm/index.php я принимал участие (небольшое и не в программировании, но принимал) в таких простеньких играх как Filler, HackSim.. также там есть программки (InfoBar, DigiClock, CD-Controls), которые делал мой знакомый на досуге.. если вы хотите, то мы на данный момент заняты проектом он-лайн игры, если кто заинтересуется, то предоставлю данные в привате..
хм.. простенькое говоришь?
ну вот на этом форуме www.simplegames.org/frm/index.php я принимал участие (небольшое и не в программировании, но принимал) в таких простеньких играх как Filler, HackSim.. также там есть программки (InfoBar, DigiClock, CD-Controls), которые делал мой знакомый на досуге.. если вы хотите, то мы на данный момент заняты проектом он-лайн игры, если кто заинтересуется, то предоставлю данные в привате..
А у меня предложение на уровне детского сада. Но зато imho можно потренироваться работе в команде.
Язык: С++
Игра: Змейка. Наподобие как в нокиевских телефонах.
Причем под консоль.
Мне кажется если делать под консоль, то мы сможем и удаленно модули разрабатывать. А потом, после того как спроектируем, реализуем и обкатаем в консоли (грозно звучит ) - думаю можно будет перевесить под винду. Если мы правильно спроектируем игру то думаю это не составит особого труда. Заюзаем UML, придумаем алгоритм. Объект - лабиринт, объект - змея.. или не так Ну да на форумах спросим нам алгоритм расскажуют и разжуют. вот к примеру навскидку здесь
Вообще можно такое и самому написать (и imho легче), но главная фишка в том чтобы потренироваться самим спроектировать с учетом того что два/несколько человек работают и сделать в команде.
p.s.: да и еще уточню что спроектировать так, чтобы можно было потом легко новые уровни добавлять (не только коробку, но и другие виды лабиринтов)
Язык: С++
Игра: Змейка. Наподобие как в нокиевских телефонах.
Причем под консоль.
Мне кажется если делать под консоль, то мы сможем и удаленно модули разрабатывать. А потом, после того как спроектируем, реализуем и обкатаем в консоли (грозно звучит ) - думаю можно будет перевесить под винду. Если мы правильно спроектируем игру то думаю это не составит особого труда. Заюзаем UML, придумаем алгоритм. Объект - лабиринт, объект - змея.. или не так Ну да на форумах спросим нам алгоритм расскажуют и разжуют. вот к примеру навскидку здесь
Вообще можно такое и самому написать (и imho легче), но главная фишка в том чтобы потренироваться самим спроектировать с учетом того что два/несколько человек работают и сделать в команде.
p.s.: да и еще уточню что спроектировать так, чтобы можно было потом легко новые уровни добавлять (не только коробку, но и другие виды лабиринтов)
Если возьмемся то на первых порах у меня мысли такие:
Можем отталкиваться от от экрана(массива) 80*25.
- Класс Лабиринт. (n разных лабиринтов, в понятиях координат x,y)
- Класс Змея, тело змеи. Здесь биндим движения змеи тоже в применении к x,y.
и от всего этого добра наследуем:
- Класс Геймплей. И здесь собсна двигаем змею и проверяем, если она не жмакнулась в себя или в лабиринт.
то есть по сути проверяем, не принадлежит ли x,y ее головы лабиринту либо самой змее..
Полагаю что таким образом классы лабиринт и змея можно будет разрабатывать отдельно. а новый лабиринт можно будет добавлять как новый метод
Только у меня есть вопросы
1) правильно ли это все себе представляю
2) как сделать так чтобы это потом легко пересадилось на windows
Можем отталкиваться от от экрана(массива) 80*25.
- Класс Лабиринт. (n разных лабиринтов, в понятиях координат x,y)
- Класс Змея, тело змеи. Здесь биндим движения змеи тоже в применении к x,y.
и от всего этого добра наследуем:
- Класс Геймплей. И здесь собсна двигаем змею и проверяем, если она не жмакнулась в себя или в лабиринт.
то есть по сути проверяем, не принадлежит ли x,y ее головы лабиринту либо самой змее..
Полагаю что таким образом классы лабиринт и змея можно будет разрабатывать отдельно. а новый лабиринт можно будет добавлять как новый метод
Только у меня есть вопросы
1) правильно ли это все себе представляю
2) как сделать так чтобы это потом легко пересадилось на windows
Ну - я бы так замутил пожалуй:Rockie писал(а):Если возьмемся то на первых порах у меня мысли такие:
Можем отталкиваться от от экрана(массива) 80*25.
- Класс Лабиринт. (n разных лабиринтов, в понятиях координат x,y)
- Класс Змея, тело змеи. Здесь биндим движения змеи тоже в применении к x,y.
и от всего этого добра наследуем:
- Класс Геймплей. И здесь собсна двигаем змею и проверяем, если она не жмакнулась в себя или в лабиринт.
то есть по сути проверяем, не принадлежит ли x,y ее головы лабиринту либо самой змее..
Полагаю что таким образом классы лабиринт и змея можно будет разрабатывать отдельно. а новый лабиринт можно будет добавлять как новый метод
Только у меня есть вопросы
1) правильно ли это все себе представляю
2) как сделать так чтобы это потом легко пересадилось на windows
1. Класс лабиринт (обыкновенная двумерная матрица - из enum-ов - типа {none, snake, mouse} - т.е. в каждом элементе - содержиться информация - о том - что в данной "клетки" - в данный момент находиться (ничего, шмат змеи, мышь)) (в принципе - тут и без класса обойтись можно)
2. Класс змея - содержит в себе - вектор - состоящий из координат матрицы-лабиринта - отображает текущее состояние змеи - в лабиринте; дополнительний вектор - указывающий на "узловые" координаты; ну - и открытые методы - реализующий движение/поворот/рост змеи + предоставляет метод - типа isDead (наткнулась эта змея на стену - или нет).
3. Класс прорисовщик - содержим указатель на лабиринт; единственное предназначение - прорисовка (будь то в консоле, или где-либо еще);
4. Класс геймплэй... содержит указатели на лабиринт, змею, прорисовщик - тут собссна - вся логика основная. В простейшем варианте - что-то вроде: thread - двигает змею, проверяет - не врезалась ли она в стену, кидает время от времени мышей, прорисовывает лабиринт. Ну - и 2-й - слушает команды-движения - и двигает саму змею, точнее - меняет направление ее движения.
Типа таково... хотя вообще - тут подумать надо
yura:8788,
ага. и надо будет добавить еще wall - препятствие. причем препятствия в зависимости от уровня могут быть разными. кстати кормить будем мышами или они будут в качестве бонусов?1. Класс лабиринт (обыкновенная двумерная матрица - из enum-ов - типа {none, snake, mouse}
вот-вот! =) а узловые координаты - это где змея поворачивает? только щас подумал, imho надо еще хранить направление для каждого узла; иначе как понять каким образом она извивается.. или создать змею в виде списка, где каждый элемент знает позицию следующего: тогда голова повернет, а все остальное тело подтянется.2. Класс змея - содержит в себе - вектор - состоящий из координат матрицы-лабиринта - отображает текущее состояние змеи - в лабиринте; дополнительний вектор - указывающий на "узловые" координаты; ну - и открытые методы - реализующий движение/поворот/рост змеи + предоставляет метод - типа isDead (наткнулась эта змея на стену - или нет).
с прорисовщиком классная идея. можно отделить игру и интерфейс. но если в винде сетка получится тоже 80*25, тогда все будет слишком мелко - может стоит выбрать другую размерность.. 60*20? =)3. Класс прорисовщик - содержим указатель на лабиринт; единственное предназначение - прорисовка (будь то в консоле, или где-либо еще);
- sadman
- Завсегдатай
- Сообщения: 2001
- Зарегистрирован: Чт дек 15, 2005 23:46
- Откуда: с ботаники
- Контактная информация:
итак, господа насчёт змейки:
думаю что надо сделать примерно так:
1.класс SNAKE - содержит в себе:
а) метод int move(int iDirection) ( прямо тут можно проверять не врезалась-ли куда-нибудь змея. То-есть если ф-ция возвращает 0-все ок, 1-врезались, 2-скушали мышку )
б) метод growup - это когда змея удлиняется
в) положение змеи на поле (тут надо подумать как и где будет храниться тело змеи)
г) метод reset;
2. также будут иметься 2 класса предложенных yura:8788 - gameplay и redrawer, что-то типа того. Класс прорисовки будет каждый интервал времени перерисовывать поле (однако это тоже надо хорошо продумать, т.к. перерисовывать всё поле не имеет смысла, хотя-бы потому-что там у нас имеются неизменяющиеся ячейки на протяжении одного уровня, а именно стены лабиринта)
Класс gameplay будет делать следующее - реагировать на нажатия клавиш, двигать змею, кидать хавчик на поле, реагировать на врезание змеи во что-нибудь.
3. также, думаю, имеет смысл создать один здоровенный, глобальный массив - поле, ячейки которого будут запонятсья енумами (как советовал yura:8788) - enum{none, snake, wall, food}.
Пока вроде все, вроде ничё не забыл ))).
думаю что надо сделать примерно так:
1.класс SNAKE - содержит в себе:
а) метод int move(int iDirection) ( прямо тут можно проверять не врезалась-ли куда-нибудь змея. То-есть если ф-ция возвращает 0-все ок, 1-врезались, 2-скушали мышку )
б) метод growup - это когда змея удлиняется
в) положение змеи на поле (тут надо подумать как и где будет храниться тело змеи)
г) метод reset;
2. также будут иметься 2 класса предложенных yura:8788 - gameplay и redrawer, что-то типа того. Класс прорисовки будет каждый интервал времени перерисовывать поле (однако это тоже надо хорошо продумать, т.к. перерисовывать всё поле не имеет смысла, хотя-бы потому-что там у нас имеются неизменяющиеся ячейки на протяжении одного уровня, а именно стены лабиринта)
Класс gameplay будет делать следующее - реагировать на нажатия клавиш, двигать змею, кидать хавчик на поле, реагировать на врезание змеи во что-нибудь.
3. также, думаю, имеет смысл создать один здоровенный, глобальный массив - поле, ячейки которого будут запонятсья енумами (как советовал yura:8788) - enum{none, snake, wall, food}.
Пока вроде все, вроде ничё не забыл ))).
Насчет класса змея, хранить змею - надо не в vector-е - а в list-е. Таким образом - в методе move надо будит сделать следующее:
CellContent cContent = GetContent(position); //CellContent - это enum{none, snake, wall, food}
ну - и далее:
switch(cContent)
{
case snake:
case wall: return 1;
case none: list.pop_back();
default: list.push_front(position);
}
return (cContent==food?2:0);
CellContent cContent = GetContent(position); //CellContent - это enum{none, snake, wall, food}
ну - и далее:
switch(cContent)
{
case snake:
case wall: return 1;
case none: list.pop_back();
default: list.push_front(position);
}
return (cContent==food?2:0);
- sadman
- Завсегдатай
- Сообщения: 2001
- Зарегистрирован: Чт дек 15, 2005 23:46
- Откуда: с ботаники
- Контактная информация:
даже не так! относительно третьего пункта - глобальный массив не нужен. его лучше поместить в класс геймплей, в открытом виде.
[off]добавлено спустя 1 час 16 минут:[/off]
yura:8788,
да, идея со списком мне нравится. практично. остаётся выразить значение переменой position как координаты ячейки - x и y. Но это, я думаю, не проблема.
[off]добавлено спустя 1 час 16 минут:[/off]
yura:8788,
да, идея со списком мне нравится. практично. остаётся выразить значение переменой position как координаты ячейки - x и y. Но это, я думаю, не проблема.
Хочу заранее извиниться, если не смогу выложить в четверг каркас классов, как обещался в прошлом посте. Буду очень занят до вечера пятницы. Юзание STL imho хорошо. Касаемо классов: мне так пока не очень ясно как связать Прорисовщик и сам Field, по которому змейка ползает. Возможно, это даже может быть один класс. Повторюсь - стоит проектировать игру так, чтобы она работала в консоли, но переносилась на винду.
2sadman: Касаемо перерисовщика - то imho пофиг, думаю можно перисовывать весь экран. Насколько знаю, винда работает через методы перерисовки всего окна.
извините что не вдаюсь в подробности, позже отвечу на все посты конкретнее
2sadman: Касаемо перерисовщика - то imho пофиг, думаю можно перисовывать весь экран. Насколько знаю, винда работает через методы перерисовки всего окна.
извините что не вдаюсь в подробности, позже отвечу на все посты конкретнее
Warning: mysql_connect() [function.mysql-connect]: Lost connection to MySQL server during query in /home/vhosts/umpo.com.md/public_html/tm/mysql_connect.php on line 6sadman писал(а):так-с, короче, народ. Проэкт я разбил на модули. Все кто в команде - заходим на площадку и смотрим!
MySQL Connect error.