sexta-feira, 19 de agosto de 2011
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:
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:
SuperClasse Personagem:

SubClasse Melee:

SubClasse Ranged:

Inicialização dos objetos:

Pintando os objetos:
sábado, 2 de julho de 2011
AULA 6 - COLISÃO
AULA 7 - TIMER
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;
}
}
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...
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);
}
-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);
-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;
}
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...
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...
if(key[KEY_SPACE] && (chao || qtdPulo < 2)){
chao = false;
impulso = 50;
qtdPulo++;
rest(100);
}
O codigo completo...
Assinar:
Comentários (Atom)













