IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Рисунок человечка в матрице
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


В задаче по массиву-лабиринту передвигается человек в виде циферки. А можно ли как то сделать так, чтобы именно рисунок человечка передвигался в нем, т.е. что-то нарисованное, а не простая цифра? Если можно, то примерно как это реализовать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


подозреваю, что сделать это нужно в текстовом режиме.
Если так, то придется перепрограммировать знакогенератор... вечером посмотрю как это делается...


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вот накатал smile.gif

Управление

w - up
s - down
a - left
d - right

escape - exit

uses crt;
const
FIELD_SIZE = 20;

type

TField = array [1..FIELD_SIZE, 1..FIELD_SIZE] of byte;

TMan = object

public

constructor Init;
destructor Done;

function CanMove(dRow, dCol : integer) : boolean;
procedure Move(dRow, dCol : integer);
procedure Show;

private

row, col : integer;
coords : array [0..7] of record row, col : byte; end;
end;

constructor TMan.Init;
begin
row := FIELD_SIZE div 2;
col := row;
Move(0, 0);
end;

destructor TMan.Done;
begin
end;

function TMan.CanMove(dRow, dCol : integer) : boolean;
var
stop : boolean;
begin

row := row + dRow;
col := col + dCol;

// столкновение с "бортами" возможно в 4-х точках, проверим их

stop := false;

stop := ((row - 1) < 1);
if not stop then stop := ((row + 3) > FIELD_SIZE);
if not stop then stop := ((col - 1) < 1);
if not stop then stop := ((col + 1) > FIELD_SIZE);

if stop then begin
row := row - dRow;
col := col - dCol;
end;
CanMove := not stop;

end;

procedure TMan.Move(dRow, dCol : integer);
begin
coords[0].row := row;
coords[0].col := col;

coords[1].row := row - 1;
coords[1].col := col;

coords[2].row := row;
coords[2].col := col - 1;

coords[3].row := row;
coords[3].col := col + 1;

coords[4].row := row + 1;
coords[4].col := col;

coords[5].row := row + 2;
coords[5].col := col;

coords[6].row := row + 3;
coords[6].col := col - 1;

coords[7].row := row + 3;
coords[7].col := col + 1
end;

procedure TMan.Show;
begin
end;

procedure PrintField(f : TField; m : TMan);
var
i, j : byte;
begin
FillChar(f, sizeof(f), 0);
with m do begin
for i := 1 to 7 do
with coords[i] do
f[row, col] := 1;
end;

for i := 1 to FIELD_SIZE do begin
writeln;
for j := 1 to FIELD_SIZE do begin
case f[i,j] of
0 : TextColor(White);
1 : TextColor(Blue);
end;
write(f[i,j] : 2);
end;
end;
end;

var
man : TMan;
field : TField;
ch : char;
dr, dc : integer;

begin

Clrscr;

man.Init;

repeat
dr := 0;
dc := 0;
clrscr;
PrintField(field, man);
ch := readkey;
case ch of
'w' : begin dr := -1; dc := 0; end;
's' : begin dr := +1; dc := 0; end;
'a' : begin dc := -1; dr := 0; end;
'd' : begin dc := +1; dr := 0; end;
end;
if man.CanMove(dr, dc) then man.Move(dr, dc);
until ch = #27;

man.Done;

end.


С лабиринтом конечно будет похуже ... но если человека делать просто как циферку, то все еще вроще.

Сообщение отредактировано: volvo -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


спасибо, будем разбираться с объектами=) жалко, что разрешение экрана маленькое и шрифт большой, а то в самый раз бы.

Цитата
подозреваю, что сделать это нужно в текстовом режиме.
Если так, то придется перепрограммировать знакогенератор... вечером посмотрю как это делается...

посмотри пж-та, если это не тяжело rolleyes.gif

А если напр. с помощью Graph нарисовать какого-то стикмена, сделать его объектом и где стоит человек, в эту область экрана помещать этого стикмена. Или это очень трудно реализовать, что пытаться даже не стоит? Или тогда надо чисто в графическом режиме работать, лабиринт в нем отрисовать и т.д.?

Сообщение отредактировано: DFooz -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


вот... нашел на винте, авторство не мое:
Прикрепленный файл  font_change.rar ( 2.05 килобайт ) Кол-во скачиваний: 170

использование:
uses crt,tpVfont;
var m:array [1..16] of byte;
i:byte;
begin
for i:=1 to 16 do m[i]:=i;
changeSymbol(100,16,@m);
write(#100);
readkey;
end.


работает только в полноэкранном режиме.

вот некое подобие человечка:
textmode(co40);
m[1]:=56;
m[2]:=56;
m[3]:=16;
m[4]:=60;
m[5]:=84;
m[6]:=84;
m[7]:=84;
m[8]:=16;
m[9]:=16;
m[10]:=56;
m[11]:=40;
m[12]:=40;
m[13]:=40;
m[14]:=40;
m[15]:=40;
m[16]:=40;


это для режима 8x16...

Сообщение отредактировано: volvo -


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


спасибо. good.gif Буду разбираться.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 18.12.2017 19:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"