draw + rewrite with bit switch because it's way cooler
This commit is contained in:
parent
2aabfa52d1
commit
ee6dd90ddd
19
src/game.rs
19
src/game.rs
@ -31,7 +31,7 @@ impl GameClient {
|
||||
if let Some((_, t)) = self.end {
|
||||
return (true, t);
|
||||
}
|
||||
for (t, m) in [(Team::Zero, 1), (Team::One, 2_u32.pow(9))] {
|
||||
for (t, m) in [(Team::Zero, 0), (Team::One, 9)] {
|
||||
for w in [
|
||||
0b111000000,
|
||||
0b000111000,
|
||||
@ -42,12 +42,14 @@ impl GameClient {
|
||||
0b100010001,
|
||||
0b001010100
|
||||
] {
|
||||
if board & (w*m) == (w*m) {
|
||||
if board & (w<<m) == (w<<m) {
|
||||
return (true, Some(t))
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: check for draw
|
||||
if ((board | (board>>9)) & 0b111111111) == 0b111111111 {
|
||||
return (true, None)
|
||||
}
|
||||
(false, None)
|
||||
}
|
||||
pub fn update_end_state(&mut self, board: &mut u32) {
|
||||
@ -98,9 +100,9 @@ impl GameClient {
|
||||
}
|
||||
unwrap(self.res_buf.extend_from_slice(b"<div id=\"grid\">")).await;
|
||||
for c in 0..=8 {
|
||||
let picked_by = if board & 2_u32.pow(c) != 0 {
|
||||
let picked_by = if board & (1<<c) != 0 {
|
||||
Some(Team::Zero)
|
||||
} else if board & 2_u32.pow(9 + c) != 0 {
|
||||
} else if board & (1<<(9 + c)) != 0 {
|
||||
Some(Team::One)
|
||||
} else {
|
||||
None
|
||||
@ -146,13 +148,14 @@ impl GameClient {
|
||||
Err(_) => return (HttpResCode::NotFound, "", &[]),
|
||||
};
|
||||
if board
|
||||
& ((2_u32.pow(clicked_c as u32))
|
||||
+ (2_u32.pow(9 + clicked_c as u32)))
|
||||
& (
|
||||
(1<<(clicked_c as u32)) + (1<<(9 + clicked_c as u32))
|
||||
)
|
||||
!= 0
|
||||
{
|
||||
return (HttpResCode::Forbidden, "", &[]);
|
||||
}
|
||||
board = board | 2_u32.pow((self.team as u32 * 9) + clicked_c as u32);
|
||||
board = board | (1<<((self.team as u32 * 9) + clicked_c as u32));
|
||||
turn = (!self.team).into();
|
||||
BOARD.store(board, Ordering::Release);
|
||||
TURN.store(turn, Ordering::Release);
|
||||
|
Loading…
Reference in New Issue
Block a user