aboutsummaryrefslogtreecommitdiff
path: root/old/2020-unknown-date/pieces.h
blob: dbdd740c7acc686bc17a2fd48d31796a0b217925 (plain)
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
/* Moves and other things */

#ifndef PIECES_H
#define PIECES_H

typedef enum {
  U, U2, U3, D, D2, D3, R, R2, R3, L, L2, L3, F, F2, F3, B, B2, B3,
  Uw, Uw2, Uw3, Dw, Dw2, Dw3, Rw, Rw2, Rw3,
  Lw, Lw2, Lw3, Fw, Fw2, Fw3, Bw, Bw2, Bw3,
  M, M2, M3, S, S2, S3, E, E2, E3,
  X, X2, X3, Y, Y2, Y3, Z, Z2, Z3,
  NULLMOVE
} Move;
typedef enum {
  U_center, D_center, R_center, L_center, F_center, B_center
} Center;
typedef enum { UF, UL, UB, UR, DF, DL, DB, DR, FR, FL, BL, BR } Edge;
typedef enum { UFR, UFL, UBL, UBR, DFR, DFL, DBL, DBR } Corner;

/* Arrays for strings of pieces and moves */
extern char edge_string[12][5];
extern char corner_string[8][5];
extern char center_string[6][5];
extern char move_string[NULLMOVE+1][5];

/* Three big arrays that determine the movement of edges, corners and
 * centers for some of the basic moves. Yes, one can be much more elegant and
 * write much fewer lines. But then things get less elegant somewhere else. */
extern int edge_cycle[NULLMOVE+1][12];
extern int corner_cycle[NULLMOVE+1][8];
extern int center_cycle[NULLMOVE+1][6];

/* Representation of the cube */
typedef struct {
  /* Edge orientation */
  int eofb;
  int eorl;
  int eoud;
  
  /* Corner orientation */
  int coud;
  int cofb;
  int corl;

  /* Position of M/E/S slice edges */
  /* TODO: keep in mind that the 4! positions with edges in correct slice
   * must be the first 4! indeces */
  int epose;
  int eposs;
  int eposm;

  /* Permutation of corners */
  int cp;

  /* Position of centers */
  int centerpos;
} Cube;

#endif

Generated with cgit - Back to sebastiano.tronto.net