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 {
|
if let Some((_, t)) = self.end {
|
||||||
return (true, t);
|
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 [
|
for w in [
|
||||||
0b111000000,
|
0b111000000,
|
||||||
0b000111000,
|
0b000111000,
|
||||||
@ -42,12 +42,14 @@ impl GameClient {
|
|||||||
0b100010001,
|
0b100010001,
|
||||||
0b001010100
|
0b001010100
|
||||||
] {
|
] {
|
||||||
if board & (w*m) == (w*m) {
|
if board & (w<<m) == (w<<m) {
|
||||||
return (true, Some(t))
|
return (true, Some(t))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: check for draw
|
if ((board | (board>>9)) & 0b111111111) == 0b111111111 {
|
||||||
|
return (true, None)
|
||||||
|
}
|
||||||
(false, None)
|
(false, None)
|
||||||
}
|
}
|
||||||
pub fn update_end_state(&mut self, board: &mut u32) {
|
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;
|
unwrap(self.res_buf.extend_from_slice(b"<div id=\"grid\">")).await;
|
||||||
for c in 0..=8 {
|
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)
|
Some(Team::Zero)
|
||||||
} else if board & 2_u32.pow(9 + c) != 0 {
|
} else if board & (1<<(9 + c)) != 0 {
|
||||||
Some(Team::One)
|
Some(Team::One)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
@ -146,13 +148,14 @@ impl GameClient {
|
|||||||
Err(_) => return (HttpResCode::NotFound, "", &[]),
|
Err(_) => return (HttpResCode::NotFound, "", &[]),
|
||||||
};
|
};
|
||||||
if board
|
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
|
!= 0
|
||||||
{
|
{
|
||||||
return (HttpResCode::Forbidden, "", &[]);
|
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();
|
turn = (!self.team).into();
|
||||||
BOARD.store(board, Ordering::Release);
|
BOARD.store(board, Ordering::Release);
|
||||||
TURN.store(turn, Ordering::Release);
|
TURN.store(turn, Ordering::Release);
|
||||||
|
Loading…
Reference in New Issue
Block a user