Skip to content

A Roguelike-styled game project, Rand()venture.

License

Notifications You must be signed in to change notification settings

sp0oks/Roguelike

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Codacy Badge

Roguelike

Descrição do projeto

Este projeto foi feito para a matéria de Estruturas de Dados, buscando aplicar os conceitos de implementação de uma lista encadeada. Para isso, implementamos um jogo de temática Roguelike.

Instalação

Linux

  1. Baixe os arquivos para Linux;
  2. Coloque os arquivos na pasta que desejar;
  3. Antes de executar, utilize o comando export LD_LIBRARY_PATH="../SFML/lib" na pasta de instalação, ou então, instale a biblioteca SFML.
  4. Execute o arquivo randventure.out.

Windows

  1. Baixe os arquivos para Windows;
  2. Coloque os arquivos na pasta que desejar;
  3. Execute o arquivo randventure.exe.

Aplicação da lista encadeada

Arquitetura

Os conceitos de lista encadeada foram aplicadas na seleção da classe personagem, sendo que criaram-se os seguintes métodos de percorrimento para a lista de seleção:

void ButtonList::toNext(){
  m_actualIndex++;
  if(m_actualIndex >= m_buttonSprites.getSize())
    m_actualIndex = 0;
  m_outlineSprite.setPosition(m_buttonSprites[m_actualIndex]->getPosition());
}

void ButtonList::toPrevious(){
  m_actualIndex--;
  if(m_actualIndex < 0)
    m_actualIndex = m_buttonSprites.getSize()-1;
  m_outlineSprite.setPosition(m_buttonSprites[m_actualIndex]->getPosition());
}

Foi implementado o operador de acesso [ ], permitindo o acesso mais simples dos elementos da lista encadeada, para isso, utiliza-se o seguinte método:

template<class T>
T LinkedList<T>::operator[](int index) {
	this->toFirst();
	while (index > 0 && !this->toNext())
		index--;
	return this->current->value;
}

Esse código reseta o ponteiro da lista para o início, e então, vai iterando até chegar no índice desejado.

Mecânicas do jogo

Inimigos

Os inimigos utilizam o algoritmo A* para determinar o melhor caminho até o herói. Esse algoritmo utiliza o grid criado pelo mapa, e tenta traçar o melhor caminho a partir da posição atual do inimigo.

Para um maior aprofundamento, utilize os links a seguir:

Geração do mapa

Para a geração do mapa aleatório, foi utilizado o algoritmo "Recursive Backtracker", que gera um labirinto delimitado pelos extremos do mapa, e logo em seguida, são criadas salas vazias nesse labirinto.

Alguns materiais do Recursive Backtracker:

Ferramentas utilizadas

Autores

Créditos

  • Alisson Nunes - Interface e parte gráfica.
  • Gabriel Alves - Implementação da estrutura dos dados e controles.
  • Matheus Bortoleto - Parte gráfica e controles.
  • Rafael Sales - Documentação.

About

A Roguelike-styled game project, Rand()venture.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages