Найти в Дзене
Исследования игр в интернете

Исследования игр в интернете

К материалам книги "Вкусной книги о маленьких и здоровых играх"
подборка · 36 материалов
Логические лабиринты с ограничением выбора хода на примере головоломки "Labyrinth 1-2-3"
Лабиринты, как в физической, так и в абстрактной форме, являются одним из древнейших инструментов для развития логического мышления, пространственного воображения и стратегического планирования. От мифологического Лабиринта Минотавра до современных цифровых алгоритмов поиска пути, эта структура неизменно привлекает внимание математиков, инженеров, психологов и разработчиков игр. Особый интерес представляют механические головоломки, которые материализуют абстрактную задачу поиска маршрута, добавляя к ней физическое взаимодействие...
Математика дружбы и предательства: как теория игр объясняет, почему мы не можем договориться
Представьте себе трех друзей-предпринимателей — Анну, Бориса и Василия. Они провернули отличную сделку и теперь делят 200 тысяч евро прибыли. Казалось бы, что может быть проще? Но именно в этот момент математика перестает быть сухой наукой о цифрах и превращается в захватывающую драму об альянсах, блефе и поиске справедливости. Чтобы разобраться в их споре, нам понадобится раздел математики под названием «теория коалиционных (или кооперативных) игр». Ее основоположники, Джон фон Нейман и Оскар Моргенштерн,...
За горизонтом стандартной сетки: обзор вариаций игры «Морской бой»
Классическая игра «Морской бой» на листе в клетку знакома нескольким поколениям. Однако её базовая механика — поиск статичных объектов на координатной плоскости — служит отличной основой для множества стратегических модификаций. Изменение размеров поля, введение новых типов объектов и дополнительных правил способно превратить простую игру на удачу в глубокий тактический поединок. Ниже представлен анализ наиболее интересных вариантов модификации игрового процесса. 1. Геометрия моря: изменение размера сетки Стандартное поле 10x10 задает определенный темп партии...
24 игры, в которые можно сыграть в веселой компании
Представьте, что вы пытаетесь запихнуть в рот как можно больше зефира, а затем произнести что-нибудь смешное. Звучит просто, не так ли? Что ж, подумайте ещё раз! «Набей рот!» — это весёлая игра, в которой у участников есть одна минута, чтобы набить рот большими воздушными зефиринами. Когда рот будет набит до отказа, участники должны произнести смешную фразу или реплику из фильма. Эта игра наверняка заставит всех смеяться, а значит, станет идеальным способом завязать разговор. Эта игра не только забавная,...
import re from collections import Counter # Список скороговорок tongue_twisters = [    "На дворе трава, на траве дрова: не руби дрова на траве двора.",    "Шла Саша по шоссе и сосала сушку.",    "Карл у Клары украл кораллы, а Клара у Карла украла кларнет.",    "От топота копыт пыль по полю летит.",    "Ехал Грека через реку, видит Грека — в реке рак. Сунул Грека руку в реку, рак за руку Греку цап!",    "Кукушка кукушонку купила капюшон. Как в капюшоне он смешон.",    "В недрах тундры выдры в гетрах тырят в вёдра ядра кедров.",    "Корабли лавировали, лавировали, да не вылавировали.",    "Расскажите про покупки! — Про какие про покупки? — Про покупки, про покупки, про покупочки свои.",    "Бык тупогуб, тупогубенький бычок, у быка бела губа была тупа." ] results = [] for s in tongue_twisters:    # Оставляем только буквы, приводим к нижнему регистру    letters = re.findall(r'[а-яё]', s.lower())    total_letters = len(letters)    counter = Counter(letters)    # Сортируем по убыванию количества, затем по алфавиту для стабильности    top3 = sorted(counter.items(), key=lambda x: (-x[1], x[0]))[:3]    results.append({    'text': s,    'total': total_letters,    'top3': top3    }) for r in results:    print(f"«{r['text']}»")    print(f"Общее число букв: {r['total']}")    top_str = ', '.join([f"{ch} — {cnt}" for ch, cnt in r['top3']])    print(f"Три самые частые буквы: {top_str}\n") Подсчёт букв в скороговорках: 1.   «На дворе трава, на траве дрова: не руби дрова на траве двора.» o   Общее число букв: 47. o   Три самые частые буквы: а — 10, р — 8, в — 7. 2.   «Шла Саша по шоссе и сосала сушку.» o   Общее число букв: 26. o   Три самые частые буквы: с — 6, а — 5, ш — 4. 3.   «Карл у Клары украл кораллы, а Клара у Карла украла кларнет.» o   Общее число букв: 47. o   Три самые частые буквы: а — 12, л — 9, к — 8. 4.   «От топота копыт пыль по полю летит.» o   Общее число букв: 28. o   Три самые частые буквы: о — 6, т — 6, п — 5. 5.   «Ехал Грека через реку, видит Грека — в реке рак. Сунул Грека руку в реку, рак за руку Греку цап!» o   Общее число букв: 72. o   Три самые частые буквы: р — 12, е — 11, к — 11. 6.   «Кукушка кукушонку купила капюшон. Как в капюшоне он смешон.» o   Общее число букв: 49. o   Три самые частые буквы: к — 11, у — 6, а — 5. 7.   «В недрах тундры выдры в гетрах тырят в вёдра ядра кедров.» o   Общее число букв: 46. o   Три самые частые буквы: р — 8, в — 6, д — 6. 8.   «Корабли лавировали, лавировали, да не вылавировали.» o   Общее число букв: 43. o   Три самые частые буквы: а — 8, в — 7, и — 7. 9.   «Расскажите про покупки! — Про какие про покупки? — Про покупки, про покупки, про покупочки свои.» o   Общее число букв: 74. o   Три самые частые буквы: п — 16, к — 13, о — 13. 10. «Бык тупогуб, тупогубенький бычок, у быка бела губа была тупа.» o   Общее число букв: 49. o   Три самые частые буквы: б — 8, у — 7, а — 5.
import pygame import sys import random # --- Настройки --- GRID_SIZE = 15   # Размер сетки (15x15) CELL_SIZE = 40   # Размер одной клетки в пикселях WINDOW_WIDTH = GRID_SIZE * CELL_SIZE WINDOW_HEIGHT = GRID_SIZE * CELL_SIZE FPS = 60 # Цвета спрайтов (ключ - значение в массиве, значение - цвет RGB) SPRITE_COLORS = {    0: (50, 50, 50),   # Темно-серый    1: (200, 60, 60),   # Красный    2: (60, 200, 60),   # Зеленый    3: (60, 60, 200),   # Синий    4: (220, 220, 80)   # Желтый } SELECTED_BORDER_COLOR = (255, 255, 255) # Белый цвет рамки выделения BORDER_THICKNESS = 3   # Толщина рамки def create_grid(rows, cols):    """Генерирует сетку rows x cols со случайными значениями от 0 до 4."""    return [[random.randint(0, len(SPRITE_COLORS) - 1) for _ in range(cols)] for _ in range(rows)] def get_cell_from_mouse(pos):    """    Преобразует пиксельные координаты мыши в индексы ячейки сетки.    Возвращает кортеж (row, col).    """    x, y = pos    if 0 <= x < WINDOW_WIDTH and 0 <= y < WINDOW_HEIGHT:    return y // CELL_SIZE, x // CELL_SIZE    return None def main():    pygame.init()    screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))    pygame.display.set_caption("Выбор спрайта на сетке 15x15")    clock = pygame.time.Clock()    # Создаем наш массив данных 15x15    grid_data = create_grid(GRID_SIZE, GRID_SIZE)    selected_cell = None # Хранит кортеж (row, col) выбранной ячейки или None    running = True    while running:    for event in pygame.event.get():    if event.type == pygame.QUIT:    running = False    elif event.type == pygame.MOUSEBUTTONDOWN:    if event.button == 1: # Левая кнопка мыши    cell_coords = get_cell_from_mouse(event.pos)    if cell_coords is not None:    row, col = cell_coords    selected_cell = (row, col)    value = grid_data[row][col]    print(f"Выбрана ячейка: Строка {row}, Столбец {col} (индекс [{row}][{col}])")    print(f"Значение в массиве: {value}")    # --- Отрисовка ---    screen.fill((30, 30, 30)) # Фон игрового поля    # Рисуем все спрайты (квадраты)    for row in range(GRID_SIZE):    for col in range(GRID_SIZE):    value = grid_data[row][col]    color = SPRITE_COLORS.get(value, (255, 0, 255)) # Маджента если ключа нет    rect = pygame.Rect(    col * CELL_SIZE,    row * CELL_SIZE,    CELL_SIZE,    CELL_SIZE    )    pygame.draw.rect(screen, color, rect)    # Если выбрана ячейка, рисуем поверх нее рамку    if selected_cell is not None:    row, col = selected_cell    highlight_rect = pygame.Rect(    col * CELL_SIZE + BORDER_THICKNESS // 2,    row * CELL_SIZE + BORDER_THICKNESS // 2,    CELL_SIZE - BORDER_THICKNESS,    CELL_SIZE - BORDER_THICKNESS    )    pygame.draw.rect(screen, SELECTED_BORDER_COLOR, highlight_rect, width=BORDER_THICKNESS)    # Опциональная сетка для лучшей видимости границ    for i in range(GRID_SIZE + 1):    line_color = (60, 60, 60)    # Горизонтальные линии    pygame.draw.line(screen, line_color, (0, i * CELL_SIZE), (WINDOW_WIDTH, i * CELL_SIZE), 1)    # Вертикальные линии    pygame.draw.line(screen, line_color, (i * CELL_SIZE, 0), (i * CELL_SIZE, WINDOW_HEIGHT), 1)    pygame.display.flip()    clock.tick(FPS)    pygame.quit()    sys.exit() if __name__ == '__main__':    main()