Мои игры

Автор _Swetlana, 02 апреля 2024, 01:39

« назад - далее »

_Swetlana

Написала на питоне что-то вроде wordly.
Нужно угадать латинское существительное из 5 букв. Есть 6 попыток, писать можно только целые слова, отдельные буквы писать нельзя.
Каждое слово проверяется с помощью словаря из 280 слов. Словарь можно посмотреть.
Угаданные буквы в правильных позициях становятся зелеными, в неправильных - жёлтыми, неугаданные - красными.


 

_Swetlana

Вот здесь можно поиграть, нажав на треугольник RUN  :)

ссылка

Hellerick

Я как-то для линва-франка-новы делал: https://github.com/Hellerick/Vocable/tree/main

Вообще, странно что вы не стали включать самые известные латинские пятибуквенные слова: https://ru.wikipedia.org/wiki/SATOR

Цитата: _Swetlana от 02 апреля 2024, 01:40Вот здесь можно поиграть, нажав на треугольник RUN  :)

ссылка

Запустить-то программу я уммудрился, но где-там треугольник RUN так и не понял.

_Swetlana

#3
Цитата: Hellerick от 02 апреля 2024, 05:19Я как-то для линва-франка-новы делал: https://github.com/Hellerick/Vocable/tree/main

Вообще, странно что вы не стали включать самые известные латинские пятибуквенные слова: https://ru.wikipedia.org/wiki/SATOR

Цитата: _Swetlana от 02 апреля 2024, 01:40Вот здесь можно поиграть, нажав на треугольник RUN  :)

ссылка

Запустить-то программу я уммудрился, но где-там треугольник RUN так и не понял.
Любопытно. Честно говоря, я еще реплитом не умею пользоваться, надо разбираться. У вас этот файл разве не так выглядит? Посередине верхней строки зеленый треугольник RUN.

https://imgbly.com/ib/aKUsc88uJx

_Swetlana

Словарь взят отсюда, в программе, кстати, есть ссылка. От себя ничего туда не добавляла.
Цитировать6lib.ru - Электронная Библиотека
Название книги: Латинско-Русский словарь
Автор(ы): Аракин Владимир
Жанр: Словари
Адрес книги: http://www.6lib.ru/books/latinsko_russkii_slovar_-22820.html
Opera там есть, tenet - глагол, а вот sator и rotas, действительно, отсутствуют. Ну это претензии к Аракину Владимиру  :) А в словаре Дворецкого sator и rotas есть?

_Swetlana

Я уже третий день играю, вот, слово форум только что угадала. Скоро все пятибуквенные слова выучу, для шестибуквенных словарь буду делать  ;D

forum.png
 

_Swetlana

Похоже, эти игры радуют только их создателей. Тоже немало  :)

Oiseau



 Да кабы сыграть можно было, тоже бы порадовались.
Тяга к лингвистике сильно коррелирует с общими проблемами с головой. (с) о. Авваль.

Меня зовут Уазо.

_Swetlana

#8
Цитата: Oiseau от 02 апреля 2024, 16:33Да кабы сыграть можно было, тоже бы порадовались.
Разлогинилась на реплите и зашла по своей ссылке. Это фиаско, да.
Но не надо печали! Вам нужно зайти на реплит, это просто сделать из гугл-аккаунта. Собственно, я так туда и попала в свое время. Потом, видимо, поиском нужно найти питон и создать файл с названием main. И туда просто вставить скопированную программу. Программу я выложу или через час, когда получу доступ к компу, или сейчас, если вспомню пароль от Гугла.
P.S. почему я так держусь за реплит - там работает библиотека, которая раскрашивает буковки в разные цвета.

_Swetlana

from random import choice
from termcolor import colored, cprint

#filename = 'latin5.txt'
max_attemps = 6
# I и J, U и V - разные буквы. Буквы W нет.
keyboard = 'A B C D E F G H I J K L M N O P Q R S T U V X Y Z'

def get_lexicon():
    '''abies ель
acies остриё строй сражение
actio поступок деяние дело
actum деяние событие запись
aedes комната
aetas век жизнь время возраст
aevum век
agaso погонщик_мулов
agmen отряд
agnus ягнёнок
altum глубь море
alvus живот чрево желудок
amica подруга
amnis река
anima дыхание душа жизнь
annus год
anser гусь
arbor дерево
arcus лук
arena песок
aries баран
armus лопатка плечо
arvum поле пашня
auris ухо слух
aurum золото
avena овёс соломина дудка
barba борода
belua зверь чудовище
bilis желчь
bonum добро благо
bursa кошелёк сумка
calix кубок бокал чаша
calva голый_череп лысина плешь
canis собака
canna тростник камыш
caper козёл дурной_запах_из_подмышек
capra коза дурной_запах_из_подмышек
caput голова глава столица
carbo уголь
casus падение случай грам._падеж
causa причина дело судебное_дело
cella комната кладовая
cetus кит
cibus еда пища
cista ящик сундук
civis гражданин гражданка
color цвет окраска
colus прялка
comes спутник товарищ союзник
copia запас множество обилие
cornu рог фланг
creta мел
cruor кровь_(пролитая)
culpa вина грех провинность
cunae колыбель
curia сенат курия
cutis кожа шкура
cymba лодка челнок
decus украшение почёт отличие достоинство
dicio власть
dives богач; богатый
dogma основное_положение догма
dolor боль страдание печаль
dolus хитрость лукавство козни
domus дом дворец родина
donum дар подарок
draco змей дракон
drama драма
ensis меч
eques всадник
equus конь лошадь
error ошибка заблуждение
exsul изгнанник
fagus бук
fames голод
fanum святыня храм святилище
fatum рок судьба участь
favor благосклонность
feles кошка
femur бедро
fenus «проценты» барыши
fetus зародыш плод
fides вера верность честность покровительство
filia дочь
filum нить нитка
finis граница область конец цель
focus очаг жаровня
forma форма облик образ красота
forum площадь форум рынок
fossa ров канава
fovea яма_для_ловли_зверей
fraus обман коварство
fullo сукновал суконщик
fumus дым
funda праща
funis верёвка
funus похороны
furor безумие исступление
galea шлем
gemma драгоценный камень почка_растения
gener зять
genus происхождение род, вид, порода
gutta капля слеза
hasta копьё
herba трава
heres наследник наследница
heros герой
hiems зима ненастье дождливое_время_года
honor честь почёт уважение
humus земля почва
hydra водяная_змея
ictus удар толчок
ignis огонь пожар
imago изображение картина образ
imber ливень
janua дверь
jecur печень
jocus шутка острота шалость
judex судья
jugum горная_цепь иг_(воротца_из_двух_вертикальных копий)
lacus озеро водоём
lapis камень
legio легион
lepor привлекательность красота
lepus заяц
limen порог вход
limes межа граница
linea линия черта нитка
litus берег_моря
locus место положение
lucus священная_роща
ludus игра школа
lumen свет светильник факел зрение
lupus волк
lusor шутник насмешник
lutum грязь глина
manus рука отряд
margo край поля_книги
mater мать
melos песня
mensa стол трапеза
merum чистое_(не_разбавленное_водой)_вино
metus страх
miles воин солдат
mille тысяча
mimus мим актёр пантомима
minae угрозы
mitra митра
modus мера размер способ грам._наклонение
moles тяжесть глыба громада
motio движение
mulus мул лошак
munus обязанность служба дар приношение
murus стена_(городская) вал
musca муха
nasus нос
natio племя народность народ
nauta моряк
navis корабль
nefas беззаконие грех
nemus роща
nepos внук племянник
nidus гнездо
nisus усилие напряжение
nomen имя название римское_родовое_имя
nubes облако туча
nugae пустяки
numen волеизъявление мановение божество святыня
nupta жена супруга
nutus приказазание воля жест кивок
obses заложник заложница поручитель ручательство
odium ненависть
oleum масло
oliva олива маслина оливковая_ветвь
opera работа труд (pl._рабочие)
orbis окружность круг орбита
origo начало происхождение
ortus us m происхождение, начало
otium досуг покой отдых праздность
pagus округ сельская_община село
palma ладонь пальма
panis хлеб
pater отец предок
pavor трепет ужас
pedes пешеход пехотинец
penna перо
pilum дротик
pinna перо (pl._крылья)
pinus сосна пиния
pirum груша_(плод)
pirus груша_(дерево)
plebs простой_народ плебс
pluma перо
poema поэма, стихотворение
poena наказание кара пеня казнь
poeta поэт
polus полюс небо
pomum плод
porta ворота дверь
potio питьё
prora нос_корабля
pugio кинжал
pugna битва сражение
pumex пемза
quies покой отдых спокойствие
radix корень
ramus ветвь, ветка, сук
ratio счёт подсчёт размышление рассудок разумность
ratis плот судно
ravis хрипота охриплость
regia царский_дворец
regio область местность (в Риме)_городской_район,
remex гребец
remus весло
risus смех, улыбка
ritus религиозный_обряд обычай
rivus ручей поток канал водопроводный_жёлоб
rogus костёр
ruina обвал разрушение
rumor слух молва шум слава
rupes скала утёс
saeta жёсткие_волосы щетина
sagum плащ
salus благополучие здоровье спасение
saxum скала камень
sedes местопребывание сиденье
seges нива посев
sella стул кресло
semen семя зародыш
semis половина
sermo речь язык молва беседа разговор
serva рабыня
sexus пол
sidus созвездие, светило звезда
silex булыжник кремень
silva лес
sinus изгиб впадина пазуха грудь бухта
sitis жажда
sonus звук
sopor глубокий_сон беспамятство
soror сестра
spina шип колючка заноза
stela столп столб стела надгробная_плита
sucus сок
sudor пот
summa итог сумма совокупность
sutus шкура
teges черепица покрывало циновка
telum копьё стрела меч кинжал
tepor тепло
terra земля суша страна
testa горшок кувшин
tibia свирель
tilia липа
timor страх боязнь
tonus тон звук удар
torus возвышение бугор ложе
tuber шишка опухоль горб крупный_недостаток
turba толпа стая смятение
turma турма конный_отряд_из_30_человек
turba толпа множество
ultor мститель
ulula сова
umbra тень
ursus медведь
vacca корова
vadum мелкое_место отмель брод вода
vapor пар тепло
velum парус
venia милость благодеяние прощение
vicus деревня посёлок городской_квартал
villa поместье вилла загородный_дом
vimen прут лоза
vinea виноградник
vinum вино
virga прут розга
virgo девушка
virus яд сок слизь
visus зрение вид внешность
vomer лемех
votum обет мольба стремление'''
    # чтение из файла - не наш метод
    # with open(filename, 'r', encoding='utf-8') as file:  # Получаем файл со словами для игры
    #     words = file.readlines()

    s = get_lexicon.__doc__ # получаем словарь из docstring
    words = s.split('\n')
    return [a.split()[0] for a in words] # возвращаем в основную программу список слов без перевода

def get_translation(w: str) -> list:
    '''
    Функция возвращает перевод загаданного слова
    :return: list
    '''
    s = get_lexicon.__doc__ # получаем словарь из docstring
    words = s.split('\n')
    for a in words:
        if w in a:
            return a.split()[1:]


def rules() -> None:
    '''
    Функция печатает правила игры
    :return: None
    '''
    print(f'''\nSalve, amicus (amica)!
   У вас есть 6 попыток, чтобы угадать латинское существительное из пяти букв.
   Введите одно из 280 словарных слов. Другие слова или отдельные буквы вводить нельзя.
   Рекомендуем перед началом игры загрузить словарь.
   Если какой-то буквы вашего слова нет в загаданном слове - эта буква окрасится {colored('красным', 'red')}.
   Если такая буква есть, но в другой позиции - она окрасится {colored('жёлтым', 'yellow')}.
   Если буква есть и находится в правильной позиции - она окрасится {colored('зеленым', 'green')}.
   ''')

def valid(guess: str) -> bool:
    '''
    Функция проверяет, принадлежит ли слово словарю
    :param guess: слово - догадка пользователя
    :return: bool
    '''
    if guess.lower() in only_latin:
        return True
    else:
        print('Нет такого слова')
        return False

def check(guess: str, w: str) -> str:
    '''
    Функция возвращает слово-догадку, раскрашенное согласно правилам,
    и раскрашивает алфавит
    :param guess, w: str
    :global keyboard: str
    :return: str
    '''
    global keyboard
    res = ['0','0','0','0','0'] # сюда переносим окрашенные буквы из догадки пользователя
    for i in range(len(w)):
        c = guess[i]
        if res[i] == '0':
            if c not in w:  # буквы нет в загаданном слове
                res[i] = c; res[i] = colored(res[i], 'red')
                keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'red'))
            else:
                # первым делом подсчитаем, сколько раз эта буква повторяется в ответе пользователя и в загаданном слове
                cnt_g = guess.count(c); cnt_w = w.count(c)
                ind_w = [i for i in range(len(w)) if w[i] == c] # позиции буквы в загаданном слове
                ind_g = [i for i in range(len(guess)) if guess[i] == c] # позиции буквы в догадке пользователя

                if cnt_g == cnt_w == 1: # одиночная буква
                    if w[i] != c:  # буква есть, но в другой позиции
                        res[i] = c; res[i] = colored(res[i], 'yellow')
                        keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'yellow'))
                    else:  # угадали и букву, и позицию
                        res[i] = c; res[i] = colored(res[i], 'green')
                        keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'green'))

                elif cnt_g == cnt_w and cnt_w > 1: # буква повторяется в обоих слов одинаковое число раз
                    for j in ind_w: # правильная позиция буквы
                        if j in ind_g:
                            res[j] = c; res[j] = colored(res[j], 'green')
                            ind_g.remove(j)
                    if ind_g: # оставшиеся неправильные позиции помечаем желтым
                        for j in ind_g:
                            res[j] = c; res[j] = colored(res[j], 'yellow')
                            keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'yellow'))
                    else: # все буквы на своих местах
                        keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'green'))

                elif cnt_g > cnt_w: # в догадке таких букв больше, чем в исходном слове
                    for j in ind_w: # правильная позиция буквы
                        if j in ind_g:
                            res[j] = c; res[j] = colored(res[j], 'green')
                            ind_g.remove(j)
                            ind_w.remove(j)
                    # в слове-догадке len(ind_w) таких букв отмечаем желтым и оставшиеся - красным
                    count_letters = 0
                    for j in ind_g:
                        if count_letters < len(ind_w):
                            res[j] = c; res[j] = colored(res[j], 'yellow')
                            count_letters += 1
                        else:
                            res[j] = c; res[j] = colored(res[j], 'red')
                    keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'red'))   
                else: # в догадке таких букв меньше, чем в исходном слове
                    for j in ind_w: # правильная позиция буквы
                        if j in ind_g:
                            res[j] = c; res[j] = colored(res[j], 'green')
                            ind_g.remove(j)
                    if not ind_g:
                        keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'green')) 
                    else:
                        for j in ind_g: # остальные буквы отмечаем желтым
                            res[j] = c; res[j] = colored(res[j], 'yellow')
                        keyboard = keyboard.replace(c.upper(), colored(c.upper(), 'yellow'))     
    return ''.join(res)                             

def go(w: str):
    """
    Запуск одного сеанса игры для отгадывания одного слова
    :param w: загаданное слово
    :return: None
    """
    global keyboard
    numeri_Romani = {1: 'I', 2: 'II', 3: 'III', 4: 'IIII', 5: 'V', 6: 'VI'}
    cprint(keyboard, 'white', 'on_black')
    count = 0
    while count < max_attemps:
        count += 1
        response = input(f'Попытка {numeri_Romani[count]}: ').lower()
        if not valid(response):
            continue

        if response == w:
            print("Поздравляем!!! Загаданное слово - ", end='')
            cprint(w.upper(), 'green', 'on_black', attrs=["bold"])
            break
        else:  # проверяем каждую букву в догадке пользователя
            res = check(response, w)
            print(keyboard)
            print(res)   
    else:
        print(f'Вы не угадали слово', end=' ')
        cprint(w.upper(), 'yellow','on_black', end=' ')
        print(*get_translation(w), sep=', ')

only_latin = get_lexicon() # список латинских слов

while True:  # Запуск игры
    x = input('''\nДля начала игры нажмите "enter".
Просмотр правил игры - введите "/rules".
Просмотр словаря из 280 латинских слов - введите "/dict"
Для завершения игры введите любой символ: ''')
    if 'rules' in x.lower():
        rules()
    elif 'dict' in x.lower():
        print('''\nИсточник: Латинско-Русский словарь
Автор: Аракин Владимир
Адрес книги: http://www.6lib.ru/books/latinsko_russkii_slovar_-22820.html''')
        print()
        print(get_lexicon.__doc__)   
    elif x == '':
        word = choice(only_latin) # выбор случайного слова
        go(word)
    else:
        print(colored('Bye!', 'yellow'))
        break
     

_Swetlana

Python. Вроде там есть кнопочка создать файл, автоматически создаётся файл main.

Oiseau

Тяга к лингвистике сильно коррелирует с общими проблемами с головой. (с) о. Авваль.

Меня зовут Уазо.

_Swetlana


Oiseau

Я ещё не разобрался со своим гуглом. Как получится, отпишусь. Спасибо большое!
Тяга к лингвистике сильно коррелирует с общими проблемами с головой. (с) о. Авваль.

Меня зовут Уазо.

Oiseau

#14
Screenshot_20240402_212935.jpg

Разобрался, спасибо! Дальше учиться играть.
Тяга к лингвистике сильно коррелирует с общими проблемами с головой. (с) о. Авваль.

Меня зовут Уазо.

_Swetlana

Цитата: Oiseau от 02 апреля 2024, 21:30Screenshot_20240402_212935.jpg

Разобрался, спасибо! Дальше учиться играть.
Вау!

Правила такие. Нужно писать латинское слово целиком (в любом регистре), и это слово должно быть существующее, т.е. из словаря. Одну букву писать нельзя! Только слово целиком, это слово проверяется на принадлежность словарю. Я все время подглядываю в словарь, если честно))
Теперь о раскраске. Если букву угадали и она стоит на своем месте - она становится зеленой. Если правильная буква не на своем месте - она желтая. Если такой буквы нет - она красная.

_Swetlana


Oiseau

Тяга к лингвистике сильно коррелирует с общими проблемами с головой. (с) о. Авваль.

Меня зовут Уазо.

_Swetlana


Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
ALT+S — отправить
ALT+P — предварительный просмотр