109 lines
3.9 KiB
Python
109 lines
3.9 KiB
Python
import corelib, os, termcolor, colorama
|
||
colorama.init()
|
||
|
||
clear = lambda: os.system('cls')
|
||
gamedata = corelib.newGame(ID=0, mines=25, fieldsize=10)['response']
|
||
gamedata['continue'] = True
|
||
clear()
|
||
|
||
|
||
def getuserfield(field, gamefinnised=False):
|
||
maxFieldCoord = len(field) - 1
|
||
# ░ свободная клетка
|
||
# █ Не открытая клетка
|
||
# F Помечена флагом
|
||
# 1..4 Мины рядом
|
||
# X Минa взорвана
|
||
# S Минa обезврежена
|
||
retfield = list()
|
||
for row in field:
|
||
X = field.index(row)
|
||
retfield.append(list())
|
||
for cell in row:
|
||
Y = field[X].index(cell)
|
||
if ':O' in cell and cell != 'M:O':
|
||
mines = 0
|
||
# Проверим наличие мин
|
||
upCoord = Y != 0
|
||
downCoord = Y != maxFieldCoord
|
||
leftCoord = X != 0
|
||
rightCoord = X != maxFieldCoord
|
||
|
||
if upCoord and field[X][Y - 1] != cell and ':O' not in field[X][Y - 1]:
|
||
mines += 1
|
||
if downCoord and field[X][Y + 1] != cell and ':O' not in field[X][Y + 1]:
|
||
mines += 1
|
||
if leftCoord and field[X - 1][Y] != cell and ':O' not in field[X - 1][Y]:
|
||
mines += 1
|
||
if rightCoord and field[X + 1][Y] != cell and ':O' not in field[X + 1][Y]:
|
||
mines += 1
|
||
if mines == 0:
|
||
if upCoord and field[X][Y - 1] != cell:
|
||
mines = 1
|
||
elif downCoord and field[X][Y + 1] != cell:
|
||
mines = 1
|
||
elif leftCoord and field[X - 1][Y] != cell:
|
||
mines = 1
|
||
elif rightCoord and field[X + 1][Y] != cell:
|
||
mines = 1
|
||
|
||
if mines == 0:
|
||
retfield[-1].append('░')
|
||
elif mines >= 3:
|
||
retfield[-1].append(termcolor.colored(f"{mines}", "red"))
|
||
elif mines == 2:
|
||
retfield[-1].append(termcolor.colored(f"{mines}", "yellow"))
|
||
elif mines == 1:
|
||
retfield[-1].append(termcolor.colored(f"{mines}", "green"))
|
||
elif cell == 'M:F':
|
||
if gamefinnised:
|
||
retfield[-1].append('S')
|
||
else:
|
||
retfield[-1].append('F')
|
||
elif ':F' in cell:
|
||
retfield[-1].append('F')
|
||
elif cell == 'M':
|
||
if gamefinnised:
|
||
retfield[-1].append('X')
|
||
else:
|
||
retfield[-1].append('█')
|
||
else:
|
||
retfield[-1].append('█')
|
||
|
||
return retfield
|
||
|
||
|
||
clear()
|
||
while gamedata['continue']:
|
||
print('Y/X| 0123456789\n---|=============')
|
||
i = 0
|
||
for row in getuserfield(gamedata['map'], gamefinnised=not(gamedata['continue'])):
|
||
print(f"{i}|. ", ''.join(row))
|
||
i += 1
|
||
|
||
while True:
|
||
try:
|
||
X = int(input('Введите X: '))
|
||
break
|
||
except:
|
||
pass
|
||
while True:
|
||
try:
|
||
Y = int(input('Введите Y: '))
|
||
break
|
||
except:
|
||
pass
|
||
if input('Введите 0 если хотите поставить флаг: ') == '0':
|
||
corelib.toggleFlag(gamedata['gamesession'], X, Y)
|
||
else:
|
||
corelib.openItem(gamedata['gamesession'], X, Y)
|
||
|
||
gamedata = corelib.getGameSession(gamedata['gamesession'])['response']
|
||
clear()
|
||
|
||
print('Y/X| 0123456789\n---|=============')
|
||
i = 0
|
||
for row in getuserfield(gamedata['map'], gamefinnised=not(gamedata['continue'])):
|
||
print(f"{i}|. ", ''.join(row))
|
||
i += 1
|
||
print('Игра окончена!') |