Você está na página 1de 14

CEFET/RJ – CENTRO FEDERAL DE

EDUCAÇÃO TECNOLÓGICA CELSO


SUCKOW DA FONSECA

Relatório do Campo minado

Disciplina: Programação I
Professor: Diego Brandão
Alunos: Gabriel Damasio Evangelista e Igor Pimentel Guimarã
Introdução

O objetivo deste projeto é implementar o jogo Minesweeper (Campo Minado)


com o uso da linguagem C, na intenção de realizar uma atividade prática que
utilize todo o conhecimento adquirido nas aulas de programação I que foram
ministradas durante o segundo semestre.

Sumário

Breve demonstração das funções usadas ............................................................................ 2

Principais dificuldades encontradas durante a programação .................. ................................. 6

Passo-a-passo para compilar o jogo .................................................................................... 7

Com o jogo em andamento ................................................................................................. 7

Conclusão ................................................................................................................... .... 13


Breve demonstração das funções usadas:

 A primeira função usada no código foi: void intro ( )

Uma função que retorna vazio foi usada para realizar a introdução do jogo. A
tela de boas vindas e as opções de jogar ou sair foram acrescidas nessa
função. Esse bloco também teve o intuito de facilitar a visualização do
programador, enxugando o tamanho do código.

 A segunda função usada no código foi: int tipo_de_jogo ( )

Nessa função foi implementado duas possibilidades de modo de jogo, seja ele
randômico,onde será gerado um campo aleatorio com um numero de bombas
definido pelo usuario, ou o modo definir jogo,onde o usuário escolhe pelo
programa as posições onde deseja que tenha bombas. Neste bloco foi usado o
operador lógico if/else, propondo ao usuário duas opções já citadas neste
mesmo tópico. Caso o usuário escolha uma terceira opção inexistente, o
programa exibirá a seguinte mensagem “Opção invalida digite novamente”.
Ainda nesse bloco é inicializado a variável “b” que também é usada na terceira
função.

 A terceira função usada no código foi: int matriz_aleatoria(int


mat[8][8],int b)

Na função inicializada, foi gerada uma matriz [8][8] aleatória, e um contador de


bombas “b” usado para armazenar o número escolhido pelo usuário. É gerado
um campo com "4" para bombas e "0" para espaços vazios.

 A quarta função usada no código foi: void pula(char b[200])

Função utilizada para ler as posições de bomba separadas por "espaço" e


converter espaços em quebras de linha para assim escreve-las num arquivo.txt
externo.
 A quinta função usada no código foi: void funcao_de_jogo(char
mat[][8])

Esta função gera uma matriz de char para interface com usuário,onde o
caracter 254 formam quadrados, representando espaços vazios no campo.

 A sexta função usada no código foi: void printar_matriz(char


mat[][8])

Essa função tem a utilidade de imprimir a matriz de interface do usuário.

 A sétima função usada no código foi: int letra(char c)

Na função “int letra(char c) “ foi usado o operador lógico switch, transformando


as posições da bomba em uma matriz.E possui um retorno no default com o
valor de 10 para retratar possiveis posições inválidas.

 A oitava função usada no código foi: void atualiza(int mat[][8],char


mat2[][8])

Uma função importante para o andamento do jogo, pois ela atualiza a matriz
char informando o número de bombas nas proximidades fazendo uma
interação entre uma matriz de int onde estão armazendas os valores e uma
matriz de char usada para interface com o usuário.

 A nona função usada no código foi: int conta_bomba(int mat[][8],int


linha,int coluna)

A função escrita acima conta em "asterísco" e informa o número de bombas ao


redor do local escolhido pelo usuário.

 A décima função usada no código foi: int ganha_jogo(int


mat[][8],int n)

Nessa função é gerado um contador para ver quantos espaços vazios foram
abertos, quando este contador se iguala ao numero de espaço vazios, o
usuário venceu a partida. Repare que a condição do if é o próprio retorno desta
função.
 A décima primeira função usada no código foi: void revela(int
mat[][8],int linha,int coluna)

Esta função recursiva revela o campo após cada jogada e também verifica se
as posições adjacentes devem ser reveladas

 A décima segunda função usada no código foi: void


marcar_bandeira(char mat[][8],int mat1[][8],char s[5])

Essa função tem a serventia de marcar a bandeira no campo com o caracter "-
", de valor 240 na tabela ascii.

 A décima terceira função usada no código foi: void


tirar_bandeira(char mat[][8],int mat1[][8],char s[5])

A função escrita acima tem a utilidade inversa da décima segunda função, ou


seja, retirar a bandeira de campo.

 A décima quarta função usada no código foi: int arquivo(int


mat[][8])

Função para o modo "definir jogo" que recebe uma string com as posições de
bomba separadas por "espaço", armazena esta string num bloco de notas
externo, lê o bloco de notas externo, converte as letras para letras minúsculas,
gera um contador de bombas válidas e fecha os arquivos abertos.

 A décima quinta função usada no código foi: int imprime_matriz(int


mat[8][8])

Função utilizada para imprimir a matriz secundária, a de valores inteiros,


revelando-a quando o jogador ganha ou perde o jogo.

 A décima sexta função usada no código foi: int perde_jogo(int


mat[][8])

Nessa função foi definido o momento em que o usuário escolhe uma posição
que contenha bomba. O jogo é interrompido e a tela pisca em uma sequência
de cores.
 A décima sétima função usada no código foi: int dificuldade(int
m,int a,int d)

Função que gera na tela o nível de dificuldade de jogo baseado no número de


espaços no campo e no número de bomba, contendo 5 modos: Fácil, de 1 a 16
bombas, Médio, de 17 a 32 bombas, Difícil, de 33 a 42 bombas, Ninja, de 49 a
62 bombas e modo Deus contendo 63 bombas no campo.

Principais dificuldades encontradas:

 Função conta_bomba eventuais bugs;

Após a criação de grande parte do jogo, a maior dificuldade foi ter que prever e
consertar possíveis erros ou inadequações do jogador, além disso, também
houve dificuldades com a função "conta_bomba" visto que o número de
bombas nas proximidades poderia ser 4, assim sendo igual ao número de
posição com bomba na matriz de inteiros, para corrigir isso foi feito com que
esta função se iniciasse no valor 5, assim fazendo com que ela conte ate 13,
pois é o numero de espaços máximo nas adjacências.

 Função revela;

Devido ao alto grau de complexidade da função recursiva dentro deste jogo,


uma grande dificuldade em criá-la foi encontrada. Com base no email enviado
a turma e as monitorias frequentadas, foi possível implementar esta função de
forma eficiente no código.
Passo-a-passo para compilar o jogo:

Há três maneiras de compilar o jogo: Com a tecla de atalho “F9”, um duplo


clique no arquivo (CAMPO_MINADO) do tipo “Dev C++ Project File” ou um
clique no botão “Compile & Run”

o Botão “Compile & Run”

Com o jogo em andamento:

 Com o programa em andamento aparecerá uma tela de boas vindas e


as opções de “jogar” ou “sair”
 Ao escolher a opção “jogar” se abrirá uma tela de opções de “jogo
randômico” ou “definir jogo”

 Caso o usuário escolha a opção “jogo randômico”,


deverá ser definido a quantidade de bombas geradas no jogo. (5
bombas no exemplo abaixo).

 Tela de jogo
 Campo de jogo revelado
 Tela de vitória
 Tela de derrota
Conclusão:

No processo de programação deste jogo muitas dificuldades se apresentaram


de forma voraz, mas a persistência e o empenho fizeram toda a diferença. Uma
outra lição a ser tirada é que o trabalho em equipe é fundamental em qualquer
carreira e principalmente na engenharia. Saber lidar com o fracasso também foi
válido nesta experiência, principalmente no momento em que um plano
(código) não traz o resultado esperado!