L0WsKiLL | Bonjour à tous, j'ai un petit projet en informatique qui consiste à faire un SOKOBAN et j'ai quelques difficultés. Pour tout le code, j'ai mit,
const l=7;
m=6;
type grille = array[1..10,1..10] of char; |
J'ai la "carte" dans un fichier que je rentre dans un tableau via cette procedure:
procedure lecture;
var f:text;
c:char;
t:grille;
i,j:integer;
begin
assign(f,'truc1.txt');
reset(f);
for i:=1 to 8 do
begin
for j:=1 to 6 do
begin
read(f,c);
t[i,j]:=c;
end;
end;
close(f);
for i:=1 to 8 do
begin
for j:=1 to 6 do
begin
write(t[i,j])
end;
end;
readln
end; |
jusque là, pas de problème, le contenu du fichier est enregistré dans un tableau, tableau qui est lui même affiché à l'écran. je rentre ensuite une procedure par déplacement. Elles sont toutes sous cette forme:
procedure haut;
var i,j:integer;
t:grille;
begin
for i:=1 to l do
for j:= 1 to m do
begin
if t[i,j]='m' then
begin
if t[i-1,j] = ' ' then begin t[i,j]:=' '; t[i-1,j]:='m' end;
if t[i-1,j]='+' then begin t[i,j]:=' '; t[i-1,j]:='M' end;
if t[i-1,j]=' ' then begin t[i,j]:=' '; t[i-1,j]:='m' end;
if (t[i-1,j]='O') and (t[i-2,j]=' ') then begin t[i-2,j]:='O'; t[i-1,j]:='m'; t[i,j]:=' ' end;
if (t[i-1,j]='O') and (t[i-2,j]='+') then begin t[i-2,j]:='Q'; t[i-1,j]:='m'; t[i,j]:=' ' end;
if (t[i-1,j]='Q') and (t[i-2,j]=' ') then begin t[i-2,j]:='O'; t[i-1,j]:='M'; t[i,j]:=' ' end;
if (t[i-1,j]='Q') and (t[i-2,j]='+') then begin t[i-2,j]:='Q'; t[i-1,j]:='M'; t[i,j]:=' ' end;
end;
end;
readln
end; |
Et je cherche ensuite à afficher le nouveau tableau via cette procedure:
procedure affichage; // on peut afficher la grille à n'importe quel moment
var cpt:integer;
i,j:integer;
t:grille;
begin
for i:=1 to l do
begin
for j:=1 to m do
begin
write(t[i,j]);
write;
read;
end;
end;
cpt:=cpt+1;
writeln
end; |
Le programme principale énumère simplement les procedure décrites ci-dessus. Mon problème est divers. Soit j'affiche effectivement le premier tableau provenant du fichier, mais après rien ne se passe. Soit, le premier tableau s'affiche sans soucis, et lorsque je lance la procedure 'haut', j'ai ce genre de joyeusetés qui s'affichent: ├#Ûw♥
D☻☺
@ ♥
☺ ê
☺ D
☺ ☺
alors que le fichier de départ contenait uniquement: ####
# +#
# ###
#Qm #
# O #
# ###
####
J'ai également une autre question à vous poser. Je cherche à générer des fichiers de sauvegarde pour chaque coups, pour pouvoir revenir sur le précédent en appuyant sur une touche. Je défini donc des fichier sous cette forme:
procedure sauv(var t:grille);
var f:text;
cpt:integer;
s,h:string;
begin
cpt:=1;
getdir(0,s);
h:=(s,'temp',cpt,'.txt');
assign(f,h);
rewrite(f);
for i:=1 to l do
for j:=1 to m do begin write(f,t[i,j]); readln end;
cpt:=cpt+1
end; |
Mais le compilateur n'a pas l'air d'apprecier la définition de h. Merci d'avance Lowskill Message édité par L0WsKiLL le 14-06-2004 à 17:11:33
|