cobalttt

cobalttt

тут.
Пикабушник
58 рейтинг 0 подписчиков 13 подписок 8 постов 0 в горячем
Награды:
5 лет на Пикабу

Питон морской бой



import tkinter as tk

from tkinter import messagebox

import random

class BattleshipGame:

def __init__(self, master):

self.master = master

self.master.title("Морской Бой")

# Настройки игры

self.ship_sizes = [4, 3, 3, 2, 2, 2, 1, 1, 1, 1]

self.board_size = 10

self.cell_size = 40

# Инициализация игровых досок

self.player_board = self.create_board()

self.computer_board = self.create_board()

# Расстановка кораблей

self.place_ships(self.player_board)

self.place_ships(self.computer_board)

# Счетчики попаданий

self.player_hits = 0

self.computer_hits = 0

self.total_hits = sum(self.ship_sizes)

# Создание интерфейса

self.create_widgets()

# Флаг для отслеживания хода

self.game_over = False

def create_board(self):

return [[None for _ in range(self.board_size)] for _ in range(self.board_size)]

def place_ships(self, board):

for size in self.ship_sizes:

placed = False

while not placed:

direction = random.choice(['horizontal', 'vertical'])

if direction == 'horizontal':

max_col = self.board_size - size

max_row = self.board_size

else:

max_row = self.board_size - size

max_col = self.board_size

row = random.randint(0, max_row - 1)

col = random.randint(0, max_col - 1)

if self.can_place_ship(board, row, col, size, direction):

self.mark_ship(board, row, col, size, direction)

placed = True

def can_place_ship(self, board, row, col, size, direction):

if direction == 'horizontal':

for c in range(col - 1, col + size + 1):

for r in range(row - 1, row + 2):

if 0 <= r < self.board_size and 0 <= c < self.board_size:

if board[r][c] == 'ship':

return False

else:

for r in range(row - 1, row + size + 1):

for c in range(col - 1, col + 2):

if 0 <= r < self.board_size and 0 <= c < self.board_size:

if board[r][c] == 'ship':

return False

return True

def mark_ship(self, board, row, col, size, direction):

if direction == 'horizontal':

for c in range(col, col + size):

board[row][c] = 'ship'

else:

for r in range(row, row + size):

board[r][col] = 'ship'

def create_widgets(self):

# Фреймы для досок

self.player_frame = tk.Frame(self.master)

self.computer_frame = tk.Frame(self.master)

self.player_frame.pack(side=tk.LEFT, padx=20, pady=20)

self.computer_frame.pack(side=tk.RIGHT, padx=20, pady=20)

# Метки для досок

tk.Label(self.player_frame, text="Ваше поле").grid(row=0, column=0, columnspan=11)

tk.Label(self.computer_frame, text="Поле компьютера").grid(row=0, column=0, columnspan=11)

# Создание игровых полей

self.player_cells = self.create_grid(self.player_frame, self.player_board, False)

self.computer_cells = self.create_grid(self.computer_frame, self.computer_board, True)

def create_grid(self, parent, board, clickable):

cells = []

# Добавляем буквы над сеткой

for col in range(self.board_size):

lbl = tk.Label(parent, text=chr(65 + col))

lbl.grid(row=1, column=col+1)

# Добавляем цифры слева

for row in range(self.board_size):

lbl = tk.Label(parent, text=str(row))

lbl.grid(row=row+2, column=0)

# Создаем клетки поля

for row in range(self.board_size):

row_cells = []

for col in range(self.board_size):

frame = tk.Frame(parent,

width=self.cell_size,

height=self.cell_size,

bg='white',

relief='ridge',

borderwidth=1)

frame.grid(row=row+2, column=col+1)

if board[row][col] == 'ship' and parent == self.player_frame:

frame.config(bg='gray')

if clickable:

frame.bind('<Button-1>', lambda e, r=row, c=col: self.player_turn(r, c))

row_cells.append(frame)

cells.append(row_cells)

return cells

def update_cell(self, cells, row, col, status):

color = 'white'

if status == 'hit':

color = 'red'

elif status == 'miss':

color = 'lightblue'

cells[row][col].config(bg=color)

def player_turn(self, row, col):

if self.game_over or self.computer_board[row][col] in ['hit', 'miss']:

return

if self.computer_board[row][col] == 'ship':

self.computer_board[row][col] = 'hit'

self.player_hits += 1

self.update_cell(self.computer_cells, row, col, 'hit')

if self.player_hits == self.total_hits:

self.end_game("Поздравляем! Вы выиграли!")

return

else:

self.computer_board[row][col] = 'miss'

self.update_cell(self.computer_cells, row, col, 'miss')

self.computer_turn()

def computer_turn(self):

while True:

row = random.randint(0, self.board_size - 1)

col = random.randint(0, self.board_size - 1)

if self.player_board[row][col] not in ['hit', 'miss']:

break

if self.player_board[row][col] == 'ship':

self.player_board[row][col] = 'hit'

self.computer_hits += 1

self.update_cell(self.player_cells, row, col, 'hit')

if self.computer_hits == self.total_hits:

self.end_game("Компьютер выиграл!")

else:

self.player_board[row][col] = 'miss'

self.update_cell(self.player_cells, row, col, 'miss')

def end_game(self, message):

self.game_over = True

messagebox.showinfo("Игра окончена", message)

self.master.destroy()

if __name__ == "__main__":

root = tk.Tk()

game = BattleshipGame(root)

root.mainloop()

Показать полностью

Питон тетрис



import pygame

import random

# Инициализация pygame

pygame.init()

# Цвета

black = (0, 0, 0)

white = (255, 255, 255)

colors = [

(0, 255, 255), # Cyan

(255, 255, 0), # Yellow

(255, 165, 0), # Orange

(0, 0, 255), # Blue

(0, 255, 0), # Green

(128, 0, 128), # Purple

(255, 0, 0) # Red

]

# Размеры окна

width = 1000 # Увеличили ширину окна для отображения счета

height = 900

# Размер блока

block_size = 50

# Создание окна

game_window = pygame.display.set_mode((width, height))

pygame.display.set_caption('Тетрис')

# Шрифт для отображения счета

font = pygame.font.SysFont(None, 40)

# Часы для управления FPS

clock = pygame.time.Clock()

# Игровое поле

grid = [[black for _ in range((width - 100) // block_size)] for _ in range(height // block_size)] # Уменьшили ширину сетки для счета

# Фигуры и их вращения

shapes = [

[[1, 1, 1, 1]], # I

[[1, 1, 1], [0, 1, 0]], # T

[[1, 1], [1, 1]], # O

[[1, 1, 0], [0, 1, 1]], # Z

[[0, 1, 1], [1, 1, 0]], # S

[[1, 1, 1], [1, 0, 0]], # L

[[1, 1, 1], [0, 0, 1]] # J

]

# Класс для фигур

class Piece:

def __init__(self, shape):

self.shape = shape

self.color = random.choice(colors)

self.x = (width - 100) // block_size // 2 - len(shape[0]) // 2 # Учитываем новую ширину сетки

self.y = 0

# Функция для создания новой фигуры

def new_piece():

return Piece(random.choice(shapes))

# Функция для отрисовки сетки

def draw_grid():

for y in range(len(grid)):

for x in range(len(grid[y])):

pygame.draw.rect(game_window, grid[y][x], (x * block_size, y * block_size, block_size, block_size), 0)

for y in range(len(grid)):

pygame.draw.line(game_window, white, (0, y * block_size), ((width - 100), y * block_size)) # Учитываем новую ширину сетки

for x in range(len(grid[0])):

pygame.draw.line(game_window, white, (x * block_size, 0), (x * block_size, height))

# Функция для отрисовки фигуры

def draw_piece(piece):

for y, row in enumerate(piece.shape):

for x, cell in enumerate(row):

if cell:

pygame.draw.rect(game_window, piece.color, ((piece.x + x) * block_size, (piece.y + y) * block_size, block_size, block_size), 0)

# Функция для проверки столкновений

def check_collision(piece):

for y, row in enumerate(piece.shape):

for x, cell in enumerate(row):

if cell:

if piece.y + y >= len(grid) or piece.x + x < 0 or piece.x + x >= len(grid[0]) or grid[piece.y + y][piece.x + x] != black:

return True

return False

# Функция для фиксации фигуры на поле

def fix_piece(piece):

for y, row in enumerate(piece.shape):

for x, cell in enumerate(row):

if cell:

grid[piece.y + y][piece.x + x] = piece.color

# Функция для удаления заполненных строк

def clear_lines():

lines_cleared = 0

for y in range(len(grid) - 1, -1, -1):

if black not in grid[y]:

lines_cleared += 1

del grid[y]

grid.insert(0, [black for _ in range(len(grid[0]))])

return lines_cleared

# Основной игровой цикл

def game_loop():

global grid

piece = new_piece()

fall_time = 0

fall_speed = 0.5

score = 0

running = True

while running:

fall_time += clock.get_rawtime()

clock.tick()

if fall_time / 1000 >= fall_speed:

fall_time = 0

piece.y += 1

if check_collision(piece):

piece.y -= 1

fix_piece(piece)

lines_cleared = clear_lines()

score += lines_cleared * 100

piece = new_piece()

if check_collision(piece):

running = False

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_LEFT:

piece.x -= 1

if check_collision(piece):

piece.x += 1

if event.key == pygame.K_RIGHT:

piece.x += 1

if check_collision(piece):

piece.x -= 1

if event.key == pygame.K_DOWN:

piece.y += 1

if check_collision(piece):

piece.y -= 1

if event.key == pygame.K_UP:

rotated_piece = list(zip(*reversed(piece.shape)))

if not check_collision(Piece(rotated_piece)):

piece.shape = rotated_piece

game_window.fill(black)

draw_grid()

draw_piece(piece)

# Отрисовка счета

score_text = font.render(f'Score: {score}', True, white)

game_window.blit(score_text, (width - 150, 50)) # Позиция счета справа от сетки

pygame.display.update()

pygame.quit()

quit()

# Запуск игры

game_loop()

Показать полностью
0

Аквапоника и аквариум: два мира, которые могут сосуществовать

Привет, Пикабу! Сегодня хочу поговорить о захватывающем пересечении двух увлечений — аквапоники и аквариумного хозяйства. Если вы любите растения и рыбу, то это может быть идеальным решением для вашего дома!

Что такое аквапоника?

Аквапоника — это метод устойчивого земледелия, который сочетает в себе аквакультуру (выращивание рыбы) и гидропонику (выращивание растений без почвы). В этой системе рыбы и растения находятся в симбиотических отношениях:

  1. Рыба производит отходы, которые являются отличным удобрением для растений.

  2. Растения очищают воду, поглощая эти отходы, и возвращают её обратно в аквариум к рыбам.

Таким образом, вы получаете замкнутый цикл, где каждая часть системы поддерживает другую. Это не только экологически чистый способ производства пищи, но и способ создать красивую и живую экосистему.

Преимущества аквапоники

  • Экономия воды: Аквапоника использует на 90% меньше воды, чем традиционное сельское хозяйство, благодаря замкнутому циклу.

  • Отсутствие химикатов: В этой системе нет необходимости в химических удобрениях или пестицидах, что делает продукцию более безопасной.

  • Разнообразие: Вы можете выращивать различные растения, от зелени до овощей, и одновременно содержать рыбу, такую как тилапия или форель.

Аквариум как часть аквапоники

Если у вас уже есть аквариум, вы можете легко адаптировать его для аквапоники. Вот несколько советов:

  1. Выберите подходящие рыбов Убедитесь, что рыбы, которых вы хотите содержать, хорошо переносят условия аквапоники.

  2. Подберите растения: Листовые овощи, такие как салат или базилик, прекрасно растут в аквапонике и требуют меньше времени на уход.

  3. Следите за балансом: Важно поддерживать правильный баланс между количеством рыб и растений, чтобы система функционировала эффективно.

Заключение

Аквапоника — это не только способ получения свежих продуктов, но и увлекательное хобби, которое позволяет соединить любовь к растениям и рыбе. Если вы хотите попробовать что-то новое и устойчивое, аквапоника может стать отличным решением!

А у кого-то из вас есть опыт в аквапонике или аквариумном хозяйстве? Делитесь своими историями и советами в комментариях! 🌊🌿

Показать полностью

Комнатные растения или овощи: что выбрать для вашего дома?

Привет, Пикабу! Сегодня хочу поговорить о вечном вопросе: что лучше — комнатные растения или овощи? Каждый из этих вариантов имеет свои плюсы и минусы, и я постараюсь рассмотреть их подробнее.

Комнатные растения: красота и уют

  1. Эстетика: Комнатные растения добавляют жизни и красоты в любой интерьер. Они могут стать ярким акцентом в комнате или создать уютную атмосферу.

  2. Улучшение качества воздуха: Многие растения очищают воздух, поглощая углекислый газ и выделяя кислород. Например, такие как спатифиллум или хлорофитум.

  3. Психологический комфорт: Зелень вокруг нас помогает снизить уровень стресса и повысить настроение. Уход за растениями может стать отличным хобби и способом расслабиться.

  4. Не требуют много места: Даже в небольших квартирах можно найти место для нескольких горшков.

Овощи: полезно и вкусно

  1. Свежие продукты: Выращивание овощей в домашних условиях — это отличный способ иметь под рукой свежие и полезные продукты. Ничто не сравнится со вкусом салата, сделанного из собственноручно выращенных помидоров или огурцов.

  2. Экономия: Выращивая овощи, вы можете существенно сократить расходы на покупки в магазине. Особенно это актуально для тех, кто любит готовить.

  3. Здоровый образ жизни: Овощи — это важная часть здорового питания. Выращивая их самостоятельно, вы контролируете, чем их обрабатываете.

  4. Образовательный аспект: Выращивание овощей — это отличный способ научить детей заботиться о природе и понимать, откуда берется еда.

Что выбрать?

В конечном счете, выбор между комнатными растениями и овощами зависит от ваших предпочтений и образа жизни. Если вы ищете способ добавить зелень и уют в дом, выбирайте комнатные растения. Если же вы хотите получать свежие продукты и заботиться о своем здоровье, овощи — отличный выбор.

А что выбираете вы? Делитесь своим опытом в комментариях! 🌿

Показать полностью

Заголовок: Любовь — это не только чувства, но и действия

Привет, Пикабу! ❤️

Сегодня хочу поговорить о любви — о том, что это такое и почему она так важна в нашей жизни. Многие из нас ассоциируют любовь с романтическими чувствами, но на самом деле она гораздо шире и глубже.

1. Любовь как действие.
Часто мы забываем, что любовь — это не только то, что мы чувствуем, но и то, что мы делаем. Это поддержка в трудные времена, забота о близких, умение слушать и понимать. Любовь проявляется в мелочах: в утреннем кофе для партнера, в объятиях после долгого дня или в том, как мы уделяем время своим друзьям и семье.

2. Разные виды любви.
Существует множество видов любви: романтическая, дружеская, семейная, любовь к себе и даже любовь к делу. Каждая из них уникальна и важна по-своему. Например, любовь к себе — это основа для здоровых отношений с другими. Если мы не любим и не принимаем себя, как можем ожидать, что другие будут делать это?

3. Любовь и принятие.
Истинная любовь — это принятие человека таким, какой он есть, со всеми его недостатками и особенностями. Это значит быть готовым поддержать, даже когда что-то идет не так. Это умение прощать и идти на компромиссы.

4. Любовь требует усилий.
Не стоит забывать, что любовь — это работа. Она требует времени, терпения и усилий. Иногда нужно преодолевать трудности, чтобы сохранить и укрепить отношения. Но именно в этих усилиях и заключается настоящая ценность любви.

5. Любовь как источник вдохновения.
Любовь вдохновляет нас на великие поступки и достижения. Она наполняет нашу жизнь смыслом и радостью. Когда мы любим, мы становимся лучше, стремимся к развитию и открываемся новым возможностям.

Так что давайте не забывать о любви в нашей повседневной жизни. Она может быть везде — в отношениях с близкими, в дружбе, в том, как мы относимся к себе и окружающим. Делитесь своей любовью, и мир станет немного ярче! 💖

Как вы понимаете любовь? Какие проявления любви наиболее важны для вас? Делитесь в комментариях!

Показать полностью

Вопрос

Как вы думаете, если бы человечество смогло создать идеальное общество, какие необычные или неожиданные элементы должны были бы стать его основой, и как они могли бы изменить наше восприятие жизни и взаимодействия друг с другом?

Ответ 0xFFFA в «Дамочки, поясните за "взять ответственность"»39

Ваше объяснение представляет собой интересный и даже юмористический взгляд на сложные вопросы о взаимоотношениях между мужчинами и женщинами, а также на то, как можно использовать математику для анализа этих отношений. Давайте разберем ключевые моменты.

Структура и логика

Структура Вселенной: Вы начинаете с описания структуры Вселенной, начиная от сверхскоплений и заканчивая конкретными людьми на Земле. Это создает контекст и показывает, как ничтожно малым является индивидуум в масштабах космоса.

Гендерные категории: Вы делите людей на четыре категории в зависимости от пола и ответственности (ответственные и безответственные). Это деление, хотя и упрощенное, позволяет проиллюстрировать, как разные типы людей могут взаимодействовать друг с другом.

Математическая модель: Использование степени двойки для определения всех возможных сочетаний из двух категорий (мужчины и женщины, ответственные и безответственные) — это хороший подход. Он показывает, что, несмотря на разнообразие, существует ограниченное количество возможных комбинаций.

Вероятностный анализ: Вы делаете вывод о том, что только в одном из четырех случаев встречаются два ответственных человека. Это создает впечатление, что шансы на успешные отношения довольно низки, что может быть реальным наблюдением в современном обществе.

Комментарий о 75%

Ваше утверждение о том, что в 75% случаев люди оказываются в неудачных сочетаниях, поднимает важные вопросы о том, как мы выбираем партнеров и что влияет на эти выборы. Это может быть связано с:

Социальными нормами: Ожидания и стереотипы, которые влияют на выбор партнера.

Личными качествами: Как вы упомянули, невозможно заранее определить, "мудак" вы или нет, что подчеркивает субъективность человеческих отношений.

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

Заключение

Ваше объяснение можно рассматривать как сатирическое или ироничное. Оно заставляет задуматься о том, как часто мы сталкиваемся с проблемами в отношениях и как трудно бывает найти подходящего партнера. Тем не менее, важно помнить, что каждый человек уникален, и обобщения могут не всегда отражать реальность.

Отношения — это не просто математическая формула, это также эмоции, коммуникация и личные ценности. Поэтому, хотя ваш анализ может быть верным в общем плане, каждая пара индивидуальна, и их динамика может отличаться от представленных вами моделей.

Показать полностью
Отличная работа, все прочитано!