Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54

Разработка Игры Путник

17.05.2011, 18:12. Показов 3695. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте Все. Я давно знаком с Вашим форум))). Здесь общаются очень неплохие люди. Я новичок в программировании. Мне очень нужна помощь((( Я разрабатываю игру под названием Путник. Смысл этой игры в том, что Путник, некий объект, передвигается по квадранту и огибает препятствия. За квадрант я взял StringGrid, сам Путник как закрашенная ячейка, препятствия создаются кликом мыши по ячейке. Подскажите как реализовать движение Путника по ячейкам? И как можно с помощью двух Edit'ов изменять размер квадранта? И еще, как привязать к BitButton'у значение нажатия клавиши, и создать системное предписание, т.е. набор команд, которые можно вводить в какое-нибудь поле, и которые означают движение Путника (т.е. вводишь команды и он двигается), с возможностью ввода одновременно несколких команд. Помогите пожалуйста, заранее спасибо)))

Добавлено через 25 минут
А, забыл сказать, все это я создаю в Borland C++ Builder 6.0 )))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2011, 18:12
Ответы с готовыми решениями:

Разработка игры
Привет!возник такой вопрос:хочу создать свою игру,но вот незнаю какой язык программирования использовать,в какой программе...

Разработка игры
Ребят нужна хелпа, Есть комплекс мини игр для детей, в принципе игры не сложные, что-то перетащить и тд, их нужно разместить в одной...

Разработка 2д игры
Я знаю с++ и си.Хотела бы создать свою игру но не в виде консольного приложение.можете подсказать хорошие платформы для разработки 2д игры...

31
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
17.05.2011, 18:30
а кроме идеи игры, есть какието наработки ?
0
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 18:45  [ТС]
Ну настроен интерфейс программы и немного кода
0
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 18:55  [ТС]
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
17.05.2011, 19:19
Цитата Сообщение от PhotOn
1. как можно с помощью двух Edit'ов изменять размер квадранта?
2. как привязать к BitButton'у значение нажатия клавиши
3. создать системное предписание, т.е. набор команд, которые можно вводить в какое-нибудь поле, и которые означают движение Путника (т.е. вводишь команды и он двигается), с возможностью ввода одновременно несколких команд.
1.
C++
1
2
квадранта->Width = IntToStr(Edit1->Text);
квадранта->Height = IntToStr(Edit2->Text);
2. При нажатии BitButton подставляете VK (виртуальный код) нужной клавиши клавиатуры.
3. Вводите , например, в Edit3 текст
налево направо вверх вниз
, потом заносите текст Эдита в СтрингЛист , в каждой строке - одно слово, пробегаете по нему циклом и движете Путника по условию:
C++
1
2
3
4
if (StringList->Strings[0]) { // тут у нас, предположим, "налево"
  Key = VK_LEFT;
}
else if (и т.д.) {...}
ну и еще нужно предусмотреть, чтобы
C++
1
StringList->Strings[]
всегда соотвествовало налево:
C++
1
2
3
if (StringList->Strings[i]=="налево") {
  Key = VK_LEFT;
}
как-то так
1
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 19:41  [ТС]
А можно еще совет насчет закрашивания ячейки и движения закрашенной ячейки плиз?)))
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
17.05.2011, 19:44
1. Закрашивание ячеек в StringGrid
StringGridDrawItem
2. движение куда ? я так понимаю, красить нужно ту ячейку, куда занесло Путника
1
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 19:53  [ТС]
Ну скажем, Путник-это закрашенная ячейка, а если нажать кнопку скажем влево, закрашивается ячейка левее, а прежняя становится белой по умолчанию :-)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
17.05.2011, 20:07
1. я понял, см. п.2
2. ваш Путник, по сути, "змейка" без хвоста, реализация на форуме обсуждалась http://www.google.com.ua/searc... uk___UA420 - можно усложнить игру - например, закрашивать ячейки, где путник уже побывал , и обходить их десятой дорогой
2
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 20:11  [ТС]
Спасибо за информацию)))
0
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
19.05.2011, 20:50  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  StringGrid1->Canvas->Brush->Color=1234;
  StringGrid1->Canvas->FillRect(StringGrid1->CellRect(0,0));
  StringGrid1->Canvas->Brush->Color=4321;
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
StringGrid1->Canvas->Brush->Color=clBlack;
StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
 
}
Добавлено через 13 минут
Вот пока это все, что у меня есть из кода проги. Получается, что кликом мыши ячейка закрашивается в черный цвет. А при нажатии BitBtn2 закрашивается в красный цвет левая верхняя ячейка. Надо бы как-нибудь сделать так, чтобы после нажатия BitBtn2 закрашенная клетка могла пошагово двигаться по ячейкам(т.е. при нажатии на клавишу ячейка сдвигается на одну клетку). И не могла ходить по черным ячейкам. Помогите пожалуйста)))
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
21.05.2011, 01:38
Цитата Сообщение от PhotOn Посмотреть сообщение
(т.е. при нажатии на клавишу ячейка сдвигается на одну клетку). И не могла ходить по черным ячейкам.
Берёшь двухмерный массив по количеству ячеек.
Записываешь в массив где у тебя чёрные ячейки.
При нажатии на клавишу, в массиве проверяешь цвет следующей ячейки, если чёрный остаешься на месте.
1
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
21.05.2011, 14:41  [ТС]
А как это будет в виде кода?
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
21.05.2011, 20:20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
TForm1 *Form1;
int a[5][5]={{0,0,0,0,0}, //игровое поле 0-пусто 1-стена
             {0,0,0,1,0},
             {0,0,0,1,0},
             {0,0,1,0,0},
             {0,0,0,0,0}};
int b[2]={0,0};           //координаты игрока
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//тут я при включении перерисовываю поле---------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (int i=0;i<5;i++)
{
 for (int j=0;j<5;j++)
 {
  if (a[i][j]==0)
  {
   StringGrid1->Canvas->Brush->Color=clBlue;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(j,i));
  }
  if (a[i][j]==1)
  {
   StringGrid1->Canvas->Brush->Color=clBlack;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(j,i));
  }
  if (a[i][j]==2)
  {
   StringGrid1->Canvas->Brush->Color=clRed;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(j,i));
  }  
 }
}
}
//вверх---------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (b[0]>0 && a[b[0]-1][b[1]]==0)//если не вышли за поле и следующая свободна
{
 a[b[0]][b[1]]=0;   //обнуляем где стоим
 b[0]=b[0]-1;       //записываем новые координаты
 a[b[0]][b[1]]=2;   //ставим туда игрока
 FormPaint(Sender); //перерисовываем
}
}
//вниз----------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
if (b[0]<5 && a[b[0]+1][b[1]]==0)
{
 a[b[0]][b[1]]=0;
 b[0]=b[0]+1;
 a[b[0]][b[1]]=2;
 FormPaint(Sender);
}
}
//влево---------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if (b[1]>0 && a[b[0]][b[1]-1]==0)
{
 a[b[0]][b[1]]=0;
 b[1]=b[1]-1;
 a[b[0]][b[1]]=2;
 FormPaint(Sender);
}
}
//вправо--------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
if (b[1]<5 && a[b[0]][b[1]+1]==0)
{
 a[b[0]][b[1]]=0;
 b[1]=b[1]+1;
 a[b[0]][b[1]]=2;
 FormPaint(Sender);
}
}
//ставим игрока-------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
a[b[0]][b[1]]=2;
FormPaint(Sender);
}
//перерисовка---------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
for (int i=0;i<5;i++)
{
 for (int j=0;j<5;j++)
 {
  if (a[i][j]==0)
  {
   StringGrid1->Canvas->Brush->Color=clBlue;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(j,i));
  }
  if (a[i][j]==1)
  {
   StringGrid1->Canvas->Brush->Color=clBlack;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(j,i));
  }
  if (a[i][j]==2)
  {
   StringGrid1->Canvas->Brush->Color=clRed;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(j,i));
  }
 }
}
}
1
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
22.05.2011, 11:18  [ТС]
Спасибо большое :-)
0
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
01.06.2011, 16:34  [ТС]
А нельзя сделать так, чтобы весь StringGrid был как эта матрица? А то размерность менять надо(я это умею). Я тут пытался химичить с этим, но закраска не получается.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
int W=5,H=5;
int z,x,N;
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
StringGrid1->Canvas->Brush->Color=clBlack;
StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]=="1";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
W=StrToInt(Edit1->Text);
H=StrToInt(Edit2->Text);
StringGrid1->ColCount=W;
StringGrid1->RowCount=H;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
N=1000;
Edit1->Text=FloatToStr(W);
Edit2->Text=FloatToStr(H);
StringGrid1->ColCount=W;
StringGrid1->RowCount=H;
for(z=0;z<N;z++)
for(x=0;x<N;x++)
StringGrid1->Cells[z][x]=IntToStr(0);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormPaint(TObject *Sender)
{
for (int i=0;i<5;i++)
{
 for (int j=0;j<5;j++)
 {
  if (StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]=="0")
  {
   StringGrid1->Canvas->Brush->Color=clBlue;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
  }
  if (StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]==1)
  {
   StringGrid1->Canvas->Brush->Color=clBlack;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
  }
  if (StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]==2)
  {
   StringGrid1->Canvas->Brush->Color=clRed;
   StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
  }
 }
}
}
//---------------------------------------------------------------------------
0
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
01.06.2011, 18:44
А почему ты решил все это в стринггриде делать????
С массивом самое правильное решение в данной ситуации, а брось ты этот стринггрид, а рисуй канвой на форме или еще где тебе удобно!!!
0
 Аватар для PhotOn
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
01.06.2011, 19:30  [ТС]
Ну задание такое, и с Стрингом проще, да и уже поздно что-то менять
0
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
01.06.2011, 19:53
Стринггрид, это тот же самый двух мерный массив, только ты его сразу, наглядно видишь!!!! и все!!!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
01.06.2011, 21:50
PhotOn, в редакторе сообщений на панели внизу есть кнопка С++ , которая вставляет тег [CPP ]без пробелов[ /CPP] для вставки кода - поверь - использование этого простого способа очень повышает вероятность ответа на вопрос . Погляди, как гламурно выглядит твой даже абсолютно не отформатированный (где отступы, повышающие читабельность и очень даже помогающие избежать механических и прочих ошибок ?) код после применения сего нехитрого средства:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
int W=5,H=5;
int z,x,N;
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
StringGrid1->Canvas->Brush->Color=clBlack;
StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]=="1";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
W=StrToInt(Edit1->Text);
H=StrToInt(Edit2->Text);
StringGrid1->ColCount=W;
StringGrid1->RowCount=H;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
N=1000;
Edit1->Text=FloatToStr(W);
Edit2->Text=FloatToStr(H);
StringGrid1->ColCount=W;
StringGrid1->RowCount=H;
for(z=0;z<N;z++)
for(x=0;x<N;x++)
StringGrid1->Cells[z][x]=IntToStr(0);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormPaint(TObject *Sender)
{
for (int i=0;i<5;i++)
{
for (int j=0;j<5;j++)
{
if (StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]=="0")
{
StringGrid1->Canvas->Brush->Color=clBlue;
StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
}
if (StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]==1)
{
StringGrid1->Canvas->Brush->Color=clBlack;
StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
}
if (StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row]==2)
{
StringGrid1->Canvas->Brush->Color=clRed;
StringGrid1->Canvas->FillRect(StringGrid1->CellRect(StringGrid1->Col,StringGrid1->Row));
}
}
}
}
//---------------------------------------------------------------------------
.
Также неплохо иметь привычку использовать фигурные скобки - {} - для определения рьласти видимости, что поверь, далеко не второстепенная вещь, например, здесь:
C++
1
2
3
4
5
6
StringGrid1->RowCount=H;
for (z=0;z<N;z++) {
  for(x=0;x<N;x++) {
    StringGrid1->Cells[z][x]=IntToStr(0);
  }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2011, 21:50
Помогаю со студенческими работами здесь

Разработка виртуальной игры
Вопрос состоит в том: Какова цена создания игры на примере, &quot;Счастливый фермер&quot; (&quot;V&quot; конктаке), а также дальнейшее...

Java разработка игры
Всем привет! Нужна Ваша помощь. Накидал образец игры. Не знаю на какую платформу реализовать чтобы заработать на ней. Вконтакте...

Разработка мини игры)
Здравствуйте, сразу прошу прощения за тему скорей всего не в том разделе)) У меня вопрос к знающим людям. Нам сказали сделать...

Разработка MUD игры
Здравствуйте, уважаемые товарищи-программисты. Пишу сюда с целью попросить у вас помощи в решении дилеммы. Я хочу работать над проектом...

Путник (робот) закрашивает лишнюю клетку
Доброго времени суток, дорогие форумчане! У меня такая проблема: Путник закрашивает лишнюю клетку, по условию он должен закрасить только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru