Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Змейка. Написание игры

Ответить
Настройки темы
C/C++ - Змейка. Написание игры

Старожил


Сообщения: 222
Благодарности: 1

Профиль | Отправить PM | Цитировать


Передомной появилась такая проблемма. Нада написать игру "Змейка" на Borland C++ 3.11 с использованием ООП и в графическом режиме. Помогите пожалуста разобратся с такими вопросами:
1. Как правильно спроэктировать самц игру, классы и тп?
2. Как реализовать движение змеи и изменение направлений при нажатии клавиш.

Вообщем помогите хто чем может, кодом, советами, теорией, буду благодарен за любую помощь.

-------
Подпись, нарушающая правила конференции, отредактирована администратором


Отправлено: 23:01, 22-04-2010

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


DaRiYs,
Цитата DaRiYs:
1. Как правильно спроэктировать самц игру, классы и тп?
2. Как реализовать движение змеи и изменение направлений при нажатии клавиш. »
Рассуждай вслух, а дальше будет видно. Если можно будет на их основе что-нибудь конструктивное выделить, то запросто.
В противном случае это будет чужое решение, а не собственное.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 08:57, 23-04-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 222
Благодарности: 1

Профиль | Отправить PM | Цитировать


Бы ло бы еще о чем рассуждать, я незнаю с какой стороны приступить... Хоть теорию реализации игры для начала скажите.

-------
Подпись, нарушающая правила конференции, отредактирована администратором


Отправлено: 10:22, 23-04-2010 | #3


Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


DaRiYs, теория реализации игры - это следующий шаг. А сейчас рассуждай о том, чего ты хочешь видеть на экране. Реализаций разновидностей много, а цель должна быть одна.
Начни рассказ со слов "Я хочу чтобы ...".
Чтобы змейка двигалась так-то и так-то. Для управления использовались кнопки такие-то и такие-то.
Змейка характеризуется так-то и так-то. Нямки появляются так-то.
Вопрос будет в том, в каком виде у тебя будет хранится поле и в каком виде будет представлена змейка. Но я этого не говорил!
Когда этап "Я хочу" будет пройден, будем думать над реализацией.
Не торопись, запрограммировать плевое дело, было бы что.
Т.ч. рассуждай, рисуй схемки, а о программировании пока не думай. (Рассуждения терминами С/С++ сейчас не нужны)

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:38, 23-04-2010 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Я когда-то решал аналогичную задачку "траектория черепахи", но если честно, до конца не дорешал. Парочка мыслей:

1. Нужно поле по которому змейка будет двигаться - двухмерный массив
Код: Выделить весь код
const int x = 10;
const int y = 10;

int boarb[x][y] = {0};
2. Нужен массив ходов (поскольку шаг у нас одна клетка то и значение будет 1 или -1) -
Код: Выделить весь код
const int step = 2;

int step[step] = {1, -1};
3. Варианты ходов 4 варианта, вверх вниз, вправо, влево
4. переменная хода - currentStep = 0;
Код: Выделить весь код
...
   const int x = 10;
   const int y = 10;
   const int step = 2;

   int boarb[x][y] = {0};
   int step[step] = {1, -1};

   int currentStep = 0, move = 0;
   
   cout<<"\n   Введите шаг змейки от '0' или '4':  ";
   cin>>move ;

   while(move != 9999){ // 9999 ходов
      if(move == 1){
         currentStep += 1; // Вверх 
        }
     else if(move == 2){
         currentStep += 1; // Вправо
        }
     else if(move == 3){
         currentStep += -1; // Вниз
        }
     else if(move == 4){
         currentStep += -1; // Влево
        }
...
В общем я сейчас запутался, но скидываю пример ходов шахматного коня, возможно пригодится

Реализации хода шахматного коня
Код: Выделить весь код
// Задачи главы 4. Задача 4.24
//Программа реализации хода шахматного коня
#include <vcl.h>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <cstdlib>

const int row=8;
const int column=8;

void print(int [][column], int, int);

int main()
{
  int board[row][column]={0},
      horisontal[8]={2, 1, -1, -2,
                     -2, -1, 1, 2},
      vertical[8]={-1, -2, -2, -1,
                   1, 2, 2, 1};
  int curentRow=0,
      curentColumn=0,
      moveNumber,
      controlRow=0,
      controlColumn=0,
      counter=0,
      z;

  cout<<"   PROGRAMMA SHACHMATNOGO KONYA  ";
  cout<<"\n   ENTER '0' START  FINISH  '-1':   ";
  cout<<"\n   ENTER  NUMBER  CHODA KONYA  OT '0' DO '7':  ";
     cin>>moveNumber;
  while(moveNumber != 9999){

     curentRow += vertical[moveNumber];
     curentColumn += horisontal[moveNumber];
     if((curentRow >= 0 && curentRow <= 7) && (curentColumn >= 0 && curentColumn <= 7)){
        controlRow=curentRow;
        controlColumn=curentColumn;
        board[curentRow][curentColumn]=1;
        print(board, row, column);
       }
     else{
        cout<<"\n    ENTER PRAVILNIY CHOSD";
        curentRow=controlRow;
        curentColumn=controlColumn;
       }
     cout<<"\n   ENTER  NUMBER  CHODA KONYA  OT '0' DO '7':  ";
     cin>>moveNumber;
    }

    print(board, row, column);

    cin>>z;
        return 0;
}
//Функция печати массива
void print(int boarde[][column], int rowe, int columne)
{
 for(int i=0; i<rowe; i++){
    for(int j=0; j<columne; j++)
      cout<<boarde[i][j];
      cout<<endl;
    }
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:14, 23-04-2010 | #5


Пользователь


Сообщения: 74
Благодарности: 5

Профиль | Отправить PM | Цитировать


Это у тебя лабораторная работа/курсовая/диплом или ты просто ради фана хочешь разобраться в игростроении? Если учёба тогда какие сроки, если ради фана то, можешь начать примерно со следующего.

Какие ключевые понятия в игре Змейка (да и вообще в любой игре)? Есть карта или просто поле по которому ползает червяк в области ограниченного пространства. На этом поле он собирает объекты (бонусы) которые по разному влияют на червяка. Исходя из этого у нас будет один общий базовый класс для объектов. К объекту можно также отнести и самого червяка, а что он разве не объект? Ещё какой объект только со своим набором атрибутов, поэтому для начало возьмём базовый объект, некий
Код: Выделить весь код
СBaseObject 
{
...
};
Какие общие черты у каждого объекта, пусть это бонус, червяк или его враги (другой червяк который ползает по полю и стреляет):
1. координаты на сетке (x,y)
2. скорость (velocity)
3. тип объекта (type) (мы же должны как-то узнавать в игре что это или кто это, бонус или враг или просто камень в который нужно врезаться и отнять пару поинтов жизни у червяка)
4. Угол (angle) - в ту сторону будет идти червяк меняется угол меняется и направления червяка.
5. ширина и высота объекта (width and height)

а теперь имеем
Код: Выделить весь код
CBaseObject
{
	private:
		int x,y;
		float velocity;
		ETypeObject type;
		float angle;
		int width, height;
};

ETypeObject 
{
	BONUS,
	ENEMY,
	USER
};
Это я взял самые основные свойства объекта, которые будут у любого объекта в игре. Разумеется что в зависимости от сложности игры количество свойств в базовом объекте может меняться. Теперь тебе надо будет наследоваться от этого базового объекта и расширять функционал для каждого отдельного объекта. Например, ты решил добавить бонус для увеличениятела червяка,

Код: Выделить весь код
СDecreaseBody : public CBaseObject
{

}
А что собственно расширять, спросишь ты. Ну давай подумаем, что должен делать этот бонус увеличивать тело червяка, значит вывод напрашивается сам на себя
Код: Выделить весь код
СDecreaseBody : public CBaseObject
{
	private:
		int enlarge;
}
вот такой вот простой бонус будет, он очень примитивный поэтому пока в голову больше ничего не приходит что сюда ещё добавить, но поверь что на протяжении написания игры будет постепенно разрастаться этот класс. На самом деле ещё нужно было в базовый объект кроме свойств добавить базовые методы такие как
Код: Выделить весь код
render();
logic();
init();
ну и ещё что-нибудь. А у наследника CDecreaseBody реализовать метод logic(); а может и ещё что-нибудь.

Теперь тебе есть от чего оталкиваться.

Цитата Drongo:
currentStep += 1; »
нужно расчитывать скорость передвижения на основе делта времени, иначе в игру можно будет играть только на 400 пентиумах. Т.е. она будет слишком быстро работать.

Последний раз редактировалось Awejk, 23-04-2010 в 12:29. Причина: Используем тег код - # [/code]

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:20, 23-04-2010 | #6


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Modnyi_Keks:
нужно расчитывать скорость передвижения на основе делта времени, иначе в игру можно будет играть только на 400 пентиумах. Т.е. она будет слишком быстро работать. »
Скорость шага в моём примере неиспользуется, т.е. пока один ход, одно нажатие клавиши.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 12:04, 23-04-2010 | #7


Пользователь


Сообщения: 74
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата Drongo:
Скорость шага в моём примере неиспользуется, т.е. пока один ход, одно нажатие клавиши. »
но змейка же идёт непрерывно и управлять нужно только поворотом. А не хотьбой. Хотя возможно Вы просто общий случай написали.

Отправлено: 12:07, 23-04-2010 | #8


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Modnyi_Keks:
Хотя возможно Вы просто общий случай написали. »
Конечно, отталкиваясь от задачки
Цитата Drongo:
траектория черепахи »

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 13:11, 23-04-2010 | #9


Старожил


Сообщения: 222
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спсиб всем за помощь и идеи, разобрался наконец то, написал

-------
Подпись, нарушающая правила конференции, отредактирована администратором


Отправлено: 00:16, 26-04-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Змейка. Написание игры

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Написание скриптов zhecka Скриптовые языки администрирования Windows 4 10-11-2008 12:19
Написание сетевой игры Jedi Программирование и базы данных 1 04-01-2004 10:51
Написание Скриптов Guest Microsoft Windows NT/2000/2003 6 31-08-2003 22:46
Написание прог Apis.NET Программирование и базы данных 13 28-06-2002 19:00




 
Переход