Add color and size change for pen

This commit is contained in:
Hugo 2022-08-13 21:46:39 +02:00
parent d8600bba95
commit c46f8a809e
1 changed files with 51 additions and 7 deletions

View File

@ -39,7 +39,9 @@ class ScrollableLabel(ScrollView):
class MyPaintWidget(Label): class MyPaintWidget(Label):
_game_state = {"game_started": False, _game_state = {"game_started": False,
"game_paused": False, "game_paused": False,
"game_finished": False "game_finished": False,
"word passed": timedelta(0),
"word found": timedelta(0)
} }
_game_wordlists = {"possible_wordlist": set(), _game_wordlists = {"possible_wordlist": set(),
"found_words": set(), "found_words": set(),
@ -49,7 +51,7 @@ class MyPaintWidget(Label):
"current_width": 4 "current_width": 4
} }
current_word = "" current_word = ""
message_label = None
time = timedelta(seconds=DRAWING_TIME) time = timedelta(seconds=DRAWING_TIME)
_popup = None _popup = None
@ -118,6 +120,33 @@ class MyPaintWidget(Label):
def next_word(self, passed=False): def next_word(self, passed=False):
if not passed: if not passed:
self._game_wordlists["found_words"].add(self.current_word) self._game_wordlists["found_words"].add(self.current_word)
if self.message_label and self.current_word:
if passed:
self.message_label.color = '#FF2A40'
self.message_label.text = f'"{self.current_word}" a été passé !'
else:
self.message_label.color = '#5BB834'
self.message_label.text = f'"{self.current_word}" a été trouvé !'
self.current_word = choice(list(self._game_wordlists["possible_wordlist"]))
self._game_wordlists["possible_wordlist"].discard(self.current_word)
self.clear_drawing()
def pass_word(self):
self._game_wordlists["unfound_words"].add(self.current_word)
self.next_word(True)
if self.time - timedelta(seconds=PASS_PENALTY) > timedelta(0):
self.time -= timedelta(seconds=PASS_PENALTY)
else:
self.time = timedelta(0)
@property
def is_game_playing(self):
return (self._game_state["game_started"]
and not self._game_state["game_paused"]
and not self._game_state["game_finished"])
self.current_word = choice(list(self._game_wordlists["possible_wordlist"])) self.current_word = choice(list(self._game_wordlists["possible_wordlist"]))
self._game_wordlists["possible_wordlist"].discard(self.current_word) self._game_wordlists["possible_wordlist"].discard(self.current_word)
self.clear_drawing() self.clear_drawing()
@ -194,10 +223,11 @@ class MyPaintWidget(Label):
def clear_drawing(self): def clear_drawing(self):
self.canvas.before.clear() self.canvas.before.clear()
class SizeButton(Widget, ButtonBehavior): class SizeButton(ButtonBehavior, Widget):
def __init__(self, size=1, **kwargs): def __init__(self, callback, size=1, **kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
self.dot_size = size self.dot_size = size
self.callback = callback
with self.canvas: with self.canvas:
Color(0,0,0, mode="rgb") Color(0,0,0, mode="rgb")
self.bg = Rectangle(pos=self.pos, size=self.size) self.bg = Rectangle(pos=self.pos, size=self.size)
@ -210,6 +240,8 @@ class SizeButton(Widget, ButtonBehavior):
self.bg.size = self.size self.bg.size = self.size
self.bind(size=redraw, pos=redraw) self.bind(size=redraw, pos=redraw)
def on_release(self):
self.callback(self.dot_size)
class MyPaintApp(App): class MyPaintApp(App):
state = False state = False
@ -234,7 +266,7 @@ class MyPaintApp(App):
color_picker_button.bind(on_release=self.open_color_picker) color_picker_button.bind(on_release=self.open_color_picker)
self.right_row.add_widget(color_picker_button) self.right_row.add_widget(color_picker_button)
for i in range(1,6): for i in range(1,6):
size_button = SizeButton(2*i) size_button = SizeButton(self.set_cursor_size, 2*i)
self.right_row.add_widget(size_button) self.right_row.add_widget(size_button)
middle_row = BoxLayout(orientation="horizontal", size_hint=(1, 0.8)) middle_row = BoxLayout(orientation="horizontal", size_hint=(1, 0.8))
@ -246,16 +278,27 @@ class MyPaintApp(App):
bottom_row.add_widget(clearbtn) bottom_row.add_widget(clearbtn)
top_row = BoxLayout(orientation='horizontal', spacing=5, size_hint=(1, .1)) top_row = BoxLayout(orientation='horizontal', spacing=5, size_hint=(1, .1))
self.word_label = Label(text="Mot:", color=[0,0,0,1], halign="left") self.word_label = Label(text="Mot:", color=[0,0,0,1], halign="left", valign="top")
def redraw(self, obj):
self.text_size = obj
self.word_label.bind(size=redraw)
self.time_label = Label(text=f"{self.painter.time}", color=[0,0,0,1]) self.time_label = Label(text=f"{self.painter.time}", color=[0,0,0,1])
message_label = Label(color=[0,0,0,1])
top_row.add_widget(self.word_label) top_row.add_widget(self.word_label)
top_row.add_widget(message_label)
top_row.add_widget(self.time_label) top_row.add_widget(self.time_label)
self.painter.message_label = message_label
parent.add_widget(top_row) parent.add_widget(top_row)
parent.add_widget(middle_row) parent.add_widget(middle_row)
parent.add_widget(bottom_row) parent.add_widget(bottom_row)
return parent return parent
def set_cursor_size(self, size):
print(size)
self.painter.pen_characteristics["current_width"] = size
def open_color_picker(self, _): def open_color_picker(self, _):
clr_picker = ColorPicker() clr_picker = ColorPicker()
clr_picker.color = self.painter.pen_characteristics["current_color"] clr_picker.color = self.painter.pen_characteristics["current_color"]
@ -269,7 +312,6 @@ class MyPaintApp(App):
popup.open() popup.open()
def update_time(self, _): def update_time(self, _):
self.word_label.text_size = (self.word_label.size[0], None)
if self.painter.is_game_playing: if self.painter.is_game_playing:
if self.painter.time > timedelta(0): if self.painter.time > timedelta(0):
self.painter.time -= timedelta(milliseconds=100) self.painter.time -= timedelta(milliseconds=100)
@ -284,12 +326,14 @@ class MyPaintApp(App):
if self.state: if self.state:
Window.clearcolor = (1, 1, 1, 1) Window.clearcolor = (1, 1, 1, 1)
self.painter.pen_characteristics["current_color"] = (0,0,0,1) self.painter.pen_characteristics["current_color"] = (0,0,0,1)
self.right_row.children[-1].background_color = self.painter.current_color
self.word_label.color = (0,0,0,1) self.word_label.color = (0,0,0,1)
self.time_label.color = (0,0,0,1) self.time_label.color = (0,0,0,1)
self.state = False self.state = False
else: else:
Window.clearcolor = (0,0,0,1) Window.clearcolor = (0,0,0,1)
self.painter.pen_characteristics["current_color"] = (1,1,1,1) self.painter.pen_characteristics["current_color"] = (1,1,1,1)
self.right_row.children[-1].background_color = self.painter.current_color
self.word_label.color = (1,1,1,1) self.word_label.color = (1,1,1,1)
self.time_label.color = (1,1,1,1) self.time_label.color = (1,1,1,1)
self.state = True self.state = True