Universidade do Vale do Paraíba
Colégio Técnico Antônio Teixeira Fernandes
Disciplina Desenvolvimento de Jogos
Material III-Bimestre
Eventos para implementação de Jogos
site : http://www1.univap.br/wagner Prof. Responsáveis
Hélio Lourenço Esperidião Ferreira
Conceito de
Manipulação de
Manipulação de
Eventos
Eventos
são
ações
disparadas pelo usuário ou
dispositivo
em
um
3
dispositivo
em
um
Funcionamento dos Eventos
Eventos são processos recursivos que
rodam paralelamente com outros
processos.
5
Processo: É uma conexão em série de
atividades com objetivo de atingir
OnDblClick - Dispara o código quando for selecionado com um duplo click.
Exemplo :
void __fastcall TForm1::FormDblClick(TObject *Sender) {{
ShowMessage("Duplo click no formulário .... "); }
OnActivate - Dispara o código após ter desenhado o formulário.
Exemplo :
void __fastcall TForm1::FormActivate(TObject *Sender) {{
ShowMessage("Crie o Formulário .... "); }
OnCreate - Dispara o código antes de
desenhar o formulário.
void __fastcall TForm1::FormCreate(TObject *Sender) {
ShowMessage("Ok"); }
OnMouseDown- Dispara o código ao soltar o botão direito do mouse.
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Form1->Caption = IntToStr(X)+" - "+IntToStr(Y); }
Captura a tela pressionada
(OnMouseDown)
OnMouseDown
X,Y
Classe TMouseButton
Detecta qual da teclas do mouse foi pressionada e envia para o objeto da classe TMouseButton.
Exemplo: TMouseButton Button
Exemplo Movendo objeto
OnMouseDown()
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y) {
posiciona(Imagem,X,Y); posiciona(Imagem,X,Y); }
OnMouseMove - Dispara o código ao mover
o mouse no objeto
.
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
Form1->Caption = IntToStr(X)+" - "+IntToStr(Y); }
OnClose - Dispara o código antes de
fechar o formúlario
.
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
&Action) {
ShowMessage("Sair"); }
Tabela de Teclas (chaves)
Tabela de teclas numéricas e
operadores aritméticos
Captura a tecla pressionada
(OnKeyDown)
OnKeyDown
&Key
17
Movimento de setas de objetos
(Esquerda/Direita)
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
WORD *tecla = &Key; if(*tecla==VK_RIGHT)
trans_x(dispara,100,true); if(*tecla==VK_LEFT)
trans_x(dispara,100,false);
Classe TShiftState
Detecta se as teclas CTRL, SHIFT ou ALT foram pressionadas. Podem ser usadas simultaneamente com outras.
Exemplo: TShiftState Shift
Método Contains()
Retorna verdadeiro ao reconhecer uma das teclas da família Shift.
shift
Contains
shift
Contains
Mascaras de retorno da função
Contains()
Valor Descrição
ssShift Detecta se foi pressionada a tecla Shift
ssAlt Detecta se foi pressionada a tecla Alt
21
ssCtrl Detecta se foi pressionada a tecla Ctrl
ssLeft Detecta botão esquerdo do mouse
ssRight Detecta botão direito do mouse
ssMiddle Detecta botão do meio do mouse
Exemplos de uma
Aplicação Prática
Aplicação Prática
Funcionamento de processos
paralelos
OnKeyDown
Timer
Dispara tiros com CTRL+A
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if( Shift.Contains(ssCtrl) ) { if(*tecla == 65) if(*tecla == 65) trans_x(dispara,100,false); } }
Dispara tiros com barra de espaço
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,TShiftState Shift) { if(*tecla==VK_SPACE) { posiciona(tiro,getp_x(dispara), getp_y(dispara)); Timer1->Enabled = true; Timer1->Enabled = true; tiro->Visible = true; } } 25
Exemplo disparo de tiro
void __fastcall TForm1::Timer1Timer(TObject *Sender) { // disparador de tiros if(getp_y(tiro) > 8) { trans_y(tiro,100,true); trans_y(tiro,100,true); } else { Timer1->Enabled = false; tiro->Visible = false; } }
Conceito de
Arquivo de
Arquivo de
Dados
Conceito de Arquivo
Vem a ser um recurso para
armazenamento de informação, que está disponível a um programa de computador e
é normalmente baseado em algum
é normalmente baseado em algum
Usando Streams.
A manipulação de arquivo em C normalmente é feita por intermédio de um recurso do sistema operacional denominado Stream (que vem a ser cadeia de caracteres ou bytes).
29
Arquivo de Dados
Cadeia de bytes
Criando um Buffer. (FILE)
• Para se criar um buffer é necessário usar o comando FILE que é um tipo de estrutura especial que estabelece o estrutura especial que estabelece o
buffer. Para dar nome ao buffer
colocamos uma variável do tipo
ponteiro.
Para usar FILE é necessário
utilizar a biblioteca.
#include <stdio.h>
Sintaxe para criação de um Buffer.
FILE *<nome_Buffer>; Exemplo :
Abrindo e criando um arquivo
- fopen()
• fopen() : Para se manipular um arquivo é preciso cria-lo para poder usar o recurso de leitura, e gravação. A função recurso de leitura, e gravação. A função fopen retorna um ponteiro para o início do buffer associado ao arquivo. Um valor NULL é retornado quando o
arquivo de dados não puder ser
encontrado.
Sintaxe : <buffer> = fopen(<nome-arquivo>, <tipo-abertura>);
Exemplo :
pt = fopen("c:/diretorio/teste.txt","r+");
Obs : Obs :
Este exemplo abre um arquivo já existente
para leitura e gravação.
Escrevendo dados em um Arquivo -fprintf()
Para gravar uma informação em um arquivo
usamos a função fprintf(), que permite
escrever
um dado no buffer. Sintaxe:
Exemplo :
fprintf(pt,"Gravando Arquivo");
Fechando um arquivo de
dados - fclose()
Para se fechar um arquivo usamos a função fclose(), que permite remover todos os dados do buffer para o disco. Sintaxe :
fclose(<nome_buffer>); Exemplo :
Exemplo de um programa para
escrever um dado no arquivo.
FILE *fp;
fp = fopen("c:/ProjC++/teste.txt","r+"); fprintf(fp,“Dados Armazenados..\n"); fclose(fp);
Leitura de um arquivo de dados
-fgets(), feof().
Permite realizar a leitura de um ou mais registros em arquivo cada vez que fgets() é acionado desloca o ponteiro para o próximo registro até encontrar o final do arquivo. Que é indicado pela função feof(), que retorna verdadeiro caso o final do arquivo seja retorna verdadeiro caso o final do arquivo seja encontrado.
Sintaxe :
Exemplo : char v[30]; fp = fopen(arq,"r+"); while(!feof(fp)) { fgets(v,30,fp); ShowMessage(v); } fclose(fp); 41
Verificando se um arquivo
existe ou não - FileExists().
FileExists() - Retorna um operador
booleano se o arquivo existir no
diretório especificado.
Sintaxe :
<Varm-Boolean> = FileExists(<Caminho_nome_Arquivo>);
Uma estrutura vem a ser um tipo especial de dados que permite agrupar tipo de diferentes de dados em um só
Criando uma Estrutura de registros
tipo de diferentes de dados em um só ambiente com se o conjunto fosse apenas um.
Implementado a criação de uma estrutura de registros - struct
struct - cria uma estrutura de registros para um
determinado grupo de dados.
Obs: A estrutura deve ser declarada no programa de forma global.
Sintaxe :
struct <nome_logico> {
Exemplo : struct dados { int n; AnsiString nome; AnsiString nome; double salario; }entrada; 45
Usando uma estrutura de
registros.
void __fastcall TForm1::Button1Click(TObject *Sender)
{{
entrada.nome = "Maria da Silva"; entrada.salario = 3000.90;
ShowMessage(entrada.salario); }
Uma estrutura de registro pode ser associada a um arquivo formando assim um banco de
dados.
Exemplo de arquivo com estrutura de registros. struct dados { char nome[30]; char salario[12]; }entrada; 47
Exemplo Gravação de uma estrutura em um arquivo de texto.
void __fastcall TForm1::Button1Click(TObject *Sender) { FILE *fp; fp = fopen("c:/ProjC++/teste.txt","w+"); StrCopy(entrada.nome,"Maria da Silva,"); StrCopy(entrada.nome,"Maria da Silva,"); StrCopy(entrada.salario,"3000.90\n"); fprintf(fp,entrada.nome); fprintf(fp,entrada.salario); fclose(fp);
Mudando o nome do Arquivo.
RenameFile() : Troca o nome do arquivo determinado em um diretório.
Sintaxe :
RenameFile(<Arquivo_Antigo>,<Arquivo_Novo>);
Exemplo :
RenameFile("c:/Projeto/teste.txt","c:/Projeto/testando.txt");
DeleteFile() : Apaga um arquivo de um determinado diretório. Sintxe : RenameFile(<Nome_Arquivo>); RenameFile(<Nome_Arquivo>); Exemplo : DeleteFile("c:/Projeto/logica.txt");
system() : Executa um comando do sistema operacional. Sintaxe : system(<String do sistema>); system(<String do sistema>); Exemplo : system("sol.exe"); 51
Permite a criação de uma região para digitação de texto.
Memo deve ser usado com a propriedade Lines. Memo deve ser usado com a propriedade Lines.
Para adicionar um texto ao memo usamos método add().
Para contar o número de linhas de um texto usamos método count.
Exemplo :
int x = Memo1->Lines->Count;
Para obter o uma linha de um texto usa-se o Para obter o uma linha de um texto usa-se o
método. Strings[]. Exemplo :
int i = 1;
AnsiString p = Memo1->Lines->Strings[i];
Para Gravar os dados de um determinado texto. SaveToFile().
Exemplo :
Memo1->Lines->SaveToFile("teste.txt"); Memo1->Lines->SaveToFile("teste.txt");
Para Carregar os dados de um determinado texto. LoadFormFile().
Sintaxe:
Memo1->Lines->LoadFromFile("teste.txt");
SaveDialog e OpenDialog
Paleta Dialog, permite criar uma janela onde o usuário poderã escolher um arquivo para
abertura ou gravação.
Propriedades Valores Default *.txt (extensão)
Filename Caminho e nome do arquivo
Filter Texto|*.txt (nome e extensão do arquivo)
Método Execute()
Executa a caixa de dialogo onde o arquivo escolhido será enviado para a propriedade FileName.
Exemplo :
SaveDialog1->Execute();
FileName : Permite exibir o caminho e o nome do arquivo que foi escolhido.
AnsiString cam = SaveDialog1->FileName;
No exemplo acima o caminho armazenado na variável cam será c:\lixo\cripotografia.txt
MainMenu : Determina um menu de opções. (Basta digitar duplo click no objeto)
Escrever opções na propriedade caption
Para criar um submenu basta clicar na linha de baixo e escrever na propriedade caption.
Resultado na Execução do Menu
O código deverá ser colocado no evento OnClick do objeto MainMenu1
void __fastcall TForm1::Novo1Click(TObject *Sender)
{{
ShowMessage(“Click na opção Novo”); }