Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programando Jogos com Delphi, Notas de estudo de Engenharia Elétrica

Lógica, Animação, Controle.

Tipologia: Notas de estudo

2012

Compartilhado em 11/11/2012

engeel-2
engeel-2 🇧🇷

4.9

(22)

32 documentos

1 / 10

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Programando Jogos com Delphi
(LÓGICA, ANIMAÇÃO, CONTROLE)
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Programando Jogos com Delphi e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity!

Programando Jogos com Delphi

(LÓGICA, ANIMAÇÃO, CONTROLE)

Introdução

Este texto foi escrito para pessoas que se interessam pela arte da programação de jogos, uma das mais completas, pois utiliza a parte visual, sonora e interativa. Esse texto não tem como objeto de estudo a criação do enredo do jogo e sim a parte lógica da programação, utilizado-se das facilidades do Delphi. É de suma importância o leitor ter um bom nível técnico em programação e algum conhecimento de ciências exatas, pois serão vistos assuntos específicos que utilizam lógica, matemática e física.

No desenrolar da leitura serão abordadas questões relacionadas a manipulação de resoluções do vídeo, utilização de músicas e performance dos controles do jogo. Também será visto a parte lógica do comportamento do personagem principal e seus inimigos.

No primeiro exemplo, será criado um jogo de nave com personagem principal, inimigos, tiro, colisão etc. No segundo exemplo será explicado o desenvolvimento de um jogo estilo Mario Brothers, baseado em Blocos(tile based game).

1. Entendendo o Posicionamento do Personagem

em Relação a Tela.

O cenário está divido da mesma forma de um plano cartesiano invertido. Por ele podemos localizar a posição do personagem. Veja abaixo:

0 0 Posição X

Posição Y

Para descobrir em qual posição está o personagem basta verificar as suas cordenadas X e Y.

var OFFScreen: TBitmap; (...)

procedure TForm1.FormCreate(Sender: TObject); begin OFFScreen:= TBitmap.create; OFFScreen.Width:= 320; OFFScreen.Height:= 240; end;

3. Estrutura Principal do Jogo.

O código principal que será utilizado deverá estar dentro de um laço, para que seja possível controlar as animações e movimentação dos personagens. Veja abaixo um exemplo do código acima descrito:

Exemplo:

procedure TForm1.Button1oneclick(sender:TObject); begin while not Application.Terminated; // Em quanto jogo não termina faça begin {CODIGO PRINCIPAL DO JOGO} Application.ProcessMessages; // utilizado para liberar processamento atual end; end;

Descrição do Código : o código será iniciado ao clicar em um botão. Um laço funcionará até que o aplicativo seja fechado. Dentro do laço deve-se colocar os comandos de manipulação do jogo e liberar o processamento através do comando Application.ProcessMessages;

4. Definindo Características do Jogo.

Para facilitar a programação, deve ser criado alguns tipos que auxiliarão no desenvolvimento. É criado um tipo para o PERSONAGEM e outro para os INIMIGOS. Para os personagens atribui-se: Posição X (controla o movimento na horizontal), Posição Y (controla o movimento na vertical), Vivo (tipo lógico, controla a existência dos personagens) e

Sentido (cima,baixo,esquerda,direita e parado). Outros tipos podem ser criados conforme as características do jogo.

Exemplo:

Type TSentido = (cima,baixo,esquerda,direita,parado);

Type TNave = Record PosX: Integer; //Posição horizontal PosY: Integer; //Posição vertical Sent: TSentido; //Sentido do movimento Vivo: Boolean; //Controle de existência End;

5. Movimentando o Personagem.

A movimentação deverá ser dividida em duas partes: a primeira busca capturar as teclas pressionadas e informar ao personagem em que sentido se movimentar, na segunda parte lêr o sentido armazenada na variável “SENT” e INCREMENTA-SE ou DECREMENTA-SE um Valor(Velocidade) da Posição X (horizontal) ou Y (vertical).

Exemplo:

(...) Var Nave: TNave; //Definindo uma variável global do tipo TNAVE (...)

procedure Ler_Teclado; begin if GetKeyState(vk_left)<0 then //se tecla “seta esquerda” pressionada Nave.Sent:= Esquerda // Movimento para esquerda else if GetKeyState(vk_right)<0 then // se “seta direita” pressionada Nave.Sent:= Direita // Movimenta para direita else Nave.Dir:= Parado; // caso contrário, personagem parado

If GetKeyState(vk_up)<0 then //Idem (cima) Nave.Dir:= Cima //Idem

Crie tipo para controlar o sentido da movimentação.

Tsentido = (cima,baixo,esquerda,direita,parado);

  • Crie um tipo para controlar a Nave, veja abaixo:

TNave = Record PosX: Integer; // Controla movimento horizontal PosY: Integer; // Controle movimento vertical Sentido: Tsentido; Vivo: Boolean; End;

  • Defina algumas contantes:

Const LARGURA = 320; // largura da tela ALTURA = 240; // altura da tela TAMANHO = 5; // Tamanho da Nave

  • Defina uma variável global para o BackBuffer e uma do tipo TNAVE:

Var BackBuffer: Tbitmap; Nave: Tnave;

  • No ONCREATE do formulário Crie o BackBuffer:

BackBuffer:= Tbitmap.Create; BackBuffer.Width:= LARGURA; BackBuffer.Height:= ALTURA;

  • No ONDESTROY libere o BackBuffer:

BackBuffer.Destroy;

  • Depois de definirmos todos os procedimentos iniciais vamos começar a programação da lógica do jogo. Primeiramente no ONDBLCLICK do formulário digite o laço principal do jogo:

while not Application.Terminated do begin Application.ProcessMessages; end;

  • Defina agora alguns procedimentos (OBS: Coloque os procedimentos antes do BEGIN do procedimento ONDBLCLICK. Veja abaixo).

procedure TForm1.FormDblClick(Sender: TObject); { AQUI } begin

  • procedimento para ler o teclado;

procedure Ler_Teclado; begin if GetKeyState(vk_left)<0 then //se tecla “seta esquerda” pressionada Nave.Sent:= Esquerda // Movimento para esquerda else if GetKeyState(vk_right)<0 then // se “seta direita” pressionada Nave.Sent:= Direita // Movimenta para direita else Nave.Sent:= Parado; // caso contrário, personagem parado

If GetKeyState(vk_up)<0 then //Idem (cima) Nave.Sent:= Cima //Idem Else If GetKeyState(vk_down)<0 then //Idem (baixo) Nave.Sent:= Baixo; //Idem end;

  • procedimento para movimentação:

procedure Movimenta_Nave(Velocidade: Integer); begin with Nave do begin if Sent = Esquerda then // Se SENT é igual esquerda então Dec(PosX,Velocidade) // POSX igual POSX - VELOCIDADE Else If Sent = Direita then // Se SENT é igual direita então Inc(PosX,Velocidade) // POSX igual POSX + VELOCIDADE

Initialization Nave.PosX:= 0; Nave.PosY:= 0;

End.

TCHARAMMMM!!! Seu primeiro jogo no Delphi. (quase)...