Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

perez

Batalha naval

Mensagens Recomendadas

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.