Paulo Laureano Estar vivo é uma condição precária com um péssimo prognóstico...

Ensinar a programar jogos


Este verão a água do mar estava fria (15º a 18ºWinking, cheia de algas, e sem o beneficio de um vento levante que tornasse os banhos divertidos. Foi no que respeita à praia o pior verão que apanhei na praia do Barril. Fui à praia apenas três vezes, dei um único mergulho na água gelada, em quinze dias de férias. A maior parte do tempo fiquei em casa e, entre uns pulinhos à piscina e explanada, estive a ensinar os mais novos a programar. Jogos, claro, mas os conceitos são universais.

Como exemplos dos conceitos que estava a ensinar fui fazendo uns joguinhos nos intervalos das aulas. Servem de inspiração para os formandos e são um enorme gozo de escrever para o instructor. Happy

O projecto era ensinar apenas o necessário para fazer um jogo a cada um dos miúdos. Não ser excessivamente exaustivo, passar apenas as bases que se usam 90% do tempo. Usei como linguagem o Blitxmax (open source, gratuito, com suporte a programação orientada a objectos, com "garbage collection"). Podem fazer o download em https://blitzmax.org e divertirem-se a programar para Mac, Windows e Linux.

O mini-curso consistia em 3 aulas (sim, só três) de uma hora e meia.

Os conceitos que foram ensinados:

Aula 1 (o básico)

- datatypes (int / float / long), scope de variáveis
- flow control (while loop até uma condição se realizar) - usado para o loop do jogo
- conditional code ( if / else ) - usado para detectar teclas que fazem uma sprite andar no écran
- Graphics (setup de uma janela com um canvas gráfico), cls para apagar um écran, Flip de um sistema de backbuffer) - onde os exemplo correm…
- sprites (LoadImage / DrawImage) - porque (quase) todos os jogos precisam de uns bonecos baseados em imagens.
- Texto no écran (DrawText) - porque temos que escrever textos com as pontuações do jogo

Aula 2

- Funcões (function)
- estruturas e classes (type) - como criar, como chamar, como instanciar…
- Pensar como um programador, fazer "mais com menos", evitar repetição de código e reutilizar código em diferentes contextos.

Aula 3

- Colisões de sprites - como detectar quando duas sprites ocupam o mesmo espaço no écran
- sprite sheets (para animações) - o exemplo foi como fazer explosões…
- Listas (TLIst) de objectos
- ciclos de "For / EachIn" para percorrer listas



Os jogos que eu escrevi para lhes dar como exemplos:


Pong-1972-Atari-Arcade-1

Baseado no primeiro arcade comercial… reproduzido em código que podem consultar e interpretar… é o mais simples dos exemplos. Não utiliza gráficos baseados em imagens, cada jogador movimenta um rectangulo e a "bola" é um "quadrado". Para um (contra o computador semi-inteligente) ou dois jogadores(um contra o outro). O exemplo foi escrito usando apenas os conceitos explicados nas duas primeiras aulas.

Download the game: Mac / Windows / Linux
Download the source code: All platforms






maxresdefault-2

Octopus - o meu "Game &. Watch" preferido que fez as minhas delicias quando tinha a idade deles… escrevi um "clone" usando apenas o que tinham aprendido nas duas primeiras aulas, a que acrescentei apenas o exemplo de como carregar sons e os tocar.



Download the source code: All platforms





start

Um jogo "original" vagamente inspirado em características do "Defender" (Arcade), em que o jogador tem um campo de batalha do tamanho de vários écrans, visíveis em formato tipo "radar", e no Jetpac (ZX spectrum) em que o jogador tem um jetpac às costas e inimigos que o perseguem… utiliza os conceitos da terceira aula (listas de objectos) e um exemplo de "inheritance" de uma classe com overload de um dos métodos.




Bom, eu achei piada a ensinar a garotada, deu-me um gozo bestial escrever os exemplos, e estou a considerar seriamente fazer uns videos com estas lições. Até estou a considerar ir mais longe e ensinar as mesmas coisas em múltiplas linguagens. Não sei se vou ter o tempo e a pachorra, mas que me está a apetecer é uma certeza. Se o fizer será um projecto comercial, provavelmente em inglês, porque não vejo outra forma de justificar o tempo e dinheiro que teria de dedicar a tal obra.

Update em Maio de 2020: já estão os videos online, de borla para todos…



Farei uma versão video (em Português), mais "descontraída" (versão totalmente amadora) e consequentemente menos trabalhosa, para familiares e filhos de amigos que não estiveram comigo de férias. Os interessados mandem-me um e-mail. Não tenciono tornar esses vídeos públicos, é mesmo só para quem me conhece pessoalmente.

Update em Maio de 2020: Ainda não existe… Happy

Tesourinhos deprimentes... Happy


O que era mais relevante para mim, e que estava perdido na versão antiga da minha página pessoal, está "recuperado".

Deixei de fora umas centenas de artigos que envelheceram "mal". Não se preocupem que não perderam nada. De fora ficaram igualmente referencias a videos e podcasts. Mas podem visitar os meus canais no YouTube e ver os ditos:

Canal principal:
https://www.youtube.com/channel/UCIGNH4JpeG9T7zsUMF-Qgyw

Inclui o meu podcast sobre politica (Tempo de antena):
https://www.youtube.com/playlist?list=PLjSIZ1nqDb2WhYTrXOmWpn-7MbBAfO9hS

Canal sobre jogos:
https://www.youtube.com/channel/UCxzLY-QX9qN9HhLoCsBJN7A

Canal sobre animais:
https://www.youtube.com/channel/UC8feH-RAK_S4V1jng0K1nmg


Deixei links para algumas preciosidades no YouTube:














As infinitas horas passadas em frente de monitores...

Não é novidade para quem me conheceu pessoalmente que grande parte da minha adolescência foi passada em frente a monitores. O que muitas pessoas não sonham é que resultados foram obtidos ao longo desses anos da minha vida.

Olhando para trás e recordando empresas (da "Commodore" à "Visus") e pessoas (que o tempo esqueceu e mas eu não Happy com quem lidei profissionalmente não posso deixar de sorrir. Foram dias bestiais os que passei a trabalhar com outras pessoas, integrado e a liderar equipas. No entanto foi nos anos que passei sozinho em frente ao computador a fazer jogos que mais intensas memórias encontro. Ao contrário do trabalho para empresas, onde todos os meses tinha um salário à espera e companhia nas apostas, nos riscos e nas ambições, quando se estava sozinho, a apostar que o jogo que estava a fazer iria ser popular meses mais tarde se/quando estivesse concluído, é que dava tudo de mim. Toda a gente, algures no processo de fazer seja o que for por sua conta e risco, passa por situações semelhantes. É duro, complicado e esgotante. No final é profundamente gratificante encontrar "obra feita"...

A minha "infância informática" foi passada com o Sinclair ZX81, depois o Sinclair ZX Spectrum e mais tarde o Commodore 64. Da passagem pelas três maquina de 8 bits recordo ter aprendido a programar em Basic e a entender vagamente Assembly. Pelo caminho ficaram mil pequenas obras; de jogos básicos tipo "enforcado" a pequenas placares de pontuações de jogos tipo "King". Que me recorde nada saiu da privacidade das minha cassetes (diskettes de 5¼ no caso do Commodore 64 Happy e impressões térmicas disponíveis na altura. Depois chegou o salto para um Commodore Amiga 500 e respectivo modem (um longshine 2400 bps) e começou o "Rock´n´roll" de lidar com utilizadores do software que escrevia e da BBS que coloquei em linha nessa altura...

A BAT BBS nasceu em 1990 e morreu em 1995. Durante esses 5 anos serviu como ponto de distribuição de software para o Commodore Amiga, local de suporte a todo o software que eu e o Álvaro Pinto (meu co-SysOp) escrevemos e distribuímos pelo mundo, etc. Membro de pleno direito da Fidonet (que era a maior rede mundial amadora de correio electrónico, numa altura em que a Internet estava praticamente restrita ao meio universitário, e que coordenei a nível nacional durante alguns anos), a BBS abrigou perto de 300 utilizadores que a ela recorriam para participarem nos fóruns de debate e obter software para os seus computadores. Ser "SysOp" (i.e. SYStem OPerator) da BAT BBS e o contacto com outros "SysOp" foram experiências inesquecíveis. Foi uma era de pioneiros e descobertas sucessivas; do que se podia fazer "on-line" a nível de jogos multi-utilizador, do que eram comunidades de pessoas separadas milhares de km e unidas pelo correio electrónico, da acessibilidade de software e respectivos autores, etc.

O primeiro jogo que fiz e foi distribuído pelo mundo foi o Total War. O jogo foi feito para o Commodore Amiga em AMOS (um Basic moderno, que representava naquele tempo sensivelmente o mesmo que hoje o Visual Basic, que aproveitava exemplarmente bem o hardware do Amiga). Os gráficos do jogo foram desenhados pelo Francisco Cordeiro. Foi lançado em Shareware em 1992 e programado por mim durante o ano de 1991. O sucesso foi na altura a todos os níveis apreciável e o convite para trabalhar para a Commodore no suporte a programadores do Amiga surgiu uns meses depois... Na edição 33 da Amiga Format (que era a revista de maior tiragem dedicada ao Commodore Amiga), em Abril de 1992, fizeram o "review" do Total War e o que se podia ler era:

" This is one of those great games. The board-game version (Risk) will be familiar to many readers, but the basic idea is this. The playing area is the world, about the time of the Napoleonic Wars. Up to six people can play at once. The game starts with the planet being randomly partitioned, with armies of the occupying player being put on them.

The object of the game is to either conquer a certain number of countries (playing for missions) or the whole world. You get a certain number of reinforcements each turn (more if you own a whole continent or two). You can gain extra arrnies by playing cards - when you conquer one country, you get a card. Trade in three cards for more armies - the number you get depends on the combination.

This version is a straight port over of the board-game, and the computer will play if less than six people are around. lt's quite easy to work out how to play (the mouse is used almost exclusively). Winning is more elusive - you can be on top of the world one minute, only to be vanquished the next.

The game was written with AMOS, by Paulo Laureano. Graphics by Waddingtons (competently copied by Francisco Cordeiro). lf you liked the board-game you will love this one. I know I do. "

Durante perto de 1 ano o Total War esteve anunciado pelas múltiplas casas que distribuíam software Public Domain e Shareware um pouco por todo o mundo. Chegou a milhares de utilizadores e rendeu uns quantos registos de $10 dólares (alguns em cheques de bancos de vários países europeus que nunca consegui levantar Happy, muitas cartas, muitas solicitações para mudar "N" detalhes e acrescentar outros tantos. Foi encorajador para quem só queria provar a ele próprio que conseguia programar um jogo complexo sozinho...

O Total War II (1993) não era mais que o mesmo jogo com as opções que os utilizadores tinham pedido, melhores gráficos, melhor inteligência para os adversários controlados pelo computador, etc. A distribuição não teve nem de perto o mesmo impacto que no primeiro jogo. As causas são simples; nos Estados Unidos da América uma companhia interessou-se pela comercialização do jogo o que obrigou a que a versão lançada na Europa fosse "castrada" de features (i.e. apenas um "demo", por oposição a versão "integral" do Total War v1.9) de forma a afectar o menos possível as vendas do outro lado do Atlântico. Tanto o numero de registos/vendas como o impacto em termos de reconhecimento publico foi bastante menor que no primeiro jogo. O Total War II não só levou ao extremo o conceito de jogo do "risco" com múltiplas variantes como a minha paciência para o jogar e, quando dei por mim, já não achava piada ao jogo que eu próprio escrevia. O resultado foi simples; coloquei um "ponto final" na serie. Só não digo "ponto final paragrafo" porque confesso que tenho alguma vontade de fazer uma versão para PC do Total War e que se tudo correr bem haverá um dia uma, sem qualquer intuito comercial e lançada em Public Domain... até porque tenho algumas saudades de o jogar... Happy

Para BBS´s espalhados pelo mundo escrevi (desta vez em C/C++) mais três jogos e alguns utilitários. Universal Wars, Xenolink Chess e Trial foram os jogos. Escrevi para a Visus BBS (exclusivo) uma door de registo on-line de novos utilizadores, outra de pagamentos de assinaturas através de cartões de crédito, outra de deposito de "bytes" e "tempo" entre chamadas (i.e. havia limites do tempo e bytes que se podiam puxar por chamada e a door permitia acumular ambos entre chamadas Happy e provavelmente mais algumas que já nem me lembro o que faziam... :-/

O Universal Wars (versões para o Commodore Amiga e PC) que teve alguma popularidade a nível global com vendas no Estados Unidos e Austrália a ultrapassarem as Europeias (dado a que achei piada na altura Happy. Entre os "SysOp" que me recordo em Portugal correrem a versão registada do jogo estavam nomes como o Mario Pozzetti (o meu primeiro cliente de jogos on-line!) da Skyship BBS, Jose Peixoto da Quark BBS, Michael Santos da Crocodile Zone BBS, Victor Hugo da Cats, Fausto Carvalho da Midi-thru BBS, Afonso Vicente da Intriga Internacional BBS, etc. O Universal Wars era um jogo de estratégia espacial para múltiplos jogadores (2 no mínimo e 15 no máximo) onde o objectivo era dominar uma galáxia com um numero variável de planetas. Os jogadores controlavam a gestão dos planetas e frotas espaciais, digladiando-se pelo domínio do universo...

O Xenolink Chess (só existia versão para o Commodore Amiga) era um jogo de Xadrez on-line para a Xenolink (nome do software de BBS que eu utilizava). Era freeware e foi distribuido a todos os "SysOp" interessados...

O Trial (no que toca a "jogo on-line" existiu apenas uma versão para PC ) foi escrito em exclusivo para a Visus BBS onde trabalhava na altura (havia fechado a BAT BBS para ser SysOp profissional da maior BBS Portuguesa que era a Visus...) e era um "jogo da bisca" (sim, o jogo de cartas!) em que os utilizadores da BBS competiam pela melhor pontuação em jogos contra o computador. Uma tabela de "resultados" mantinha a competição acesa. A determinada altura a Trial era o terceiro jogo mais popular da Visus, logo a seguir à Death e Esterian Conquest. Mais tarde escrevi uma versão para o Commodore Amiga para a Marlene (the lady of the house Happy jogar; já que a rapariga é "viciada" em jogos de cartas e eu tinha ainda um Commodore Amiga em casa...

Desde que fui trabalhar para a Esoterica que ando a ganhar coragem para programar jogos, para serem jogados na Internet... olhando para o meu passado não é difícil adivinhar o que sucederá um dia! Por lá já escrevi sistemas de alarme que enviam pagers aos técnicos de serviço se alguma maquina ou serviço deixarem de funcionar (i.e. testam maquinas e serviços e enviam relatórios aos técnicos), gateways de e-mail para fax/pagers/SMS e detectores de SPAM... tantas aplicações e nenhum jogo???? Não pode durar...