Estrutura de Dados André Augusto Nogueira Alves alves.andreaugusto@gmail.com Colaborador: Alexandre Tolstenko Nogueira
Papel e caneta na mão! Revisão
Revisão Diferença entre IDE, Framework, Engine e SDK; Estrutura básica de um game em XNA; Rectangle vs Vector2; Desenhar uma imagem na tela; Desenhar um texto na tela; Colisão com com instersect.
Objetivos
Objetivos Entender um pouco de OO (Orientação Objeto); Apresentação de algumas das estruturas de dados mais simples; Um novo jogo ao fim da aula, mas dessa usando os tópicos citados acima;
Orientação Objeto e EstRUTURA DE DADOS
Teoria Prática
Teoria POO História Conceitos Objetos PongOO Interação Listas Árvores Snake Apêndice Campeonatos
História Final da década de 60; Possibilitar compartilhamento de códigos e desenvolvimento mais rápido;
Conceitos Desvendando os mistérios da Classe; Abstração: Abstração é o processo ou resultado de generalização por redução do conteúdo da informação de um conceito ou fenômeno observável; Classe x Objeto; Alocar memória (construtores); DNA(assinatura da classe) x Humano(objeto);
Objetos Alta coesão, baixo acoplamento; Tentativa de representar o mundo do ponto de vista humano de forma computacional; Semelhanças com Structs; Visibilidade; Criando um objeto;
Pong OO - Bola
Pong OO - Raquete
Interação – Acoplamento(?) Juntando os objetos; Montando uma colisão;
Teoria POO Estruturas Enum Vetor Listas Árvores Snake Apêndice Campeonatos
Enum Diferenças entre C e C#; Usos do Enum;
Vetor Prós e Contras;
Teoria POO Estruturas Enum Vetor Listas List LinkedList Pilha Fila Árvores Snake Apêndice Campeonatos
Lista Exemplos de usos;
List List<Tipo> myList; Utilidade: agregar coisas sem garantir sequência
Lista Ligada LinkedList<Tipo> listTipo; LinkedListNode<Tipo> llnTipo; Uso: llnTipo.Next, llnTipo.Previous Utilidade: agregar coisas com com sequência.
Pilha Stack<tipo> stkTipo; Uso: stkTipo.Pop, stkTipo.Push Utilidade: Armazenar coisas temporariamente (ex. Gerência de tela, recursão)
Fila Queue<tipo> qTipo; Uso: qTipo.Pop, qTipo.Push Utilidade: guardar coisas enquanto elas esperam para serem executadas. Ex:
Teoria POO Estruturas Enum Vetor Listas Árvores Binárias Quadtree Octree BSP Snake Apêndice Campeonatos
Árvores Definição Árvore Binária; Quadtree (Octree); BSP;
... Lista de outras estruturas Splaytree Btree Red-black tree Hash table Grafos Dicionários
Estrutura de dados e classes Classes que incluem vários objetos;
Modelagem Computacional Teoria Classe vs Struct Listas Árvores Snake História Mecânica de jogo Modelagem Computacional Códigos Apêndice Campeonatos
Prática Prática: Desafio: Programar um SNAKE; Opcional: transformar o Pong em um Breakout; Desafio: Mapear uma imagem usando uma quadtree; Defender;
Snake Time Jogo do dia: Snake; Programado usando OO não estruturada;
Análise de Jogo Elementos? Como anda? Como interage?
Mecânica de jogo A cobra tem que “comer” os pontos que aparecem na tela; A cada item comido, a cobra cresce de tamanho; A cobra anda somente para as direções Up, Left, Right e Down;
Modelagem Computacional Classes a serem criadas; Métodos de cada uma dessas classes; Interação entre elas;
Teoria Classe vs Struct Listas Árvores Snake Apêndice Campeonatos XNA Challenge SBgames Arena Info Dreambuild Imagine Cup
Struct public struct RectangleFloatS { } public float X, Y; public RectangleFloatS(float X, float Y) { this.X = X; this.Y = Y;} public Anda(Direcao dir) {switch(dir){ case Direcao.Up: //anda pra cima break; ...}} }
Class public class RectangleFloatC { } public float X, Y; public RectangleFloatC(float X, float Y) { this.X = X; this.Y = Y;} public Anda(Direcao dir) {switch(dir){ case Direcao.Up: //anda pra cima break; ...}} }
Diferenças List<RectangleFloatS> rectStructList; List<RectangleFloatC> rectObjList; ... foreach(RectangleFloatS rect in rectStructList) rect.X += valor; // nao altera X do rectStructList foreach(RectangleFloatR rect in rectObjList) Rect.X += valor; // altera X do recObjList
Agradecimento spriteBatch.DrawString( Arial, "Obrigado Pela Atenção!", positionVect, Color.Black);