Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65

Графическое представление лабиринта в "увеличенном масштабе"

10.09.2014, 18:50. Показов 2264. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
Допустим, у меня есть лабиринт 128x128;
Чтобы представить его графически , нужно всего-лишь написать для стены -
Pascal
1
 setpixel(i,j,clred);
Но что делать, если я хочу, чтобы он выглядел больше, ибо окошко 128х128 очень маленькое, но не хочу нарушать структуру лабиринта. Есть выход? Как его так увеличить,чтобы и выход был тот же, но и картинка больше?

Ниже есть файл с лабиринтом, если нужно для теста.
Вложения
Тип файла: txt labirint.txt (16.3 Кб, 15 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2014, 18:50
Ответы с готовыми решениями:

Вывод шкалы оси X в увеличенном масштабе
как вывести на шкале по оси X символы 1,2,3,4,5,6 если за единицу принимается 68 точек. у меня получается ерунда. For x = 0 To 300...

Размер окон при увеличенном масштабе шрифта
Добрый день! Подскажите пожалуйста, изначально писал приложение на квадратном мониторе с обычным масштабом шрифта. Когда поставил...

Как сделать изображение отдельной части детали в увеличенном масштабе?
Здравствуйте! Как в компасе сделать изображение отдельной части детали в увеличенной масштабе? Вот так, как показано на рисунке 6. б). Это...

9
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65
10.09.2014, 19:00  [ТС]
Вот пример работы моего горе Алгоритма Ли в графическом окне. Окно всего 128х128
Пы.сы. Если у кого-то есть свои алгоритмы генерации больших лабиринов - буду очень благодарен.
Изображения
 
0
290 / 271 / 107
Регистрация: 10.06.2011
Сообщений: 696
10.09.2014, 19:11
рисовать лабиринт квадратами 2х2, или 3х3 пикселя
0
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65
10.09.2014, 19:12  [ТС]
Как?
Вот есть у меня стена "@"
Как мне сделать так, чтобы она была 2х2 и не нарушать структуру?
0
290 / 271 / 107
Регистрация: 10.06.2011
Сообщений: 696
10.09.2014, 19:24
Pascal
1
setpixel(i,j,clred);
заменить на
Pascal
1
2
Setpencolor(x);
DrawRectangle(x,y,x+1,y+1);
а вообще, полный код в студию
1
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65
10.09.2014, 19:53  [ТС]
Требуется:
Размер n m
Начальная точка x y
Финальная точка x y
Потом лабиринт размером с n m.

У меня все запутано
Pascal
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
uses crt,graphabc;
type o=record
      dx,dy:integer;
     end;
var a:array[1..128,1..128] of integer;
    b,c:array[-3..1000] of o;
    n,m,l,t,u,d,s:integer;
    finalx,finaly,startx,starty:integer;
    k:char;
procedure read;
 var i,j:integer;
 begin
 readln(n,m);
 readln(startx,starty); readln(finalx,finaly);
 for i:=1 to n do 
   begin  
   for j:=1 to m do    
     begin     
     read(k);    
     if k='@' then a[i,j]:=-1 else a[i,j]:=0;   
     end;  
     readln; 
   end;
 end;
procedure write;
 var i,j:integer;
 begin
a[startx,starty]:=-2;
a[finalx,finaly]:=-3;
for i:=1 to n do
 begin
  for j:=1 to m do 
  if a[i,j]=-1 then setpixel(j,i,clblack)
   else
    if a[i,j]=-2 then setpixel(j,i,clyellow)
     else 
      if a[i,j]=-3 then setpixel(j,i,clyellow)
  writeln;
  end;
 end;
procedure check(i,j:integer);
 begin
  if (i>1) and (a[i-1,j]=0) then 
    begin
    a[i-1,j]:=d;
    inc(l);
    c[l].dx:=i-1;
    c[l].dy:=j;
    end;
  if (j>1) and (a[i,j-1]=0) then 
    begin
    a[i,j-1]:=d;
    inc(l);
    c[l].dx:=i;
    c[l].dy:=j-1;
    end;
    if (i<n) and (a[i+1,j]=0) then 
    begin
    a[i+1,j]:=d;
    inc(l);
    c[l].dx:=i+1;
    c[l].dy:=j;
    end;
     if (j<m) and (a[i,j+1]=0) then 
    begin
    a[i,j+1]:=d;
    inc(l);
    c[l].dx:=i;
    c[l].dy:=j+1;
    end;
  end;
procedure findway(i,j:integer);
 begin
 s:=0;
 a[startx,starty]:=0;
  repeat
   dec(d);
   if (i>1) and (a[i-1,j]=d) then begin dec(i); inc(s); b[s].dx:=i; b[s].dy:=j; end
   else
   if (i<n) and (a[i+1,j]=d) then begin inc(i); inc(s); b[s].dx:=i; b[s].dy:=j; end
   else
   if (j>1) and (a[i,j-1]=d) then begin dec(j); inc(s); b[s].dx:=i; b[s].dy:=j; end
   else
   if (j<m) and (a[i,j+1]=d) then begin inc(j); inc(s); b[s].dx:=i; b[s].dy:=j; end;
   setpixel(j,i,clred)
  until (i=startx) and (j=starty);
end;
BEGIN
setwindowsize(128,128);
  assign(input, 'labirint.txt'); reset(input); 
{---------} read;
b[1].dx:=startx; b[1].dy:=starty;
a[startx,starty]:=-2;
u:=1; d:=0;
repeat
 inc(d);
 l:=0;
 for t:=1 to u do
  begin
  check(b[t].dx,b[t].dy);
  end;
  if l=0 then begin write('NO EXIT'); exit; end;
  for s:=1 to l do b[s]:=c[s];
  u:=l;
until a[finalx,finaly]<>0;
{----------} findway(finalx,finaly);
{----------} write;
end.
Добавлено через 21 минуту
С rectangle не получается. Да и логично, там же на j+1,i+1 - другая точка сидит.
0
290 / 271 / 107
Регистрация: 10.06.2011
Сообщений: 696
10.09.2014, 20:14
Лучший ответ Сообщение было отмечено CrazzyBeer как решение

Решение

а так?
Pascal
1
2
Setpencolor(x);
DrawRectangle(i*2,j*2,(i+1)*2,(j+1)*2);
у меня код не запускается, ругается на переполнение переменной
1
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65
10.09.2014, 20:26  [ТС]
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Спасибо большое, Darth Coder !
Вот полный код
labirint.txt:
n m
x y
x y
zoom (во сколько раз увеличивать)
сам лабиринт


Pascal
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
114
115
116
117
118
119
120
121
122
uses crt,graphabc;
type o=record
      dx,dy:integer;
     end;
var a:array[1..128,1..128] of integer;
    b,c:array[-3..1000] of o;
    n,m,l,t,u,d,s,zoom:integer;
    finalx,finaly,startx,starty:integer;
    k:char;
procedure read;
 var i,j:integer;
 begin
 readln(n,m);
 readln(startx,starty); readln(finalx,finaly);
 readln(zoom);
 for i:=1 to n do 
   begin  
   for j:=1 to m do    
     begin     
     read(k);    
     if k='@' then a[i,j]:=-1 else a[i,j]:=0;   
     end;  
     readln; 
   end;
 end;
procedure write;
 var i,j:integer;
 begin
a[startx,starty]:=-2;
a[finalx,finaly]:=-3;
for i:=1 to n do
 begin
  for j:=1 to m do 
  if a[i,j]=-1 then begin
   setpencolor(clblack);
   DrawRectangle(j*zoom,i*zoom,(j+1)*zoom,(i+1)*zoom);
   end
   else
     if a[i,j]=-2 then
       begin
        setpencolor(clyellow);
        DrawRectangle(j*zoom,i*zoom,(j+1)*zoom,(i+1)*zoom);
       end
     else 
       begin
        setpencolor(clyellow);
        if a[i,j]=-3 then DrawRectangle(j*zoom,i*zoom,(j+1)*zoom,(i+1)*zoom);
        end;
  writeln;
  end;
 end;
procedure check(i,j:integer);
 begin
  if (i>1) and (a[i-1,j]=0) then 
    begin
    a[i-1,j]:=d;
    inc(l);
    c[l].dx:=i-1;
    c[l].dy:=j;
    end;
  if (j>1) and (a[i,j-1]=0) then 
    begin
    a[i,j-1]:=d;
    inc(l);
    c[l].dx:=i;
    c[l].dy:=j-1;
    end;
    if (i<n) and (a[i+1,j]=0) then 
    begin
    a[i+1,j]:=d;
    inc(l);
    c[l].dx:=i+1;
    c[l].dy:=j;
    end;
     if (j<m) and (a[i,j+1]=0) then 
    begin
    a[i,j+1]:=d;
    inc(l);
    c[l].dx:=i;
    c[l].dy:=j+1;
    end;
  end;
procedure findway(i,j:integer);
 begin
 s:=0;
 a[startx,starty]:=0;
  repeat
   dec(d);
   if (i>1) and (a[i-1,j]=d) then begin dec(i); inc(s); b[s].dx:=i; b[s].dy:=j; end
   else
   if (i<n) and (a[i+1,j]=d) then begin inc(i); inc(s); b[s].dx:=i; b[s].dy:=j; end
   else
   if (j>1) and (a[i,j-1]=d) then begin dec(j); inc(s); b[s].dx:=i; b[s].dy:=j; end
   else
   if (j<m) and (a[i,j+1]=d) then begin inc(j); inc(s); b[s].dx:=i; b[s].dy:=j; end;
   setpencolor(clred);
   DrawRectangle(j*zoom,i*zoom,(j+1)*zoom,(i+1)*zoom);
 
 
  until (i=startx) and (j=starty);
end;
BEGIN
  assign(input, 'labirint.txt'); reset(input); 
{---------} read;
setwindowsize(128*zoom+zoom,128*zoom+zoom);
b[1].dx:=startx; b[1].dy:=starty;
a[startx,starty]:=-2;
u:=1; d:=0;
repeat
 inc(d);
 l:=0;
 for t:=1 to u do
  begin
  check(b[t].dx,b[t].dy);
  end;
  if l=0 then begin write('NO EXIT'); exit; end;
  for s:=1 to l do b[s]:=c[s];
  u:=l;
until a[finalx,finaly]<>0;
{----------} findway(finalx,finaly);
{----------} write;
end.
0
 Аватар для CrazzyBeer
3 / 3 / 6
Регистрация: 24.03.2014
Сообщений: 65
10.09.2014, 20:32  [ТС]
Вот красавец при увеличении в 5 раз.
Миниатюры
Графическое представление лабиринта в "увеличенном масштабе"  
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
11.09.2014, 08:17
Я делал подобное для игры на VB .NET.
Только там не вся карта была видна, а лишь небольшой участок (с прокруткой карты за персонажем)
Так вот, я использовал изображения или кирпичиков или камешков, прорисовывая методом
G.DrawImage


Вам все эти методы в .NET тоже доступны
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.09.2014, 08:17
Помогаю со студенческими работами здесь

Графическое представление
Добрый день! Почему-то выводится ошибка C2664: 'QGraphicsEllipseItem::QGraphicsEllipseItem(const QGraphicsEllipseItem &amp;)' : cannot...

Графическое представление
Здравствуйте, мне нужно сделать графическое представление генеалогического дерева и как это сделать я не знаю. Может кто-нибудь чем-то...

Графическое представление данных
Доброго времени суток, друзья! Имеется вектор строка данных зависящих от времени измерения. Используя функцию area я получил следующий...

Графическое представление дерева
Может кто-нибудь помочь? Просто есть код программы. но нужно его переделать, чтобы выражалось графически, а вот в графике я мало что...

Графическое представление числа
Пример взят из книги Саммерфильда. Нужно чтобы какое-либо число (допустим 41072819) представлялось в виде звездочек, но как после того как...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru