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

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

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

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

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

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

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

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

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

31
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
17.05.2011, 18:30 2
а кроме идеи игры, есть какието наработки ?
0
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 18:45  [ТС] 3
Ну настроен интерфейс программы и немного кода
0
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 18:55  [ТС] 4
Разработка Игры Путник
0
LK
Заблокирован
17.05.2011, 19:19 5
Цитата Сообщение от 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
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 19:41  [ТС] 6
А можно еще совет насчет закрашивания ячейки и движения закрашенной ячейки плиз?)))
0
LK
Заблокирован
17.05.2011, 19:44 7
1. Закрашивание ячеек в StringGrid
StringGridDrawItem
2. движение куда ? я так понимаю, красить нужно ту ячейку, куда занесло Путника
1
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 19:53  [ТС] 8
Ну скажем, Путник-это закрашенная ячейка, а если нажать кнопку скажем влево, закрашивается ячейка левее, а прежняя становится белой по умолчанию :-)
0
LK
Заблокирован
17.05.2011, 20:07 9
1. я понял, см. п.2
2. ваш Путник, по сути, "змейка" без хвоста, реализация на форуме обсуждалась http://www.google.com.ua/searc... uk___UA420 - можно усложнить игру - например, закрашивать ячейки, где путник уже побывал , и обходить их десятой дорогой
2
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
17.05.2011, 20:11  [ТС] 10
Спасибо за информацию)))
0
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
19.05.2011, 20:50  [ТС] 11
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
Тутошний я
2146 / 1201 / 225
Регистрация: 03.11.2009
Сообщений: 4,416
Записей в блоге: 2
21.05.2011, 01:38 12
Цитата Сообщение от PhotOn Посмотреть сообщение
(т.е. при нажатии на клавишу ячейка сдвигается на одну клетку). И не могла ходить по черным ячейкам.
Берёшь двухмерный массив по количеству ячеек.
Записываешь в массив где у тебя чёрные ячейки.
При нажатии на клавишу, в массиве проверяешь цвет следующей ячейки, если чёрный остаешься на месте.
1
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
21.05.2011, 14:41  [ТС] 13
А как это будет в виде кода?
0
Тутошний я
2146 / 1201 / 225
Регистрация: 03.11.2009
Сообщений: 4,416
Записей в блоге: 2
21.05.2011, 20:20 14
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
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
22.05.2011, 11:18  [ТС] 15
Спасибо большое :-)
0
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
01.06.2011, 16:34  [ТС] 16
А нельзя сделать так, чтобы весь 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
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
01.06.2011, 18:44 17
А почему ты решил все это в стринггриде делать????
С массивом самое правильное решение в данной ситуации, а брось ты этот стринггрид, а рисуй канвой на форме или еще где тебе удобно!!!
0
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 54
01.06.2011, 19:30  [ТС] 18
Ну задание такое, и с Стрингом проще, да и уже поздно что-то менять
0
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
01.06.2011, 19:53 19
Стринггрид, это тот же самый двух мерный массив, только ты его сразу, наглядно видишь!!!! и все!!!
0
LK
Заблокирован
01.06.2011, 21:50 20
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
01.06.2011, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2011, 21:50
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru