Coder Social home page Coder Social logo

alynva / freecell Goto Github PK

View Code? Open in Web Editor NEW
7.0 4.0 3.0 205.67 MB

:spades::hearts::clubs::diamonds: Projeto referente ao trabalho sobre pilhas (T1) do curso Estrutura de Dados (ED) do Bacharelado em Ciência da Computação (BCC) na Universidade Federal de São Carlos (UFSCar).

Home Page: http://edcomjogos.dc.ufscar.br/

License: MIT License

C++ 2.99% Makefile 0.04% C 96.40% Objective-C 0.54% CMake 0.03%
freecell jogo cartas estrutura-de-dados pilha sdl2

freecell's Introduction

Hi there, I'm Alisson - aka Alynva 👋

  • 🚀 Astro pt-BR translator
  • 🔭 I’m currently working on Consulta Pública!
  • 🌱 I’m currently learning ML and AWS
  • 👯 I’m looking to collaborate on tiny libraries
  • 🤔 I’m looking for help with Firebase cool projects
  • 💬 Ask me about JS, PWA and HB
  • 📫 How to reach me: @gmail.com
  • ⚡ Fun fact:
(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(+!+[]/[]+[])[+!+[]+[+[]]-!+[]-!+[]-!+[]]+([]+[][[]])[+!+[]]+([]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]])[!+[]+!+[]+[!+[]+!+[]+!+[]]]+(![]+[])[+!+[]]

Connect with me:

alynva.com Alynva | YouTube Alynva | Twitter Alynva | LinkedIn Alynva | Instagram


Languages and Tools:

Main Main

Visual Studio Code

JavaScript

React

Firebase

Algolia

Telegram Bots

Git



Languages Other languages

HTML5

CSS3

Java

MySQL

SQL

C

C++



Tools Other tools

GitHub

GitLab

Terminal

Node.js





@Alynva Astro contributions


Alynva's Github Trophies


Alynva's Github Stats


freecell's People

Contributors

alynva avatar rsaless avatar sp0oks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

rsaless sp0oks

freecell's Issues

Randomização de cartas

Duas questões, primeiro que atualmente está dando este erro em máquinas Windows:

image

O que se faz necessário uma nova implementação da função. Segundo que, na minha concepção é melhor com que essa função esteja na classe Baralho, ao invés de na classe PilhaInteligente ou derivadas.

Varredura da Pilha

É necessário alterar a implementação de Pilha::render(), Pilha::organize() e Pilha::isInside().

Nestes, num primeiro momento utilizei a criação de uma outra pilha temporária e a recolocação de cada elemento de um pilha para outra, ida e volta. Onde na volta está sendo feito as interações necessárias, como o seguinte no método render():

template<typename T, int S>
void Pilha<T,S>::render() {
	Pilha<T,S> p_temp;		// Cria uma pilha temporária
	T t_temp;			// Cria um objeto da pilha temporário

	while (!this->isEmpty()) {	// Intera na pilha original até que a esvazie
		this->pop(t_temp);
		p_temp.push(t_temp);
	}
	while (!p_temp.isEmpty()) {	// Intera na pilha temporário até que a esvazie
		p_temp.pop(t_temp);
		t_temp.render();	// Realiza as operações necessárias
		this->push(t_temp);
	}
}

Para tal solução, pode-se usar o simples conceito de vetor na pilha. Preferencialmente usando métodos, privados talvez para não fugir do conceito de pilha, porém reaproveitáveis.

Hack #1: mover mais de uma carta para a pilha única.

Quando há a possibilidade de mover mais de uma carta das pilhas intermediárias, caso você tente colocar elas em alguma pilha auxiliar livre, o jogo irá aceitar a primeira carta e voltar a segunda. Com isso, você consegue "inverter" cartas utilizando uma única pilha auxiliar. Segue os prints:
image
image
image

Hack #2: pegar pegar uma carta à cima, mesmo sendo incorreta

Se você for muito rápido, basta você pegar uma ou mais cartas corretas (segundo as regras), mantê-la na mesma pilha e tentar soltar e clicar novamente o mais rápido que poder. Se você fizer o último passo rápido o bastante, conseguirá pegar a carta de cima e colocá-la em outro lugar que aceite-a. Como demonstrado a seguir:
image
image
image
image
image

Problema com ponteiro de ponteiro

Ao tentar utilizar o Node::value como um T* ao invés de T, na branch "Setting-value-as-pointer", me deparei com o problema de erro em tempo de execução. Ao tentar debugar, isolei o EventManager::mouseMove() decorrente do FreeCell::menu() >> EventManager::update() e notei que o erro se dá decorrente da utilização de um ponteiro que aponta a outro ponteiro que aponta a uma instância de uma classe (no caso a classe Button), chamando um método dessa classe. Nos meus testes, o problema não está em chamar o método, mas sim em utilizar o ponteiro this dentro deste método. Procurei soluções e alternativas mas sem obter êxito.

Toda essa branch foi criada quando eu estava implementado o método EventManager::doubleClick() e nele há a necessidade de verificar se a carta que está sob o mouse é a primeira carta da pilha. Isso poderia ser contornado caso fizesse a verificação "crua", e não por endereço de memória, visto que não há cartas repetidas. Porém, noutra aplicação o cenário pode ser diferente.

Travamentos desonhecidos #1

Postem aqui capturas de tela do jogo quando ele travar inexplicadamente, sem um padrão claro. Favor deixar visível todas as cartas do jogo. Esclarecer também a versão que estava utilizando e o contexto, caso necessário.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.