Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
1

Лабиринт.

05.05.2010, 20:00. Показов 1176. Ответов 8
Метки нет (Все метки)

Добрый вечер, вот решил создать примитивный лабиринтик, создал, проблем не было, но тут пришла в голову идея, что бы сделать дополнения к лабиринту, тоесть сделать так, что бы после нажатия скольки то клавиш вниз, в право..( либо с таймером каждые секунд 5) , в лабиринте пропадала бы стенка с каком то месте и появлялось в другом, вообщем не знаю я как реализовать эту затею, вот код програмки:


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
//---------------------------------------------------------------------------
 
#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::Button1Click(TObject *Sender)
{
     Canvas->Pen->Color=clBlack;
     Canvas->MoveTo(90,40); Canvas->LineTo(360,40);
     Canvas->LineTo(360,190); Canvas->LineTo(360,190);
     Canvas->LineTo(240,190);
     Canvas->LineTo(90,190); Canvas->LineTo(90,70);
     Canvas->MoveTo(120,70); Canvas->LineTo(120,130);
     Canvas->MoveTo(90,160); Canvas->LineTo(120,160);
     Canvas->MoveTo(150,40); Canvas->LineTo(150,70);
     Canvas->MoveTo(120,100); Canvas->LineTo(180,100);
     Canvas->LineTo(180,130);
     Canvas->MoveTo(150,130); Canvas->LineTo(150,190);
     Canvas->MoveTo(180,160); Canvas->LineTo(210,160);
     Canvas->MoveTo(240,190); Canvas->LineTo(240,160);
     Canvas->MoveTo(240,130); Canvas->LineTo(270,130);
     Canvas->MoveTo(330,130); Canvas->LineTo(330,190);
     Canvas->MoveTo(270,160); Canvas->LineTo(330,160);
     Canvas->MoveTo(330,100); Canvas->LineTo(360,100);
     Canvas->MoveTo(300,70); Canvas->LineTo(300,130);
     Canvas->MoveTo(330,40); Canvas->LineTo(330,70);
     Canvas->MoveTo(270,70); Canvas->LineTo(330,70);
     Canvas->MoveTo(180,70); Canvas->LineTo(240,70);
     Canvas->MoveTo(240,40); Canvas->LineTo(240,100);
     Canvas->LineTo(270,100);
      Canvas->MoveTo(210,70); Canvas->LineTo(210,130);
 
 
 
 
     BitBtn1->Visible=true;
     Image1->Visible=True;
     Button1->Enabled=false;
     
     BitBtn1->SetFocus();
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::BitBtn1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   if (Key==37 && Canvas->Pixels[BitBtn1->Left-5][BitBtn1->Top]!=clBlack)
    BitBtn1->Left-=30;
 
   if (Key==39 && Canvas->Pixels[BitBtn1->Left+25][BitBtn1->Top]!=clBlack)
    BitBtn1->Left+=30;
 
    if (Key==38 && Canvas->Pixels[BitBtn1->Left][BitBtn1->Top-5]!=clBlack)
    BitBtn1->Top-=30;
 
    if (Key==40 && Canvas->Pixels[BitBtn1->Left][BitBtn1->Top+25]!=clBlack)
    BitBtn1->Top+=30;
 
    if ((BitBtn1->Top) == (Image1->Top) && (BitBtn1->Left) == (Image1->Left))
    {Label1->Visible=True; Label1->Caption="  Òû âûéãðàë!   Èãðà îêîí÷åííà" ;
         BitBtn1->Enabled=false;}
 
}
//---------------------------------------------------------------------------
Визуально это выглядит так:
0

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

Миниатюры
Лабиринт.  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2010, 20:00
Ответы с готовыми решениями:

Покрасить лабиринт
Помогите решить, зачет завтра вообще надо...

Игра лабиринт с препятствиями
Здраствуйте.Создаю игру лабиринт,но не простой лабиринт,а с препятствиями.Вот не знаю как добавить...

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

Сделал лабиринт, оцените кто нибудь уровень говнокода, и что бы подправить тут или изменить
karta.txt положить в диск С #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt;...

8
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
05.05.2010, 20:15 2
делаешь массив с переменными-флагами.
если флаг установлен - рисуешь стенку, если нет - не рисуешь.
хоть в цикле, хоть на каждую стенку отдельно.

по таймеру меняешь состояния флагов.

только вот проблема: если удалять/ставить стенки случайным образом - может получиться непроходимый лабиринт.
чтобы этого не возникало - нужно еще делать функцию проверки проходимости...
0
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
05.05.2010, 20:53  [ТС] 3
Хорошо, возник ещё вопрос, как добавить стенку, что бы после повторного нажатия клавиши она не пропала снова, делаю программу используя цвета, тоесть если граница чёрная, пройти ей нельзя если другогог цвета то можно, просто сделать иначе мои знания этого языка не позволяют, поэтому есть как есть.
C++
1
2
3
 if ((BitBtn1->Top==75) && (BitBtn1->Left==125))
{ Canvas->MoveTo(150,70); Canvas->LineTo(150,100);
  Canvas->Pen->Color=clWindow; Canvas->MoveTo(150,40); Canvas->LineTo(150,70);}
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
05.05.2010, 21:12 4
Цитата Сообщение от Apmyp /7 Посмотреть сообщение
Хорошо, возник ещё вопрос, как добавить стенку, что бы после повторного нажатия клавиши она не пропала снова
а почему она должна пропасть после нажатия клавиши?
0
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
05.05.2010, 21:15  [ТС] 5
Цитата Сообщение от Patch Посмотреть сообщение
а почему она должна пропасть после нажатия клавиши?
Да я сам вот не могу понять, вписываю код программы, одна стенка появляется-другая, которую хочу убрать, пропадает, но если я два раза пытаюсь пройти через появившуюся стенку-она тоже пропадает. Вот код отрывка:
C++
1
2
3
 if ((BitBtn1->Top==75) && (BitBtn1->Left==125))
{ Canvas->MoveTo(150,70); Canvas->LineTo(150,100);
  Canvas->Pen->Color=clWindow; Canvas->MoveTo(150,40); Canvas->LineTo(150,70);}
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
06.05.2010, 08:00 6
а почему
Цитата Сообщение от Apmyp /7 Посмотреть сообщение
Canvas->Pen->Color=clWindow;
делай по-человечески.
0
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
06.05.2010, 14:25  [ТС] 7
Цитата Сообщение от Patch Посмотреть сообщение
а почему

делай по-человечески.
не важно какой цвет я ставлю, всёравно проблема остаётся.
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
06.05.2010, 14:34 8
Цитата Сообщение от Apmyp /7 Посмотреть сообщение
всёравно проблема остаётся.
кончено остается.
делаешь-то все равно через попу.

сделай все-таки массив. и будет тебе счастье.
0
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
06.05.2010, 14:41 9
массив можно сделать к тому же еще и упакованным, те хранить например только левую и верхнюю грань в каждой локации (в виду избыточности полного описания)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2010, 14:41

Игра "лабиринт" - как предотвратить перемещение объектов сквозь стены?
Доброго времени суток. В Builder C++ Пытаюсь сделать лабиринт простейшего вида.Создал форму, на неё...

Игра лабиринт. ИИ в лабиринте. Как задать лабиринт
У меня есть следующее задание: Дано: - робот - лабиринт Задание: - Нужно реализовать...

Лабиринт
вот у меня картинка ездит по экрану с помощью управления стрелок.а как сделать , что бы она не...

Лабиринт
Есть задача. Я не прошу вас решить её за меня. Как вообще это должно происходить, этого не пойму. ...


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

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

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