Universidade Federal de Uberlândia Faculdade de Computação Bacharelado em Ciência da Computação POO Ponto de Partida: PP Créditos: Prof. Marcelo Maia “Primeirão” • Seja um joguinho de dados Chegada Primeirão em ação Mãos à obra em C Solução em C Estrutura #include <stdlib.h> #include <stdio.h> typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); // Jogador void andarJogador(Jogador*, int); int atingiuPontos(Jogador*, int); Bibliotecas a serem utilizadas Definição de um jogador Variáveis globais Funções Auxiliares Grafo (árvore) de chamadas main iniciar criarJogadores sorteiaIniciante ninguemVenceu atingiuPontos jogarDado andarJogador mostrarSituacao Solução em C Programa Principal typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; Definição de um jogador Variáveis globais int main(int argc, char *argv[]) { printf("Entre com o numero limite de pontos: "); scanf("%d",&nroLimitePontos); printf("Entre com o numero de jogadores: "); scanf("%d",&nroJogadores); criarJogadores(); iniciar(); return EXIT_SUCCESS; } Solução em C Criar jogadores! typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); void criarJogadores () { jogadores = (Jogador**) // Jogador malloc(nroJogadores*sizeof(Jogador*)); void andarJogador(Jogador*, int atingiuPontos(Jogador*, int i; for (i = 0; i < nroJogadores; i++) { jogadores[i] = (Jogador*) malloc(sizeof(Jogador)); printf("Entre com o nome do jogador %d:", (i+1)); scanf("%s", jogadores[i]->nome); jogadores[i]->pontos = 0; } } int); int); Solução em C Iniciar !!!! typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); void iniciar () { int proximo = sorteiaIniciante(); while (ninguemVenceu()) { int pontos = jogarDado(); // Jogador void andarJogador(Jogador*, andarJogador(jogadores[proximo], pontos); int atingiuPontos(Jogador*, mostraSituacao(proximo, pontos); if (ninguemVenceu()) proximo = (proximo+1) % nroJogadores; //proximo == (nroJogadores - 1) ? 0 : proximo + 1; } printf("O jogador %s venceu!!!!\n", jogadores[proximo]->nome); } int); int); Solução em C Ninguém Venceu? typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); // Jogador int ninguemVenceu () { void andarJogador(Jogador*, int atingiuPontos(Jogador*, int i = 0; while (i < nroJogadores) { if (atingiuPontos(jogadores[i], nroLimitePontos)) return 0; i++; } return 1; } int); int); Solução em C Jogar Dado typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); int jogarDado() { return (rand()%6)+1; } // Jogador void andarJogador(Jogador*, int); int atingiuPontos(Jogador*, int); Solução em C Mostra Situação! typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); void mostraSituacao (int j, int p) { printf("O jogador %s andou %d pontos! \n A Situacao ficou assim: \n", // Jogador void andarJogador(Jogador*, jogadores[j]->nome, p); int atingiuPontos(Jogador*, int i; for (i = 0; i < nroJogadores; i++) printf("O jogador %s tem %d pontos!\n", jogadores[i]->nome, jogadores[i]->pontos); printf("PAUSA\n"); getchar(); } int); int); Solução em C Sorteia Iniciante. typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; int sorteiaIniciante () { return rand()%nroJogadores; } Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); // Jogador void andarJogador(Jogador*, int); int atingiuPontos(Jogador*, int); Solução em C Andar Jogador ! typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; void andarJogador (Jogador *j, int n) { j->pontos += n; } Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); // Jogador void andarJogador(Jogador*, int); int atingiuPontos(Jogador*, int); Solução em C Atingiu Pontos? typedef struct { char nome[20]; int pontos; } Jogador; int nroLimitePontos, nroJogadores; Jogador** jogadores; int atingiuPontos(Jogador *j, int n) { return j->pontos >= nroLimitePontos; } Definição de um jogador Variáveis globais // Jogo void criarJogadores(); void iniciar(); int ninguemVenceu (); int jogarDado(); void mostraSituacao(int, int); int sorteiaIniciante(); // Jogador void andarJogador(Jogador*, int); int atingiuPontos(Jogador*, int); Modelar Primeirão em UML Modelar Primeirão em UML • Será contado como presença para aula do dia 17/03 – Entregar dia 24/03 (quarta-feira) – Entrega individual • Pode fazer na mão ou usar ferramenta (e.g., PowerPoint) – Entregar em papel • Usar apenas Diagrama de Classes UML Solução OO 1. Muda o raciocínio – Decomposição Funcional X – Decomposição de Objetos (Dados + Métodos) ????? Solução OO 2. Decomposição de Objetos – – Pergunta: quais são os elementos (objetos) do problema??? Você pode achar outros Possível resposta: • • • • cada jogador, um conjunto de jogadores, dado de 6 lados Os dados são aninhados o próprio jogo jogo jogadores Cebolinha Mônica Cascão Solução OO 3. Abstração dos Dados – Cada jogador • • • • • – Dado • – Quantos pontos tem? Qual o nome? Muda de nome! Anda “n” casas! Atingiu “n” pontos? Lança!!! Jogo • • • • Começa!! Cria jogadores!! Alguém venceu? Mostra situação Você pode achar muitas outras alternativas!! Solução OO 4. Quais os relacionamentos entre os objetos das classes • • • • Associação? Agregação / Composição? Herança? Dependência? 5. Lembre-se de documentar o projeto • Notas