3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76

Лабиринт.

05.05.2010, 20:00. Показов 1627. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.05.2010, 20:00
Ответы с готовыми решениями:

Покрасить лабиринт
Помогите решить, зачет завтра вообще надо https://www.cyberforum.ru/algorithms/thread133611.html?uri=/algorithms/thread133611.html

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

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

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

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

только вот проблема: если удалять/ставить стенки случайным образом - может получиться непроходимый лабиринт.
чтобы этого не возникало - нужно еще делать функцию проверки проходимости...
0
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
05.05.2010, 20:53  [ТС]
Хорошо, возник ещё вопрос, как добавить стенку, что бы после повторного нажатия клавиши она не пропала снова, делаю программу используя цвета, тоесть если граница чёрная, пройти ей нельзя если другогог цвета то можно, просто сделать иначе мои знания этого языка не позволяют, поэтому есть как есть.
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
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
05.05.2010, 21:12
Цитата Сообщение от Apmyp /7 Посмотреть сообщение
Хорошо, возник ещё вопрос, как добавить стенку, что бы после повторного нажатия клавиши она не пропала снова
а почему она должна пропасть после нажатия клавиши?
0
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
05.05.2010, 21:15  [ТС]
Цитата Сообщение от 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
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
06.05.2010, 08:00
а почему
Цитата Сообщение от Apmyp /7 Посмотреть сообщение
Canvas->Pen->Color=clWindow;
делай по-человечески.
0
3 / 3 / 1
Регистрация: 14.10.2009
Сообщений: 76
06.05.2010, 14:25  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
а почему

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

сделай все-таки массив. и будет тебе счастье.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
06.05.2010, 14:41
массив можно сделать к тому же еще и упакованным, те хранить например только левую и верхнюю грань в каждой локации (в виду избыточности полного описания)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2010, 14:41
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru