83
Iniciar Fechar

Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Embed Size (px)

Citation preview

Page 1: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Iniciar Fechar

Page 2: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Quem sou eu? (){

Instrutor: Leinylson Fontinele Pereira Bacharel em Ciência da Computação (em conclusão)

Universidade Estadual do Piauí (UESPI)

Título: Utilização de Heurísticas Bioinspiradas em Sistemas de Inteligência Coletiva para Otimização de Roteamento de Pacotes em Redes Mesh

Page 3: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

O que veremos?

Bom minicurso a todos!

Introdução: O que são jogos ? Evolução Histórica Mercado Nacional Etapas de Desenvolvimento de Jogos Dicas

Page 4: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

O que faremos? (){

Trabalho com animações;

Noções de temporização e simulação;

Desenho e utilização de imagens vetoriais (sprites) e som digitais (MID, samples);

Programação de efeitos gráficos;

Criação e manipulação de formas primitivas;

Realização de testes de detecção de colisões, bem com todos os passos para produzir um jogo, da elaboração do enredo ao protótipo.

Page 5: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Atividade Multidisciplinar

. : : Pré-requisitos : : .

Programação (estrutura de dados, IA, Manipulação de ponteiros; Laços de repetição);

Engenharia de Software;

Computação Gráfica;

Música;

Matemática;

Física;

IHC;

Educação e Psicologia.

Page 6: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

. : : O Jogo : : .

O jogo no nosso contexto é o jogo eletrônico, uma simulação visual e interativa exibida numa tela.

A interação é tal que o jogador deve ter algum objetivo específico como ir ou sair para algum lugar , destruir algo, resolver um problema, etc.

Um jogo nos dá um controle sobre um personagem ou um objeto virtual, de modo que possamos ter um controle e uma imersão no ambiente virtual que se aproxime do nosso controle e imersão no ambiente real só que com regras e motivações diferentes.

. : : Gameficação : : .

Termo muito utilizado por empresas que buscam difundir seus produtos através de jogos/animações.

Page 7: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

Page 8: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : O Jogador : : .

Jogador é um participante do jogo.

Um jogador pode ser uma pessoa real ou um jogador controlado pelo próprio jogo. Sempre que nós nos referirmos à um jogador , estaremos nos referindo a um jogador real.

A interação do jogo com o jogador é feito com dispositivos de entrada e saída do jogo, geralmente a tela e um controle.

Na maioria das vezes, o jogador controla o personagem central do jogo.

Do que é feito um jogo?(){

Page 9: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : Personagem : : .

O personagem de um jogo de vídeo-game é personagem fictício para que o jogador controle.

Nos primeiros jogos o personagem era apenas uma figura sem expressão, dotada de alguma característica especial (andar , pular) e não possuíam uma história ou motivação.

O primeiro personagem de vídeo-game foi o Mario, criado por Shigeru Miyamoto para a Nintendo.

Com o tempo, os personagens de vídeo-game foram incorporados à cultura-pop. Com mário surgiu o conceito de mascote do jogo. Esse tipo de personagem carismático agrega um grande valor por sua importância publicitária graças a sua identificação com o público.

Do que é feito um jogo?(){

Page 10: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : Menus : : .

Os menus são interfaces de texto e/ou imagens onde o jogador deve fazer escolhas e ajustes.

Antes do jogo começar os menus servem para fazer ajuste de preferenciais do jogo, escolha do tipo de jogo, performance do hardware, etc.

Dentro do jogo eles servem para fazer escolhas e ajustes mais complexos.

Nem todo jogo precisa de menus dentro do jogo, mas certamente vai precisar de um menu antes do jogo começar .

Do que é feito um jogo?(){

Page 11: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

Page 12: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : HUD : : .

Sigla para Head Up Display. É um método de representação visual de informações importantes para o jogador. São como menus não interativos.

Em geral eles exibem informações como munição, life, arma selecionada, pontuação, dinheiro ou ítens.

O HUD é desenhado por último na tela, de modo que ele fique sempre visível para o jogador. Ele não deve se mover muito ou conter palavras para que não distraia o jogador .

Ele deve ser sempre que possível iconográfico, ou seja, usando imagens que representem a informação.

Do que é feito um jogo?(){

Page 13: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

Page 14: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : Sprites : : . O Desafio: Como causar a impresão de movimento dos personagens?

A Solução:

Utilizaremos sprite, ou seja, um conjunto de dados que definem determinado objeto ou personagem num jogo. Para uma pessoa, por exemplo, podemos ter um sprite que contenha as posições vertical e horizontal dela no mundo, a direção para onde ela está virada e os bitmaps que podem representá-la durante o jogo.

Do que é feito um jogo? (){

Page 15: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

Page 16: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

Page 17: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : Tileset: : .

Consiste em agrupar várias imagens pequenas a fim de montar uma imagem grande.

Do que é feito um jogo?(){

Page 18: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : Som : : .

Embora não sejam fundamentais no jogo, os sons existem nos jogos desde o primeiro jogo. Os sons ajudam a caracterizar certas ações, aumentar o nível de imersão do jogador e deixa-lo mais concentrado no jogo.

Os sons podem ser construídos por sonoplastia. Deve-se ter em mente que diferentes sons provocam diferentes efeitos sobre sensorialidade do jogador. Os sons ligados a uma ação ou personagem não precisam ser os mesmos sons ligados a estes no mundo real. Pose-se usar sons diversos afim de obter efeitos cômicos, criar tensões, força ou simplesmente obter sensações agradáveis.

Do que é feito um jogo?(){

Page 19: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : Música : : .

A música serve para se criar uma base para as imagens e os outros sons.

Com a construção da música certa pode-se criar ambientes agradáveis, tensos, pode-se deixar o jogador mais nervoso com uma música mais rápida e pode-se até usar o recurso do silêncio para criar um clima de suspense.

É sempre bom ter algum repertório de músicas no jogo, e ter músicas de duração razoável, caso contrário as músicas podem ficar chatas e repetitivas.

As músicas de jogos também criam um lembrança especial do jogo nos jogadores e cria um sensação agradável ao se jogar .

Do que é feito um jogo?(){

Page 20: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

. : : Física : : .

Um jogo é uma simulação. Essa simulação é, na maioria das vezes, uma representação do mundo em que vivemos. Essa representação, seja por limitações de software e hardware ou por escolha estética, não contem todos os aspectos do mundo real. Porém um aspecto que quase sempre está presente é o físico.

Esse aspecto se manifesta principalmente na detecção de colisão.

Se o objeto A depois que ele se mover colide em algo então faz alguma coisa.

Essa alguma coisa pode variar de jogo para jogo. Pode ser que o objeto A seja um personagem e o algo seja uma parede. Então o "faz alguma coisa” pode ser nada, ele bate na parede portanto não anda, mas pode ser que o personagem tenho batido em algo que o machuque como o fogo, então o "faz alguma coisa" pode ser tirar vida do jogador .

Uma técnica de colisão bem simples e que vamo usar aqui é verificar se o retângulo que envolve o sprite toca o retângulo que envolve o outro sprite:

Do que é feito um jogo?(){

Page 21: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

Page 22: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Do que é feito um jogo?(){

. : : Finite State Machines : : .

Page 23: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Quem participa da criação? (){

Game Designer Elabora os elementos do jogo bem como sua mecânica. Os elementos são os personagens e o cenário e a mecânica são as possibilidades que o jogador tem de interagir com o jogo. Empresas que elaboram jogos de ponta modernos dividem as responsabilidades do game designer com outros profissionais relacionados, sendo os principais, o combat designer e o level designer. Roteirista Descreve como é a trama do jogo, o perfil psicológico dos personagens e a interação entre eles, sendo a interação do tipo social e/ou psicológica, a qual não necessariamente corresponde àquela entre o jogador e os personagens do jogo. Tester Trabalha na equipe de Q&A (Quality Assurance - Controle de qualidade). Testa diversos aspectos do jogo e relata os pontos falhos ou a serem melhorados.

Page 24: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Quem participa da criação? (){

Programador Elabora a programação do jogo. Desenvolve códigos para lidar com AI, música, interação, etc. Com exceção de jogos independentes uma empresa tem diversos programadores em seu elenco, sendo que cada um é especializado numa área (rendering, ai, rede, etc…). Engenheiro de software Projeta os componentes de software do jogo envolvendo diversos aspectos como a composição dos objetos, a interface deles, a interrelação existente entre eles, etc. Programador Web && Programador de redes = ¬¬ aff Programador de AI Responsável por programar os algoritmos de Inteligência Artificial usados no jogo. Dentre estes algoritmos estão o de planejamento estratégico de grupo num atirador de primeira pessoa, a montagem da estratégia do time controlado pela CPU num jogo de esportes, o planejamento de caminho para levar um personagem NPC de um local ao outro, etc.

Page 25: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Quem participa da criação? (){

Engenheiro de som Produz os efeitos sonoros e a música tema. Level designer Faz o projeto da fase em que o jogador se encontra. Quais elementos compõem a fase, há a presença de alguma característica distintiva no terreno como aclives, declives, montanhas, etc. Combat Designer Projeta como será o combate entre o jogador e o computador. Quais são os elementos que devem estar presentes no combate, qual o papel destes elementos (dano, cobertura, etc).

Page 26: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Equipe de desenvolvimento de jogos

Page 27: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Como é feito um jogo 2D? (){

. : : Plano Cartesiano (x,y): : .

Page 28: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Como é feito um jogo 2D? (){

Page 29: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Jogos 2D

Page 30: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Jogos 3D

Page 31: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Os bastidores de um jogo(){

Preparar os elementos. Nessa parte, o programa irá carregar o necessário para sua execução (como imagens e sons), bem como preparar as estruturas de dados usadas pelo mesmo. Montar a primeira tela. Aqui o programa coloca cada elemento em seu lugar inicial, de acordo com a vontade do desenvolvedor. Checar a situação atual do jogo, e aí criar uma nova tela. Agora o programa deve preparar uma nova tela, levando em conta a situação anterior do jogo e a(s) entrada(s) do jogador. É aqui, por exemplo, que o programa checaria se o quadrado que representa a cabeça da cobrinha está contido na lista de quadrados que representam seu corpo, ou de forma mais simples, se a cobrinha bateu nela mesma. Repetir... Agora tudo o que resta é continuar esse processo de calcular uma nova tela e mostra-la até que o jogo acabe.

Page 32: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Os bastidores de um jogo(){

Page 33: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

O que são engines? (){

Definição: “É a ferramenta que se encarregará por entender como o hardware gráfico, irá controlar os modelos para serem renderizados, tratará das entradas de dados do jogador, tratará de todo o processamento de baixo nível e outras coisas que o desenvolvedor de jogos normalmente não deseja fazer ou não tem tempo para se preocupar . ”

Page 34: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Engines (){

Page 35: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

PyGame (){

Você que sempre gostou de jogar e decidiu cursar Ciência da Computação para aprender como é que aqueles games são feitos e logo se viu travando uma batalha para passar em Cálculo, Álgebra Linear e Geometria Analítica.

Certo, primeiro é preciso ficar claro que não estamos falando de um programinha a lá RPG Maker no qual você "pinta" os mapinhas na tela e arrasta personagens pré-feitos para o jogo.

O Pygame é um conjunto de módulos que você importa num código em Python, os quais lhe

disponibilizam uma série de funcionalidades auxiliares para criação de aplicativos multimídia e games.

Page 36: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

PyGame (){

Vários processadores podem ser usados facilmente. O uso de vários núcleos adiciona um desempenho muito maior ao seu jogo.

As funções internas são implementadas em C e Assembly.

Código em C costuma ser de 10 a 20 vezes mais rápido que Python. Já Assembly tem uma performance de mais de 100 vezes maior que Python.

Portátil mesmo.

Aplicativos programados em Pygame podem rodar tanto em plataformas Windows quanto em Linux, Solaris, FreeBSD, Mac OS, Android, entre outros. O código ainda dá suporte a Dreamcast e também pode ser usado em dispositivos móveis.

Simples!

O Pygame é usado no projeto OLPC para ensinar programação a crianças. Ao mesmo tempo, também é a preferência de programadores experientes.

Page 37: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

PyGame (){

Page 38: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Engines (){

Page 39: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Allegro (){

Allegro é uma biblioteca de funções para jogos 2D feita em C.

Apesar de ter algumas funções para jogos 3D ela não é indicada para isso, sendo no lugar dela uma API3d como OpenGL ou DirectX

De acordo com a Companhia Oxford de Música, Allegro é o italiano para "rápido, vivo e brilhante".

Ele também é um acrônimo recursivo que representa "Allegro Low Level Game Routines"

Page 40: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Cores (){

Page 41: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Allegro (){

int allegro_init() Esta é a principal função, e deve obrigatoriamente ser chamada para uma aplicação Allegro funcionar, lembre-se que a chamada desta função deve ser a primeira a ser feita, antes de qualquer outra função Allegro. Exemplo de uso: allegro_init(); PyGame: import pygame from pygame.locals import* int makecol( int iRed, int iGreen, int iBlue ); Passando-se os valores dos tons (que variam de 0 a 255), de vermelho, verde e azul, esta função retorna o código da cor. Exemplo de uso: makecol (255, 0, 0 ); PyGame: Realizada de forma similar

Page 42: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Allegro (){

void rest(unsigned int uiTime) Interrompe a execução do programa durante um intervalo de tempo igual ao passado como parâmetro, em milisegundos. Exemplo de uso: rest (1000); PyGame: Clock = pygame.time.Clock() Clock.tick(int Time) void textprintf_ex(BITMAP *bmp, FONT font, int iX, int iY, int iColor, int iCorDeFundo, char sTexto, ... );

Função para exibir um texto na tela, o sexto parâmetro deve ser -1 para um fundo transparente. Exemplo de uso: textprintf_ex(screen, font, 10, 20, makecol(200, 200, 20), -1, "X vale : %d", 10 ); PyGame: Font = pygame.font.Font("font.ttf",128)

Page 43: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Allegro (){

void putpixel(BITMAP *bmp, int iX, int iY, int iColor) Colore um pixel do bitmap, nas coordenadas especificadas no segundo parâmetro e terceiro parâmetro, na cor passada no quarto parâmetro. Exemplo de uso: putpixel(screen, 20, 300, makecol(0, 200, 30)); void getpixel(BITMAP *bmp, int iX, int iY, int iColor) Recupera o valor da cor de um pixel do bitmap, nas coordenadas especificadas no segundo parâmetro e terceiro parâmetro, na cor passada no quarto parâmetro. Exemplo de uso: int iPixelColor = getpixel(screen, 20, 300, makecol(0, 200, 30 )); void floodfill(BITMAP *bmp, int iX, int iY, int iColor); Preenche um bitmap com a cor especificada, em um espaço fechado, a partir do ponto X e Y. Exemplo de uso: floodfill (screen, 20, 30, makecol(20, 60, 300));

Page 44: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Allegro (){

void vline(BITMAP *bmp, int iX, int iY1, int iY2, int iColor); void hline(BITMAP *bmp, int iX1, int iY, int iX2, int iColor); void line(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor); A primeira função desenha uma linha vertical, a segunda função desenha uma linha horizontal e a ultima função desenha uma linha entre 2 pontos quaisquer. Exemplo de uso: line (screen, 20, 300, 400, 500, makecol(20, 60, 300)); void rect(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor); void rectfill(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor); A primeira função desenha um retângulo sem preenchimento, com o contorno colorido, enquanto a segunda função desenha um retângulo com preenchimento. Exemplo de uso: rectfill (screen, 20, 300, 400, 500, makecol(20, 60, 300));

Page 45: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Allegro (){

void circle(BITMAP *bmp, int iX, int iY, int iRaio, int iColor); void circlefill(BITMAP *bmp, int iX, int iY, int iRaio, int iColor); A primeira função desenha um círculo sem preenchimento, com o contorno colorido, enquanto a segunda função desenha um círculo com preenchimento. Exemplo de uso: circlefill (screen, 20, 300, 10, makecol(20, 60, 300)); void ellipse(BITMAP *bmp, int iX, int iY, int iXRaio, int iYRaio, int iColor); void ellipsefill(BITMAP *bmp, int iX, int iY, int iXRaio, int iYRaio, int iColor); A primeira função desenha uma elipse sem preenchimento, com o contorno colorido, enquanto a segunda função desenha uma elipse com preenchimento. Exemplo de uso: ellipsefill (screen, 20, 300, 5, 10, makecol(20, 60, 300));

Page 46: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Biblioteca para construção de jogos e aplicações multimídia em geral

Free Source

Voltada mais especialmente para jogos 2D

Conhecida pela facilidade de adicionar entrada de dados via teclado, mouse e joystick.

Suporta arquivos de configuração e de dados comprimidos

Temporizadores

Grande comunidade de desenvolvedores

Allegro (){

Page 47: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Multi-plataforma

DOS

Windows

Linux

Mac (OS X)

BeOS

QNX

Primitivas Gráficas

Rectas, círculos, elipses

Polígonos (sólidos, texturados, transparentes)

Texto em modo gráfico

Animações

Allegro (){

Page 48: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Incluir <allegro.h> depois de todos os demais includes

Deve sempre aparecer uma chamada à função allegro_init() o mais perto possível do início do programa.

Da mesma forma devem ser chamadas, a seguir, as funções install_keyboard(), install_mouse() e install_timer().

A função allegro_exit() deve ser chamada no final do programa.

Colocar a macro END_OF_MAIN() logo após a chave final da rotina main()

Ao compilar, incluir a biblioteca alleg:

gcc -o test test.c –lalleg

Allegro (){

Page 49: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Especificado antes de começar a desenhar:

int set_gfx_mode (int card, int w, int h, int v_w, int v_h);

Onde:

card é usualmente GFX_AUTODETECT, GFX_AUTODETECT_FULLSCREEN ou GFX_AUTODETECT_WINDOWED

w , h largura e altura

v_w , v_h largura e altura virtual (normalmente, 0)

Allegro (){

Page 50: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Bitmaps são matrizes de pixels, em que cada valor indica uma cor

Tela é um BITMAP especial chamado screen

BITMAPs adicionais podem ser criados com:

BITMAP *bmp = create_bitmap(int width, int height);

Allegro (){

Page 51: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

. : : Periféricos de Entrada – Teclado : : .

Teclado

install_keyboard()

/* Para inicializar as rotinas do teclado */

KEY_ALTGR Alt Direito

KEY_ALT Alt esquerdo

KEY_RCONTROL Control Direito

KEY_LCONTROL Control Esquerdo

KEY_RSHIFT Shift Direito

KEY_LSHIFT Shitf Esquerdo

KEY_PRTSCR Print Screen

KEY_SPACE Barra de Espaço

KEY_PAUSE Pause

KEY_DOWN Seta para Baixo

KEY_UP Seta para Cima

KEY_LEFT Seta para a Esquerda

KEY_RIGHT Seta para a Direita

KEY_ENTER Enter

KEY_ESC Esc

KEY_0 ... KEY_9 Teclado Normal 0 a 9

KEY_0_PAD ... KEY_9_PAD Teclado Numérico 0 a 9

KEY_A, KEY_B...KEY_Z A, B ... Z

Código na Array Tecla

Váriável global int key[]

permite ver quais teclas estão pressionadas.

constantes definidas para identificar cada tecla

Allegro (){

Page 52: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

install_mouse() /* Para inicializar as rotinas do mouse */

Retorna -1 em caso de falha ou o número de botões que o mouse tem em caso de sucesso

. : : Periféricos de Entrada – Mouse : : .

Usa-se a função show_mouse para que o cursor do mouse seja mostrado no bitmap especificado

Passando NULL como parâmetro esconde o cursor do mouse

Deve-se ter cuidado ao desenhar algo na tela pois o cursor do mouse pode passar por cima e estragar o desenho, por isso é sempre bom escondê-lo antes de desenhar qualquer coisa

Allegro (){

As variáveis mouse_x e mouse_y contêm a posição do cursor do mouse na tela.

A variável mouse_b contém o estado dos botões.

(mouse_b & 1) é verdadeiro se o botão esquerdo estiver pressionado.

(mouse_b & 2) é verdadeiro se o botão direito estiver pressionado.

Page 53: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Som digital: WAV. Música: MID.

Antes de se tocar um som digital ou música deve-se carregá-los da seguinte forma:

/* declaração das variáveis que guardarão sons e músicas */

SAMPLE *som1; /* SAMPLE = arquivos de som digital */

MIDI *musica; /* MIDI = arquivos de música */

/* carrega os arquivos usando-se as respectivas funções */

som1 = load_wav(“arquivo.wav”); /* para arquivos wav */

musica = load_midi(“arquivo.mid”); /* para arquivos mid */

Ponteiro nulo -> arquivo não encontrado.

Allegro - Som (){

Page 54: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Para tocar uma música usa-se a função play_midi. O primeiro parâmetro é o arquivo MIDI carregado, o segundo indica se ele tocará em loop ou não.

/* Exemplo para tocar um arquivo MIDI */

MIDI *musica; /* declaração da variável a ser usada */

musica = load_midi(“musica.mid”); /* carrega arquivo */

play_midi(musica,TRUE); /* toca a música em loop */

Para parar de tocar uma música usa-se a função stop_midi().

Som – MIDI’s (){

Page 55: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Para tocar um som digital usa-se a função play_sample. Os cinco parâmetros indicam: arquivo carregado, volume (0 a 255), equilíbrio entre as caixas (0 a 255, 128 é meio a meio), freqüência (1000 usa a frequência original, 500 usa a metade da freqüência original etc.) e se vai ser tocado em loop

Função stop_sample() pára de tocar

/* Exemplo para tocar um arquivo de som WAV */

SAMPLE *som; /* declaração da variável a ser usada */

som = load_wav(“som.wav”); /* carrega arquivo */

play_midi(musica,255,128,1000,FALSE); /* toca som */

Som - Samples (){

Page 56: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Executar pedaço de código em velocidades diferentes Para isso, colocar cada um dos trechos de código numa função diferente Allegro só permite o uso de 16 timers

int install_int(void (*proc)(), int speed) /* cria timer */

install_timer(); /*inicializa timer, opcional */

void remove_int(void (*proc)()) /* remove função da lista */

Notas: Todas variáveis globais acessadas nos timers devem ser trancadas com a macro LOCK_VARIABLE()

Todas as funções de "timer" devem ser trancadas com

LOCK_FUNCTION() speed representa milésimos de segundo

Timming no Allegro (){

Page 57: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Etapas de elaboração de um jogo (){

Idéia

Rascunho do jogo

Detalhamento do jogo

Game Design Document (GDD)

Produção de áudio e imagens 2D

Desenv. de artefatos computacionais (engines)

Integração (arte e computação)

Page 58: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Idéia (){

Muitas idéias vem dos sonhos.

Surgem de pequenos conceitos expandidos em Brainstorm.

Grandes idéias poder parecer ridículas no começo.

Page 59: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Rascunho do jogo (){

Personagens, fases, itens com pequenas descrições.

Fluxo das telas do jogo e menus.

Page 60: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Detalhamento do jogo (){

O que o jogador fará no jogo ?

Quantos inimigos o herói vai enfrentar ? Como eles são ?

Quais as armas disponíveis que o jogador poderá usar ?

Como será o sistema de vida do jogador ?

Qual o objetivo do jogo ? Quantas fases terá ? Como elas serão (cenário, inimigos, dificuldade, etc) ?

Quantos jogadores poderão jogar o jogo ?

Qual o tipo de visualização gráfica ?

Qual o tipo de trilha sonora ?

Page 61: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Game Design Document (GDD){

Conceito: – Nome do jogo, público alvo, história, regras...

Especificações técnicas: – Hardware, sistema operacional...

Especificações do jogo: – Número de fases, personagens, itens, cenários...

Dispositivo de entrada: – Mouse, teclado...

Design gráfico e arte: – Abertura, layout de menus e telas, final do jogo...

Sonorização: – Músicas nos menus, músicas nas fases...

Desenvolvimento: – Tempo de desenvolvimento, alocação de pessoas...

Page 62: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Programação de Jogos (){

. : : Algumas Técnicas : : .

Animação com Double Buffering

Scrolling

Sprites

Detecção de Colisão

Page 63: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Dar a impressão de que coisas se movem

Pode significar mover um pixel ao longo da tela mas, geralmente, significa uma mudança repetitiva da apresentação de algo para que dê a ideia de que se move.

Qual a técnica mais simples?

limpamos a tela, desenhamos os objetos, limpamos a tela novamente, desenhamos os objetos nas novas posições.

Animação (){

Page 64: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Double Buffering (){

O Problema: Quando vamos fazer animações usando o Allegro, surgem alguns problemas relacionados aos vários métodos que podem ser utilizados. O método mais simples que podemos imaginar é aquele em que limpamos a tela, desenhamos os objetos, limpamos a tela novamente, desenhamos os objetos nas novas posições, e assim por diante. Este método, porém, tem um grave problema: a tela pisca a cada limpeza.

A Solução: Dispomos de um bitmap auxiliar (chamado de buffer) que, normalmente, possui o tamanho da tela (ou o tamanho da região onde ocorre a animação). Desenhamos, neste buffer, os objetos que devem ser apresentados na tela. Após isso, desenhamos o conteúdo do buffer na tela, fazendo com que os objetos apareçam. Limpamos, então, o buffer, desenhamos os objetos novamente em suas novas posições, passamos o conteúdo do buffer para a tela, e assim por diante.

Page 65: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Qual o problema desta técnica?

Efeito Flicker - efeito de cintilação ou vibração de uma imagem na tela do computador

Instante 1 Instante 2: Limpar a tela Instante 3

Double Buffering (){

Page 66: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

Qual a solução?

Instante 2: Limpar a tela Instante 1 Instante 3

Buffer

Instante 1 Instante 3

Tela

Instante 2

Efeito Flicker (){

Page 67: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Scrolling (){

O Problema: Como dar movimento ao personagem e aos objetos envolvidos?

A Solução: Movimento de cenário. O scrolling consiste em movimentar o fundo do cenário e, normalmente, deixar o personagem controlado parado, o que causa uma sensação de movimento. O scrolling pode ser horizontal, vertical ou em ambas as direções.

O exemplo demonstra como utilizar o scrolling, desenhado um boneco (parado) no meio da tela, enquanto o fundo se move de baixo para cima, fazendo com que tenhamos a sensação de que o boneco está caindo.

Page 68: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Parallax Scrolling (){

O Problema: Como causar a sensação de profundidade presente em jogos 3D?

A Solução: Utilizar vários fundos que se movimentam em velocidades diferentes.

O exemplo demonstrará um parallax scrolling horizontal.

Page 69: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Detecção de Colisão (){

O Problema: Como verificar se dois sprites estão sobrepostos, ou seja, se houve uma colisão?

A Solução: Existe o método que chamamos de força bruta (checar cada ponto de um sprite com cada ponto de outro sprite) qué é ineficiente, a maior parte dos outros métodos são aproximativos. Veremos o principal deles, que consiste em dividir os sprites em retângulos, de forma que possamos verificar se cada retângulo está ou não sobreposto a outro.

Fazer com que o sprite tenha sua movimentação limitada às bordas do nosso jogo não deixa de ser uma forma de detecção de colisão, bem simples, é verdade. Porém, em jogos 2D, geralmente se deseja realizar detecção de colisão entre dois ou mais sprites no jogo.

Page 70: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Detecção de Colisão (){

. : : Colisão entre Esferas : : .

Contudo, apesar do sistema de detecção de colisões estar utilizando o algoritmo do bouncing box, depois de alguns testes você perceberá um problema. Se os sprites colidirem diagonalmente, eles irão colidir antes de atingirem um ao outro de verdade. Isso está ocorrendo justamente por utilizarmos caixas para representar a forma geométrica das esferas.

Quando queremos testar colisões entre esferas, teremos que verificar se a distância entre os centros delas são menores que a soma dos seus raios. Em caso positivo, então uma colisão ocorreu. Essa é a forma mais eficiente de detectar colisões entre duas esferas.

Para detectar a colisão entre duas formas circulares, usamos o teorema de Pitágoras:

(r2 = x2 + y2)

Page 71: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Detecção de Colisão (){

. : : Colisão entre Esferas : : .

A soma dos quadrados dos dois lados (hipotenusa ao quadrado) é menor ou igual que o quadrado da soma dos raios das duas formas (que no fundo, é como se fosse o quadrado de um dos lados), mais o quadrado da soma dos raios das duas formas (que no fundo, é como se fosse o quadrado do lado restante. Esta "grande" soma, é como se fosse uma segunda hipotenusa ao quadrado.). Básicamente, quando a distância entre as duas formas (ao quadrado) for igual ou menor que a soma dos dois raios (ao quadrado), dá-se a colisão..

Page 72: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Detecção de Colisão (){

. : : Colisão entre Esferas : : .

If ((formx*formx + formy*formy) <= ((rad1 + rad2)*(rad1 + rad2)) + ((rad1 + rad2)*(rad1 + rad2))) "/:collission" = "Sim" Else "/:collission" = "Não" End If

Page 73: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Mercado Nacional

Page 74: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – Produção & Pesquisa (){

Som – Sound Forge: produção de trilhas e efeitos sonoros. – Cubase: mixagem de canais MIDI – Audacity: permitir criar áudio, inclusive combinar diferentes canais de som.

Imagens 2D

– Tiles – Bricks – Layers – Sprites

Page 75: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – O que fazer ? (){

Estudar muito !

Conhecer as novidades no mundo dos jogos

Jogar bastante e diferentes tipos de jogos

Buscar fazer contatos

Participar de eventos relacionados

Começar a desenvolver jogos fáceis: – Pong, Arkanoid, Space Invaders, Tetris, Pacman...

Page 76: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – Livros Nacional (){

Page 77: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – Livros Internacionais (){

Page 78: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – Sites (){

Abragames – http://www.abragames.org/ BRGames – http://www.brgames2009.com.br/ PDJ – http://www.programadoresdejogos.com/ UNIDEV – http://www.unidev.com.br/ GameDevBr – http://www.gamedevbr.com/ Gamasutra – http://www.gamasutra.com SharpGames – http://www.sharpgames.net/ Ponto V – http://vinigodoy.wordpress.com/

Page 79: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – Eventos (){

SBGames – (Simpósio Brasileiro de Jogos e Entretenimento Digital)

SCGames – (Simpósio Santa Catarina Games)

IGN - (Independent Game Festival) – http://www.igf.com/

Campus Party – http://campus-party.com.br/

Page 80: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – Competições (){

XNA Game Challenge – http://www.xnachallenge.com.br/ Dream Build Play – http://www.dreambuildplay.com Imagine cup – http://imaginecup.com/ Maratona de Programação – http://maratona.ime.usp.br/

Page 81: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Dicas – Links interessantes (){

Gráficos: – http://www.tilemap.co.uk/ – http://reinerstileset.4players.de/ – http://www.hippydrome.com/

Músicas e Efeitos sonoros:

– http://www.flashkit.com/soundfx/ – http://www.findsounds.com/

Fonts:

– http://www.1001freefonts.com/ The game loop:

– http://dewitters.koonsolo.com/gameloop.html Game Engines:

– http://www.devmaster.net/engines/

Page 82: Criação de Jogos 2D com Técnicas 3D Utilizando Python e C

}

Isso é tudo, pessoal! (){

eof