Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

perez

Batalha naval

Recommended Posts

perez

Boas,

na ultima aula de LP, começamos a fazer uns quadrados com o gotoxy e chr e isso, e eu dei a ideia (má ideia :D ) de fazermos uma batalha naval, e o stor achou engraçado...

até agora já escrevi a maior parte do "grafismo" do jogo, mas estou com uma duvida em relação à parte lógica, como posso fazer para o "pc" inserir os seus barcos automaticamente e como posso fazer o "pc" tentar acertar nos meus barcos.

Até agora tenho isto:

Program batalhanaval;
uses crt;
var
x,y,a,cordx,cordy,opx:Integer;
opy:String[1];
Begin
    ClrScr;
    {Desenhar}
    {1º quadrado}
    {Linhas horizontais}
    For x:= 6 to 34 do
        Begin
            Gotoxy(x,2); WriteLn(chr(196));
            Gotoxy(x,4); WriteLn(chr(196));
            Gotoxy(x,6); WriteLn(chr(196));
            Gotoxy(x,8); WriteLn(chr(196));
            Gotoxy(x,10); WriteLn(chr(196));
            Gotoxy(x,12); WriteLn(chr(196));
            Gotoxy(x,14); WriteLn(chr(196));
            Gotoxy(x,16); WriteLn(chr(196));
            Gotoxy(x,18); WriteLn(chr(196));
            Gotoxy(x,20); WriteLn(chr(196));
            Gotoxy(x,22); WriteLn(chr(196));
        End;
    {Linhas verticais}
    For x:= 3 to 21 do
        Begin
            Gotoxy(5,x); WriteLn(chr(179));
            Gotoxy(8,x); WriteLn(chr(179));
            Gotoxy(11,x); WriteLn(chr(179));
            Gotoxy(14,x); WriteLn(chr(179));
            Gotoxy(17,x); WriteLn(chr(179));
            Gotoxy(20,x); WriteLn(chr(179));
            Gotoxy(23,x); WriteLn(chr(179));
            Gotoxy(26,x); WriteLn(chr(179));
            Gotoxy(29,x); WriteLn(chr(179));
            Gotoxy(32,x); WriteLn(chr(179));
            Gotoxy(35,x); WriteLn(chr(179));
        End;
    {cruzes}
    y:=8;
    For x:= 1 to 9 do
        Begin
            Gotoxy(y,4); WriteLn(chr(197));
            Gotoxy(y,6); WriteLn(chr(197));
            Gotoxy(y,8); WriteLn(chr(197));
            Gotoxy(y,10); WriteLn(chr(197));
            Gotoxy(y,12); WriteLn(chr(197));
            Gotoxy(y,14); WriteLn(chr(197));
            Gotoxy(y,16); WriteLn(chr(197));
            Gotoxy(y,18); WriteLn(chr(197));
            Gotoxy(y,20); WriteLn(chr(197));
            y:=y+3;
        End;
    {Cantos}
    Gotoxy(5,2); Write(chr(218));
    Gotoxy(5,22); Write(chr(192));
    Gotoxy(35,2); Write(chr(191));
    Gotoxy(35,22); Write(chr(217));
    {T canto}
    y:=8;
    For x:= 1 to 9 do
        Begin
            Gotoxy(y,2); WriteLn(chr(194));
            Gotoxy(y,22); WriteLn(chr(193));
            y:=y+3;
        End;
    y:=4;
    For x:= 1 to 9 do
        Begin
            Gotoxy(5,y); WriteLn(chr(195));
            Gotoxy(35,y); WriteLn(chr(180));
            y:=y+2;
        End;
    {Coordenadas numeros}
    y:=6;
    a:=49;
    For x:= 1 to 9 do
        Begin
            Gotoxy(y,1); WriteLn(chr(a));
            Gotoxy(33,1); WriteLn('10');
            y:=y+3;
            a:=a+1;
        End;
    {Coordenadas letras}
    y:=3;
    a:=65;
    For x:= 1 to 9 do
        Begin
            Gotoxy(3,y); WriteLn(chr(a));
            Gotoxy(3,21); WriteLn('J');
            y:=y+2;
            a:=a+1;
        End;
    {2º quadrado}
    {Linhas horizontais}
    For x:= 46 to 74 do
        Begin
            Gotoxy(x,2); WriteLn(chr(196));
            Gotoxy(x,4); WriteLn(chr(196));
            Gotoxy(x,6); WriteLn(chr(196));
            Gotoxy(x,8); WriteLn(chr(196));
            Gotoxy(x,10); WriteLn(chr(196));
            Gotoxy(x,12); WriteLn(chr(196));
            Gotoxy(x,14); WriteLn(chr(196));
            Gotoxy(x,16); WriteLn(chr(196));
            Gotoxy(x,18); WriteLn(chr(196));
            Gotoxy(x,20); WriteLn(chr(196));
            Gotoxy(x,22); WriteLn(chr(196));
        End;
    {Linhas verticais}
    For x:= 3 to 21 do
        Begin
            Gotoxy(45,x); WriteLn(chr(179));
            Gotoxy(48,x); WriteLn(chr(179));
            Gotoxy(51,x); WriteLn(chr(179));
            Gotoxy(54,x); WriteLn(chr(179));
            Gotoxy(57,x); WriteLn(chr(179));
            Gotoxy(60,x); WriteLn(chr(179));
            Gotoxy(63,x); WriteLn(chr(179));
            Gotoxy(66,x); WriteLn(chr(179));
            Gotoxy(69,x); WriteLn(chr(179));
            Gotoxy(72,x); WriteLn(chr(179));
            Gotoxy(75,x); WriteLn(chr(179));
        End;
    {cruzes}
    y:=8;
    For x:= 1 to 9 do
        Begin
            Gotoxy(y+40,4); WriteLn(chr(197));
            Gotoxy(y+40,6); WriteLn(chr(197));
            Gotoxy(y+40,8); WriteLn(chr(197));
            Gotoxy(y+40,10); WriteLn(chr(197));
            Gotoxy(y+40,12); WriteLn(chr(197));
            Gotoxy(y+40,14); WriteLn(chr(197));
            Gotoxy(y+40,16); WriteLn(chr(197));
            Gotoxy(y+40,18); WriteLn(chr(197));
            Gotoxy(y+40,20); WriteLn(chr(197));
            y:=y+3;
        End;
    {Cantos}
    Gotoxy(45,2); Write(chr(218));
    Gotoxy(45,22); Write(chr(192));
    Gotoxy(75,2); Write(chr(191));
    Gotoxy(75,22); Write(chr(217));
    {T canto}
    y:=8;
    For x:= 1 to 9 do
        Begin
            Gotoxy(y+40,2); WriteLn(chr(194));
            Gotoxy(y+40,22); WriteLn(chr(193));
            y:=y+3;
        End;
    y:=4;
    For x:= 1 to 9 do
        Begin
            Gotoxy(45,y); WriteLn(chr(195));
            Gotoxy(75,y); WriteLn(chr(180));
            y:=y+2;
        End;
    {Coordenadas numeros}
    y:=6;
    a:=49;
    For x:= 1 to 9 do
        Begin
            Gotoxy(y+40,1); WriteLn(chr(a));
            Gotoxy(33+40,1); WriteLn('10');
            y:=y+3;
            a:=a+1;
        End;
    {Coordenadas letras}
    y:=3;
    a:=65;
    For x:= 1 to 9 do
        Begin
            Gotoxy(43,y); WriteLn(chr(a));
            Gotoxy(43,21); WriteLn('J');
            y:=y+2;
            a:=a+1;
        End;
    {Pedir coordenadas}
    Gotoxy(1,23); Write('Insira as coordenadas para o porta avioes: ');
    Gotoxy(1,24); Write('Letras:    Numeros: ');
    Gotoxy(9,24); Readln(opy); Gotoxy(21,24); Readln(opx);
    opy:=upcase(opy);
    {Posiçoes}
    {Posiçao letras}
        If opy = 'A' then
            cordy:=2
        Else If opy = 'B' then
            cordy:=4
        Else If opy = 'C' then
            cordy:=6
        Else If opy = 'D' then
            cordy:=8
        Else If opy = 'E' then
            cordy:=10
        Else If opy = 'F' then
            cordy:=12
        Else If opy = 'G' then
            cordy:=14
        Else If opy = 'H' then
            cordy:=16
        Else If opy = 'I' then
            cordy:=18
        Else If opy = 'J' then
            cordy:=20;
    {Posiçao numeros}
        If opx = 1 then
            cordx:=2
        Else If opx = 2 then
            cordx:=5
        Else If opx = 3 then
            cordx:=8
        Else If opx = 4 then
            cordx:=11
        Else If opx = 5 then
            cordx:=14
        Else If opx = 6 then
            cordx:=17
        Else If opx = 7 then
            cordx:=20
        Else If opx = 8 then
            cordx:=23
        Else If opx = 9 then
            cordx:=26
        Else If opx = 10 then
            cordx:=29;
    Window(5,2,35,22);
    {insere porta avioes para testar}
    Gotoxy(cordx,cordy); TextBackground(red); Write('X'); TextBackground(Black);
    Gotoxy(cordx+3,cordy); TextBackground(red); Write('X'); TextBackground(Black);
    Gotoxy(cordx+6,cordy); TextBackground(red); Write('X'); TextBackground(Black);
    Gotoxy(cordx+3,cordy+2); TextBackground(red); Write('X'); TextBackground(Black);
    Gotoxy(cordx+3,cordy+4); TextBackground(red); Write('X'); TextBackground(Black);
    Window(5,2,35,22);
    Window(1,1,80,25);
    ReadKey;
End.

(vou postando à medida que escrevo)

Agradeço qualquer ajuda ou critica ( construtiva ) em relação à ideia e ao algoritmo escrito até agora.

Share this post


Link to post
Share on other sites
M6

Para o PC fazer os tiros dele usas um mapa que mantém o estado, podes usar uma matriz.

Se em cada posição/casa tiveres X para um tiro, A para água, B para barco, e espaço para desconhecido, podes usar as funções de randomize para sortear uma linha e uma coluna da matriz, com essas coordenadas vês qual o estado da posição/casa, se for espaço passa a A de água, se for um B passa a X de tiro, se for outra coisa tens de repetir o sorteio porque essa posição já foi usada.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
perez

Boas,

eu lembrei-me que usei variáveis (aquelas que se fazem assim: x:[1..2] of integer (não me lembro do nome disto xD)) no jogo do galo para marcar as posições das casas usadas, se cada casa corresponder a uma coordenada.

eu vou escrever alguma coisa, depois posto para veres.

Obrigado pela ajuda.

Share this post


Link to post
Share on other sites
M6

Sim, é isso mesmo.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
perez

Boas, esta tarde estive para aqui a aquecer os miolos e avancei um pouco:

Program batalhanaval;
uses crt;
var
x,y,z,a,cordx,cordy:Integer;
opy,opx:Char;
casa:array [1..100] of Char;
Procedure desenha;
    Begin
        {Desenhar}
        {1º quadrado}
        {Linhas horizontais}
        For x:= 6 to 34 do
            Begin
                Gotoxy(x,2); WriteLn(chr(196));
                Gotoxy(x,4); WriteLn(chr(196));
                Gotoxy(x,6); WriteLn(chr(196));
                Gotoxy(x,8); WriteLn(chr(196));
                Gotoxy(x,10); WriteLn(chr(196));
                Gotoxy(x,12); WriteLn(chr(196));
                Gotoxy(x,14); WriteLn(chr(196));
                Gotoxy(x,16); WriteLn(chr(196));
                Gotoxy(x,18); WriteLn(chr(196));
                Gotoxy(x,20); WriteLn(chr(196));
                Gotoxy(x,22); WriteLn(chr(196));
            End;
        {Linhas verticais}
        For x:= 3 to 21 do
            Begin
                Gotoxy(5,x); WriteLn(chr(179));
                Gotoxy(8,x); WriteLn(chr(179));
                Gotoxy(11,x); WriteLn(chr(179));
                Gotoxy(14,x); WriteLn(chr(179));
                Gotoxy(17,x); WriteLn(chr(179));
                Gotoxy(20,x); WriteLn(chr(179));
                Gotoxy(23,x); WriteLn(chr(179));
                Gotoxy(26,x); WriteLn(chr(179));
                Gotoxy(29,x); WriteLn(chr(179));
                Gotoxy(32,x); WriteLn(chr(179));
                Gotoxy(35,x); WriteLn(chr(179));
            End;
        {cruzes}
        y:=8;
        For x:= 1 to 9 do
            Begin
                Gotoxy(y,4); WriteLn(chr(197));
                Gotoxy(y,6); WriteLn(chr(197));
                Gotoxy(y,8); WriteLn(chr(197));
                Gotoxy(y,10); WriteLn(chr(197));
                Gotoxy(y,12); WriteLn(chr(197));
                Gotoxy(y,14); WriteLn(chr(197));
                Gotoxy(y,16); WriteLn(chr(197));
                Gotoxy(y,18); WriteLn(chr(197));
                Gotoxy(y,20); WriteLn(chr(197));
                y:=y+3;
            End;
        {Cantos}
        Gotoxy(5,2); Write(chr(218));
        Gotoxy(5,22); Write(chr(192));
        Gotoxy(35,2); Write(chr(191));
        Gotoxy(35,22); Write(chr(217));
        {T canto}
        y:=8;
        For x:= 1 to 9 do
            Begin
                Gotoxy(y,2); WriteLn(chr(194));
                Gotoxy(y,22); WriteLn(chr(193));
                y:=y+3;
            End;
        y:=4;
        For x:= 1 to 9 do
            Begin
                Gotoxy(5,y); WriteLn(chr(195));
                Gotoxy(35,y); WriteLn(chr(180));
                y:=y+2;
            End;
        {Coordenadas numeros}
        y:=6;
        a:=49;
        For x:= 1 to 9 do
            Begin
                Gotoxy(y,1); WriteLn(chr(a));
                Gotoxy(33,1); WriteLn('0');
                y:=y+3;
                a:=a+1;
            End;
        {Coordenadas letras}
        y:=3;
        a:=65;
        For x:= 1 to 9 do
            Begin
                Gotoxy(3,y); WriteLn(chr(a));
                Gotoxy(3,21); WriteLn('J');
                y:=y+2;
                a:=a+1;
            End;
        {2º quadrado}
        {Linhas horizontais}
        For x:= 46 to 74 do
            Begin
                Gotoxy(x,2); WriteLn(chr(196));
                Gotoxy(x,4); WriteLn(chr(196));
                Gotoxy(x,6); WriteLn(chr(196));
                Gotoxy(x,8); WriteLn(chr(196));
                Gotoxy(x,10); WriteLn(chr(196));
                Gotoxy(x,12); WriteLn(chr(196));
                Gotoxy(x,14); WriteLn(chr(196));
                Gotoxy(x,16); WriteLn(chr(196));
                Gotoxy(x,18); WriteLn(chr(196));
                Gotoxy(x,20); WriteLn(chr(196));
                Gotoxy(x,22); WriteLn(chr(196));
            End;
        {Linhas verticais}
        For x:= 3 to 21 do
            Begin
                Gotoxy(45,x); WriteLn(chr(179));
                Gotoxy(48,x); WriteLn(chr(179));
                Gotoxy(51,x); WriteLn(chr(179));
                Gotoxy(54,x); WriteLn(chr(179));
                Gotoxy(57,x); WriteLn(chr(179));
                Gotoxy(60,x); WriteLn(chr(179));
                Gotoxy(63,x); WriteLn(chr(179));
                Gotoxy(66,x); WriteLn(chr(179));
                Gotoxy(69,x); WriteLn(chr(179));
                Gotoxy(72,x); WriteLn(chr(179));
                Gotoxy(75,x); WriteLn(chr(179));
            End;
        {cruzes}
        y:=8;
        For x:= 1 to 9 do
            Begin
                Gotoxy(y+40,4); WriteLn(chr(197));
                Gotoxy(y+40,6); WriteLn(chr(197));
                Gotoxy(y+40,8); WriteLn(chr(197));
                Gotoxy(y+40,10); WriteLn(chr(197));
                Gotoxy(y+40,12); WriteLn(chr(197));
                Gotoxy(y+40,14); WriteLn(chr(197));
                Gotoxy(y+40,16); WriteLn(chr(197));
                Gotoxy(y+40,18); WriteLn(chr(197));
                Gotoxy(y+40,20); WriteLn(chr(197));
                y:=y+3;
            End;
        {Cantos}
        Gotoxy(45,2); Write(chr(218));
        Gotoxy(45,22); Write(chr(192));
        Gotoxy(75,2); Write(chr(191));
        Gotoxy(75,22); Write(chr(217));
        {T canto}
        y:=8;
        For x:= 1 to 9 do
            Begin
                Gotoxy(y+40,2); WriteLn(chr(194));
                Gotoxy(y+40,22); WriteLn(chr(193));
                y:=y+3;
            End;
        y:=4;
        For x:= 1 to 9 do
            Begin
                Gotoxy(45,y); WriteLn(chr(195));
                Gotoxy(75,y); WriteLn(chr(180));
                y:=y+2;
            End;
        {Coordenadas numeros}
        y:=6;
        a:=49;
        For x:= 1 to 9 do
            Begin
                Gotoxy(y+40,1); WriteLn(chr(a));
                Gotoxy(33+40,1); WriteLn('0');
                y:=y+3;
                a:=a+1;
            End;
        {Coordenadas letras}
        y:=3;
        a:=65;
        For x:= 1 to 9 do
            Begin
                Gotoxy(43,y); WriteLn(chr(a));
                Gotoxy(43,21); WriteLn('J');
                y:=y+2;
                a:=a+1;
            End;
    End;
Procedure coord;
    Begin
        {Posiçoes}
        {Posiçao letras}
            Case opy of
            'A' : Begin
                    cordy:=2;
                  End;
            'B' : Begin
                    cordy:=4;
                  End;
            'C' : Begin
                    cordy:=6;
                  End;
            'D' : Begin
                    cordy:=8;
                  End;
            'E' : Begin
                    cordy:=10;
                  End;
            'F' : Begin
                    cordy:=12;
                  End;
            'G' : Begin
                    cordy:=14;
                  End;
            'H' : Begin
                    cordy:=16;
                  End;
            'I' : Begin
                    cordy:=18;
                  End;
            'J' : Begin
                    cordy:=20;
                  End;
            End;
        {Posiçao numeros}
            Case opx of
            '1' : Begin
                    cordx:=5;
                  End;
            '2' : Begin
                    cordx:=8;
                  End;
            '3' : Begin
                    cordx:=11;
                  End;
            '4' : Begin
                    cordx:=14;
                  End;
            '5' : Begin
                    cordx:=17;
                  End;
            '6' : Begin
                    cordx:=20;
                  End;
            '7' : Begin
                    cordx:=24;
                  End;
            '8' : Begin
                    cordx:=26;
                  End;
            '9' : Begin
                    cordx:=29;
                  End;
            '0' : Begin
                    cordx:=32;
                  End;
            End;
        End;
Procedure inserebarcos;
    Begin
        For z := 1 to 11 do
            Begin
                {Porta avioes}
                If z = 1 then
                    Begin
                        {Pedir coordenadas}
                        Gotoxy(1,23); Write('Insira as coordenadas para o porta aviões:      ');
                        Gotoxy(1,24); Write('Letras:    Numeros:                             ');
                        Repeat
                            Gotoxy(9,24); Write('   ');
                            Gotoxy(9,24); Readln(opy);
                            opy:=upcase(opy);
                        Until ((opy = 'A') or (opy = 'B') or (opy = 'C') or (opy = 'D') or (opy = 'E') or (opy = 'F') or (opy = 'G') or (opy = 'H'));
                        Repeat
                            Gotoxy(21,24); Readln(opx);
                            Gotoxy(21,24); Write('   ');
                        Until ((opx = '1') or (opx = '2') or (opx = '3') or (opx = '4') or (opx = '5') or (opx = '6') or (opx = '7') or (opx = '8'));
                        coord;
                        Window(cordx,cordy,cordx+8,cordy+2); TextBackground(red); clrscr; Write(' '); TextBackground(Black);
                        Window(1,1,80,25);
                        Window(cordx+3,cordy,cordx+5,cordy+6); TextBackground(red); clrscr; Write(' '); TextBackground(Black);
                        Window(1,1,80,25);
                        desenha;
                    End
                {Submarinos}
                Else If ((z = 2) or (z = 3) or (z = 4) or (z = 5)) then
                    Begin
                        {Pedir coordenadas}
                        Gotoxy(1,23); Write('Insira as coordenadas para o submarino:         ');
                        Gotoxy(1,24); Write('Letras:    Numeros:                             ');
                        Repeat
                            Gotoxy(9,24); Write('   ');
                            Gotoxy(9,24); Readln(opy);
                            opy:=upcase(opy);
                        Until ((opy = 'A') or (opy = 'B') or (opy = 'C') or (opy = 'D') or (opy = 'E') or (opy = 'F') or (opy = 'G') or (opy = 'H') or (opy = 'I') or (opy = 'J'));
                        Repeat
                            Gotoxy(21,24); Readln(opx);
                            Gotoxy(21,24); Write('   ');
                        Until ((opx = '1') or (opx = '2') or (opx = '3') or (opx = '4') or (opx = '5') or (opx = '6') or (opx = '7') or (opx = '8') or (opx = '9') or (opx = '0'));
                        coord;
                        Window(cordx,cordy,cordx+2,cordy+2); TextBackground(red); clrscr; Write(' '); TextBackground(Black);
                        Window(1,1,80,25);
                        desenha;
                    End
                {Barcos 2}
                Else If ((z = 6) or (z = 7) or (z = 8)) then
                    Begin
                        {Pedir coordenadas}
                        Gotoxy(1,23); Write('Insira as coordenadas para o barco de 2 canos:  ');
                        Gotoxy(1,24); Write('Letras:    Numeros:                             ');
                        Repeat
                            Gotoxy(9,24); Write('   ');
                            Gotoxy(9,24); Readln(opy);
                            opy:=upcase(opy);
                        Until ((opy = 'A') or (opy = 'B') or (opy = 'C') or (opy = 'D') or (opy = 'E') or (opy = 'F') or (opy = 'G') or (opy = 'H') or (opy = 'I') or (opy = 'J'));
                        Repeat
                            Gotoxy(21,24); Readln(opx);
                            Gotoxy(21,24); Write('   ');
                        Until ((opx = '1') or (opx = '2') or (opx = '3') or (opx = '4') or (opx = '5') or (opx = '6') or (opx = '7') or (opx = '8') or (opx = '9') or (opx = '0'));
                        coord;
                        Window(cordx,cordy,cordx+6,cordy+2); TextBackground(red); clrscr; Write(' '); TextBackground(Black);
                        Window(1,1,80,25);
                        desenha;
                    End
                {barco 3}
                Else If ((z = 9) or (z = 10)) then
                    Begin
                        {Pedir coordenadas}
                        Gotoxy(1,23); Write('Insira as coordenadas para o barco de 3 canos:  ');
                        Gotoxy(1,24); Write('Letras:    Numeros:                             ');
                        Repeat
                            Gotoxy(9,24); Write('   ');
                            Gotoxy(9,24); Readln(opy);
                            opy:=upcase(opy);
                        Until ((opy = 'A') or (opy = 'B') or (opy = 'C') or (opy = 'D') or (opy = 'E') or (opy = 'F') or (opy = 'G') or (opy = 'H') or (opy = 'I') or (opy = 'J'));
                        Repeat
                            Gotoxy(21,24); Readln(opx);
                            Gotoxy(21,24); Write('   ');
                        Until ((opx = '1') or (opx = '2') or (opx = '3') or (opx = '4') or (opx = '5') or (opx = '6') or (opx = '7') or (opx = '8') or (opx = '9') or (opx = '0'));
                        coord;
                        Window(cordx,cordy,cordx+8,cordy+2); TextBackground(red); clrscr; Write(' '); TextBackground(Black);
                        Window(1,1,80,25);
                        desenha;
                    End
                {barco 4}
                Else If (z = 11) then
                    Begin
                        {Pedir coordenadas}
                        Gotoxy(1,23); Write('Insira as coordenadas para o barco de 4 canos:  ');
                        Gotoxy(1,24); Write('Letras:    Numeros:                             ');
                        Repeat
                            Gotoxy(9,24); Write('   ');
                            Gotoxy(9,24); Readln(opy);
                            opy:=upcase(opy);
                        Until ((opy = 'A') or (opy = 'B') or (opy = 'C') or (opy = 'D') or (opy = 'E') or (opy = 'F') or (opy = 'G') or (opy = 'H'));
                        Repeat
                            Gotoxy(21,24); Write('   ');
                            Gotoxy(21,24); Readln(opx);
                        Until ((opx = '1') or (opx = '2') or (opx = '3') or (opx = '4') or (opx = '5') or (opx = '6') or (opx = '7') or (opx = '8'));
                        coord;
                        Window(cordx,cordy,cordx+11,cordy+2); TextBackground(red); clrscr; Write(' '); TextBackground(Black);
                        Window(1,1,80,25);
                        desenha;
                    End;
            End;
    End;
Begin
    ClrScr;
    desenha;
    inserebarcos;
    ReadKey;
End.
{1 porta avioes -> 5 quadrados em T}
{4 submarinos   -> 1 quadrado      }
{3 barcos 2     -> 2 quadrados     }
{2 barcos 3     -> 3 quadrados     }
{1 barco 4      -> 4 quadrados     }

Basicamente o que fiz foi "desgin", amanha acabo esta parte e passo para a parte "lógica".

Agradeço qualquer critica construtiva.

Cumprimentos,

Perez

Share this post


Link to post
Share on other sites
perez

Lembrei-me agora de um contra :/

com a função randomize, vai ser completamente random, mesmo que acerte, o pc não vai procurar a casa ao lado, vai ser random.

Se eu fizer alguma coisa do tipo:

If jogada = 1 then
     Begin
          If pos [jogada]= 'b' then
               Begin
                    pos[jogada]:='h';
                    jogada:=jogada+1;
               End;
          Else
               {volta ao jogador};

isto poderá funcionar, ou tens alguma maneira melhor?

Share this post


Link to post
Share on other sites
M6

Podes seleccionar uma casa e depois rodar pelos quadrados à volta, tens é de ter em atenção que se estiverem todos usados tens de seleccionar outro de forma aleatória.

Podes também ter uma variante, que é algo do tipo quando faltarem menos de X tiros, seleccionas uma casa aleatoriamente e começas a varrer por linha e coluna até encontrares uma casa livre. Isto permite-te ficar tempos infinitos à espera quando o jogo já vai avançado e o PC está "sempre" a sortear casas já usadas.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.