Commit d63acd26 authored by vgsb18's avatar vgsb18 🦍

Finalizado

parents
,pmes18,pmes18,16.06.2019 12:07,file:///home/pmes18/.config/libreoffice/4;
\ No newline at end of file
# Makefile
LDFLAGS=-lncurses
all: jogo
jogo: main.o jogo.o
gcc main.o jogo.o -o jogo -Wall -lncurses
main.o: main.c jogo.h
gcc -c main.c -Wall -lncurses
jogo.o: jogo.c jogo.h
gcc -c jogo.c -Wall -lncurses
clean:
rm -rf *.o
Nome : Pedro Martins e Sá
Nome : Gustavo Valente
Nome : Victor Gabriel Souza Barbosa
Nome : Vitor Gaio Salmória
O jogo é iniciado através do executável "jogo", onde o mapa contido num arquivo de texto é carregado e exibido na
tela, depois os caracteres e elementos no jogo são exibidos no mapa.
Para jogar o usuário controla o personagem com as teclas w, a, s, d (respectivamente cima, esquerda, baixo, direita),
ele pode pegar as sementes dispostas pelo terreno com a tecla x e planta-las com a tecla p, já a colheita é feita
com a tecla c, o personagem se alimenta dos frutos com a tecla f, ele pode jogar elementos da mochila fora com a
tecla jalém de observar a planta crescer com a tecla o. O objetivo do jogo é plantar as sementes e aguardar até que
cresçam e produzam frutos, o jogador é premiado com um ponto a cada colheita bem sucedida, vale lembrar que cada
movimento conta como um turno onde o nível de fome do personagem aumenta, caso chegue a 100 a sua saúde começa a
diminuir, para reduzir o nível de fome é preciso comer os frutos colhidos, caso a saúde chegue a zero o jogo acaba.
Os elementos do jogo e os caracteres que os representam são: personagem "i", cerca ou limite do mapa "| ou _", terreno
de plantio " * ", diferentes tipos de semente presentes no mapa "w " " , " " o " " b " , sua representação após
serem plantadas no terreno " ~ " " , " " + " " d " e a representação das plantas que originam " W " " B " " + " " D ",
respectivamente alface, batata, tomate e batata doce. Quando uma planta morre é representado pelo caractere X no
mapa.
Foram criados os seguintes tipos de dados:
-Mapa: contém o número de linhas e colunas da matriz que forma o mapa além dos caracteres;
- Semente: similar ao nodo de uma lista contém um ponteiro para próxima estrutura (que é do mesmo tipo) e um tipo
abstrato de dados "tipo_semente" que serve como conteúdo do nodo;
- Tipo_semente: é o conteúdo da estrutura "semente", contém o nome, tempo de crescimento em turnos, nível de
satisfação e as coordenadas da semente;
- Mochila: guarda os elementos do jogo como sementes, por exemplo, tem um tamanho definido e quantidade atual de
itens;
- Personagem: contém os níveis de saúde e fome do personagem e sua mochila;
- Planta: contém a estrutura de dados "semente", o estado atual de crescimento da planta, e dois ponteiros, anterior
e próximo;
- Fila_plantio: tipo abstrato de dados da fila gerada ao plantar uma semente, contém o tamanho atual da fila, o número
máximo de elementos que ela comporta, seu inicio, fim e um ponteiro para os dados nela quadrados.
This diff is collapsed.
#ifndef __JOGO__
#define __JOGO__
typedef struct mapa{
int linha;
int coluna;
char **m;
}mapa;
typedef struct tipo_semente
{
char *nome;
int tempo;
int linha;
int coluna;
int nivel_satisfacao;
char *status;
}tipo_semente;
typedef struct semente {
tipo_semente* tipo_semente;
struct semente *prox;
} semente;
typedef struct mochila{
semente* topo;
int tam;
int quantidade;
// semente* v[10];
}mochila;
typedef struct personagem{
int fome; //max -> 100
int saude; //max -> 100
struct mochila m;
}personagem;
//nodo
typedef struct planta{
struct semente s;
//int estado_planta;
//int nivel_satisfacao;
struct planta *prox;
struct planta *ant;
}planta;
typedef struct fila_plantio
{
int max;
int tam;
int inicio;
int fim;
tipo_semente* dados;
}fila_plantio;
personagem comer_semente(personagem p);
personagem desempilha (mapa mapa_in, int linha, int coluna, personagem p);
void joga_fora(personagem p, mapa mapa_in, int linha, int coluna);
void lista (tipo_semente *v, int tam, int k, mapa mapa_in);
int tira_vetor (int l, int c, tipo_semente *v, int tam);
tipo_semente* inicializa_tipos(tipo_semente *tp, char *nome, int tempo, int nivel_satisfacao, char *status);
personagem iniciapersonagem(personagem p);
personagem iniciamochila(personagem p);
mapa aloca_mapa(mapa mapa_in, FILE *arq);
void gera_mapa(mapa mapa_in);
char** aloca_matriz (mapa mapa_in);
mapa libera_matriz (mapa mapa_in);
char gera_posicao (mapa mapa_in);
personagem perso_info(personagem p, mapa mapa_in,int *k);
personagem anda_personagem(int *i, int *j, int ch, mapa mapa_in, personagem p, fila_plantio *fp, int *cont, tipo_semente *v, int *c, int *max, int *min);
int diminui_tempo(int cont, tipo_semente *v, mapa mapa_in, int min);
personagem plantar (mapa mapa_in, int linha , int coluna, personagem p, fila_plantio *fp);
personagem colhe_semente(int linha, int coluna, mapa mapa_in, personagem p);
void ordena_vetor (int cont, tipo_semente *v, mapa mapa_in);
int ehterreno(mapa mapa_in, int linha , int coluna);
int ehplanta (mapa mapa_in, int linha, int coluna);
int tem_semente(mapa mapa_in, int linha, int coluna);
personagem empilha_semente(mapa mapa_in, int linha, int coluna, personagem p, int *c);
void gera_semente(mapa mapa_in, int *c);
void inicia_fila(fila_plantio *fp);
void insere_planta(fila_plantio *fp, int cont, tipo_semente *v);
void imprimir_fila(fila_plantio *fp, int cont, mapa mapa_in);
tipo_semente colhe_planta(fila_plantio *fp);
int vazia(fila_plantio *fp);
void cria_tipos();
void legenda(personagem p);
void deslegenda (char *aux_string,personagem p);
#endif
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>
#include <unistd.h>
#include "jogo.h"
int main(int argc, char **argv)
{
int i,j,cont;
int ch;
mapa mapa_in;
FILE *arq;
initscr();
raw();
keypad(stdscr, TRUE);
cbreak();
noecho();
arq = fopen ("mapa.txt", "r");
if (!arq)
{
printf("Mapa não encontrado\n");
exit(1);
}
//Faz a geração do mapa
mapa_in = aloca_mapa(mapa_in,arq);
//Gera o mapa utilizando o ncurses
gera_mapa(mapa_in);
//Coloca o personagem no meio do mapa
mvprintw(mapa_in.linha/2,mapa_in.coluna/2, "i");
//Arruma as posições do personagem (coordenadas)
i = mapa_in.linha/2;
j = mapa_in.coluna/2;
//Inicia os componentes dos personagens baseado nas structs
personagem p;
fila_plantio fp;
curs_set(0);
p = iniciapersonagem(p);
tipo_semente *v;
v = malloc(30 * sizeof(tipo_semente));
cria_tipos();
p = iniciamochila(p);
inicia_fila(&fp);
//Quantidade de movimentos que o personagem tem
cont = 0;
int k = 0;
int c = 3;
int max = 0;
int min = 0;
while (1 && max < 10 && min < 10)
{
gera_semente(mapa_in,&c);
//Selecionaa a tecla digitada no teclado
ch = getch();
//Faz a atualização do personagem no mapa
p = anda_personagem(&i,&j,ch,mapa_in,p,&fp,&cont,v,&c,&max,&min);
//Saude do personagem
p = perso_info(p,mapa_in,&k);
if((p.saude == 0) || (min == 10)){
printf("YOU LOSE");
break;
}
if (max == 10){
printf("YOU WIN");
break;
}
mvprintw(0,68,"%d", max);
mvprintw(0,100,"%d", min);
k += 1;
}
//Libera a matriz alocada no mapa
mapa_in = libera_matriz(mapa_in);
//Coisas do ncurses
refresh();
getch();
endwin();
fclose(arq);
return (0);
}
19
38
|-----------------------------------|
| |
|. . . . . .|
| |
|. . . . . .|
| , |
|. . . . . .|
| |
|. . . . . .|
| o |
|. . . . . .|
| |
| |
| |
| d |
| |
| |
| |
|-----------------------------------|
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment