-
Notifications
You must be signed in to change notification settings - Fork 0
/
buttonsAndScissorsBack.h
94 lines (78 loc) · 2.61 KB
/
buttonsAndScissorsBack.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef BUTTONS_AND_SCISSORS_BACK
#define BUTTONS_AND_SCISSORS_BACK
#include <stdlib.h>
#include <stdio.h>
#include "random.h"
#define INC_MAX 4
#define VACIO ' '
#define MIN_MOV 2
#define BLOQUE_MEM 10
enum errores {SIN_ERROR=0, E_MEM_DIN,E_ARCHIVO_MATRICES,E_ABRIR_ARCHIVO,
E_CREAR_ARCHIVO, E_ARCHIVO_MAL,COMANDO_INVALIDO,DIR_INVALIDA,
ENTRE_BOTONES,MISMO_BOT,FUERA_MATRIZ_1,FUERA_MATRIZ_2,NO_PRINT};
/*
** Esta estrucura representa el tablero, siendo v la matriz y n su dimension.
*/
typedef struct
{
char ** v;
size_t n;
} matriz_t;
typedef struct
{
int x;
int y;
} punto_t;
typedef struct
{
punto_t origen;
punto_t destino;
int cantBotones;
} movimiento_t;
/*
** Dado un tablero, un movimiento anteriormente validado y la direccion de dicho movimiento,
** realiza el correspondiente corte desde el punto de origen del movimiento hacia el
** punto de origen, dejando los casilleros que recorre vacios.
** Retorna la cantidad de botones cortados.
*/
int realizarCorte(matriz_t * tablero, movimiento_t movimiento, punto_t direccion);
/*
** Dado un movimiento anteriormente validado, se calcula la direccion que debe utilizarse
** para ir desde el punto de origen hacia el punto de destino.
** Dicha direccion es retornada a traves del parametro de salida 'direccion'.
*/
void calcularDireccion(movimiento_t movimiento, punto_t * direccion);
/*
** Dado un tablero, retorna 0 si no quedan movimientos validos por realizar
** y retorna distinto de 0 si aun queda alguno.
*/
int hayMovimientosValidos(matriz_t tablero);
/*
** Dado un tablero y habiendo validado que aun hayan movimientos por realizar,
** esta funcion realiza un corte, eligiendo entre los de maxima cantidad
** de botones o los de minima cantidad de botones pseudoaleatoriamente.
** Incrementa los botones cortados por la PC en un parametro de salida.
** Retorna 0 si no hubo error, o distinto si los hubo.
*/
int realizarCortePc(matriz_t * tablero, int * btnsPC);
/*
** Dado un tablero, un movimiento y una direccion,
** retorna 0 si no hay botones de distinto color
** entre el putno de origen y el punto de destino
** o distinto de 0 si los hay.
*/
int hayBtnsEntreMedio(matriz_t tablero, movimiento_t movimiento, punto_t direccion);
/*
** Dado un movimiento y un tablero, retorna 0 si el movimiento es valido
** y distinto de 0 si no lo es.
*/
int validarMovimiento(movimiento_t * movimiento, matriz_t tablero);
/*
** Habilita memoria dinamica para nxn chars y devuelve el puntero a esa posicion.
*/
char ** creaMatrizCuadrada(size_t n);
/*
** Libera la matriz cuadrada.
*/
void liberarMatrizCuadrada(matriz_t tablero);
#endif