






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostilas de Informática sobre Programação de Jogos com Delphi, Lógica, Animação, Controle, Entendendo o Posicionamento do Personagem em Relação a Tela, Entendendo o conceito de OffScreen ou BackBuffer.
Tipologia: Notas de estudo
1 / 10
Esta página não é visível na pré-visualização
Não perca as partes importantes!







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).
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
tela
Exemplo:
(...) var OFFScreen: TBitmap; (...)
procedure TForm1.FormCreate(Sender: TObject); begin OFFScreen:= TBitmap.create; OFFScreen.Width:= 320; OFFScreen.Height:= 240; end;
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;
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;
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)
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)...