update litris with board detection

This commit is contained in:
2023-07-30 00:08:39 +02:00
parent 7a539e301b
commit f32cbb8f2d

View File

@@ -1,3 +1,5 @@
from copy import copy
import cv2 as cv import cv2 as cv
import numpy as np import numpy as np
from time import time from time import time
@@ -26,6 +28,13 @@ class Litris(GameBase):
self.move_mode = 1 self.move_mode = 1
self.field_state_storage = {
1: self.field,
2: self.field,
3: self.field,
4: self.field
}
def assess_playfield_and_make_move(self): def assess_playfield_and_make_move(self):
last_letter_received = time() last_letter_received = time()
while True: while True:
@@ -33,6 +42,7 @@ class Litris(GameBase):
if (time() - last_letter_received) >= 5: if (time() - last_letter_received) >= 5:
self.field.reset_field() self.field.reset_field()
self.field.cleared_rows = 1 self.field.cleared_rows = 1
self.move_mode = 1
last_letter_received = time() last_letter_received = time()
self.dig_point(1500, 980, 100) self.dig_point(1500, 980, 100)
if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused': if self.overlay.run_mode == 'stopped' or self.overlay.run_mode == 'paused':
@@ -72,12 +82,13 @@ class Litris(GameBase):
print(self.field) print(self.field)
if self.field.get_line_count() >= 6 and self.field.height() <= 2 and self.field.check_crucial_pos_to_be_free(): if self.field.get_line_count() >= 6 and self.field.height() <= 2 and self.field.check_crucial_pos_to_be_free():
if self.field.predict_gaps_in_next_rotation() <= 3: if self.field.predict_gaps_in_next_rotation() <= 3:
self.field_state_storage[self.move_mode] = self.field
self.update_move_mode() self.update_move_mode()
#self.field.state = self.stone_id_thread.get_current_board_state() #self.field.state = self.stone_id_thread.get_current_board_state()
self.field.rotate_state() self.field.rotate_state()
#self.update_move_mode() #self.update_move_mode()
self.field.reset_half_field() self.field.reset_half_field()
self.update_field_with_stored_edges()
#field_mem = copy(self.field) #field_mem = copy(self.field)
#self.field = copy(self.field_mem) #self.field = copy(self.field_mem)
#self.field_mem = copy(field_mem) #self.field_mem = copy(field_mem)
@@ -87,8 +98,13 @@ class Litris(GameBase):
cv.waitKey(200) cv.waitKey(200)
self.stone_id_thread.set_pick_up_status(False) self.stone_id_thread.set_pick_up_status(False)
def update_field_with_stored_edges(self):
if self.move_mode == 4:
state_copy = copy(self.field_state_storage[1])
state_copy = state_copy.rotate_90_degree_clckwise()
for i in range(11,20,1):
for e in range(0,2,1):
self.field.state[i][e] = state_copy[i][e]
def drop_down(self): def drop_down(self):
if self.move_mode == 1: if self.move_mode == 1: