Помощь - Поиск - Пользователи - Календарь
Полная версия: ЧТо не так в коде?
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
ilua_great
Код

program maper;
uses crt;
var f:text;
    x,y:integer;
    map: array[1..10,1..10]of integer;
begin
clrscr;
assign(f,'map');
reset(f);
{load}
writeln('load');
x:=1;
y:=1;
repeat
  read(f,map[x,y]);
  y:=y+1;
  if y>10 then
   begin
   y:=1;
   x:=x+1;
   end;
  until x>10;
writeln('load 100%');
close(f);
{load}
readln;
clrscr;
{draw}
x:=1;
y:=1;
repeat
  gotoxy(x,y);
  write(map[x,y]);
  y:=y+1;
  if y>10 then
   begin
   y:=1;
   x:=x+1;
   end;
  until x>10;
{draw}
readln;
end.


Этот код должен рисовать картинку как в файле
Код

1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 7 7 7 7 7 7 7 7 1
1 1 1 1 1 1 1 1 1 1


Но он рисует её перевёрнуто, в чём проблема? unsure.gif
volvo
Цитата
в чём проблема?
В том, что при обращении к map[x, y] изменение Х - это изменение строки, а при gotoxy(x, y) изменение Х - это изменение столбца...
ilua_great
Но по программе x:=1 y:=1 если y>5, тобиш изменение строки, или нет???
volvo
Я ж тебе говорю, что индексы X и Y меняются для GotoXY и для Map одинаково, так? У тебя же все обрабатывается в одном цикле. НО... Значения X для GotoXY и для Map - совершенно противоположные...

Пойми, при работе с матрицами первым изменяется самый последний индекс, т.е. сначала ты проходишь по первой строке, и только потом переходишь на вторую, правда? Это достигается изменением в Map[i, j] индекса J быстрее, чем индекса i... Помотри, что у тебя меняется быстрее... Y, не так ли? Переходим теперь к GotoXY... Что означает случай, когда Y меняется быстрее чем X? То, что ты проходишь сначала по первому столбцу, и только потом переходишь ко второму, потому что ОY - это ось вертикальная...

Вот тебе и противоречие...

Хочешь правильной работы - обращайся к Map[Y, X] ...
ilua_great
Мне друг говорил чтото похожее а я не принял значения, вот я дурак nea.gif
ilua_great
Вот рабочая прога
Код

program load;
uses crt;
var x,y:integer;
    f:text;
    room:array[1..6,1..5]of integer;
procedure load_room;
begin
assign(f,'room');
reset(f);
for y:=1 to 5 do
  begin
  for x:=1 to 6 do
   begin
   read(f,room[x,y]);
   end;
  end;
close(f);
end;
procedure draw_room;
begin
for y:=1 to 5 do
  begin
  for x:=1 to 6 do
   begin
   gotoxy(x,y);
   write(room[x,y]);
   end;
  end;
end;

begin
load_room;
draw_room;
readln;
end.


Код

1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5


зы Как ты , вова, всё загнул, но всё равно спасибо! Как говорил один не безизвестный чел-"Истина где-то рядом", я просто перепутал x и y местами lol.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.