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
Download

Aula 04 - Facom - Universidade Federal de Uberlândia