Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Enchente
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Vytor Calixto
Enchente
Commits
5c8263be
There was a problem fetching the pipeline summary.
Commit
5c8263be
authored
8 years ago
by
Vytor Calixto
Browse files
Options
Downloads
Patches
Plain Diff
Altera o jogador
parent
f79f11ac
Branches
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#
Changes
4
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
Makefile
+1
-1
1 addition, 1 deletion
Makefile
libs/jogador.c
+15
-53
15 additions, 53 deletions
libs/jogador.c
libs/jogador.h
+5
-21
5 additions, 21 deletions
libs/jogador.h
main.c
+2
-2
2 additions, 2 deletions
main.c
with
23 additions
and
77 deletions
Makefile
+
1
−
1
View file @
5c8263be
...
...
@@ -10,7 +10,7 @@ test: main
chmod
+x runTests.sh
;
\
./runTests.sh
main
:
main.c libs/tabuleiro.o libs/grafo.o libs/vertice.o libs/filha.o libs/lista.o libs/no.o
main
:
main.c
libs/jogador.o
libs/tabuleiro.o libs/grafo.o libs/vertice.o libs/filha.o libs/lista.o libs/no.o
$(
CC
)
$(
CFLAGS
)
-o
$@
$^
clean
:
...
...
This diff is collapsed.
Click to expand it.
libs/jogador.c
+
15
−
53
View file @
5c8263be
...
...
@@ -2,60 +2,22 @@
#include
<stdlib.h>
#include
<stdbool.h>
#include
"jogador.h"
#include
"lista.h"
#include
"grafo.h"
struct
Nodo
{
// Jogada que foi tomada para chegar neste nodo (ou seja, cor do grupo de posicoes atual)
int
jogada
;
// Filhos deste nodo, sera um array de structs Nodo
Nodo
*
filhos
;
// "Quadrados pintados" ate aquele nodo(que sera um vetor contendo certas posicoes do vetor "celulas")
int
*
quadradosPintados
;
// peso eh a quantidade de quadrados pintados deste grupo
int
peso
;
};
int
checaCor
(
Tblr
t
,
int
posicao
){
return
(
t
->
celulas
[
posicao
]
->
cor
);
}
int
*
verAdjacentes
(
Tblr
t
,
int
posicao
,
int
cor
){
//TODO: criar algoritmo que encontra quais sao os quadrados adjacentes a este dado quadrado
}
void
alocaFilhos
(
Nodo
n
){
//TODO: criar algoritmo que, dado um nodo, aloca seus filhos
}
Nodo
criaGrafo
(
Tblr
t
){
Nodo
n
=
malloc
(
sizeof
(
struct
Nodo
));
if
(
!
n
)
return
NULL
;
n
->
jogada
=
checaCor
(
t
,
0
);
if
(
n
->
jogada
==
-
1
)
return
NULL
;
// Ver quais sao os quadrados pintados deste nodo(grupo de quadrados adjacentes da mesma cor, dada uma posicao)
n
->
quadradosPintados
=
verAdjacentes
(
t
,
0
,
n
->
jogada
);
if
(
n
->
quadradosPintados
==
NULL
)
return
NULL
;
n
->
peso
=
(
sizeof
(
n
->
quadradosPintados
)
/
sizeof
(
int
));
// Ver qual e a quantidade de filhos deste Nodo e aloca espaco para eles
alocaFilhos
(
n
);
if
(
n
->
filhos
==
NULL
)
return
NULL
;
return
n
;
}
int
*
Joga
(
Nodo
n
,
Tblr
t
){
Lista
Joga
(
Grafo
g
,
Lista
grupo
){
//TODO: A Logica toda do jogo vai ficar aqui
// printf("Enquanto pilha não vazia:\n");
// printf("\tPega os adjacentes do grupo (retorna os pesos dos filhos = montar o grafo)\n");
// printf("\tEscolhe filho de maior peso\n");
// printf("\tEmpilha os outros filhos\n");
// printf("\tSE tamanho do caminho atual + filhos do nodo atual >= menor caminho: VOLTA!\n");
// printf("\tSE soma do peso total = tamanho do tabuleiro: VOLTA! Retorna o caminho encontrado\n");
// printf("\n\n\n##BONUS##\n");
// printf("Olhar os vizinhos dos vizinhos no estado atual e atribuir bônus:\n");
// printf("\tSe vizinho tem vizinho que não tenho: adicionar valor do vizinho do vizinho como bônus\n");
// printf("\tSe vizinho tem vizinho que tenho, mas em número maior: adicionar diferença\n");
// Pega os filhos do grupo
// Monta a árvore de busca:
// - RAIZ: grupo
// - FILHOS: Cores alcancáveis a partir da raiz
// - NETOS: Cores alcançáveis a partir dos filhos que NÃO são alcançáveis a partir da raiz
// Seleciona o melhor filho baseado em peso(filho) + bônus(filho) // (filho com a maior soma de filho e peso)
// O bônus e calculado da seguinte forma:
// - Soma o valor de cada neto (que não é alcançável pela raiz)
// - Em caso de empate da soma peso + bônus:
// - Escolher o filho que tem mais netos da mesma cor de um filho
// Após escolher um filho, repete o algoritmo até não terem mais filhos do grupo
return
constroiLista
();
}
This diff is collapsed.
Click to expand it.
libs/jogador.h
+
5
−
21
View file @
5c8263be
#ifndef _PLAYER_
#define _PLAYER_
#include
<stdbool.h>
#include
"tabuleiro.h"
#include
"grafo.h"
#include
"lista.h"
// Nodo do grafo que permitira encontrar o menor numero de jogadas
typedef
struct
Nodo
*
Nodo
;
// Pega os vizinhos da lista Grupo e seleciona o melhor filho baseado no peso e no bônus
// até consumir todos os vértices do grafo. Retorna a lista de jogadas
Lista
Joga
(
Grafo
g
,
Lista
grupo
);
// Cria um grafo ponderado com o primeiro nodo e retorna
Nodo
criaGrafo
(
Tblr
t
);
// Encontra o menor caminho no grafo de pesos (ate que a soma dos pesos bruta seja igual ao numero de casas na matriz)
// e retorna este menor caminho em um vetor de inteiros
int
*
Joga
(
Nodo
n
,
Tblr
t
);
// ------- Funcoes auxiliares --------
// Checa cor de uma posicao da matriz.
int
checaCor
(
Tblr
t
,
int
posicao
);
// Checa quais sao os quadrados adjacentes a um quadrado especifico, e retorna as posicoes dos adjacentes no vetor
// que representa a matriz do jogo.
int
*
verAdjacentes
(
Tblr
t
,
int
posicao
,
int
cor
);
// Ve quais sao os filhos deste nodo, ou seja, os grupos de cores que estao ligados ao grupo de quadrados referentes a este nodo.
void
alocaFilhos
(
Nodo
n
);
#endif
This diff is collapsed.
Click to expand it.
main.c
+
2
−
2
View file @
5c8263be
...
...
@@ -7,6 +7,7 @@
#include
"libs/no.h"
#include
"libs/lista.h"
#include
"libs/grafo.h"
#include
"libs/jogador.h"
int
main
()
{
Tblr
t
=
criaTblr
();
...
...
@@ -26,11 +27,10 @@ int main() {
// Desaloca tabuleiro
destroiTblr
(
t
);
Lista
jogadas
=
constroiLista
(
);
Lista
jogadas
=
Joga
(
g
,
grupo
);
// PARA DEBUGAR: Imprime o grafo tabuleiro em formato dot com os vértices já
// "consumidos" pintados de vermelho
printf
(
"Número de grupos: %d
\n
"
,
tamanhoLista
(
g
->
vertices
));
FILE
*
debug
=
fopen
(
"./debug.out"
,
"w+"
);
if
(
debug
)
{
grafoParaDot
(
g
,
grupo
,
debug
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment