segunda-feira, 4 de julho de 2011

AULA 11 - ARQUIVOS - PIXELS

O exercicio consiste em aumentar uma imagem em 25% do tamanho origem, respeitando seus pixels, fazendo com que a imagem continue com a mesma forma de cores e linhas, porém 25% maior.

Inicio do codigo:


Metodo que inicializa o allegro e as variaveis BITMAP:


Metodo para aumentar 25 porcento:


Metodo Main:

domingo, 3 de julho de 2011

AULA 10 - HERANÇA

Exercicio para treinar conceitos basicos de herança, criar uma superclasse que tenha pelo menos os atributos X e Y, criar subclasses que necessitem dessas informações e fazer com que estas herdem da superclasse.

SuperClasse Personagem:


SubClasse Melee:


SubClasse Ranged:


Inicialização dos objetos:


Pintando os objetos:

AULA 9 - PONTEIROS

Exercicio simples de orientação a objetos:

Main:


ClasseA.h:


ClasseA.cpp:


ClasseB.h


ClasseB.cpp

AULA 8 - ORIENTAÇÃO AO OBJETO


sábado, 2 de julho de 2011

AULA 6 - COLISÃO

Para adicionar colisão em uma plataforma aerea com scrolling, foi criado algumas estruturas para encapsular as informações do Personagem e do Cenario:




Metodo para verificar a colisão:

AULA 7 - TIMER

Para adicionar a poeira ao cair de um salto:
-Começando com as variaveis utilizadas na poeira


-Codigo que desativa a poeira


-Ativando a poeira


-Codigo que controla as posições X e Y de cada uma das poeiras


-Pintando as poeiras


Resultado final:

quinta-feira, 26 de maio de 2011

AULA 5 - SCROLLING - "CÂMERA"

Para adicionarmos o scrolling temos que ter as seguintes variaveis de controle:
int map_move >> posição do mapa
bool scrolling >> indica se o scrolling está ativado
int posicao >> indica a posicao inicial no qual o scrolling será ativado
int posicaoFinal >> posicao final no qual o scrolling é novamente desativado

scrolling = false >> scrolling começa desativado até que o personagem chegue a marca da variavel "posicao"
posicao = 350; >> mais ou menos no meio da tela
posicaoFinal = -frente->w +800; >> ou -2800, poise o mapa inteiro tem 3600 de largura e o tamanho da tela é de 800

Para o cenario vamos utilizar duas imagens.. uma para a frente do cenario e outra para o fundo do cenario.. o fundo do cenario irá se movimentar mais lentamente:
BITMAP* frente;
BITMAP* fundo;
frente = load_bitmap("cenario2.bmp",NULL);
fundo = load_bitmap("cenario2back.bmp",NULL);

cenario2.bmp:


cenario2back.bmp:


Pintando o cenario na tela:
clear(backbuffer); >> limpa o backbuffer
draw_sprite(backbuffer,fundo,map_move/4,0); >> pinta o fundo do cenario em uma posição "x" 4 vezes menor que a frente do cenario, fazendo assim que o fundo do cenario se movimente mais lentamente
draw_sprite(backbuffer,frente,map_move,0); >> pinta a frente do cenario na posicao map_move

Movimentação de direita e esquerda:
if(direita){
dir = true;
if(posx >= posicao){
scrolling = true;
}else{
scrolling = false;
}
if(map_move == posicaoFinal){
scrolling = false;
}
if(scrolling == true){
map_move -=50;
}else{
posx+=50;
}
}

if(esquerda) {
dir = false;
if(posx <= posicao){
scrolling = true;
}else{
scrolling = false;
}
if(map_move == 0){
scrolling = false;
}
if(scrolling == true){
map_move +=50;
}else{
posx-=50;
}
}

terça-feira, 17 de maio de 2011

Uma pequena homenagem

Um pequeno video para nosso amigo Mateus relembrar um momento marcante de sua vida... :'(

Momento marcante

ps.:SHUAHSUAHUSAHUhsuhUSHuhsuHSUhushaUHSAUSHua...

Aula 4 - Matriz e Som

Colocando sons de passos no jogo:

-Declarando variaveis para controle do som:

SAMPLE* som_passos;
int seek_passos;
bool tocar_passos;

-Instalando o som:
install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);

-Carregando o arquivo de som e inicializando o seek com 0:
som_passos = load_sample("footsteps.wav");
seek_passos = 0;

-Executando e parando o som:
if(chao && frame != 0){
tocar_passos = false;
play_sample(som_passos, 255, seek_passos, 1000, false);
}else if(!tocar_passos){
tocar_passos = true;
stop_sample(som_passos);
}

Aula 3 - Exercicio animação

Fazendo o código para uma animação simples:

-Criando os os arrays para guardar as imagens da animação:

BITMAP* mario[5];
BITMAP* mario_pulo[3];

-Variavel para controlar os frames:
int frame, frame_pulo;

-Carregando as imagens para as animações:
mario[0] = load_bitmap("mario_4.BMP",NULL);
mario[1] = load_bitmap("mario_3.BMP",NULL);
mario[2] = load_bitmap("mario_4.BMP",NULL);
mario[3] = load_bitmap("mario_2.BMP",NULL);
mario[4] = load_bitmap("mario_1.BMP",NULL);
mario_pulo[0] = load_bitmap("pulo_1.BMP",NULL);
mario_pulo[1] = load_bitmap("pulo_2.BMP",NULL);
mario_pulo[2] = load_bitmap("pulo_3.BMP",NULL);

-Animações e movimentação do personagem de acordo com as ações do teclado:
if(direita){
posx+=5;
frame++;
}
if(esquerda){
posx-=5;
frame++;
}
if(key[KEY_SPACE] && (chao || qtdPulo < 2)){
chao = false;
impulso = 50;
qtdPulo++;
rest(100);
}

if(!chao){
posy -= impulso;
impulso -= 1;
if(posy > 430 || posy + gravidade > 430){
posy = 430;
impulso = 50;
chao = true;
qtdPulo = 0;
frame = 0;
frame_pulo = 0;
}
}

if(!chao){
posy += gravidade;
frame = 4;
if(impulso-gravidade > 0){
frame_pulo = 0;
}else if(impulso-gravidade <= 10 && impulso-gravidade >= -10){
frame_pulo = 1;
}else{
frame_pulo = 2;
}
//cout << "Impulso: " << impulso << " - " << "frame pulo: " << frame_pulo << "\n";
}

if(chao && frame == 4){
frame = 0;
}

-E por ultimo a renderização:
if(chao){

if(!flip){
draw_sprite(backbuffer,mario[frame],posx,posy);
}else{
draw_sprite_h_flip(backbuffer,mario[frame],posx,posy);
}
}else{
if(!flip){
draw_sprite(backbuffer,mario_pulo[frame_pulo],posx,posy);
}else{
draw_sprite_h_flip(backbuffer,mario_pulo[frame_pulo],posx,posy);
}
}

draw_sprite(screen,backbuffer,0,0);

sábado, 23 de abril de 2011

Formula para verificar colisão

Na aula vimos como verificar se NÃO estão colidindo dois retangulos logicos... abaixo a formula para verificar se dois retangulos logicos estão colidindo:

Onde "x" e "y" são as coordenadas do primeiro retangulo, "height1" e "width1" são altura e largura do primeiro retangulo... os mesmos atributos são comparados com o segundo retangulo...



Basicamente a formula verifica se algum dos vertices entrou dentro da area outro retangulo e se um retangulo está dentro do outro...

if(((x < x2) && (x2 < x+width1)
&& ((y < y2) && (y2 < y+height1)))
|| (((x < x2+width2) && (x2+width2 < x+width1))
&& ((y < y2) && (y2 < y+height1)))
|| (((x < x2) && (x2 < x+width1))
&& ((y < y2+height2) && (y2+height2 < y+height1)))
|| (((x < x2+width2) && (x2+width2 < x+width1))
&& ((y < y2+height2) && (y2+height2 < y+height1)))
|| (((x2 < x) && (x < x2+width2))
&& ((y2 < y) && (y < y2+height2)))
|| (((x2 < x+width1) && (x+width1 < x2+width2))
&& ((y2 < y) && (y < y2+height2)))
|| (((x2 < x) && (x < x2+width2))
&& ((y2 < y+height1) && (y+height1 < y2+height2)))
|| (((x2 < x+width1) && (x+width1 < x2+width2))
&& ((y2 < y+height1) && (y+height1 < y2+height2)))){
return true;
}

segunda-feira, 4 de abril de 2011

Animações do jogo Zelda

Mudei meu projeto de "Jelly Blocks" para "Legend of Zelda", sendo assim...

Para as animações das ações do personagem principal foram utilizadas quase todas as imagens abaixo:



Para as animações dos inimigos foram pegos alguns personagens abaixo:



Achei alguns mapas:



E por ultimo os codigos feito até o momento...
Controles:
Z - ataca
X - defende
C - simula caindo em um buraco
D - simula zelda recebendo dano
F - simula pegar algum item (como armas, cristais, chaves, etc)
A - simula pegar um objeto (arbusto, galinha, pedra, etc)
S - simula jogar objeto
V - se finge de morto..hehe

os inimigos andam aleatoriamente apenas para mostrar a animação...
o codigo não está completo, mas estou saindo agora para ir para a aula...

http://www.megaupload.com/?d=BRGX3ZW9

outra hora eu edito o post com o codigo com todas as animações...

quinta-feira, 24 de março de 2011

Aula 2 - Pulo Duplo

Adicionei um contador de pulos para limitar os pulos a 2; a variavel impulso recebe novamente 50 toda vez que o personagem for pular, indicando que o personagem teve um novo salto; na hora de saltar o programa vai esperar 100 milisegundos a mais do que os normais 40, para que o intervalo entre os dois eventos da barra de espaço sejam visiveis e propositais e não acidentais.

if(key[KEY_SPACE] && (chao || qtdPulo < 2)){
chao = false;
impulso = 50;
qtdPulo++;
rest(100);
}

O codigo completo...