
Hundir la flota en PAscal
Publicado por Juan (7 intervenciones) el 14/12/2012 10:54:58
Hola:
Me han mandado hace un hundir la flota en Pascal y ando un poco perdido.
Las características que tiene que tener el programas son las siguientes:
- Deberá ser jugado por dos jugadores, cada uno de los cuales hará uso de dos
‘tableros’ (cada uno de dimensiones 8x8), uno para colocar sus barcos y otro para
controlar los disparos que ha ido realizando sobre su adversario.
- Cada jugador dispondrá de cuatro barcos, uno de longitud cuatro, otro de tres, otro
de dos y otro de uno. Estos deben ser colocados por cada jugador en su tablero de
barcos al comenzar la partida, y sólo pueden ser colocados de forma horizontal o
vertical.
- Cuando uno de los dos haga blanco en un barco del otro, en cuyo caso se le debe
informar del tipo de barco que ha alcanzado, y ese jugador vuelve a disparar.
- Cuando uno de los dos consiga hundir la flota contraria por completo, el programa
finaliza, indicando el ganador.
- Las matrices en las que los jugadores posicionan sus barcos deberán ser de registros,
que contendrán, al menos, los siguientes campos:
• Si en esa posición hay agua o barco.
• En caso de haber barco si este es de dimensión 1, 2, 3 o 4. De esta forma cuando el
jugador contrario acierte se le podrá informar del tipo de barco que ha alcanzado.
Hasta ahora he hecho lo siguiente (seguro que no está bien):
Agradecería que me echaseis una mano.
Muchas gracias
Me han mandado hace un hundir la flota en Pascal y ando un poco perdido.
Las características que tiene que tener el programas son las siguientes:
- Deberá ser jugado por dos jugadores, cada uno de los cuales hará uso de dos
‘tableros’ (cada uno de dimensiones 8x8), uno para colocar sus barcos y otro para
controlar los disparos que ha ido realizando sobre su adversario.
- Cada jugador dispondrá de cuatro barcos, uno de longitud cuatro, otro de tres, otro
de dos y otro de uno. Estos deben ser colocados por cada jugador en su tablero de
barcos al comenzar la partida, y sólo pueden ser colocados de forma horizontal o
vertical.
- Cuando uno de los dos haga blanco en un barco del otro, en cuyo caso se le debe
informar del tipo de barco que ha alcanzado, y ese jugador vuelve a disparar.
- Cuando uno de los dos consiga hundir la flota contraria por completo, el programa
finaliza, indicando el ganador.
- Las matrices en las que los jugadores posicionan sus barcos deberán ser de registros,
que contendrán, al menos, los siguientes campos:
• Si en esa posición hay agua o barco.
• En caso de haber barco si este es de dimensión 1, 2, 3 o 4. De esta forma cuando el
jugador contrario acierte se le podrá informar del tipo de barco que ha alcanzado.
Hasta ahora he hecho lo siguiente (seguro que no está bien):
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
Program Hundir_la_flota;
uses
crt;
type
tipo_tablero=array[1..8, 1..8]of string;
barco=record
posicion:char;
tamano:byte;
end;
var
tablero:tipo_tablero;
barcos:barco;
procedure inicializaTableroControl (var t:tipo_tablero);{nos inicializa el tablero de control con todos los valores A}
var
i,j:integer;
begin
for i:=1 to 8 do
for j:=1 to 8 do
begin
t[i,j]:='A';
writeln(t[i,j]);
end;
end;
procedure inicializaTableroBarcos (var t:tipo_tablero);{inicializa el tablero en blanco, nos pregunta de qué dimension es y los introducimos}
var
i,j,cont,dimb:integer;
direc:string;
begin
for i:= 1 to 8 do
for j:= 1 to 8 do
begin
t[i,j]:=' ';
end;
write('¿de que dimension es el barco?: ');
readln(dimb);
write('¿En que dirección quieres poner el barco: arriba/abajo/izquierda/derecha?: ');
readln(direc);
write('Introduce la coordenada de la FILA del barco: ');
readln(i);
write('Introduce la COLUMNA del barco: ');
readln(j);
case direc of
'derecha': for i:= i to dimb do
begin
t[i,j]:='B';
writeln(t[i,j]);
end;
'izquierda': for i:=i downto dimb do
begin
t[i,j]:='B';
writeln(t[i,j]);
end;
'arriba': for j:= j to dimb do
begin
t[i,j]:='B';
writeln(t[i,j]);
end;
'abajo': for j:= j downto dimb do
begin
t[i,j]:='B';
writeln(t[i,j]);
end;
end;
end;
procedure dispara (var t:tipo_tablero);{disparamos y nos dice si es tocado o agua}
var
i,j:integer;
begin
writeln('introduce la coordenada FILA del barco a ATACAR: ');
readln(i);
writeln('introduce la coordenada COLUMNA del barco a ATACAR: ');
readln(j);
if t[i,j]='B' then
writeln('Tocado')
else
writeln('Agua')
end;
begin (*del programa principal*);
inicializaTableroControl(tablero);
inicializaTableroBarcos(tablero);
dispara(tablero);
end.
Agradecería que me echaseis una mano.
Muchas gracias
Valora esta pregunta


0