A little app to simulate every possible move in Connect Four.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Small make_move optimization

+26 -13
+26 -13
core.cpp
··· 24 24 { 25 25 assert(column >= 0 && column < 7); 26 26 27 - uint8_t probe = 0b01000000; 28 - 29 - if (state[column] >= probe) 27 + if (state[column] >= 0b01000000) 30 28 return -1; 31 29 32 - int8_t row = 6; 33 - while (state[column] < probe) 30 + uint8_t mask = state[column]; // 0011 0000 (example) 31 + mask |= mask >> 1; // 0011 1000 32 + mask |= mask >> 2; // 0011 1110 33 + mask |= mask >> 4; // 0011 1111 34 + ++mask; // 0100 0000 35 + 36 + state[column] |= mask; 37 + if (player == 1) 34 38 { 35 - probe >>= 1; 36 - --row; 39 + state[column] &= ~(mask >> 1); 37 40 } 38 41 39 - if (player == 1) 42 + switch (mask) 40 43 { 41 - state[column] &= ~(probe); 44 + case 0b00000010: 45 + return 0; 46 + case 0b00000100: 47 + return 1; 48 + case 0b00001000: 49 + return 2; 50 + case 0b00010000: 51 + return 3; 52 + case 0b00100000: 53 + return 4; 54 + case 0b01000000: 55 + return 5; 56 + default: 57 + assert(false); 58 + return -1; 42 59 } 43 - 44 - state[column] |= (probe << 1); 45 - 46 - return row; 47 60 } 48 61 49 62 bool check_for_win(BoardState state, uint8_t last_move_row, uint8_t last_move_col)