You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
5.3 KiB
123 lines
5.3 KiB
#!/usr/bin/env python3 |
|
|
|
# MIT License |
|
# |
|
# Copyright (c) 2023 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com> |
|
# |
|
# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
# of this software and associated documentation files (the "Software"), to deal |
|
# in the Software without restriction, including without limitation the rights |
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
# copies of the Software, and to permit persons to whom the Software is |
|
# furnished to do so, subject to the following conditions: |
|
# |
|
# The above copyright notice and this permission notice shall be included in all |
|
# copies or substantial portions of the Software. |
|
# |
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
# SOFTWARE. |
|
|
|
import sys, os |
|
from random import randint |
|
|
|
sys.path.append(os.path.join(sys.path[0],'../../../libs/pyTermTk')) |
|
import TermTk as ttk |
|
|
|
from bolib import * |
|
|
|
class WinParams(ttk.TTkWindow): |
|
__slots__ = ('_breakout') |
|
def __init__(self, breakout:BreakOutDisplay, **kwargs): |
|
self._breakout = breakout |
|
super().__init__(**kwargs|{'layout':ttk.TTkGridLayout()}) |
|
layout = self.layout() |
|
self._rows = ttk.TTkSpinBox(value=8, minimum=5, maximum=15) |
|
self._cols = ttk.TTkSpinBox(value=14, minimum=5, maximum=20) |
|
self._offset = ttk.TTkSpinBox(value=5, minimum=3, maximum=10) |
|
self._barsize = ttk.TTkSpinBox(value=20, minimum=5, maximum=30) |
|
self._brickSize = ttk.TTkSpinBox(value=8, minimum=4, maximum=12) |
|
|
|
self._rows.valueChanged.connect(self.reParams) |
|
self._cols.valueChanged.connect(self.reParams) |
|
self._offset.valueChanged.connect(self.reParams) |
|
self._barsize.valueChanged.connect(self.reParams) |
|
self._brickSize.valueChanged.connect(self.reParams) |
|
|
|
layout.addWidget(ttk.TTkLabel(text="Rows"),_r:=0,0) |
|
layout.addWidget(self._rows,_r,1) |
|
layout.addWidget(ttk.TTkLabel(text="Cols"),_r:=_r+1,0) |
|
layout.addWidget(self._cols,_r,1) |
|
layout.addWidget(ttk.TTkLabel(text="Brick"),_r:=_r+1,0) |
|
layout.addWidget(self._brickSize,_r,1) |
|
layout.addWidget(ttk.TTkLabel(text="Offset"),_r:=_r+1,0) |
|
layout.addWidget(self._offset,_r,1) |
|
layout.addWidget(ttk.TTkLabel(text="Bar Size"),_r:=_r+1,0) |
|
layout.addWidget(self._barsize,_r,1) |
|
numLines = len(BreakOutParams.colors['lines']) |
|
|
|
self._colors = [] |
|
for i in range(numLines): |
|
layout.addWidget(ttk.TTkLabel(text=f"Line{i}"),_r:=_r+1,0) |
|
layout.addWidget(_color := ttk.TTkColorButtonPicker(color=BreakOutParams.colors['lines'][i]),_r,1) |
|
_color.colorSelected.connect(self.reParams) |
|
self._colors.append(_color) |
|
|
|
layout.addWidget(_btn_shuffle := ttk.TTkButton(text='Shuffle',border=True),_r:=_r+1,0,1,2) |
|
layout.addWidget(_btn_play := ttk.TTkButton(text='PLAY',border=True),_r:=_r+1,0,1,2) |
|
|
|
_btn_shuffle.clicked.connect(self.shuffle) |
|
_btn_play.clicked.connect(self._breakout.play) |
|
|
|
@ttk.pyTTkSlot() |
|
def shuffle(self): |
|
for _color in self._colors: |
|
h,s,l = randint(0,359),100,randint(60,80) |
|
r,g,b = ttk.TTkColor.hsl2rgb(((h+5)%360,s,l)) |
|
_color.setColor(ttk.TTkColor.fg("#000000")+ttk.TTkColor.bg(f"#{r:02X}{g:02X}{b:02X}")) |
|
self._rows.setValue( randint(5,15)) |
|
self._cols.setValue( randint(5,20)) |
|
self._barsize.setValue( randint(5,30)) |
|
self._brickSize.setValue(randint(3,10)) |
|
self._offset.setValue( randint(4,12)) |
|
self.reParams() |
|
|
|
@ttk.pyTTkSlot() |
|
def reParams(self): |
|
newParams = BreakOutParams() |
|
newParams.colors['lines'] = [ttk.TTkColor.fg("#000000")+_color.color() for _color in self._colors] |
|
newParams.wallRows = self._rows.value() |
|
newParams.wallCols = self._cols.value() |
|
newParams.barSize = self._barsize.value() |
|
newParams.brickSize = self._brickSize.value() |
|
newParams.blocksOffset = self._offset.value() |
|
# _wallCols: int = 14 |
|
# _wallRows: int = 8 |
|
# _brickSize: int = 8 |
|
# _blocksOffset: int = 5 |
|
# _barSize: int = 20 |
|
self._breakout.setParams(newParams) |
|
|
|
|
|
root = ttk.TTk(title="Breakout - The Roguelike", mouseTrack=True, layout=ttk.TTkGridLayout()) |
|
|
|
frame = ttk.TTkFrame(layout=ttk.TTkGridLayout(), title="BreakOuTTk - The Roguelike") |
|
breakout = BreakOutDisplay(parent=frame) |
|
|
|
root.layout().addWidget(frame,1,1) |
|
root.layout().addItem(ttk.TTkLayout(),0,0) |
|
root.layout().addItem(ttk.TTkLayout(),2,0) |
|
root.layout().addItem(ttk.TTkLayout(),0,2) |
|
root.layout().addItem(ttk.TTkLayout(),2,2) |
|
|
|
winParams = WinParams(breakout, |
|
title="Params", |
|
flags = ttk.TTkK.WindowFlag.WindowReduceButtonHint | ttk.TTkK.WindowFlag.WindowMinMaxButtonsHint) |
|
ttk.TTkHelper.overlay(None, winParams, 2, 2, toolWindow=True) |
|
winParams.resize(30,20) |
|
|
|
root.mainloop()
|
|
|