mirror of
https://github.com/shlomif/PySolFC.git
synced 2025-04-05 00:02:29 -04:00
flake8 checked g*.py.
This commit is contained in:
parent
4747fe1dbf
commit
1ec8cc8b27
3 changed files with 693 additions and 583 deletions
866
pysollib/game.py
866
pysollib/game.py
File diff suppressed because it is too large
Load diff
|
@ -1,28 +1,29 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- mode: python; coding: utf-8; -*-
|
# -*- mode: python; coding: utf-8; -*-
|
||||||
##---------------------------------------------------------------------------##
|
# ---------------------------------------------------------------------------##
|
||||||
##
|
#
|
||||||
## Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
|
# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
|
||||||
## Copyright (C) 2003 Mt. Hood Playing Card Co.
|
# Copyright (C) 2003 Mt. Hood Playing Card Co.
|
||||||
## Copyright (C) 2005-2009 Skomoroh
|
# Copyright (C) 2005-2009 Skomoroh
|
||||||
##
|
#
|
||||||
## This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
## it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
## the Free Software Foundation, either version 3 of the License, or
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
## (at your option) any later version.
|
# (at your option) any later version.
|
||||||
##
|
#
|
||||||
## This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
## GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
##
|
#
|
||||||
## You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
##
|
#
|
||||||
##---------------------------------------------------------------------------##
|
# ---------------------------------------------------------------------------##
|
||||||
|
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
|
import sys
|
||||||
import imp
|
import imp
|
||||||
|
|
||||||
# PySol imports
|
# PySol imports
|
||||||
|
@ -32,78 +33,83 @@ import pysollib.settings
|
||||||
|
|
||||||
from pysollib.mygettext import _, n_
|
from pysollib.mygettext import _, n_
|
||||||
|
|
||||||
|
if sys.version_info > (3,):
|
||||||
|
basestring = str
|
||||||
|
unicode = str
|
||||||
|
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
# * constants
|
# * constants
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
|
|
||||||
|
|
||||||
# GameInfo constants
|
# GameInfo constants
|
||||||
class GI:
|
class GI:
|
||||||
# game category - these *must* match the cardset CSI.TYPE_xxx
|
# game category - these *must* match the cardset CSI.TYPE_xxx
|
||||||
GC_FRENCH = CSI.TYPE_FRENCH
|
GC_FRENCH = CSI.TYPE_FRENCH
|
||||||
GC_HANAFUDA = CSI.TYPE_HANAFUDA
|
GC_HANAFUDA = CSI.TYPE_HANAFUDA
|
||||||
GC_TAROCK = CSI.TYPE_TAROCK
|
GC_TAROCK = CSI.TYPE_TAROCK
|
||||||
GC_MAHJONGG = CSI.TYPE_MAHJONGG
|
GC_MAHJONGG = CSI.TYPE_MAHJONGG
|
||||||
GC_HEXADECK = CSI.TYPE_HEXADECK
|
GC_HEXADECK = CSI.TYPE_HEXADECK
|
||||||
GC_MUGHAL_GANJIFA = CSI.TYPE_MUGHAL_GANJIFA
|
GC_MUGHAL_GANJIFA = CSI.TYPE_MUGHAL_GANJIFA
|
||||||
GC_NAVAGRAHA_GANJIFA = CSI.TYPE_NAVAGRAHA_GANJIFA
|
GC_NAVAGRAHA_GANJIFA = CSI.TYPE_NAVAGRAHA_GANJIFA
|
||||||
GC_DASHAVATARA_GANJIFA = CSI.TYPE_DASHAVATARA_GANJIFA
|
GC_DASHAVATARA_GANJIFA = CSI.TYPE_DASHAVATARA_GANJIFA
|
||||||
GC_TRUMP_ONLY = CSI.TYPE_TRUMP_ONLY
|
GC_TRUMP_ONLY = CSI.TYPE_TRUMP_ONLY
|
||||||
|
|
||||||
# game type
|
# game type
|
||||||
GT_1DECK_TYPE = 0
|
GT_1DECK_TYPE = 0
|
||||||
GT_2DECK_TYPE = 1
|
GT_2DECK_TYPE = 1
|
||||||
GT_3DECK_TYPE = 2
|
GT_3DECK_TYPE = 2
|
||||||
GT_4DECK_TYPE = 3
|
GT_4DECK_TYPE = 3
|
||||||
GT_BAKERS_DOZEN = 4
|
GT_BAKERS_DOZEN = 4
|
||||||
GT_BELEAGUERED_CASTLE = 5
|
GT_BELEAGUERED_CASTLE = 5
|
||||||
GT_CANFIELD = 6
|
GT_CANFIELD = 6
|
||||||
GT_DASHAVATARA_GANJIFA = 7
|
GT_DASHAVATARA_GANJIFA = 7
|
||||||
GT_FAN_TYPE = 8
|
GT_FAN_TYPE = 8
|
||||||
GT_FORTY_THIEVES = 9
|
GT_FORTY_THIEVES = 9
|
||||||
GT_FREECELL = 10
|
GT_FREECELL = 10
|
||||||
GT_GOLF = 11
|
GT_GOLF = 11
|
||||||
GT_GYPSY = 12
|
GT_GYPSY = 12
|
||||||
GT_HANAFUDA = 13
|
GT_HANAFUDA = 13
|
||||||
GT_HEXADECK = 14
|
GT_HEXADECK = 14
|
||||||
GT_KLONDIKE = 15
|
GT_KLONDIKE = 15
|
||||||
GT_MAHJONGG = 16
|
GT_MAHJONGG = 16
|
||||||
GT_MATRIX = 17
|
GT_MATRIX = 17
|
||||||
GT_MEMORY = 18
|
GT_MEMORY = 18
|
||||||
GT_MONTANA = 19
|
GT_MONTANA = 19
|
||||||
GT_MUGHAL_GANJIFA = 20
|
GT_MUGHAL_GANJIFA = 20
|
||||||
GT_NAPOLEON = 21
|
GT_NAPOLEON = 21
|
||||||
GT_NAVAGRAHA_GANJIFA = 22
|
GT_NAVAGRAHA_GANJIFA = 22
|
||||||
GT_NUMERICA = 23
|
GT_NUMERICA = 23
|
||||||
GT_PAIRING_TYPE = 24
|
GT_PAIRING_TYPE = 24
|
||||||
GT_POKER_TYPE = 25
|
GT_POKER_TYPE = 25
|
||||||
GT_PUZZLE_TYPE = 26
|
GT_PUZZLE_TYPE = 26
|
||||||
GT_RAGLAN = 27
|
GT_RAGLAN = 27
|
||||||
GT_ROW_TYPE = 28
|
GT_ROW_TYPE = 28
|
||||||
GT_SIMPLE_TYPE = 29
|
GT_SIMPLE_TYPE = 29
|
||||||
GT_SPIDER = 30
|
GT_SPIDER = 30
|
||||||
GT_TAROCK = 31
|
GT_TAROCK = 31
|
||||||
GT_TERRACE = 32
|
GT_TERRACE = 32
|
||||||
GT_YUKON = 33
|
GT_YUKON = 33
|
||||||
GT_SHISEN_SHO = 34
|
GT_SHISEN_SHO = 34
|
||||||
GT_CUSTOM = 40
|
GT_CUSTOM = 40
|
||||||
# extra flags
|
# extra flags
|
||||||
GT_BETA = 1 << 12 # beta version of game driver
|
GT_BETA = 1 << 12 # beta version of game driver
|
||||||
GT_CHILDREN = 1 << 13 # *not used*
|
GT_CHILDREN = 1 << 13 # *not used*
|
||||||
GT_CONTRIB = 1 << 14 # contributed games under the GNU GPL
|
GT_CONTRIB = 1 << 14 # contributed games under the GNU GPL
|
||||||
GT_HIDDEN = 1 << 15 # not visible in menus, but games can be loaded
|
GT_HIDDEN = 1 << 15 # not visible in menus, but games can be loaded
|
||||||
GT_OPEN = 1 << 16
|
GT_OPEN = 1 << 16
|
||||||
GT_ORIGINAL = 1 << 17
|
GT_ORIGINAL = 1 << 17
|
||||||
GT_POPULAR = 1 << 18 # *not used*
|
GT_POPULAR = 1 << 18 # *not used*
|
||||||
GT_RELAXED = 1 << 19
|
GT_RELAXED = 1 << 19
|
||||||
GT_SCORE = 1 << 20 # game has some type of scoring
|
GT_SCORE = 1 << 20 # game has some type of scoring
|
||||||
GT_SEPARATE_DECKS = 1 << 21
|
GT_SEPARATE_DECKS = 1 << 21
|
||||||
GT_XORIGINAL = 1 << 22 # original games by other people, not playable
|
GT_XORIGINAL = 1 << 22 # original games by other people, not playable
|
||||||
# skill level
|
# skill level
|
||||||
SL_LUCK = 1
|
SL_LUCK = 1
|
||||||
SL_MOSTLY_LUCK = 2
|
SL_MOSTLY_LUCK = 2
|
||||||
SL_BALANCED = 3
|
SL_BALANCED = 3
|
||||||
SL_MOSTLY_SKILL = 4
|
SL_MOSTLY_SKILL = 4
|
||||||
SL_SKILL = 5
|
SL_SKILL = 5
|
||||||
#
|
#
|
||||||
TYPE_NAMES = {
|
TYPE_NAMES = {
|
||||||
GT_BAKERS_DOZEN: n_("Baker's Dozen"),
|
GT_BAKERS_DOZEN: n_("Baker's Dozen"),
|
||||||
|
@ -130,75 +136,115 @@ class GI:
|
||||||
GT_4DECK_TYPE: n_("Four-Deck games"),
|
GT_4DECK_TYPE: n_("Four-Deck games"),
|
||||||
}
|
}
|
||||||
|
|
||||||
## SELECT_GAME_BY_TYPE = []
|
# SELECT_GAME_BY_TYPE = []
|
||||||
## for gt, name in TYPE_NAMES.items():
|
# for gt, name in TYPE_NAMES.items():
|
||||||
## if not name.endswith('games'):
|
# if not name.endswith('games'):
|
||||||
## name = name+n_(' type')
|
# name = name+n_(' type')
|
||||||
## SELECT_GAME_BY_TYPE.append(
|
# SELECT_GAME_BY_TYPE.append(
|
||||||
## (name, lambda gi, gt=gt: gi.si.game_type == gt))
|
# (name, lambda gi, gt=gt: gi.si.game_type == gt))
|
||||||
## SELECT_GAME_BY_TYPE = tuple(SELECT_GAME_BY_TYPE)
|
# SELECT_GAME_BY_TYPE = tuple(SELECT_GAME_BY_TYPE)
|
||||||
|
|
||||||
SELECT_GAME_BY_TYPE = (
|
SELECT_GAME_BY_TYPE = (
|
||||||
(n_("Baker's Dozen type"),lambda gi, gt=GT_BAKERS_DOZEN: gi.si.game_type == gt),
|
(n_("Baker's Dozen type"), lambda gi,
|
||||||
(n_("Beleaguered Castle type"),lambda gi, gt=GT_BELEAGUERED_CASTLE: gi.si.game_type == gt),
|
gt=GT_BAKERS_DOZEN: gi.si.game_type == gt),
|
||||||
(n_("Canfield type"), lambda gi, gt=GT_CANFIELD: gi.si.game_type == gt),
|
(n_("Beleaguered Castle type"),
|
||||||
(n_("Fan type"), lambda gi, gt=GT_FAN_TYPE: gi.si.game_type == gt),
|
lambda gi, gt=GT_BELEAGUERED_CASTLE: gi.si.game_type == gt),
|
||||||
(n_("Forty Thieves type"),lambda gi, gt=GT_FORTY_THIEVES: gi.si.game_type == gt),
|
(n_("Canfield type"),
|
||||||
(n_("FreeCell type"), lambda gi, gt=GT_FREECELL: gi.si.game_type == gt),
|
lambda gi, gt=GT_CANFIELD: gi.si.game_type == gt),
|
||||||
(n_("Golf type"), lambda gi, gt=GT_GOLF: gi.si.game_type == gt),
|
(n_("Fan type"), lambda gi, gt=GT_FAN_TYPE: gi.si.game_type == gt),
|
||||||
(n_("Gypsy type"), lambda gi, gt=GT_GYPSY: gi.si.game_type == gt),
|
(n_("Forty Thieves type"),
|
||||||
(n_("Klondike type"), lambda gi, gt=GT_KLONDIKE: gi.si.game_type == gt),
|
lambda gi, gt=GT_FORTY_THIEVES: gi.si.game_type == gt),
|
||||||
(n_("Montana type"), lambda gi, gt=GT_MONTANA: gi.si.game_type == gt),
|
(n_("FreeCell type"),
|
||||||
(n_("Napoleon type"), lambda gi, gt=GT_NAPOLEON: gi.si.game_type == gt),
|
lambda gi, gt=GT_FREECELL: gi.si.game_type == gt),
|
||||||
(n_("Numerica type"), lambda gi, gt=GT_NUMERICA: gi.si.game_type == gt),
|
(n_("Golf type"), lambda gi, gt=GT_GOLF: gi.si.game_type == gt),
|
||||||
(n_("Pairing type"), lambda gi, gt=GT_PAIRING_TYPE: gi.si.game_type == gt),
|
(n_("Gypsy type"), lambda gi, gt=GT_GYPSY: gi.si.game_type == gt),
|
||||||
(n_("Raglan type"), lambda gi, gt=GT_RAGLAN: gi.si.game_type == gt),
|
(n_("Klondike type"),
|
||||||
(n_("Simple games"), lambda gi, gt=GT_SIMPLE_TYPE: gi.si.game_type == gt),
|
lambda gi, gt=GT_KLONDIKE: gi.si.game_type == gt),
|
||||||
(n_("Spider type"), lambda gi, gt=GT_SPIDER: gi.si.game_type == gt),
|
(n_("Montana type"), lambda gi, gt=GT_MONTANA: gi.si.game_type == gt),
|
||||||
(n_("Terrace type"), lambda gi, gt=GT_TERRACE: gi.si.game_type == gt),
|
(n_("Napoleon type"),
|
||||||
(n_("Yukon type"), lambda gi, gt=GT_YUKON: gi.si.game_type == gt),
|
lambda gi, gt=GT_NAPOLEON: gi.si.game_type == gt),
|
||||||
(n_("One-Deck games"),lambda gi, gt=GT_1DECK_TYPE: gi.si.game_type == gt),
|
(n_("Numerica type"),
|
||||||
(n_("Two-Deck games"),lambda gi, gt=GT_2DECK_TYPE: gi.si.game_type == gt),
|
lambda gi, gt=GT_NUMERICA: gi.si.game_type == gt),
|
||||||
(n_("Three-Deck games"),lambda gi, gt=GT_3DECK_TYPE: gi.si.game_type == gt),
|
(n_("Pairing type"),
|
||||||
(n_("Four-Deck games"),lambda gi, gt=GT_4DECK_TYPE: gi.si.game_type == gt),
|
lambda gi, gt=GT_PAIRING_TYPE: gi.si.game_type == gt),
|
||||||
|
(n_("Raglan type"), lambda gi, gt=GT_RAGLAN: gi.si.game_type == gt),
|
||||||
|
(n_("Simple games"),
|
||||||
|
lambda gi, gt=GT_SIMPLE_TYPE: gi.si.game_type == gt),
|
||||||
|
(n_("Spider type"), lambda gi, gt=GT_SPIDER: gi.si.game_type == gt),
|
||||||
|
(n_("Terrace type"), lambda gi, gt=GT_TERRACE: gi.si.game_type == gt),
|
||||||
|
(n_("Yukon type"), lambda gi, gt=GT_YUKON: gi.si.game_type == gt),
|
||||||
|
(n_("One-Deck games"),
|
||||||
|
lambda gi, gt=GT_1DECK_TYPE: gi.si.game_type == gt),
|
||||||
|
(n_("Two-Deck games"),
|
||||||
|
lambda gi, gt=GT_2DECK_TYPE: gi.si.game_type == gt),
|
||||||
|
(n_("Three-Deck games"),
|
||||||
|
lambda gi, gt=GT_3DECK_TYPE: gi.si.game_type == gt),
|
||||||
|
(n_("Four-Deck games"),
|
||||||
|
lambda gi, gt=GT_4DECK_TYPE: gi.si.game_type == gt),
|
||||||
)
|
)
|
||||||
|
|
||||||
SELECT_ORIGINAL_GAME_BY_TYPE = (
|
SELECT_ORIGINAL_GAME_BY_TYPE = (
|
||||||
(n_("French type"), lambda gi, gf=GT_ORIGINAL, gt=(GT_HANAFUDA, GT_HEXADECK, GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA, GT_DASHAVATARA_GANJIFA, GT_TAROCK,): gi.si.game_flags & gf and gi.si.game_type not in gt),
|
(n_("French type"), lambda gi, gf=GT_ORIGINAL,
|
||||||
(n_("Ganjifa type"), lambda gi, gf=GT_ORIGINAL, gt=(GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA, GT_DASHAVATARA_GANJIFA,): gi.si.game_flags & gf and gi.si.game_type in gt),
|
gt=(
|
||||||
(n_("Hanafuda type"), lambda gi, gf=GT_ORIGINAL, gt=GT_HANAFUDA: gi.si.game_flags & gf and gi.si.game_type == gt),
|
GT_HANAFUDA,
|
||||||
(n_("Hex A Deck type"), lambda gi, gf=GT_ORIGINAL, gt=GT_HEXADECK: gi.si.game_flags & gf and gi.si.game_type == gt),
|
GT_HEXADECK, GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA,
|
||||||
(n_("Tarock type"), lambda gi, gf=GT_ORIGINAL, gt=GT_TAROCK: gi.si.game_flags & gf and gi.si.game_type == gt),
|
GT_DASHAVATARA_GANJIFA, GT_TAROCK,): gi.si.game_flags & gf and
|
||||||
|
gi.si.game_type not in gt),
|
||||||
|
(n_("Ganjifa type"), lambda gi, gf=GT_ORIGINAL,
|
||||||
|
gt=(GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA,
|
||||||
|
GT_DASHAVATARA_GANJIFA,): gi.si.game_flags & gf and
|
||||||
|
gi.si.game_type in gt),
|
||||||
|
(n_("Hanafuda type"), lambda gi, gf=GT_ORIGINAL, gt=GT_HANAFUDA:
|
||||||
|
gi.si.game_flags & gf and gi.si.game_type == gt),
|
||||||
|
(n_("Hex A Deck type"), lambda gi, gf=GT_ORIGINAL, gt=GT_HEXADECK:
|
||||||
|
gi.si.game_flags & gf and gi.si.game_type == gt),
|
||||||
|
(n_("Tarock type"), lambda gi, gf=GT_ORIGINAL, gt=GT_TAROCK:
|
||||||
|
gi.si.game_flags & gf and gi.si.game_type == gt),
|
||||||
)
|
)
|
||||||
|
|
||||||
SELECT_CONTRIB_GAME_BY_TYPE = (
|
SELECT_CONTRIB_GAME_BY_TYPE = (
|
||||||
(n_("French type"), lambda gi, gf=GT_CONTRIB, gt=(GT_HANAFUDA, GT_HEXADECK, GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA, GT_DASHAVATARA_GANJIFA, GT_TAROCK,): gi.si.game_flags & gf and gi.si.game_type not in gt),
|
(n_("French type"), lambda gi, gf=GT_CONTRIB,
|
||||||
(n_("Ganjifa type"), lambda gi, gf=GT_CONTRIB, gt=(GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA, GT_DASHAVATARA_GANJIFA,): gi.si.game_flags & gf and gi.si.game_type in gt),
|
gt=(GT_HANAFUDA, GT_HEXADECK, GT_MUGHAL_GANJIFA,
|
||||||
(n_("Hanafuda type"), lambda gi, gf=GT_CONTRIB, gt=GT_HANAFUDA: gi.si.game_flags & gf and gi.si.game_type == gt),
|
GT_NAVAGRAHA_GANJIFA, GT_DASHAVATARA_GANJIFA, GT_TAROCK,):
|
||||||
(n_("Hex A Deck type"), lambda gi, gf=GT_CONTRIB, gt=GT_HEXADECK: gi.si.game_flags & gf and gi.si.game_type == gt),
|
gi.si.game_flags & gf and gi.si.game_type not in gt),
|
||||||
(n_("Tarock type"), lambda gi, gf=GT_CONTRIB, gt=GT_TAROCK: gi.si.game_flags & gf and gi.si.game_type == gt),
|
(n_("Ganjifa type"), lambda gi, gf=GT_CONTRIB,
|
||||||
|
gt=(GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA,
|
||||||
|
GT_DASHAVATARA_GANJIFA,):
|
||||||
|
gi.si.game_flags & gf and gi.si.game_type in gt),
|
||||||
|
(n_("Hanafuda type"), lambda gi, gf=GT_CONTRIB, gt=GT_HANAFUDA:
|
||||||
|
gi.si.game_flags & gf and gi.si.game_type == gt),
|
||||||
|
(n_("Hex A Deck type"), lambda gi, gf=GT_CONTRIB, gt=GT_HEXADECK:
|
||||||
|
gi.si.game_flags & gf and gi.si.game_type == gt),
|
||||||
|
(n_("Tarock type"), lambda gi, gf=GT_CONTRIB, gt=GT_TAROCK:
|
||||||
|
gi.si.game_flags & gf and gi.si.game_type == gt),
|
||||||
)
|
)
|
||||||
|
|
||||||
SELECT_ORIENTAL_GAME_BY_TYPE = (
|
SELECT_ORIENTAL_GAME_BY_TYPE = (
|
||||||
(n_("Dashavatara Ganjifa type"), lambda gi, gt=GT_DASHAVATARA_GANJIFA: gi.si.game_type == gt),
|
(n_("Dashavatara Ganjifa type"), lambda gi, gt=GT_DASHAVATARA_GANJIFA:
|
||||||
(n_("Ganjifa type"), lambda gi, gt=(GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA, GT_DASHAVATARA_GANJIFA,): gi.si.game_type in gt),
|
gi.si.game_type == gt),
|
||||||
(n_("Hanafuda type"), lambda gi, gt=GT_HANAFUDA: gi.si.game_type == gt),
|
(n_("Ganjifa type"), lambda gi,
|
||||||
(n_("Mughal Ganjifa type"), lambda gi, gt=GT_MUGHAL_GANJIFA: gi.si.game_type == gt),
|
gt=(GT_MUGHAL_GANJIFA, GT_NAVAGRAHA_GANJIFA,
|
||||||
(n_("Navagraha Ganjifa type"), lambda gi, gt=GT_NAVAGRAHA_GANJIFA: gi.si.game_type == gt),
|
GT_DASHAVATARA_GANJIFA,): gi.si.game_type in gt),
|
||||||
|
(n_("Hanafuda type"),
|
||||||
|
lambda gi, gt=GT_HANAFUDA: gi.si.game_type == gt),
|
||||||
|
(n_("Mughal Ganjifa type"),
|
||||||
|
lambda gi, gt=GT_MUGHAL_GANJIFA: gi.si.game_type == gt),
|
||||||
|
(n_("Navagraha Ganjifa type"),
|
||||||
|
lambda gi, gt=GT_NAVAGRAHA_GANJIFA: gi.si.game_type == gt),
|
||||||
)
|
)
|
||||||
|
|
||||||
SELECT_SPECIAL_GAME_BY_TYPE = (
|
SELECT_SPECIAL_GAME_BY_TYPE = (
|
||||||
(n_("Shisen-Sho"), lambda gi, gt=GT_SHISEN_SHO: gi.si.game_type == gt),
|
(n_("Shisen-Sho"), lambda gi, gt=GT_SHISEN_SHO: gi.si.game_type == gt),
|
||||||
(n_("Hex A Deck type"), lambda gi, gt=GT_HEXADECK: gi.si.game_type == gt),
|
(n_("Hex A Deck type"),
|
||||||
(n_("Matrix type"), lambda gi, gt=GT_MATRIX: gi.si.game_type == gt),
|
lambda gi, gt=GT_HEXADECK: gi.si.game_type == gt),
|
||||||
(n_("Memory type"), lambda gi, gt=GT_MEMORY: gi.si.game_type == gt),
|
(n_("Matrix type"), lambda gi, gt=GT_MATRIX: gi.si.game_type == gt),
|
||||||
(n_("Poker type"), lambda gi, gt=GT_POKER_TYPE: gi.si.game_type == gt),
|
(n_("Memory type"), lambda gi, gt=GT_MEMORY: gi.si.game_type == gt),
|
||||||
(n_("Puzzle type"), lambda gi, gt=GT_PUZZLE_TYPE: gi.si.game_type == gt),
|
(n_("Poker type"), lambda gi, gt=GT_POKER_TYPE: gi.si.game_type == gt),
|
||||||
(n_("Tarock type"), lambda gi, gt=GT_TAROCK: gi.si.game_type == gt),
|
(n_("Puzzle type"),
|
||||||
|
lambda gi, gt=GT_PUZZLE_TYPE: gi.si.game_type == gt),
|
||||||
|
(n_("Tarock type"), lambda gi, gt=GT_TAROCK: gi.si.game_type == gt),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# These obsolete gameids have been used in previous versions of
|
# These obsolete gameids have been used in previous versions of
|
||||||
# PySol and are no longer supported because of internal changes
|
# PySol and are no longer supported because of internal changes
|
||||||
# (mainly rule changes). The game has been assigned a new id.
|
# (mainly rule changes). The game has been assigned a new id.
|
||||||
|
@ -209,31 +255,31 @@ class GI:
|
||||||
72: 115, # Little Forty
|
72: 115, # Little Forty
|
||||||
75: 126, # Red and Black
|
75: 126, # Red and Black
|
||||||
82: 901, # La Belle Lucie (Midnight Oil)
|
82: 901, # La Belle Lucie (Midnight Oil)
|
||||||
## 155: 5034, # Mahjongg - Flying Dragon
|
# 155: 5034, # Mahjongg - Flying Dragon
|
||||||
## 156: 5035, # Mahjongg - Fortress Towers
|
# 156: 5035, # Mahjongg - Fortress Towers
|
||||||
262: 105, # Canfield
|
262: 105, # Canfield
|
||||||
902: 88, # Trefoil
|
902: 88, # Trefoil
|
||||||
904: 68, # Lexington Harp
|
904: 68, # Lexington Harp
|
||||||
297: 631, # Alternation/Alternations
|
297: 631, # Alternation/Alternations
|
||||||
}
|
}
|
||||||
|
|
||||||
GAMES_BY_COMPATIBILITY = (
|
GAMES_BY_COMPATIBILITY = (
|
||||||
# Atari ST Patience game v2.13 (we have 10 out of 10 games)
|
# Atari ST Patience game v2.13 (we have 10 out of 10 games)
|
||||||
("Atari ST Patience", (1, 3, 4, 7, 12, 14, 15, 16, 17, 39,)),
|
("Atari ST Patience", (1, 3, 4, 7, 12, 14, 15, 16, 17, 39,)),
|
||||||
|
|
||||||
## Gnome AisleRiot 1.0.51 (we have 28 out of 32 games)
|
# Gnome AisleRiot 1.0.51 (we have 28 out of 32 games)
|
||||||
## still missing: Camelot, Clock, Thieves, Thirteen
|
# still missing: Camelot, Clock, Thieves, Thirteen
|
||||||
##("Gnome AisleRiot 1.0.51", (
|
# ("Gnome AisleRiot 1.0.51", (
|
||||||
## 2, 8, 11, 19, 27, 29, 33, 34, 35, 40,
|
# 2, 8, 11, 19, 27, 29, 33, 34, 35, 40,
|
||||||
## 41, 42, 43, 58, 59, 92, 93, 94, 95, 96,
|
# 41, 42, 43, 58, 59, 92, 93, 94, 95, 96,
|
||||||
## 100, 105, 111, 112, 113, 130, 200, 201,
|
# 100, 105, 111, 112, 113, 130, 200, 201,
|
||||||
##)),
|
# )),
|
||||||
## Gnome AisleRiot 1.4.0.1 (we have XX out of XX games)
|
# Gnome AisleRiot 1.4.0.1 (we have XX out of XX games)
|
||||||
##("Gnome AisleRiot", (
|
# ("Gnome AisleRiot", (
|
||||||
## 1, 2, 8, 11, 19, 27, 29, 33, 34, 35, 40,
|
# 1, 2, 8, 11, 19, 27, 29, 33, 34, 35, 40,
|
||||||
## 41, 42, 43, 58, 59, 92, 93, 94, 95, 96,
|
# 41, 42, 43, 58, 59, 92, 93, 94, 95, 96,
|
||||||
## 100, 105, 111, 112, 113, 130, 200, 201,
|
# 100, 105, 111, 112, 113, 130, 200, 201,
|
||||||
##)),
|
# )),
|
||||||
# Gnome AisleRiot 2.2.0 (we have 61 out of 70 games)
|
# Gnome AisleRiot 2.2.0 (we have 61 out of 70 games)
|
||||||
# still missing:
|
# still missing:
|
||||||
# Gay gordons, Helsinki,
|
# Gay gordons, Helsinki,
|
||||||
|
@ -247,12 +293,12 @@ class GI:
|
||||||
283, 284, 551, 552, 553, 737,
|
283, 284, 551, 552, 553, 737,
|
||||||
)),
|
)),
|
||||||
|
|
||||||
## KDE Patience 0.7.3 from KDE 1.1.2 (we have 6 out of 9 games)
|
# KDE Patience 0.7.3 from KDE 1.1.2 (we have 6 out of 9 games)
|
||||||
##("KDE Patience 0.7.3", (2, 7, 8, 18, 256, 903,)),
|
# ("KDE Patience 0.7.3", (2, 7, 8, 18, 256, 903,)),
|
||||||
## KDE Patience 2.0 from KDE 2.1.2 (we have 11 out of 13 games)
|
# KDE Patience 2.0 from KDE 2.1.2 (we have 11 out of 13 games)
|
||||||
##("KDE Patience", (1, 2, 7, 8, 18, 19, 23, 50, 256, 261, 903,)),
|
# ("KDE Patience", (1, 2, 7, 8, 18, 19, 23, 50, 256, 261, 903,)),
|
||||||
## KDE Patience 2.0 from KDE 2.2beta1 (we have 12 out of 14 games)
|
# KDE Patience 2.0 from KDE 2.2beta1 (we have 12 out of 14 games)
|
||||||
##("KDE Patience", (1, 2, 7, 8, 18, 19, 23, 36, 50, 256, 261, 903,)),
|
# ("KDE Patience", (1, 2, 7, 8, 18, 19, 23, 36, 50, 256, 261, 903,)),
|
||||||
# KDE Patience 2.0 from KDE 3.1.1 (we have 15 out of 15 games)
|
# KDE Patience 2.0 from KDE 3.1.1 (we have 15 out of 15 games)
|
||||||
("KDE Patience", (1, 2, 7, 8, 18, 19, 23, 36, 50,
|
("KDE Patience", (1, 2, 7, 8, 18, 19, 23, 36, 50,
|
||||||
256, 261, 277, 278, 279, 903,)),
|
256, 261, 277, 278, 279, 903,)),
|
||||||
|
@ -303,9 +349,9 @@ class GI:
|
||||||
("2.99", (37,)),
|
("2.99", (37,)),
|
||||||
("3.00", (38, 39,
|
("3.00", (38, 39,
|
||||||
40, 41, 42, 43, 45, 46, 47, 48, 49,
|
40, 41, 42, 43, 45, 46, 47, 48, 49,
|
||||||
50, 51,903, 53, 54, 55, 56, 57, 58, 59,
|
50, 51, 903, 53, 54, 55, 56, 57, 58, 59,
|
||||||
60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
|
60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
|
||||||
70, 71,115, 73, 74,126, 76, 77, 78, 79,
|
70, 71, 115, 73, 74, 126, 76, 77, 78, 79,
|
||||||
80, 81, 83, 84, 85, 86, 87, 88, 89,
|
80, 81, 83, 84, 85, 86, 87, 88, 89,
|
||||||
90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
|
90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
|
||||||
100, 101, 102, 103, 104, 107, 108,)),
|
100, 101, 102, 103, 104, 107, 108,)),
|
||||||
|
@ -317,7 +363,7 @@ class GI:
|
||||||
("3.21", (143, 144)),
|
("3.21", (143, 144)),
|
||||||
("3.30", (145, 146, 147, 148, 149, 150, 151)),
|
("3.30", (145, 146, 147, 148, 149, 150, 151)),
|
||||||
("3.40", (152, 153, 154)),
|
("3.40", (152, 153, 154)),
|
||||||
("4.00", ( 157, 158, 159, 160, 161, 162, 163, 164)),
|
("4.00", (157, 158, 159, 160, 161, 162, 163, 164)),
|
||||||
("4.20", (165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
|
("4.20", (165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
|
||||||
175, 176, 177, 178)),
|
175, 176, 177, 178)),
|
||||||
("4.30", (179, 180, 181, 182, 183, 184)),
|
("4.30", (179, 180, 181, 182, 183, 184)),
|
||||||
|
@ -329,8 +375,8 @@ class GI:
|
||||||
220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
|
220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
|
||||||
230, 231, 232, 233, 234, 235, 236)),
|
230, 231, 232, 233, 234, 235, 236)),
|
||||||
("4.70", (237,)),
|
("4.70", (237,)),
|
||||||
('fc-0.5.0', ( # moved from Ultrasol
|
('fc-0.5.0', ( # moved from Ultrasol
|
||||||
#121, 122, 187, 188, 189, 190, 191, 192, 194, 197, 198,
|
# 121, 122, 187, 188, 189, 190, 191, 192, 194, 197, 198,
|
||||||
5301, 5302, 9011, 11001, 11002, 11003, 11004, 11005,
|
5301, 5302, 9011, 11001, 11002, 11003, 11004, 11005,
|
||||||
11006, 12353, 12354, 12355, 12356, 12357, 12358, 12359,
|
11006, 12353, 12354, 12355, 12356, 12357, 12358, 12359,
|
||||||
12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367,
|
12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367,
|
||||||
|
@ -347,7 +393,7 @@ class GI:
|
||||||
16674, 16675, 16676, 16677, 16678, 16679, 16680, 22216,
|
16674, 16675, 16676, 16677, 16678, 16679, 16680, 22216,
|
||||||
22223, 22224, 22225, 22226, 22227, 22228, 22229, 22230,
|
22223, 22224, 22225, 22226, 22227, 22228, 22229, 22230,
|
||||||
22231, 22232,)),
|
22231, 22232,)),
|
||||||
('fc-0.8.0', tuple(range(263, 323))), # exclude 297
|
('fc-0.8.0', tuple(range(263, 323))), # exclude 297
|
||||||
('fc-0.9.0', tuple(range(323, 421))),
|
('fc-0.9.0', tuple(range(323, 421))),
|
||||||
('fc-0.9.1', tuple(range(421, 441))),
|
('fc-0.9.1', tuple(range(421, 441))),
|
||||||
('fc-0.9.2', tuple(range(441, 466))),
|
('fc-0.9.2', tuple(range(441, 466))),
|
||||||
|
@ -355,12 +401,12 @@ class GI:
|
||||||
('fc-0.9.4', tuple(range(661, 671))),
|
('fc-0.9.4', tuple(range(661, 671))),
|
||||||
('fc-1.0', tuple(range(671, 711))),
|
('fc-1.0', tuple(range(671, 711))),
|
||||||
('fc-1.1', tuple(range(711, 759))),
|
('fc-1.1', tuple(range(711, 759))),
|
||||||
('fc-2.0', tuple(range(11011, 11014)) + tuple(range(759, 767)) ),
|
('fc-2.0', tuple(range(11011, 11014)) + tuple(range(759, 767))),
|
||||||
)
|
)
|
||||||
|
|
||||||
# deprecated - the correct way is to or a GI.GT_XXX flag
|
# deprecated - the correct way is to or a GI.GT_XXX flag
|
||||||
# in the registerGame() call
|
# in the registerGame() call
|
||||||
_CHILDREN_GAMES = [16, 33, 55, 90, 91, 96, 97, 176, 903,]
|
_CHILDREN_GAMES = [16, 33, 55, 90, 91, 96, 97, 176, 903, ]
|
||||||
|
|
||||||
_OPEN_GAMES = []
|
_OPEN_GAMES = []
|
||||||
|
|
||||||
|
@ -384,7 +430,7 @@ class GI:
|
||||||
903, # Ace Up
|
903, # Ace Up
|
||||||
5034, # Mahjongg Flying Dragon
|
5034, # Mahjongg Flying Dragon
|
||||||
5401, # Mahjongg Taipei
|
5401, # Mahjongg Taipei
|
||||||
12345, # Oonsoo
|
12345, # Oonsoo
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -412,7 +458,7 @@ class GameInfo(Struct):
|
||||||
return s
|
return s
|
||||||
try:
|
try:
|
||||||
s = unicode(s, 'utf-8')
|
s = unicode(s, 'utf-8')
|
||||||
except UnicodeDecodeError, err:
|
except UnicodeDecodeError as err:
|
||||||
print_err(err)
|
print_err(err)
|
||||||
s = unicode(s, 'utf-8', 'ignore')
|
s = unicode(s, 'utf-8', 'ignore')
|
||||||
return s
|
return s
|
||||||
|
@ -456,11 +502,13 @@ class GameInfo(Struct):
|
||||||
if not (1 <= id <= 999999):
|
if not (1 <= id <= 999999):
|
||||||
raise GameInfoException(name+": invalid game ID "+str(id))
|
raise GameInfoException(name+": invalid game ID "+str(id))
|
||||||
if category == GI.GC_MAHJONGG:
|
if category == GI.GC_MAHJONGG:
|
||||||
if decks%4:
|
if decks % 4:
|
||||||
raise GameInfoException(name+": invalid number of decks "+str(id))
|
raise GameInfoException(name+": invalid number of decks " +
|
||||||
|
str(id))
|
||||||
else:
|
else:
|
||||||
if not (1 <= decks <= 4):
|
if not (1 <= decks <= 4):
|
||||||
raise GameInfoException(name+": invalid number of decks "+str(id))
|
raise GameInfoException(
|
||||||
|
name+": invalid number of decks "+str(id))
|
||||||
if not name:
|
if not name:
|
||||||
raise GameInfoException(name+": invalid game name")
|
raise GameInfoException(name+": invalid game name")
|
||||||
if GI.PROTECTED_GAMES.get(id):
|
if GI.PROTECTED_GAMES.get(id):
|
||||||
|
@ -521,7 +569,7 @@ class GameManager:
|
||||||
return self.__all_games.get(key)
|
return self.__all_games.get(key)
|
||||||
|
|
||||||
def _check_game(self, gi):
|
def _check_game(self, gi):
|
||||||
##print 'check game:', gi.id, gi.short_name.encode('utf-8')
|
# print 'check game:', gi.id, gi.short_name.encode('utf-8')
|
||||||
if gi.id in self.__all_games:
|
if gi.id in self.__all_games:
|
||||||
raise GameInfoException("duplicate game ID %s: %s and %s" %
|
raise GameInfoException("duplicate game ID %s: %s and %s" %
|
||||||
(gi.id, str(gi.gameclass),
|
(gi.id, str(gi.gameclass),
|
||||||
|
@ -543,14 +591,14 @@ class GameManager:
|
||||||
(gi.id, n))
|
(gi.id, n))
|
||||||
|
|
||||||
def register(self, gi):
|
def register(self, gi):
|
||||||
##print gi.id, gi.short_name.encode('utf-8')
|
# print gi.id, gi.short_name.encode('utf-8')
|
||||||
if not isinstance(gi, GameInfo):
|
if not isinstance(gi, GameInfo):
|
||||||
raise GameInfoException("wrong GameInfo class")
|
raise GameInfoException("wrong GameInfo class")
|
||||||
if self.check_game and pysollib.settings.CHECK_GAMES:
|
if self.check_game and pysollib.settings.CHECK_GAMES:
|
||||||
self._check_game(gi)
|
self._check_game(gi)
|
||||||
##if 0 and gi.si.game_flags & GI.GT_XORIGINAL:
|
# if 0 and gi.si.game_flags & GI.GT_XORIGINAL:
|
||||||
## return
|
# return
|
||||||
##print gi.id, gi.name
|
# print gi.id, gi.name
|
||||||
self.__all_games[gi.id] = gi
|
self.__all_games[gi.id] = gi
|
||||||
self.__all_gamenames[gi.name] = gi
|
self.__all_gamenames[gi.name] = gi
|
||||||
for n in gi.altnames:
|
for n in gi.altnames:
|
||||||
|
@ -565,12 +613,13 @@ class GameManager:
|
||||||
self.__games_by_name = None
|
self.__games_by_name = None
|
||||||
# update registry
|
# update registry
|
||||||
k = gi.si.game_type
|
k = gi.si.game_type
|
||||||
self.registered_game_types[k] = self.registered_game_types.get(k, 0) + 1
|
self.registered_game_types[k] = \
|
||||||
## if not gi.si.game_type == GI.GT_MAHJONGG:
|
self.registered_game_types.get(k, 0) + 1
|
||||||
## for v, k in GI.GAMES_BY_PYSOL_VERSION:
|
# if not gi.si.game_type == GI.GT_MAHJONGG:
|
||||||
## if gi.id in k: break
|
# for v, k in GI.GAMES_BY_PYSOL_VERSION:
|
||||||
## else:
|
# if gi.id in k: break
|
||||||
## print gi.id
|
# else:
|
||||||
|
# print gi.id
|
||||||
if hasattr(gi.gameclass, 'Solver_Class') and \
|
if hasattr(gi.gameclass, 'Solver_Class') and \
|
||||||
gi.gameclass.Solver_Class is not None:
|
gi.gameclass.Solver_Class is not None:
|
||||||
self.__games_for_solver.append(gi.id)
|
self.__games_for_solver.append(gi.id)
|
||||||
|
@ -586,7 +635,7 @@ class GameManager:
|
||||||
#
|
#
|
||||||
|
|
||||||
def getAllGames(self):
|
def getAllGames(self):
|
||||||
##return self.__all_games
|
# return self.__all_games
|
||||||
return self.__games.values()
|
return self.__games.values()
|
||||||
|
|
||||||
def getGamesIdSortedById(self):
|
def getGamesIdSortedById(self):
|
||||||
|
@ -598,15 +647,15 @@ class GameManager:
|
||||||
|
|
||||||
def getGamesIdSortedByName(self):
|
def getGamesIdSortedByName(self):
|
||||||
if self.__games_by_name is None:
|
if self.__games_by_name is None:
|
||||||
l1, l2, l3 = [], [], []
|
l1, l2, l3 = [], [], []
|
||||||
for id, gi in self.__games.items():
|
for id, gi in self.__games.items():
|
||||||
name = gi.name #.lower()
|
name = gi.name # .lower()
|
||||||
l1.append((name, id))
|
l1.append((name, id))
|
||||||
if gi.name != gi.short_name:
|
if gi.name != gi.short_name:
|
||||||
name = gi.short_name #.lower()
|
name = gi.short_name # .lower()
|
||||||
l2.append((name, id))
|
l2.append((name, id))
|
||||||
for n in gi.altnames:
|
for n in gi.altnames:
|
||||||
name = n #.lower()
|
name = n # .lower()
|
||||||
l3.append((name, id, n))
|
l3.append((name, id, n))
|
||||||
l1.sort()
|
l1.sort()
|
||||||
l2.sort()
|
l2.sort()
|
||||||
|
@ -652,10 +701,9 @@ def registerGame(gameinfo):
|
||||||
|
|
||||||
|
|
||||||
def loadGame(modname, filename, check_game=False):
|
def loadGame(modname, filename, check_game=False):
|
||||||
##print "load game", modname, filename
|
# print "load game", modname, filename
|
||||||
GAME_DB.check_game = check_game
|
GAME_DB.check_game = check_game
|
||||||
GAME_DB.current_filename = filename
|
GAME_DB.current_filename = filename
|
||||||
module = imp.load_source(modname, filename)
|
imp.load_source(modname, filename)
|
||||||
##execfile(filename, globals(), globals())
|
# execfile(filename, globals(), globals())
|
||||||
GAME_DB.current_filename = None
|
GAME_DB.current_filename = None
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ use Test::Differences qw( eq_or_diff );
|
||||||
use String::ShellQuote qw/ shell_quote /;
|
use String::ShellQuote qw/ shell_quote /;
|
||||||
|
|
||||||
# my $cmd = shell_quote( 'flake8', '.' );
|
# my $cmd = shell_quote( 'flake8', '.' );
|
||||||
my $cmd = shell_quote( 'flake8', glob('./pysollib/[a-c]*.py') );
|
my $cmd = shell_quote( 'flake8', glob('./pysollib/[a-g]*.py') );
|
||||||
|
|
||||||
# TEST
|
# TEST
|
||||||
eq_or_diff( scalar(`$cmd`), '', "flake8 is happy with the code." );
|
eq_or_diff( scalar(`$cmd`), '', "flake8 is happy with the code." );
|
||||||
|
|
Loading…
Add table
Reference in a new issue