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

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

17.05.2011, 18:12. Показов 3670. Ответов 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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru