|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.07.2010, 17:10 | #1 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
как сам лабиринт ввести не как постоянную как тут а считыванием с файла
вот прога:
Program Voln; Uses Crt; Const Map : array [1..10, 1..10] of Byte = ( (0, 0, 1, 0, 0, 0, 0, 0, 0, 0), (1, 0, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 1, 1, 1, 0, 0, 1, 1), (0, 1, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 0, 1, 1, 1, 0, 1, 0), (0, 0, 1, 1, 1, 0, 1, 0, 0, 0), (0, 0, 0, 1, 0, 0, 1, 0, 0, 0), (1, 1, 0, 1, 0, 0, 1, 1, 1, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0) ); var XS, YS, XE, YE : Byte; X, Y, I : Byte; MapM : array [1..10, 1..10] of Byte; Moves : Byte; MovesX : array [1..100] of Byte; MovesY : array [1..100] of Byte; Procedure Next(Var X, Y : Byte); Begin If (X <10) and (MapM[X, Y] - MapM[X + 1, Y] = 1) then Begin X := X + 1; Exit; End; If (X >1) and (MapM[X, Y] - MapM[X - 1, Y] = 1) then Begin X := X - 1; Exit; End; If (Y <10) and (MapM[X, Y] - MapM[X, Y + 1] = 1) then Begin Y := Y + 1; Exit; End; If (Y >1) and (MapM[X, Y] - MapM[X, Y - 1] = 1) then Begin Y := Y - 1; Exit; End; End; Begin ClrScr; For Y := 1 to 10 do Begin For X := 1 to 10 do Write(Map[X, Y], ' '); WriteLn; End; WriteLn('Please enter X and Y of the start: '); ReadLn(XS, YS); WriteLn('Please enter X and Y of the end: '); ReadLn(XE, YE); If (XS = XE) or (YS = YE) then Begin WriteLn('Start = End. Error!!!'); ReadLn; Halt; End; If (Map[XS, YS] = 1) or (Map[XE, YE] = 1) then Begin WriteLn('Error!!!'); ReadLn; Halt; End; MapM[XS, YS] := 1; I := 1; Repeat I := I + 1; For Y := 1 to 10 do For X := 1 to 10 do If MapM[X, Y] = I - 1 then Begin If (Y <10) and (MapM[X, Y + 1] = 0) and (Map[X, Y+1] = 0) Then MapM[X, Y+1] := I; If (Y >1) and (MapM[X, Y-1] = 0) and (Map[X, Y-1] = 0) Then MapM[X, Y-1] := I; If (X <10) and (MapM[X+1, Y] = 0) and (Map[X+1, Y] = 0) Then MapM[X+1, Y] := I; If (X >1) and (MapM[X-1, Y] = 0) and (Map[X-1, Y] = 0) Then MapM[X-1, Y] := I; End; If I = 100 then Begin WriteLn('You can''t go there!!!'); ReadLn; Halt; End; {For X := 1 to 10 do begin For y := 1 to 10 do Write(MapM[X, Y]:4); Writeln End; Readln; } Until MapM[XE, YE] >0; Writeln; Moves := I - 1; X := XE; Y := YE; I := Moves; Map[XE, YE] := 4; Repeat MovesX[I] := X; MovesY[I] := Y; Next(X, Y); Map[X, Y] := 3; I := I - 1; Until (X = XS) and (Y = YS); Map[XS, YS] := 2; For I := 1 to Moves do WriteLn('X = ', MovesX[I],', Y = ', MovesY[I]); WriteLn('Total: ', Moves, ' moves'); ReadLn; For x := 1 to 10 do Begin For y := 1 to 10 do Write(Map[X, Y], ' '); WriteLn; End; ReadLn; End. |
17.07.2010, 17:11 | #2 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
вот файл:
Map: ( (0, 0, 1, 0, 0, 0, 0, 0, 0, 0), (1, 0, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 1, 1, 1, 0, 0, 1, 1), (0, 1, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 0, 1, 1, 1, 0, 1, 0), (0, 0, 1, 1, 1, 0, 1, 0, 0, 0), (0, 0, 0, 1, 0, 0, 1, 0, 0, 0), (1, 1, 0, 1, 0, 0, 1, 1, 1, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0) ); |
17.07.2010, 17:11 | #3 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
называется karta.txt
|
17.07.2010, 17:16 | #4 |
Форумчанин
Регистрация: 13.07.2010
Сообщений: 346
|
непонятно что именно надо
ну например можно чисто текстом закатать файл или преобразовать все по 2 байта и байтами сделать....
Non est culpa vin, sed culpa bibentis
|
17.07.2010, 17:27 | #5 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
надо карту в начале:
Map: ( (0, 0, 1, 0, 0, 0, 0, 0, 0, 0), (1, 0, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 1, 1, 1, 0, 0, 1, 1), (0, 1, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 0, 1, 1, 1, 0, 1, 0), (0, 0, 1, 1, 1, 0, 1, 0, 0, 0), (0, 0, 0, 1, 0, 0, 1, 0, 0, 0), (1, 1, 0, 1, 0, 0, 1, 1, 1, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0) ); забить в файл karta.txt и организовать чтение информации о лабиринте из файла и ее хранение в двумерном массиве |
17.07.2010, 17:29 | #6 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
а карту из констант просто убрать
я пытался считать карту из файла но вылетала ошибка 106 и я забил карту в постоянные а так нежелательно |
17.07.2010, 17:42 | #7 |
Форумчанин
Регистрация: 13.07.2010
Сообщений: 346
|
давай проще - разберем твой способ чтения из файла
Non est culpa vin, sed culpa bibentis
|
17.07.2010, 17:51 | #8 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
Program Voln;
Uses Crt; var XS, YS, XE, YE : Byte; X, Y, I : Byte; MapM : array [1..10, 1..10] of Byte; Moves : Byte; MovesX : array [1..100] of Byte; MovesY : array [1..100] of Byte; Procedure Next(Var X, Y : Byte); Begin If (X <10) and (MapM[X, Y] - MapM[X + 1, Y] = 1) then Begin X := X + 1; Exit; End; If (X >1) and (MapM[X, Y] - MapM[X - 1, Y] = 1) then Begin X := X - 1; Exit; End; If (Y <10) and (MapM[X, Y] - MapM[X, Y + 1] = 1) then Begin Y := Y + 1; Exit; End; If (Y >1) and (MapM[X, Y] - MapM[X, Y - 1] = 1) then Begin Y := Y - 1; Exit; End; End; const n=10; type t= array[1..n, 1..n] of integer; var Map:t; f: text; k,j:integer; Begin вот тут и ошибочка ClrScr; assign(f, 'karta.txt'); reset(f); Writeln('ichodnaya karta'); for x:=1 to n do for y:=1 to n do readln(f, Map[x,y]); For Y := 1 to 10 do Begin For X := 1 to 10 do Write(Map[X, Y], ' '); WriteLn; End; WriteLn('Please enter X and Y of the start: '); ReadLn(XS, YS); WriteLn('Please enter X and Y of the end: '); ReadLn(XE, YE); If (XS = XE) or (YS = YE) then Begin WriteLn('Start = End. Error!!!'); ReadLn; Halt; End; If (Map[XS, YS] = 1) or (Map[XE, YE] = 1) then Begin WriteLn('Error!!!'); ReadLn; Halt; End; MapM[XS, YS] := 1; I := 1; Repeat I := I + 1; For Y := 1 to 10 do For X := 1 to 10 do If MapM[X, Y] = I - 1 then Begin If (Y <10) and (MapM[X, Y + 1] = 0) and (Map[X, Y+1] = 0) Then MapM[X, Y+1] := I; If (Y >1) and (MapM[X, Y-1] = 0) and (Map[X, Y-1] = 0) Then MapM[X, Y-1] := I; If (X <10) and (MapM[X+1, Y] = 0) and (Map[X+1, Y] = 0) Then MapM[X+1, Y] := I; If (X >1) and (MapM[X-1, Y] = 0) and (Map[X-1, Y] = 0) Then MapM[X-1, Y] := I; End; If I = 100 then Begin WriteLn('You can''t go there!!!'); ReadLn; Halt; End; {For X := 1 to 10 do begin For y := 1 to 10 do Write(MapM[X, Y]:4); Writeln End; Readln; } Until MapM[XE, YE] >0; Writeln; Moves := I - 1; X := XE; Y := YE; I := Moves; Map[XE, YE] := 4; Repeat MovesX[I] := X; MovesY[I] := Y; Next(X, Y); Map[X, Y] := 3; I := I - 1; Until (X = XS) and (Y = YS); Map[XS, YS] := 2; For I := 1 to Moves do WriteLn('X = ', MovesX[I],', Y = ', MovesY[I]); WriteLn('Total: ', Moves, ' moves'); ReadLn; For x := 1 to 10 do Begin For y := 1 to 10 do Write(Map[X, Y], ' '); WriteLn; End; ReadLn; End. |
17.07.2010, 17:52 | #9 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
вот оно и нужный файл:
Map: ( (0, 0, 1, 0, 0, 0, 0, 0, 0, 0), (1, 0, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 1, 1, 1, 0, 0, 1, 1), (0, 1, 0, 0, 0, 1, 0, 0, 1, 0), (0, 0, 0, 0, 1, 1, 1, 0, 1, 0), (0, 0, 1, 1, 1, 0, 1, 0, 0, 0), (0, 0, 0, 1, 0, 0, 1, 0, 0, 0), (1, 1, 0, 1, 0, 0, 1, 1, 1, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0), (0, 1, 0, 0, 0, 0, 1, 0, 0, 0) ); |
17.07.2010, 17:52 | #10 |
Новичок
Джуниор
Регистрация: 17.07.2010
Сообщений: 10
|
название karta.txt
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как ввести? | logok | Общие вопросы C/C++ | 1 | 24.04.2010 06:41 |
Как изменять атрибуты музыкального файла такие как Исполнитель, Альбом и т.п. | TwiX | Общие вопросы Delphi | 4 | 22.01.2010 14:48 |
Как из юникодного текстового файла прочитать его построчно и неповторяющиеся слова ввести в ListBox? | SkAndrew | Общие вопросы Delphi | 2 | 10.11.2008 22:14 |
как из EXE файла ...выташить сам проект(код,Project,Unit)??? | ivp88 | Общие вопросы Delphi | 5 | 18.03.2007 23:41 |