Разработка на Python
Игра "Жизнь" Конвея
import tkinter as tk # Импортируем библиотеку для создания графического интерфейса
import random # Для генерации случайных чисел
class GameOfLife:
def __init__(self, width=500, height=500, cell_size=10):
# Инициализация параметров окна и клеток
self.width = width
self.height = height
self.cell_size = cell_size
self.rows = height // cell_size # Количество строк
self.cols = width // cell_size # Количество столбцов
# Создаем окно приложения
self.root = tk.Tk()
self.root.title("Игра «Жизнь» Конвея")
self.canvas = tk.Canvas(self.root, width=width, height=height, bg='white')
self.canvas.pack()
# Создаем и инициализируем сетку
self.grid = [[0 for _ in range(self.cols)] for _ in range(self.rows)]
self.randomize_grid() # Заполняем сетку случайными значениями
# Запускаем анимацию
self.draw_grid()
self.animate()
self.root.mainloop()
def randomize_grid(self):
"""Заполняет сетку случайными значениями (0 - мертвая, 1 - живая клетка)"""
for row in range(self.rows):
for col in range(self.cols):
self.grid[row][col] = random.choice([0, 1])
def draw_grid(self):
"""Рисует сетку на канвасе"""
self.canvas.delete("all") # Очищаем канвас
for row in range(self.rows):
for col in range(self.cols):
# Вычисляем координаты клетки
x1 = col * self.cell_size
y1 = row * self.cell_size
x2 = x1 + self.cell_size
y2 = y1 + self.cell_size
# Рисуем клетку в зависимости от её состояния
if self.grid[row][col] == 1:
self.canvas.create_rectangle(x1, y1, x2, y2, fill='black')
else:
self.canvas.create_rectangle(x1, y1, x2, y2, fill='white')
def count_neighbors(self, row, col):
"""Подсчитывает количество живых соседей для заданной клетки"""
count = 0
for i in range(-1, 2): # Проверяем соседей сверху, снизу и по бокам
for j in range(-1, 2):
if i == 0 and j == 0: # Пропускаем саму клетку
continue
# Вычисляем координаты соседа с учетом цикличности
neighbor_row = (row + i) % self.rows
neighbor_col = (col + j) % self.cols
count += self.grid[neighbor_row][neighbor_col]
return count
def next_generation(self):
"""Вычисляет следующее поколение клеток"""
new_grid = [[0 for _ in range(self.cols)] for _ in range(self.rows)]
for row in range(self.rows):
for col in range(self.cols):
live_neighbors = self.count_neighbors(row, col)
# Применяем правила Конвея
if self.grid[row][col] == 1: # Для живых клеток
if live_neighbors < 2 or live_neighbors > 3:
new_grid[row][col] = 0 # Смерть от одиночества или перенаселения
else:
new_grid[row][col] = 1 # Продолжаем жить
else: # Для мертвых клеток
if live_neighbors == 3:
new_grid[row][col] = 1 # Рождение новой клетки
self.grid = new_grid # Обновляем сетку
def animate(self):
"""Запускает анимацию следующего поколения"""
self.next_generation() # Вычисляем следующее поколение
self.draw_grid() # Отрисовываем новое состояние
# Запланируем следующий кадр через 100 мс
self.root.after(100, self.animate)
# Функция для запуска игры
if __name__ == "__main__":
# Создаем экземпляр игры с параметрами по умолчанию
game = GameOfLife(
width=500, # Ширина окна
height=500, # Высота окна
cell_size=10 # Размер одной клетки
)
Игра "Жизнь" Конвея
Привет, друзья!
Давайте погрузимся в удивительное путешествие в мир клеточных автоматов и попробуем понять, как простая математическая игра может заставить нас задуматься о фундаментальных вопросах бытия.
Кто такой Джон Конвей?
Представьте себе математика, который решил поиграть в творца жизни. Этим математиком был Джон Хортон Конвей. Он создал игру, которая, несмотря на свою простоту, смогла отразить удивительные аспекты реальной жизни.
Что такое «Игра Жизни»?
Это не просто игра — это целая вселенная, живущая по своим правилам:
- Простые правила, но сложное поведение
- Самоорганизация без центрального управления
- Эмерджентность — появление новых свойств из простых взаимодействий
Как это работает?
В игре всего четыре основных правила:
- Клетка выживает, если у неё 2 или 3 соседа
- Клетка умирает от одиночества (меньше 2 соседей)
- Клетка умирает от перенаселения (больше 3 соседей)
- Пустая клетка оживает, если у неё ровно 3 соседа
Почему это важно?
Эта игра показала, что:
- Простые системы могут создавать сложное поведение
- Жизнь можно моделировать математически
- Из хаоса может возникать порядок
И вот тут начинается самое интересное! Если простая компьютерная игра может имитировать жизнь, то может ли наша реальность быть похожей игрой, только с гораздо более сложными правилами?
Игра «Жизнь» Конвея — это не просто математическая абстракция. Это приглашение задуматься о том, как устроена наша реальность и насколько сложными могут быть простые системы.
А что вы думаете на эту тему? Может ли наша жизнь быть частью какой-то огромной игры со сложными правилами?
(Заинтриговало? Завтра мы соберём свою игру! Не пропустите!)
CuberShield
Всем привет! Мы начали разработку самого крутого анализатора вирусов! Весь исходный код открыт!
Хотите установить его или ознакомится с темой разработки антивирусов, то переходите в мой репозиторий на github:
https://github.com/evgeniy29-git/CuberShield_0.1/blob/main/CyberShield.py
(Не забывайте про звёздочки)
Auto-py-to-exe
Продолжаем тему преобразования кода в exe...
По-моему, эта штука даже круче)
Pyinstaller
Всем привет, сегодня вы узнаете как конвертировать py-скрипты в exe-файлы. Это будет необходимо сделать, если вы, например, захотите заразить малварью ноут друга, а у него нет Python...
(VPN не забудьте включить, а то видео с Ютуба)
Pydroid
Я думаю, что многим хотелось бы использовать телефон как машину для программирования. Ведь не во всех есть ПК, ноутбуки... Да и просто, телефон всегда под рукой, а компьютер в карман не положишь;) Поэтому я и решил написать статью про программирование на Pydroid.
Pydroid 3 — это IDE для Python на устройствах Android.
Она позволяет писать и запускать код Python на телефоне или планшете.
Основные особенности:
- поддержка Python 3.8;
- инструмент pip для установки пакетов из предварительно созданного репозитория или из исходного кода;
- простой редактор кода;
- эмулятор терминала;
- веб-браузер для запуска скриптов Python.
Pydroid 3 доступен бесплатно в Google Play Store.
Ознакомиться с pydroid можете здесь.