Avançar para o conteúdo principal

Um jogo simples em Flash e AS3.0

Agora para uma coisa totalmente diferente, um pouco de Flash e AS3.0.
Este jogo muito simples tem como principal objetivo introduzir um pouco de código que permite gerir eventos do teclado, controlar imagens (sprites) totalmente por código, definir eventos associados a temporizadores (timers) e ainda gerar números aleatoriamente.
O resultado final será qualquer coisa como isto:


Então vamos a isso...
Para começar vamos criar duas camadas (layers) na linha de tempo (Timeline) como se apresenta a seguir:

Uma camada vai servir para inserir os objetos, neste caso três Clipes de Filme (Movieclips): a nossa nave, o inimigo e um projetil.

Na outra camada vamos inserir o código que vamos utilizar.

O movieclip que representa o inimigo vai ter o nome inimigo, o nosso será a nave e o projetil chamasse bala.
O movieclip bala vai ficar invisível inicialmente, para isso utilizamos a propriedade alpha e definimos em 0.

Começamos por associar uma função ao que teclamos, para isso fazemos:
     stage.addEventListener(KeyboardEvent.KEY_DOWN,teclado);

Esta linha associa uma função chamada teclado aos eventos gerados pelas teclas que vamos premindo.
A função fica com este aspeto:

function teclado(e:KeyboardEvent):void{
if (e.keyCode == Keyboard.LEFT){
if(nave.x>30) nave.x -=5;
}
if (e.keyCode == Keyboard.RIGHT){
if(nave.x<500) nave.x +=5;
}
if (e.keyCode == Keyboard.UP){
if(nave.y>200) nave.y -=5;
}
if (e.keyCode == Keyboard.DOWN){
if(nave.y<370) nave.y +=5;
}
if (e.keyCode == Keyboard.SPACE){
if(estadobala==1) return;
estadobala=1;
bala.alpha=100;
bala.x=nave.x+nave.width/2+bala.width/2;
bala.y=nave.y;
}
}
Basicamente controlamos as teclas CIMA, BAIXO, ESQUERDA e DIREITA para movimentar a nave com base nas propriedades x e y que indicam a localização da nave no palco (stage).

As condições dentro de cada if evitam que a nave saia do stage.

Por fim controlamos a BARRA DE ESPAÇO para fazer disparar o projetil, para isso temos uma variável que indica o estado da bala, isto porque só vamos deixar disparar uma de cada vez, assim se a bala está a percorrer o palco não dispara outra, se dispara a bala então coloca o alpha da bala a 100 (torna a bala visível) e posicionamos a bala à frente da nave para esta iniciar o seu trajeto.

A variável estadobala é definida assim:

var estadobala:int=0;

Vamos ter ainda outras variáveis:
var velocidade_inimigo:int=10;
var velocidade_bala:int=15;
var pontuacao:int = 0;

A primeira e a segunda indicam a velocidade a que se movimentam o inimigo e a bala, respetivamente e por fim a pontuação do jogador.

Agora os eventos que controlam o inimigo e a bala, para isso temos de iniciar dois temporizadores para essa tarefa:
var timer_inimigo:uint =setInterval(moveinimigo,100);
var timer_bala:uint =setInterval(movebala,100);

As variáveis definidas permitem controlar os eventos, para este exemplo nãos as vamos utilizar e podiam não existir.

Por fim a 'inteligência' do inimigo:
function moveinimigo():void {
inimigo.x+=velocidade_inimigo;
if(inimigo.x>520 && velocidade_inimigo>0){
velocidade_inimigo*=-1;
inimigo.x+=velocidade_inimigo;
}
if(inimigo.x<30 && velocidade_inimigo<0){
velocidade_inimigo*=-1;
inimigo.x+=velocidade_inimigo;
}
}

Que se resume a mover de um lado para o outro, não saindo do palco.

E ainda a bala:
function movebala():void {
if(estadobala==0) return;
bala.y-=velocidade_bala;
/*testar colisão da bala com o inimigo*/
if(bala.hitTestObject(inimigo)){
estadobala=0;
inimigo.x=sortear(5,500);
bala.alpha=0;
pontuacao+=10;
label1=pontuacao.toString();
label.text = String("Pontuação: " + label1);
}
//A bala saiu do palco?
if(bala.y<0){
estadobala=0;
bala.alpha=0;
}
}

Antes que me esqueça o código que faz aparecer a pontuação:
var label:TextField = new TextField();
var label1:String = pontuacao.toString();
addChild(label);
label.text = String("Pontuação: " + label1);

O código que atualiza a pontuação está na função que movimenta a bala.

Por fim a função que sorteia a coluna onde o inimigo aparece quando lhe acertamos:
function sortear(low:Number=0, high:Number=1):Number
{
  return Math.floor(Math.random() * (1+high-low)) + low;
}


Comentários

Mensagens populares deste blogue

Upgrade do Windows Home para Pro sem formatar

 Há algum tempo que tentava fazer o upgrade do meu Windows 10 da versão Home para a versão Pro, mas chegava sempre a um ponto em que me era solicitado para formatar o sistema e não estava para isso. Finalmente conseguinte seguindo estes passos: - seguinte estes passos  utilizei uma das chaves genéricas para o Windows 10 Pro e fui a Settings > Update & Security > Activation > Change the product key; - após inserir uma das chaves o Windows instala as funcionalidades Pro e pede para reiniciar; - agora tem o Windows Pro mas não está ativado, assim fui ao site urcdkeys  onde comprei uma chave para o Windows Pro por menos de €20; - com essa chave voltei a funcionalidade Change the product key e ativei o Windows; - e pronto, Windows Pro ativado sem formatar ou reinstalar. Importante : eu não tenho nada a ver com o site urcdkeys por isso a vossa experiência pode correr de forma diferente da minha.

Encriptar e Desencriptar

Com o .Net podemos facilmente codificar e descodificar mensagens através do namespace Cryptography. Neste post vamos estudar um programa que encripta um texto com base numa palavra passe e posteriormente descodifica a mensagem. Começamos por criar uma função para encriptar: string codifica(string mensagem, string ppasse) {   //este vector vai ficar com a mensagem encriptada   byte [] mensagem_codificada;  //vamos utilizar codificação UTF8   System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();   // Vamos utilizar o algoritmo MD5 para fazer o Hash da palavra passe   MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();   //Agora podemos então fazer o hash da palavra passe   byte[] TDESChave = HashProvider.ComputeHash(UTF8.GetBytes(ppasse));   //De seguida vamos escolher o algoritmo de encriptação   TripleDESCryptoServiceProvider TDESAlgoritmo = new TripleDESCryptoServiceProvider();   //Confi...

PONG em Flash AS3.0

Mais um pequeno jogo para demonstrar algumas das funcionalidades do AS3.0. Para este exemplo vamos implementar uma versão do Pong. Para este Pong vamos criar a possibilidade de acelerar a bola com a raqueta e, para tornar o jogo mais difícil, quando se atingir uma determinada pontuação fazemos aparecer uma parede no meio do campo de jogo. O código é muito parecido com o jogo do post anterior, mas um pouco mais complicado. Para controlar a nossa raqueta utilizamos a seguinte função: function teclado(e:KeyboardEvent):void{ dir_j1=0; if (e.keyCode == Keyboard.UP){ if(jogador1.y>0) jogador1.y -=5; dir_j1=-5; } if (e.keyCode == Keyboard.DOWN){ if(jogador1.y<370) jogador1.y +=5; dir_j1=5; } } Agora está mais simples pois só percorremos as linhas, ou seja, a coluna nunca muda. A raqueta que é controlada pelo computador depende do seguinte código: function movepc():void { if (bola.y>jogador2.y) jogador2.y = jogador2.y + velocidade_y; if (bola.y<jogador2.y) joga...