DesJogos(2Bim) [Modo de Compatibilidade]2Bim).pdf · totalimagem – Número de Imagens a ser...
Transcript of DesJogos(2Bim) [Modo de Compatibilidade]2Bim).pdf · totalimagem – Número de Imagens a ser...
Universidade do Vale do ParaíbaColégio Técnico Antônio Teixeira Fernandes
Disciplina Desenvolvimento de Jogos
Material II-BimestreMétodos Básicos de Implementação de
Jogos DigitaisJogos Digitais
site : http://www1.univap.br/wagner
Prof. ResponsáveisHélio Lourenço Esperidião Ferreira
Wagner Santos C. de Jesus
Introdução aos Fundamentos da Fundamentos da Linguagem (C++)
2
Os criadores da linguagem
Ken Thompson e Dennis Ritchie (da esquerda pra dire ita)
Linguagem usada no desenvolvimento das mais diversas ferramentas
• Microcontroladores;• Sistemas Operacionais(Linux, Windows, OS/2 e Unix);• Programas como Word, Excel, Microstation • Ambientes de redes de computadores;• Aplicações de Computação gráfica;• Aplicações de Computação gráfica;• Programas de Aplicações médicas;• Programas para controle de máquinas e equipamentos• Construção de linguagens de programação como Java,
PHP, ActionScript e outras.• Desenvolvimento de Jogos.
Características de um programa C.
• Integridade• Clareza•• Simplicidade• Eficiência• Modularidade
Estrutura de uma linguagem de programação.
Uma linguagem de programação, possui atarefa de ser uma ferramenta para odesenvolvimento de software e para issodeve respeitar três características básicas,deve respeitar três características básicas,que são:
1) Atribuição2) Condição3) Repetição
Tipos de dados da linguagem C.
A linguagem C tem comocaracterística ser fortementetipada ou seja os tipos de dadostipada ou seja os tipos de dadospara uma variável de memóriadevem ser rigorosamenterespeitados.
Tipos de dados
Operadores Aritméticos
+ - Soma- - Subtração* - Multiplicação* - Multiplicação/ - Divisão% - Resto da Divisão
Operadores Relacionais
>- Maior que < - Menor que= = - Igual a= = - Igual a!= - Diferente de>= - Maior ou Igual<= - Menor ou Igual
Operadores Lógicos
&& - And (E)| | - Or (Ou)! - Not (Não)? - Ternário
Estruturas de Controle
Atribuição : Vem a ser procedimento dearmazenar um valor em uma variável.Sintaxe :
<tipo> <Varm> = <valor> ;
Exemplo :
int a = 1; ou int a;
AnsiString b = "Abacaxi"; ou AnsiString b;
Exemplo de Operações de Atribuição.
a++; => a = a + 1;a--; => a = a - 1;a--; => a = a - 1;a+ = 2; => a = a + 2;a* = 2; => a = a * 2;
Incrementando e Atribuindo valores as Variáveis.
Exemplo :
int a = 3;int a = 3;int b = a++ ;
Nesse caso a variável seriaincrementada depois de atribuir o valora variável b, portanto o valor de a = 4 ede b = 3.
Exemplo - 2:
int a = 3;int b = ++a ;
Nesse caso a variável (a) seriaincrementada antes de atribuir o valorpara variável b, portanto o valor de a =4 e de b = 4.
Condição : Vem a ser o procedimento de tomar decisões em programa mediante uma dada condição.
E é representado pela instrução. if( )Sintaxe :
if( <condição ) { if(<condição>)if( <condição ) { if(<condição>)<Bloco de Instruções-1 >; <Instrução-1>;
} [ else ][else]{
<Instrução-2>;<Bloco de Instruções-2 >;
}
Exemplo :
int a = 1;
if(a == 3)if(a == 3)ShowMessage("O número esta Correto !!!");
elseShowMessage("O número não esta Correto
!!!");
Exemplo : e (&&)
int nota = 6;int freq = 80;if ( nota >= 6 && freq >= 75)
ShowMessage(“Aluno Aprovado..”);ShowMessage(“Aluno Aprovado..”);else
ShowMessage(“Aluno Reprovado”);
Exemplo : ou ( || )
boolean rg = true;boolean cpf = false;if( rg = = true || cpf = = true)
ShowMessage(“Abra conta na ShowMessage(“Abra conta na locadora”);else
ShowMessage(“Não pode Abrir conta”);
Exemplo : Não ( ! )
int idade = 18;if( !(idade = = 18) )
ShowMessage(“Não pode dirigir.”);else
ShowMessage(“Pode tirar carta. “);
?: Operador ternário.
Sintaxe :
<Varm> = <Condição> ? <Verdadeiro> : <Falso>;
Exemplo de ? (Ternário)
int a = 5;int b = 2;
AnsiString x = a > b ? “A maior”:”B Maior”;
Repetição : Vem a ser o procedimento de criar ciclos para solução de
problemas.Estrutura de repetição condicional.
While()
Exemplo :
int a = 1;while(a <= 5 ) {
a++;}
..................
Exemplo - 2 :
do {a++;
} while(a <= 5);} while(a <= 5);
Obs : Neste caso em particular o comando while() deverá usar ;
Estrutura de repetição sequêncial. for()
Sintaxe :
for(<Inicialização> ;<Condição> ;<Incremento>) {
<Bloco de Instruções>}
Exemplo :
for(int i= 1;i<=5;i++)ShowMessage("As poderosas !!!
");
Obs : Sobre as { } só devemos usarchaves nas estruturas de controle decondição e repetição quando houvercondição e repetição quando houverem seu interior mais de umainstrução a ser processada .
Entrada e Saída de dados.
InputBox() - Uma entrada de dadospode ser feito com uma função ou caixade texto, Nesse caso o InputBox() Iráde texto, Nesse caso o InputBox() Iráretornar uma String contendo ainformação digitada na caixa de texto damesma.
Sinatxe :
AnsiString Itemdigitado = InputBox(<String1>,<String2>,<String3>);
Obs :
<String1> - Título da barra de título.<String2> - Título da caixa de texto.<String2> - Título da caixa de texto.<String3> - Informação de dentro da caixa de texto.
AnsiString Itemdigitado = InputBox("Progarama teste","Digite Algo","Nenhum");
Saída :
Criando uma entrada de dados com o objeto caixa de texto (Edit).
Para criar uma caixa de texto em uma aplicação use a palheta de objetos (Standard), em seguida você poderá usar as
propriedade da caixa de texto.
Usando uma caixa de texto para capturar um valor dado pelo usuário.
Exemplo :
AnsiString dado ;dado = Edit1->Text;
Obs : Em C++ o objeto é separado da propriedade como
símbolo de - > .
Criando uma saída de dados usando o objeto Label. Que serve para mandar mensagens em formulário.
Exemplo :
Label1->Caption = "Mensagem Para Usuário !!! ";
Saída :
ShowMessage() - Exibe uma mensagem do String no video.
Sintaxe :ShowMessage(<String>);ShowMessage(<String>);
Exemplo :
ShowMessage("Dados Incorretos, Tente Novamente !!!");
Saída :
Para cria um objeto Botão de comandos, use a palheta :
O nome do objeto criado será Button que permite disparar um evento do tipo clique ao ser selecionado com o mouse.
Exemplo :
Button 1->Caption=Button 1->Caption="Ok" ;
break, continue - São instruções que auxiliam no controle de uma repetição.
break - Abandona uma repetição antes que o
laço possa terminar.
Exemplo :
int a = 1;while(a <= 5) {
if(a == 3)break;
a++;}
ShowMessage("O valor é "+IntToStr(a)) ;
continue - Volta a linha da repetição não executando as instruções que estão abaixo.
Exemplo :
int a = 1;while(a <= 5) {while(a <= 5) {
if(a == 3) {ShowMessage("ahahah !!!, Nunca mais vou parar
!!");continue;
}a++;
}
Estrutura de um Programa em Builder C++.
void __fastcall TForm1:: ObjetoEvento (TObject *Sender)
{{// Um comentário pode ser feito com as barras ou/* Comentário de trecho de programa */
<Bloco de Instruções>}
Objetos de Controle
Builder C++ conta com uma barra detarefas capaz de permitir a confecçãotarefas capaz de permitir a confecçãode rotinas mas sofisticadas com relaçãoa parte visual da aplicação.
Entrada e Saída (Jogos)Modelos dos principais objetos para aquisição de entradas e saídas
47
Paleta de Ferramentas Standard.
Padrão
Usando Objetos principais do C++(Builder).
Criando uma caixa de lista. (ListBox)
Atribuindo dados para caixa de lista.
Usando a propriedade Items.
Permite acrescentar em cada posição da caixa de lista um itemenviado pelo métodos Add() que adiciona criando uma novaposição na caixa de texto.
Exemplo :
ListBox1->Items->Add("Maria");ListBox1->Items->Add("José");ListBox1->Items->Add("Célia");
Saída :
Onde o primeiro item da caixa de lista é 0 e o terceiro 2 eassim por diante. Em caso nenhum item esteja seleciona ovalor será (-1).
Capturando o Item Selecionado por intermédio da propriedade ItemIndex.
Exemplo :
int x = ListBox 1->ItemIndex ;ShowMessage(x) ;ShowMessage(x) ;
Obs : No exemplo acima x será um númerode 0 a 2.
Capturando uma "String" da caixa de Lista. Método Strings[].
Exemplo :
int x = ListBox1->ItemIndex;AnsiString a = ListBox 1->Items ->Strings[x]) ;AnsiString a = ListBox 1->Items ->Strings[x]) ;
Obs : Irá retorna com a string selecionada nacaixa de Lista pelo usuário armazenando oconteúdo na variável (a).
Criando uma Caixa de Combinação. (ComboBox).
Atribuindo dados para uma caixa de combinação.
Exemplo :
ComboBox1->Items->Add("Item-1");ComboBox1->Items->Add("Item-1");ComboBox1->Items->Add("Item-2");ComboBox1->Items->Add("Item-3");ComboBox1->Items->Add("Item-4");
Saída :
Capturando dados de uma caixa de combinação.
AnsiString a = ComboBox1->Text;
Removendo dados de uma caixa de Combinação. Método Delete().
ComboBox1->Items->Add("Item-1"); ComboBox1->Items->Add("Item-2"); ComboBox1->Items->Add("Item-3"); ComboBox1->Items->Add("Item-4"); ComboBox1->Items->Add("Item-4"); ComboBox1->Items->Delete(3);
Obs : No exemplo acima o item eliminado será (Item-4). Poiscomo na caixa de lista a caixa de combinação também iniciana posição 0 (Zero).
Atenção : Todas as propriedades emétodos usados para a caixa de lista(ListBox) valem para a caixa de(ListBox) valem para a caixa decombinação (ComboBox 1).
Criando uma caixa de verificação. (CheckBox)
Exemplo :
CheckBox1->Checked = true;
Saida :
Obs : Marca a caixa de verificação quandorecebe verdadeiro e desmarca quando recebefalse, podendo ser usado também (0- nãoselecionado ou 1- Selecionado).
Criando botões de rádio. (RadioGroup)
Exemplo :
RadioGroup1->Items->Add("Masc.");RadioGroup1->Items->Add("Fem.");
Saída :
Capturando a informação selecionada no botão de rádio.
Exemplo :
int k = RadioGroup1->ItemIndex; if(k = = 0) ShowMessage("Masc. Foi Selecionado !!!"); else ShowMessage("Fem. Foi Selecionado !!!");
Criando uma Barra de Rolagem. (ScrollBar).
Capturando dados de uma Barra de Rolagem.
void __fastcall TForm1::ScrollBar1Change(TObject *Sender) { int y = ScrollBar1->Position; int y = ScrollBar1->Position; Label1->Caption = IntToStr(y); }
Obs : Uma Barra de Rolagem possui como propriedades principaisMax = 100 (determina o valor máximo que será atribuído para abarra e a propriedade Min = 0, o valor mínimo atribuído) e oPosition que retorna o valor selecionado.
Criando um Painel. (Panel).
Cria um painel para agrupamento de objetos,ou seja tudo o que acontecer em um objetoPanel acontecera também com os outrosvinculados ao mesmo painel.
Exemplo : (Panel)
No exemplo abaixo a programação irá desabilitaros dois botões usando apenas uma única linha semque seja preciso desabilitar cada botão.
Exemplo :
Panel1->Visible = 0;
Conceito de CenárioCenário
68
Conceito de Cenário
Cenário é o espaço real ou virtual,onde a história se passa, Pode ser oconjunto de elementos que decoram olocal das ações em execução do modeloapresentado.apresentado.
69
Técnica de cores
O cenário deverá conter a mesma com de contorno do personagem da cena.
70
Cena - 1
Cena - 2
Técnicas de cores pontos colineares
71
Representação em Escala
72
Tons de cores continuas
73
Objetos mantidos na cor do cenário
74
Cenário neutro
75
Conceito de SpritesSprites
76
Conceito de Sprite
Os sprites foram inventadosoriginalmente como um método rápidode animação de várias imagens agrupadasnuma tela, em jogos de computadorbidimensionais, usando hardware especial.
77
Exemplos
Os sprites são usados para geraranimações em jogos. Sprites paramovimentação de um personagem.
78
Exemplo (2)
Seqüência de sprites para realizaranimação de um cachorro correndo.
79
Conceitos de AnimaçãoAnimação
Movimento
80
Conceito de animação
Animação significa dar vida a umobjeto estático.
81
Técnicas de animação
• Animação Stop-Motion;• Animação de Recortes;• Animação quadro à quadro;• Animação por Interpolação
82
AtençãoImportante todos os métodosdemonstrados implementados apartirdeste momento devem ser guardadospelos alunos para que se possam serpelos alunos para que se possam serreutilizados em outros projetos.
83
Conceito de temporizadortemporizador
84
Definição
Um temporizador é umdispositivo capaz demedir o tempo.medir o tempo.
85
Conceito de Temporizador
Evento temporizado para processamentoem concorrência.
86
Paleta System
Funcionamento de um temporizador
• Com condição de parada.• Sem condição de parada.• Sem condição de parada.
87
Condição de parada
Processamento
88
contador
ContadorN
FIM
S
Sem condição de parada
Processamento
89
contador
Propriedades do Timer
Propriedades Estado
Enable True/False
Interval 1000
90
Interval 1000
Name Timer1
Aplicando animação em um Spriteem um Sprite
91
Evento temporizador
void __fastcall TForm1::Timer1Timer(TObject *Sender){// Chamada da função de animação de sprite // Chamada da função de animação de sprite }
92
Procedimento de Animação do Sprite
int contador_imagem = 0;void AnimaSprites(TImage *figura, int totalimagem,String caminho,String
imagem[],boolean parar){if(!parar){figura->Picture->LoadFromFile(caminho+imagem[contador_imagem]);contador_imagem++;if(contador_imagem >= totalimagem)
contador_imagem = 0;contador_imagem = 0;}
}
93
figura – Passa o nome do objeto que contem a figura.
totalimagem – Número de Imagens a ser animadas.
Caminho – Diretório onde encontram -se as imagens.
Vetor de Imagem – Nome do arquivo de imagem a ser ca rregado.
Parar – Booleano que indica se haverá ou não animaçã o.
Chamada do método AnimaSprites()
void __fastcall TForm1::Timer1Timer(TObject *Sender){
String figura[] = {"CA1.bmp","CA2.bmp","CA3.bmp","CA4.bmp"};AnimaSprites(4,"C:\\trabalhos\\aulas\\DesenJogos\\Imagens\\",figura,false);AnimaSprites(4,"C:\\trabalhos\\aulas\\DesenJogos\\Imagens\\",figura,false);
}
94
Transformações LinearesLineares
95
Conceito de Transformações lineares
Transformações lineares são usadaspara descrever vários tipos de mudançasgeométricas, como: rotação, homotetia,geométricas, como: rotação, homotetia,cisalhamento, reflexão, além de outrasdeformações no plano ou no espaço.
96
Propriedade da Transformação Geométrica
Transformação vem a ser oconceito de transladar, atribuiruma escala ou rotação de umauma escala ou rotação de umafigura.
97
Conceito de Translação
98
Translação
Quando ocorre a variação dascoordenadas (x,y) no plano cartesiano.
x’ = x ± txy’ = y ± ty
99
Parâmetros de entrada para translação no eixo x
figura – Imagem passada comoparâmetro.tx - Valor de deslocamento horizontal notx - Valor de deslocamento horizontal noeixo x.booleano – Define se a figura irá sedeslocar para esquerda ou direita.
100
Exemplo prático de translação em no eixo x
void trans_x(TImage *figura, int tx, boolean direita){if(direita)
figura->Left += tx;else
figura->Left -= tx;}
101
Parâmetros de entrada para translação no eixo y
figura – Imagem passada comoparâmetro.ty - Valor de deslocamento vertical noty - Valor de deslocamento vertical noeixo y.booleano – Define se a figura irá sedeslocar para cima ou para baixo.
102
Exemplo prático de translação em no eixo y
void trans_y(TImage *figura, int ty, boolean cima){if(cima)
figura->Top -= ty;elseelse
figura->Top += ty;}
103
Conceito de Escala
104
Escala
Quando ocorre a variação das direçõesdo objetos nas coordenadas (x,y) no planocartesiano.
x’ = xSx
y’ = ySy105
Parâmetros de entrada para escala no eixo - x
figura – Determina a figura que sofreráescala.sx – Determina valor da escala no eixo x.sx – Determina valor da escala no eixo x.forma – Determina se haverá dilatação oucontração horizontal.
106
Exemplo prático de Escala na direção x
void escala_x(TImage *figura, int sx, boolean forma){if(forma)
figura->Width += sx;elseelse
figura->Width -= sx;}
107
Parâmetros de entrada para escala no eixo - y
figura – Determina a figura que sofreráescala.sy – Determina valor da escala no eixo y.sy – Determina valor da escala no eixo y.forma – Determina se haverá dilatação oucontração vertical.
108
Exemplo Prático de Escala na direção y.
void escala_y(TImage *figura, int sy, boolean forma){if(forma)figura->Height += sy;
elseelsefigura->Height -= sy;
}
109
Conceito de RotaçãoRotação
110
Definição de transformaçãoMovimento de rotação , é omovimento circular de um objeto ao redorde um centro ou ponto de rotação.
111
Conceitos Trigonométricos
hipot
adjcate_cos =α
112
hipot
opostcateseno
_=α
Conceitos Trigonométricos
Distância = Raio
(Xc,Yc) – Ponto Central
x = Xc + R cos(θ)
113
(Xc,Yc )
x = Xc + R cos(θ)
y = Yc + R sen(θ)
Onde (θ), varia entre [0..360].
Parâmetros de entrada para rotação
figura – Imagem a ser animada.xc – Coordenada x do ponto central.yc – Coordenada y do ponto central.yc – Coordenada y do ponto central.Dist – Distância correspondente ao raio do
circulo imaginárioangulo – Série de valores correspondentes
ao ângulo de rotação (+/-) sentido horárioou anti-horário.
114
Exemplo prático de rotação Sentido horário (360)
void rotacao(TImage *figura,int xc, int yc, int dist, int angulo){int x = xc + dist * cos(angulo*3.14/180);int y = yc + dist * sin(angulo*3.14/180);figura->Left = x;figura->Top = y;figura->Top = y;
}
115
Gerador de Números aleatóriosNúmeros aleatórios
116
Conceito de números aleatórios
Em estatística, um número aleatório éum número que pertence a uma sérienumérica e não pode ser previsto a partirdos membros anteriores da série. Odos membros anteriores da série. Oconceito de número aleatório é um conceitorelativo à série numérica a que o númeropertence.
117
Conjunto de números aleatórios
V = {9,45,1,70,72,74}
Conjunto de números aleatórios no intervalo [1 – 80].
118
V = {9,45,1,70,72,74}
Exemplo
Para se gerar um número aleatório énecessário possuir uma semente e umintervalo.
119
A
Parametrização dos métodos geradores de métodos geradores de
números aleatórios
120
int numero_aletorio(int a, int b)
Gerador de números aleatórios.
int a: Determina o valor inferior dointervalo.intervalo.int b: Determina o valor superior dointervalo.
121
Método gerador de números aleatórios
int numero_aletorio(int a, int b) {int x = 0;if(a==b)
a = 0;a = 0;if(b > a)
x = random((b-a)+1)+a;else
x = random((a-b)+1)+b;return x;
} 122
Contador de PontosPontos
123
Conceito contador
O contador de pontos realiza somatóriados pontos acumulados de umdeterminado jogador.
P(t) = total de pontos do
124
∑=
=n
iit xp
1
P(t) = total de pontos do jogador
Xi = acumulador de pontos do jogador.
i = Representa cada valor individual de x.
Parâmetros de acumulo
a – Define o limite da extremidade esquerdado intervalo.
b – Define o limite da extremidade direita dointervalo.intervalo.
incremento – Define o valor incremental.cresc – Define se o incremento será realizado
de forma crescente o decrescente(Booleano).
125
Função de acumulo de pontos
int contador = 0;int acumula_pontos(int a, int b, int incremento, bo olean cresc) {
if(cresc) {if(a > 0 && contador==0)
contador = a;if(contador < b)
contador += incremento;contador += incremento;}else{
if(a > b && contador==0)contador = a;
if(contador > b)contador -= incremento;
}return contador;
}
126
Geradores de PosicionamentoPosicionamento
127
Conceito PosicionamentoAto, processo ou efeito de posicionar(-se).
Posicionamento
Aleatório.
128
Parâmetros de posicionamento
figura – Determina a figura que será movimentada.x – Parâmetros de posicionamento da coluna.coluna.y - Parâmetros de posicionamento da linha.
129
Método para posicionamento de figuras
void posiciona(TImage *figura, int x, int y){figura->Left = x;figura->Top = y;figura->Top = y;
}
130
Captura de posicionamento
int getp_x (figura): Captura a coordenadareferente a coluna de uma determinadafigura. Retornando um inteiro.
int getp_y (figura): Captura a coordenadareferente a linha de uma determinadafigura. Retornando um inteiro.
131
Retorna posição da figura (Coluna)
int getp_x(TImage *figura){return figura->Left;return figura->Left;
}
132
Retorna posição da figura (linha)
int getp_y(TImage *figura){return figura->Top;return figura->Top;
}
133
Geradores de HanksHanks
134
Conceito de Hanks
Estatísticas paraavaliação deaproveitamento dejogadores pertinentesjogadores pertinentesa jogabilidade doprocesso.
135
Métodos para mostrar Hank
void hank(TListBox *lista, String jogador[],int pontos[], String delimita,int Indice){lista->Items->Clear();for(int i=0;i<=indice-1;i++)
lista->Items->Add(IntToStr(pontos[i])+delimita+jogador[i]);}
136
lista – Recebe dados do objeto lista
jogador – Nomes dos jogadores para serem organizados
pontos – Numero de pontos dos jogadores
delimita – Delimitador do nome e pontuação.
indice – Determina o número de elementos passados no Array.
Método para classificar pontuaçãovoid sorte(TListBox *lista,String jogador[], int po ntos[],int indice){
boolean parar = false;int aux = 0;String jog_aux="";while (!parar) {
parar = true;for(int i=0;i<=indice-2;i++){
if(pontos[i] < pontos[i+1]){aux = pontos[i];pontos[i] = pontos[i+1];pontos[i] = pontos[i+1];pontos[i+1] = aux;jog_aux = jogador[i];jogador[i] = jogador[i+1];jogador[i+1] = jog_aux;parar = false;
}}
}hank(lista,jogador,pontos,"-",indice);
}
137