| Matrícula | Nome |
|---|---|
| 23/1033737 | Artur Mendonça Arruda |
| 23/1035464 | Lucas Mendonça Arruda |
ShuffleWar é um jogo de terminal desenvolvido em C, ambientado na Idade Média, que utiliza algoritmos de ordenação para determinar a pontuação do jogador e do NPC.
O projeto combina lógica de programação, estrutura de dados e estratégia, permitindo ao jogador competir em eficiência de ordenação para sobreviver ao desafio proposto pelo Rei.
O jogador assume o papel de um prisioneiro condenado à morte.
O Rei decide oferecer uma chance de sobrevivência: se o jogador conseguir organizar vetores de números melhor que o servo do Rei, ele sobrevive; caso contrário, é condenado.
O desafio envolve habilidade em algoritmos de ordenação e estratégia na escolha de cartas.
- O jogo é composto por 10 rodadas.
- A cada rodada, o jogador pode pegar até 3 cartas para completar a mão com máximo de 9 cartas.
- O NPC também recebe cartas quando o jogador pega, mas sempre cartas diferentes.
- As cartas podem possuir penalizações:
- Penalização normal: desconta 5.000 pontos da reputação.
- Penalização forte: desconta 10.000 pontos da reputação.
- Quando uma carta (algoritmo de ordenação) é escolhida, tanto o player quanto o NPC ordenam o mesmo vetor.
- Cada algoritmo retorna a quantidade de comparações feitas.
- A fórmula de pontuação é: reputacao = 10000 * (preferencia_do_rei) - comparacoes / 1000
preferencia_do_rei: estado que muda a cada rodada (priorizar estabilidade dobra a pontuação base de 10000 para 20000).comparacoes: número de comparações realizadas pelo algoritmo. Quanto maior, mais pontos são descontados.
- Cartas penalizadas afetam a reputação em 5000, e cartas muito penalizadas afetam a reputação em 10000 quando usadas.
- É necessário planejar bem quais cartas usar para maximizar a pontuação e sobreviver ao desafio do Rei.
- Sistema operacional: Linux
- Compilador: GCC (versão recomendada: 9.4 ou superior)
- Linguagem: C (padrão C99 ou superior)
Para usuários Windows, é necessário:
- Instalar o GCC (GNU Compiler Collection) ou
- Utilizar um compilador online como o OnlineGDB
Não são necessárias bibliotecas externas, apenas o compilador C padrão.
- Clone o repositório
git clone https://github.com/EDAII/Ordena_ShuffleWar.git- Abra o terminal na pasta do projeto com o comando:
cd Ordena_ShuffleWar - Compile todos os arquivos juntos usando o GCC:
gcc main.c jogo.c algoritmos/insertion_sort.c algoritmos/selection_sort.c algoritmos/shell_sort.c algoritmos/bubble_sort.c algoritmos/counting_sort.c algoritmos/merge_sort.c algoritmos/quick_sort.c algoritmos/heap_sort.c -o rodar- Execute o programa:
./rodar
- Complexidade média: O(n²)
- Pior caso: O(n²)
- Complexidade média: O(n + k)
- Pior caso: O(n + k)
(n = tamanho do vetor, k = valor máximo do elemento)
- Complexidade média: O(n²)
- Pior caso: O(n²)
- Melhor caso (quase ordenado): O(n)
- Complexidade média: O(n log n)
- Pior caso: O(n log n)
- Complexidade média: O(n log n)
- Pior caso: O(n²)
- Complexidade média: O(n²)
- Pior caso: O(n²)
- Complexidade média: depende da sequência de gaps, geralmente O(n^(3/2))
- Pior caso: O(n²)
Os algoritmos de ordenação em ShuffleWar são usados para calcular a pontuação do jogador e do NPC.
Cada carta representa um algoritmo, que organiza o mesmo vetor para ambos. A quantidade de comparações feitas pelo algoritmo determina quantos pontos cada um recebe.
Assim, o jogo utiliza os algoritmos de forma prática para comparar eficiência e gerar a pontuação, sem abstrações, mostrando claramente o efeito de cada escolha de algoritmo na reputação do jogador.
| Versão | Data | Descrição | Autor | Revisor | Revisão |
|---|---|---|---|---|---|
v1.0 |
13/10/2025 | Estruturação inicial da README | Artur Mendonça | Lucas Mendonça | 13/10/2025 |







