Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 27
1

Игра "лабиринт" - как предотвратить перемещение объектов сквозь стены?

30.10.2015, 23:18. Показов 2406. Ответов 6

Доброго времени суток. В Builder C++ Пытаюсь сделать лабиринт простейшего вида.Создал форму, на неё поместил фоновый рисунок( карта по которой будет перемещаться объект), поверх карты создал еще одно изображение( это будет персонаж, который передвигается по лабиринту).
Будьте добры подсказать, как мне запретить перемещение изображению с персонажем через "стены" на карте? Я поставил таймер, чтобы считывать координаты курсора, таким образом я могу выяснить координаты моих стен на загруженном рисунке, переместив курсор в нужную область.

Короче говоря, как запретить передвижение Image2 через координаты стены?

Вот код:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TPoint pt;
      GetCursorPos(&pt);
 
      Label1->Caption = "(" +
                        IntToStr(pt.x) +
                        ")(" +
                        IntToStr(pt.y) +
                        ")";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
      {
      switch(Key)
{
case VK_LEFT :Image2->Left=Image2->Left -30; break;
case VK_UP :Image2->Top=Image2->Top -30; break;
case VK_RIGHT :Image2->Left=Image2->Left +30; break;
case VK_DOWN :Image2->Top=Image2->Top +30; break;
}
}
//---------------------------------------------------------------------------
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Игра "лабиринт" - как предотвратить перемещение объектов сквозь стены?  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2015, 23:18
Ответы с готовыми решениями:

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку &quot;Новая игра&quot; игра начиналась заново? unit1.cpp void...

Игра "морской бой" - как закрасить определенные клеточки
Делаю морской бой, у меня на форме два картинки игрового поля(клеточки 10х10). Возможно ли...

Игра "Дурак", каким компонентом воспользоваться и как.
Пытаюсь я написать карточную игру дурак, чтобы можно было играть по локальной сети или через...

Игра "Города", как дать пользователю возможность выиграть у компьютера?
Доброго времени суток! Мне нужны ваши идеи! Создал интерпретацию игры &quot;города&quot;, однако я не знаю...

6
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
01.11.2015, 03:27 2
C++
1
2
3
4
5
6
7
8
9
10
11
if (x!=координата икс запрещенная к перемещению &&  y!=координата игрик запрещенная к перемещению )
switch(Key)
{
case VK_LEFT :Image2->Left=Image2->Left -30; break;
case VK_UP :Image2->Top=Image2->Top -30; break;
case VK_RIGHT :Image2->Left=Image2->Left +30; break;
case VK_DOWN :Image2->Top=Image2->Top +30; break;
}
}else{
ShowMessage("Персонаж уперся в стену");
}
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 27
01.11.2015, 16:41  [ТС] 3
Не получается реализовать это, при компановке ошибка. Подскажите как будет правильно задать промежуток координат, которые должны будут ограничены, например от y 0 по 300?
0
Миниатюры
Игра "лабиринт" - как предотвратить перемещение объектов сквозь стены?  
управление сложностью
1684 / 1296 / 260
Регистрация: 22.03.2015
Сообщений: 7,543
Записей в блоге: 5
01.11.2015, 18:28 4
300-Размер изображения
0
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 27
01.11.2015, 23:46  [ТС] 5
Почтальон, Можете написать, как будет выглядеть код полностью? Ну не могу я разобраться, будьте добры помочь.
0
управление сложностью
1684 / 1296 / 260
Регистрация: 22.03.2015
Сообщений: 7,543
Записей в блоге: 5
02.11.2015, 18:18 6
Чтобы запретить проход сквозь стены - нужно учесть размеры объекта. Т.е. получается вот что. Чтобы объект отскочил от стены - нужно знать координаты стены за вычетом размеров картинки (объекта). На форуме была подобная задача, где мячик прыгает по монитору, можете взять алгоритм от туда.
Цитата Сообщение от Lege4 Посмотреть сообщение
Можете написать, как будет выглядеть код полностью?
Сейчас работаю над проектом, времени совершенно нет.
0
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
03.11.2015, 09:08 7
Тебе же явно компилятор говорит что не знает таких переменных, объяви например глобально переменные
в файле .h
C++
1
int x,y;
Или прямо в событии нажатия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int x,y;
x=Image2->Left;
y=Image2->Top;
if (x!=координата икс запрещенная к перемещению &&  y!=координата игрик запрещенная к перемещению )
switch(Key)
{
case VK_LEFT :Image2->Left=Image2->Left -30; break;
case VK_UP :Image2->Top=Image2->Top -30; break;
case VK_RIGHT :Image2->Left=Image2->Left +30; break;
case VK_DOWN :Image2->Top=Image2->Top +30; break;
}
}else{
ShowMessage("Персонаж уперся в стену");
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2015, 09:08

Перемещение круга. Пpоблема с "sleep();"
вот код перещения круга на 300 пикселей вниз: { int i,y; i=0; y=Shape1-&gt;Top; while (i&lt;300) ...

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"
Доброе время суток, как переделать int Key= Application-&gt;MessageBox(L&quot;Text&quot;, L&quot;Caption&quot;,...

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в...

Игра "Лабиринт", запретить проходить сквозь стены
Добрый день, сделал простую игру, лабиринт нарисовал и двигается рисунок на кнопочки, нужно выход...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.