From 916c88d679b0bcee0609d78974f3924d4235deb1 Mon Sep 17 00:00:00 2001 From: Daniel Prosser Date: Fri, 23 Feb 2024 17:13:13 +0900 Subject: [PATCH] games/LucasChess: Updated for version R2.11d. Signed-off-by: Andrew Clemons Signed-off-by: Willy Sudiarto Raharjo --- games/LucasChess/Configuration.py | 189 ++++++++++++++++++------- games/LucasChess/LucasChess.SlackBuild | 8 +- games/LucasChess/LucasChess.info | 6 +- games/LucasChess/README | 17 +-- 4 files changed, 151 insertions(+), 69 deletions(-) diff --git a/games/LucasChess/Configuration.py b/games/LucasChess/Configuration.py index 1bae60afc4..a5f94d794c 100644 --- a/games/LucasChess/Configuration.py +++ b/games/LucasChess/Configuration.py @@ -1,5 +1,5 @@ import operator -import os.path +import os import pickle import OSEngines # in OS folder @@ -9,7 +9,8 @@ from PySide2.QtCore import Qt import Code from Code import Util from Code.Analysis import AnalysisEval -from Code.Base.Constantes import MENU_PLAY_BOTH, POS_TUTOR_HORIZONTAL, INACCURACY, ENG_FIXED +from Code.Base.Constantes import (MENU_PLAY_BOTH, POS_TUTOR_HORIZONTAL, INACCURACY, ENG_FIXED, DICT_GAME_TYPES, + GO_FORWARD) from Code.Board import ConfBoards from Code.Engines import Priorities from Code.QT import IconosBase @@ -91,12 +92,14 @@ class Configuration: self.carpetaUsers = os.path.join(self.carpetaBase, "users") + self.first_run = False + if user: Util.create_folder(self.carpetaUsers) self.carpeta = os.path.join(self.carpetaUsers, str(user.number)) Util.create_folder(self.carpeta) else: - Util.create_folder(self.carpetaBase) + self.first_run = Util.create_folder(self.carpetaBase) self.carpeta = self.carpetaBase self.carpeta_config = os.path.join(self.carpeta, "__Config__") @@ -142,6 +145,8 @@ class Configuration: self.x_lichess = 1600 self.x_digital_board = "" + self.x_wheel_board = GO_FORWARD + self.x_wheel_pgn = GO_FORWARD self.x_menu_play = MENU_PLAY_BOTH @@ -253,15 +258,17 @@ class Configuration: self.x_translation_mode = False - self.x_style = "windowsvista" if Code.is_windows else "fusion" + self.x_style = "windowsvista" if Code.is_windows else "Fusion" self.x_style_mode = "By default" self.x_style_icons = IconosBase.icons.NORMAL self.style_sheet_default = None # temporary var - self.x_mode_select_lc = Code.is_linux + self.x_mode_select_lc = True self._dic_books = None + self.__theme_num = 2 + @property def dic_books(self): if self._dic_books is None: @@ -409,6 +416,9 @@ class Configuration: def folder_leagues(self): return self.create_base_folder("Leagues") + def folder_swisses(self): + return self.create_base_folder("Swiss") + def folder_openings(self): dic = self.read_variables("OPENING_LINES") folder = dic.get("FOLDER", self.folder_base_openings) @@ -499,7 +509,7 @@ class Configuration: self.file = os.path.join(self.carpeta_config, "lk.pk2") - self.siPrimeraVez = not Util.exist_file(self.file) + self.is_first_time = not Util.exist_file(self.file) self.fichEstadElo = "%s/estad.pkli" % self.carpeta_results self.fichEstadMicElo = "%s/estadMic.pkli" % self.carpeta_results @@ -710,14 +720,17 @@ class Configuration: Translate.install(self.x_translator) @staticmethod - def list_translations(): + def list_translations(others=False): li = [] dlang = Code.path_resource("Locale") for uno in Util.listdir(dlang): fini = os.path.join(dlang, uno.name, "lang.ini") if os.path.isfile(fini): dic = Util.ini_dic(fini) - li.append((uno.name, dic["NAME"], int(dic["%"]), dic["AUTHOR"])) + if others: + li.append((uno.name, dic["NAME"], int(dic["%"]), dic["AUTHOR"], dic.get("OTHERS", ""))) + else: + li.append((uno.name, dic["NAME"], int(dic["%"]), dic["AUTHOR"])) li = sorted(li, key=lambda lng: "AAA" + lng[0] if lng[1] > "Z" else lng[1]) return li @@ -830,7 +843,7 @@ class Configuration: eng.reset_uci_options() dic = self.read_variables("TUTOR_ANALYZER") for key, value in dic.get("TUTOR", []): - eng.ordenUCI(key, value) + eng.set_uci_option(key, value) return eng self.x_tutor_clave = self.tutor_default return self.engine_tutor() @@ -841,13 +854,13 @@ class Configuration: if eng.can_be_tutor() and Util.exist_file(eng.path_exe): eng.reset_uci_options() dic = self.read_variables("TUTOR_ANALYZER") - for key, value in dic.get("TUTOR", []): - eng.ordenUCI(key, value) + for key, value in dic.get("ANALYZER", []): + eng.set_uci_option(key, value) return eng self.x_analyzer_clave = self.analyzer_default return self.engine_analyzer() - def carpetaTemporal(self): + def temporary_folder(self): dirTmp = os.path.join(self.carpeta, "tmp") Util.create_folder(dirTmp) return dirTmp @@ -870,7 +883,7 @@ class Configuration: if not root: os.rmdir(folder) - remove_folder(self.carpetaTemporal(), True) + remove_folder(self.temporary_folder(), True) except: pass @@ -879,48 +892,99 @@ class Configuration: resp = db[nomVar] return resp if resp else {} - # "DicMicElos": Tourney-Elo") - # "ENG_MANAGERSOLO": Create your own game") - # "FICH_MANAGERSOLO": Create your own game") - # "ENG_VARIANTES": Variations") Edition") - # "TRANSSIBERIAN": Transsiberian Railway") - # "STSFORMULA": Formula to calculate elo") - STS: Strategic Test Suite") - # "WindowColores": Colors") - # "PCOLORES": Colors") - # "manual_save": Save positions to FNS/PGN") - # "FOLDER_ENGINES": External engines") - # "MICELO": - # "MICPER": - # "SAVEPGN": - # "STSRUN": - # "crear_torneo": - # "PARAMPELICULA": - # "BLINDFOLD": - # "WBG_MOVES": - # "DBSUMMARY": - # "DATABASE" - # "PATH_PO" + # ENG_VARIANTES + # ANALISIS_GRAPH + # WindowColores + # PCOLORES + # POLYGLOT_IMPORT + # POLYGLOT_EXPORT + # BOOKSTRAININGLO + # DicMicElos + # DicWickerElos + # OPENING_LINES + # DATABASE + # TUTOR_ANALYZER + # AUTO_ROTATE + # COORDINATES + # DBSUMMARY + # databases_columns_default + # SVG_GRAPHICS + # endingsGTB + # STSFORMULA + # FOLDER_ENGINES + # SELECTENGINE_{tipo} + # EXPEDITIONS + # LEARN_GAME_PLAY_AGAINST + # MEMORIZING_GAME + # WIDTH_PIEZES + # challenge101 + # ENG_MANAGERSOLO + # FICH_MANAGERSOLO + # MATE15 + # ODT + # OL_ENGINE_VAR + # MASSIVE_OLINES + # OPENINGLINES + # OL_ENGINE_VAR + # MASSIVE_OLINES + # OPENINGLINES + # REMOVEWORSTLINES + # OL_IMPORTPOLYGLOT + # human_human + # MICELO_TIME + # WICKER_TIME + # BLINDFOLD + # BLANCASNEGRASTIEMPO + # GIF + # PARAMPELICULA + # manual_save + # SAVEPGN + # TRANSSIBERIAN{nlevel} + # TRANSSIBERIAN + # THEMES + # crear_torneo + # BMT_OPTIONS + # PATH_PO + # PATH_MO + # TRANSLATION_HELP + # PATH_PO_OPENINGS + # PATH_PO_OPENINGS_IMPORT def write_variables(self, nomVar, dicValores): with UtilSQL.DictSQL(self.ficheroVariables) as db: db[nomVar] = dicValores + def change_theme_num(self, num): + self.__theme_num = num + def leeConfBoards(self): - db = UtilSQL.DictSQL(self.ficheroConfBoards) - self.dic_conf_boards_pk = db.as_dictionary() - if not ("BASE" in self.dic_conf_boards_pk): - with open(Code.path_resource("IntFiles", "basepk.board"), "rb") as f: - var = pickle.loads(f.read()) - alto = QTUtil.altoEscritorio() - ancho = QTUtil.anchoEscritorio() - base = ancho * 950 / 1495 - if alto > base: - alto = base - var["x_anchoPieza"] = int(alto * 8 / 100) - db["BASE"] = self.dic_conf_boards_pk["BASE"] = var - # with open("../resources/IntFiles/basepk.board", "wb") as f: - # f.write(pickle.dumps(db["BASE"])) - db.close() + with UtilSQL.DictSQL(self.ficheroConfBoards) as db: + self.dic_conf_boards_pk = db.as_dictionary() + if not ("BASE" in self.dic_conf_boards_pk): + with open(Code.path_resource("IntFiles", f"basepk{self.__theme_num}.board"), "rb") as f: + var = pickle.loads(f.read()) + alto = QTUtil.desktop_height() + ancho = QTUtil.desktop_width() + if Code.procesador: + ancho_extra = Code.procesador.main_window.get_noboard_width() + 40 + else: + ancho_extra = 660 + max_ancho_pieza = (ancho - ancho_extra) // 8 + max_alto_pieza = ((alto - 200) * 86 / 100) // 8 + alt_ancho_pieza = min(max_ancho_pieza, max_alto_pieza) + if alt_ancho_pieza > 10: + ancho_pieza = alt_ancho_pieza + else: + base = ancho * 950 / 1495 + if alto > base: + alto = base + ancho_pieza = int(alto * 8 / 100) + + var["x_anchoPieza"] = ancho_pieza + db["BASE"] = self.dic_conf_boards_pk["BASE"] = var + # Para cambiar el tema por defecto por el actual + # with open("../resources/IntFiles/basepk2.board", "wb") as f: + # f.write(pickle.dumps(db["BASE"])) def size_base(self): return self.dic_conf_boards_pk["BASE"]["x_anchoPieza"] @@ -940,12 +1004,12 @@ class Configuration: db.close() self.leeConfBoards() - def config_board(self, xid, tamDef, padre="BASE"): + def config_board(self, xid, tam_def, padre="BASE"): if xid == "BASE": - ct = ConfBoards.ConfigBoard(xid, tamDef) + ct = ConfBoards.ConfigBoard(xid, tam_def) else: - ct = ConfBoards.ConfigBoard(xid, tamDef, padre=padre) - ct.anchoPieza(tamDef) + ct = ConfBoards.ConfigBoard(xid, tam_def, padre=padre) + ct.anchoPieza(tam_def) if xid in self.dic_conf_boards_pk: ct.lee(self.dic_conf_boards_pk[xid]) @@ -954,7 +1018,7 @@ class Configuration: self.dic_conf_boards_pk[xid] = db[xid] = ct.graba() db.close() - ct._anchoPiezaDef = tamDef + ct._anchoPiezaDef = tam_def return ct @@ -984,3 +1048,20 @@ class Configuration: if self.x_style_mode == "By default": owner.setStyleSheet(self.style_sheet_default) owner.setProperty("type", valor) + + def get_auto_rotate(self, game_type): + key = DICT_GAME_TYPES[game_type] + dic = self.read_variables("AUTO_ROTATE") + return dic.get(key, False) + + def set_auto_rotate(self, game_type, auto_rotate): + key = DICT_GAME_TYPES[game_type] + dic = self.read_variables("AUTO_ROTATE") + dic[key] = auto_rotate + self.write_variables("AUTO_ROTATE", dic) + + def wheel_board(self, forward): + return forward if self.x_wheel_board == GO_FORWARD else not forward + + def wheel_pgn(self, forward): + return forward if self.x_wheel_pgn != GO_FORWARD else not forward diff --git a/games/LucasChess/LucasChess.SlackBuild b/games/LucasChess/LucasChess.SlackBuild index e2c9c5fc30..3d07a8e63f 100644 --- a/games/LucasChess/LucasChess.SlackBuild +++ b/games/LucasChess/LucasChess.SlackBuild @@ -2,7 +2,7 @@ # Slackware build script for LucasChess -# Copyright 2023 Daniel Prosser, Lexington Park, MD, USA +# Copyright 2024 Daniel Prosser, Lexington Park, MD, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -25,12 +25,12 @@ cd $(dirname $0) ; CWD=$(pwd) PRGNAM=LucasChess -VERSION=${VERSION:-R2.10a} +VERSION=${VERSION:-R2.11d} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} -SRCNAM=${SRCNAM:-LucasChessR2_10a_LINUX.sh} -ARCHIVELINE=680 +SRCNAM=${SRCNAM:-LucasChessR2_11d_LINUX.sh} +ARCHIVELINE=716 if [ -z "$ARCH" ]; then case "$( uname -m )" in diff --git a/games/LucasChess/LucasChess.info b/games/LucasChess/LucasChess.info index 9a795d8f35..1f43f53d3f 100644 --- a/games/LucasChess/LucasChess.info +++ b/games/LucasChess/LucasChess.info @@ -1,10 +1,10 @@ PRGNAM="LucasChess" -VERSION="R2.10a" +VERSION="R2.11d" HOMEPAGE="https://lucaschess.pythonanywhere.com/" DOWNLOAD="UNSUPPORTED" MD5SUM="" -DOWNLOAD_x86_64="https://newcontinuum.dl.sourceforge.net/project/lucaschessr/Version_R2/LucasChessR2_10a_LINUX.sh" -MD5SUM_x86_64="4de487707ff6625017ea385ae0b8013f" +DOWNLOAD_x86_64="https://netactuate.dl.sourceforge.net/project/lucaschessr/Version_R2/LucasChessR2_11d_LINUX.sh" +MD5SUM_x86_64="df2af08c41760c0131cefbaec78bcc46" REQUIRES="" MAINTAINER="Daniel Prosser" EMAIL="dpross1100@msn.com" diff --git a/games/LucasChess/README b/games/LucasChess/README index 46c4cce530..b16e94a6f1 100644 --- a/games/LucasChess/README +++ b/games/LucasChess/README @@ -1,9 +1,10 @@ -Lucas Chess is a flexible and powerful chess software created by Lucas Monge. It -includes 61 pre-installed engines with a wide range of ELO levels, including the -neural network engines of the Maia project that emulate human play based on a -certain ELO. It also includes a wide range of training modules to improve your -chess skills. It can perform game analysis, generate custom trainings based on -your mistakes, read PGN files, and study openings. +Lucas Chess is a flexible and powerful chess software created by Lucas +Monge. It includes 61 pre-installed engines with a wide range of ELO +levels, including the neural network engines of the Maia project that +emulate human play based on a certain ELO. It also includes a wide range +of training modules to improve your chess skills. It can perform game +analysis, generate custom trainings based on your mistakes, read PGN +files, and study openings. -This SlackBuild repackages the binary distribution provided by upstream. It -requires about 700 MB of space when installed. +This SlackBuild repackages the binary distribution provided by upstream. +It requires about 700 MB of space when installed.