terça-feira, 21 de abril de 2026

Flesh + Blood

Tal como foi publicado aqui, o Massimiliano Arca ficou em segundo lugar no concurso de programas de 10 linhas e 120 caracteres com o programa Ballistae.

O Zé Oliveira fez um programa semelhante em 1982, Bala (podem ver aqui o artigo e podem jogar online aqui

Mas nessa época, ele só tinha um ZX81 com 1K de memória e não dava para fazer melhoramentos. Pois agora, inspirado pelo Massimiliano Arca, ele decidiu fazer alguns melhoramentos.

Primeiro, o Zé oliveira começou por fazer uma versão semelhante ao programa do Massimiliano Arca (podem jogar aqui).

Depois, para superar o Massimiliano Arca, ele fez uma versão em apenas uma linha BASIC (se não acreditam, podem ver aqui.

E depois, para dar mais emoção ao jogo, ele fez uma versão para dois jogadores (podem jogar aqui).

Pormenores técnicos:

É do conhecimento geral que o ZX Spectrum usa 2 bytes para armazenar o tamanho de uma linha BASIC - o que dá um limite de 65536 caracteres. E, como a linguagem BASIC Apascalado não precisa de números de linha, podemos pensar que podemos fazer programas BASIC em apenas uma linha tendo como limitação apenas a memória do computador. Mas, há uma limitação de que pouca gente fala: cada linha apenas pode ter no máximo 127 comandos separados por ":" dois pontos! Curiosidade: o limite para nomes de variáveis é 256 caracteres.

Podem fazer download de todos os ficheiros aqui.

9 comentários:

  1. Enorme trabajo, el resultado me ha gustado!!
    Es increible!!!

    Por cierto: Te la devuelvo!!!

    No tenia ni idea del Mod el bom jack....Pero te suena esto:

    WARHOG desde Uruguay, un juego desarrollado por Abraxas, desarrollado en Z80.

    https://sites.google.com/view/abraxassoftware/english/warhog

    Bromas aparte, que seguramente, ya lo sabias, pero como estas al filo de la noticia, se te habra pasado, y es mi agradecimiento a la noticia del bom jack!!!

    ResponderEliminar
    Respostas
    1. Eish, não conhecia. Amanhã já vou ver. Abraço e obrigado 😀

      Eliminar
  2. Mário Armão Ferreira22/4/26 08:05

    Usar linhas grandes tem vantagens e desvantagens.
    A maior vantagem é o poupar-se uns bytes na numeração. Mas depois o resto são desvantagens .
    A primeira é que se as linhas ultrapassarem um determinado número de caracteres (que não sei especificar), mesmo mantendo o conteúdo, o mesmo não é mostrado, o que se torna problemático de consultar.
    A segundo tem a ver com a edição. Não só temos que não podemos editar o que não vemos, como nos casos em que vemos, alterar a linha implica fazer uma cópia da mesma antes de apagar a original. E se estivermos com pouca memória, editar linhas grandes é um problema no ZX Spectrum.
    A terceira é que, infelizmente, não podemos fazer tudo numa só linha. Dada a ausência do comando end if, sempre que colocamos um if, tudo o que se escreve depois só é executado se a condição se verificar, sendo obrigatório mudar de linha para se terminar o if.

    ResponderEliminar
    Respostas
    1. Note-se que fazer tudo numa linha é apenas um exercício de programação sem utilidade prática.
      De facto, o editor do ZX Spectrum não é prático para fazer linhas compridas - este programa foi escrito no emulador BASinC.
      Quanto ao ENDIF, é um problema: não se pode fazer programas compridos em apenas uma linha porque o ZX Spectrum não tem ENDIF. Mas, o BASIC Apascalado tem ENDIF e este programa foi escrito em BASIC Apascalado e depois convertido para BASIC do ZX Spectrum.
      Ver o código fonte escrito em BASIC Apascalado incluído no ficheiro ZIP.

      Eliminar
    2. Eis um excerto do programa mostrando o ENDIF:

      DEFPROC GameOver
      IF pieces1>pieces2 BEGIN w
      PRINT #1;AT 1,0;FLASH 1;" Player 1 wins! ";
      :FOR i=0 TO 20: BEEP .01,i:BEEP .01,i+RND*3:NEXT i
      ELSEIF pieces1<pieces2
      PRINT #1;AT 1,0;FLASH 1;" Player 2 wins! ";
      :FOR i=0 TO 20: BEEP .01,i:BEEP .01,i+RND*3:NEXT i
      ELSE
      PRINT #1;AT 1,0;FLASH 1;" Let's try again! ";
      :FOR i=20 TO 0 STEP -1: BEEP .01,i:BEEP .01,i+RND*3:NEXT i
      ENDIF

      Eliminar
    3. Mário Armão Ferreira22/4/26 10:47

      Isso não é Basic puro do ZX Spectrum

      Eliminar
    4. É uma linguagem chamada Pascalated BASIC que dá para traduzir para o ZX Spectrum.

      Eliminar
    5. Existe Pascalated BASIC interpretado e Pascalated BASIC compilado.

      Eliminar
    6. Concluindo: Dá para converter ENDIF em BASIC puro do ZX Spectrum.

      Eliminar