Post on 18-Apr-2015
POOPonto de Partida: PP
Créditos: Prof. Marcelo Maia
Universidade Federal de UberlândiaFaculdade de Computação
Bacharelado em Ciência da Computação
“Primeirão”
• Seja um joguinho de dados
Chegada
Primeirão em ação
Mãos à obra em C
Funções Auxiliares
Variáveis globais
Bibliotecas a serem utilizadas
Definição de um jogador
Solução em CEstrutura
#include <stdlib.h>#include <stdio.h>
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
Grafo (árvore) de chamadas
main
iniciarcriarJogadores
sorteiaIniciante ninguemVenceu jogarDado mostrarSituacaoandarJogador
atingiuPontos
Variáveis globais
Definição de um jogador
Solução em CPrograma Principal
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
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;
}
Variáveis globais
Definição de um jogador
Solução em CCriar jogadores!
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
void criarJogadores () {
jogadores = (Jogador**) malloc(nroJogadores*sizeof(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;
}
}
Variáveis globais
Definição de um jogador
Solução em CIniciar !!!!
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
void iniciar () {
int proximo = sorteiaIniciante();
while (ninguemVenceu()) {
int pontos = jogarDado();
andarJogador(jogadores[proximo], pontos);
mostraSituacao(proximo, pontos);
if (ninguemVenceu())
proximo = (proximo+1) % nroJogadores;
//proximo == (nroJogadores - 1) ? 0 : proximo + 1;
}
printf("O jogador %s venceu!!!!\n", jogadores[proximo]->nome);
}
Variáveis globais
Definição de um jogador
Solução em CNinguém Venceu?
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
int ninguemVenceu () {
int i = 0;
while (i < nroJogadores) {
if (atingiuPontos(jogadores[i], nroLimitePontos))
return 0;
i++;
}
return 1;
}
Variáveis globais
Definição de um jogador
Solução em CJogar Dado
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
int jogarDado() {
return (rand()%6)+1;
}
Variáveis globais
Definição de um jogador
Solução em CMostra Situação!
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
void mostraSituacao (int j, int p) {
printf("O jogador %s andou %d pontos! \n A Situacao ficou assim: \n",
jogadores[j]->nome, p);
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();
}
Variáveis globais
Definição de um jogador
Solução em CSorteia Iniciante.
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
int sorteiaIniciante () {
return rand()%nroJogadores;
}
Variáveis globais
Definição de um jogador
Solução em CAndar Jogador !
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
void andarJogador (Jogador *j, int n) {
j->pontos += n;
}
Variáveis globais
Definição de um jogador
Solução em CAtingiu Pontos?
typedef struct { char nome[20]; int pontos;} Jogador;
int nroLimitePontos, nroJogadores;Jogador** jogadores;
// Jogovoid criarJogadores();void iniciar();int ninguemVenceu ();int jogarDado();void mostraSituacao(int, int);int sorteiaIniciante();
// Jogadorvoid andarJogador(Jogador*, int);int atingiuPontos(Jogador*, int);
int atingiuPontos(Jogador *j, int n) {
return j->pontos >= nroLimitePontos;
}
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???– Possível resposta:
• cada jogador, • um conjunto de jogadores, • dado de 6 lados• o próprio jogo
Você pode achar outros
Os dados são aninhados
jogo
jogadores
Cebolinha CascãoMônica
Solução OO
3. Abstração dos Dados– Cada jogador
• Quantos pontos tem?• Qual o nome?• Muda de nome!• Anda “n” casas!• Atingiu “n” pontos?
– Dado• Lança!!!
– Jogo• Começa!!• Cria jogadores!!• Alguém venceu?• Mostra situação
Você pode achar muitas outras alternativas!!
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
Solução OO