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

Antes de 2010

Compartilhado em 17/07/2010

bruno-natali-6
bruno-natali-6 🇧🇷

5

(4)

2 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)
Autor: Antônio Sérgio de Sousa Vieira
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)

Autor: Antônio Sérgio de Sousa Vieira

Email: [email protected]

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)...