И в голове заиграл звук загрузки игры с аудиокассеты и пк Байт)
Что-то модно а что-то вечно!
Что-то модно а что-то вечно!
Аплинк тема, ИИ на последнем этапе победил? Он меня все время отслеживал, мне тагда было 13 лет. Я забил. Еще багов много, а с GPRS сливать новую версию в 20-30 мегабайт можно было по 1-2 суток, такой был коннект в моем гетто. =(Uplink по-интереснее... для OLDскулов)
main.py:import sys
import random
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QPushButton, QVBoxLayout,
QLineEdit, QTextEdit, QGridLayout, QProgressBar, QHBoxLayout)
from PyQt6.QtCore import Qt, QTimer
from PyQt6.QtGui import QFont, QColor
import traceback
# Определение класса HackerGame
class HackerGame(QWidget):
COLORS = {
"success": "#00FF00", # Неоново-зеленый
"error": "#FF0000", # Ярко-красный
"info": "#00FFFF", # Голубой электрик
"warning": "#FFFF00", # Ярко-желтый
"event": "#FFA500", # Оранжевый
"default": "#E0E0E0", # Светло-серый для общего текста
}
def reset_bitcoin(self):
self.bitcoin_balance = 0
self.print_message("Ваш баланс BTC сброшен до 0!", "error")
self.update_status()
def add_usd(self, amount):
# Убедимся, что USD существует в списке криптовалют
if "USD" in self.cryptocurrencies:
self.cryptocurrencies["USD"]["balance"] += amount
self.print_message(f"Баланс USD изменен на {amount}. Текущий баланс: {self.cryptocurrencies['USD']['balance']:.2f} USD", "info")
self.update_status()
else:
self.print_message("Ошибка: Валюта USD не инициализирована.", "error")
def boost_overall_speed(self, amount):
# Здесь мы увеличиваем множитель скорости.
# Например, если 'amount' это 10, то увеличиваем на 0.1
self.speed_multiplier += amount / 100.0
self.print_message(
f"Общая скорость действий увеличена на {amount}%. Текущий множитель: {self.speed_multiplier:.2f}x",
"success")
self.update_status()
def add_skill(self, skill_name, amount):
if skill_name in self.skills:
self.skills[skill_name] += amount
self.print_message(f"Навык '{skill_name}' увеличен на {amount}. Текущий уровень: {self.skills[skill_name]}", "success")
self.update_status()
else:
self.print_message(f"Ошибка: Навык '{skill_name}' не найден.", "error")
def start_random_events(self):
self.event_timer = QTimer(self)
self.event_timer.timeout.connect(self.trigger_random_event)
self.event_timer.start(1000)
self.total_events = random.randint(10, 30)
self.events_triggered = 0
def update_crypto_prices(self):
for currency, data in self.cryptocurrencies.items():
if currency != "USD": # Не меняем цену USD
change = random.uniform(-0.1, 0.1)
data["price"] = int(data["price"] * (1 + change))
self.update_status()
def __init__(self):
super().__init__()
self.software_level = 1
self.reputation = 0
self.btc_price = 1000 # <--- Добавил инициализацию btc_price
self.bitcoin_balance = 1000 # <--- Добавили инициализацию bitcoin_balance
self.cryptocurrencies = {
"USD": {"balance": 10000, "price": 1}, # Начальный баланс USD
"BTC": {"balance": 0, "price": self.btc_price},
# ... другие криптовалюты ...
}
self.speed_multiplier = 1.0
self.target_ip = self.generate_ip()
self.password = self.generate_password()
self.hacks_remaining = 3
self.bitcoin_balance = 1000
self.btc_price = 1000 # Начальная цена BTC
self.timer = QTimer(self)
self.timer.timeout.connect(self.passive_income)
self.timer.start(5000)
self.market_timer = QTimer(self)
self.market_timer.timeout.connect(self.update_market)
self.market_timer.start(10000)
self.btc_price_timer = QTimer(self)
self.btc_price_timer.timeout.connect(self.update_btc_price)
self.btc_price_timer.start(60000)
self.crypto_price_timer = QTimer(self)
self.crypto_price_timer.timeout.connect(self.update_crypto_prices)
self.crypto_price_timer.start(30000) # Обновляем цены каждые 30 секунд
try:
self.initUI()
except Exception as e:
print(f"Ошибка в initUI(): {e}")
traceback.print_exc()
self.print_welcome_message()
self.show() # Можно убрать, если уже есть в initUI (см. ниже)
self.start_random_events()
self.events = events = [
("Вы нашли уязвимость в системе! +150 BTC", lambda: self.add_bitcoin(150), "success"),
("Антивирус засек вашу активность! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Хакерское сообщество оценило ваши навыки! +5 REP", lambda: self.add_reputation(5), "success"),
("Случайный сбой в системе! Временное ускорение майнинга! +10% к скорости на 5 минут",
lambda: self.temporary_boost(0.1, 300), "info"), # временный буст на 10% на 5 минут (300 секунд)
("Вас атаковали! -25 BTC", lambda: self.add_bitcoin(-25), "warning"),
("Вы получили анонимный перевод! +100 BTC", lambda: self.add_bitcoin(100), "info"),
("Ваша репутация упала из-за слухов! -2 REP", lambda: self.add_reputation(-2), "warning"),
("Вы нашли скрытую информацию! +250 BTC", lambda: self.add_bitcoin(250), "success"),
("Вы взломали систему защиты банка! +1000 BTC, но ваша репутация упала на 20 REP!",
lambda: (self.add_bitcoin(1000), self.add_reputation(-20)), "success"), # Высокий риск, высокая награда
("Вас заметили! Полиция ищет вас! -500 BTC!", lambda: self.add_bitcoin(-500), "error"),
# Высокий риск, высокая потеря
("Вы нашли скрытую информацию о новой криптовалюте! +5000 USD", lambda: self.add_usd(5000), "success"),
# Добавили возможность получить USD
("Сервер перегружен, майнинг приостановлен на 1 минуту!",
lambda: self.print_message("Майнинг приостановлен на 1 минуту", "warning"), "warning"),
# событие без финансовых последствий
("Вы помогли другу-хакеру! +10 REP и 50 BTC", lambda: (self.add_reputation(10), self.add_bitcoin(50)),
"success"),
("Ваши навыки улучшились! +1 к уровню взлома!", lambda: self.add_skill("hack", 1), "success"),
# добавили прокачку навыков
("Вы установили новый рекорд скорости взлома! +100 BTC!", lambda: self.add_bitcoin(100), "success"),
# событие, зависящее от скорости
("Ваш кот сел на клавиатуру и запустил программу-майнер! +10 BTC", lambda: self.add_bitcoin(10), "success"),
("Вы случайно удалили системный файл! -5 REP", lambda: self.add_reputation(-5), "error"),
("Хакерское сообщество оценило ваши навыки! +15 REP", lambda: self.add_reputation(15), "success"),
("Вы выиграли в онлайн-покер на BTC! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Вас атаковали! -15 BTC", lambda: self.add_bitcoin(-15), "warning"),
("Вы нашли баг в игре и получили за него бонус! +50 BTC", lambda: self.add_bitcoin(50), "success"),
("Ваш компьютер завис на котиках! -10 минут времени",
lambda: self.print_message("Компьютер завис на 10 минут!", "error"), "error"),
("Вы случайно отправили BTC на благотворительность! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Вас заметили в тёмной сети! +50 REP", lambda: self.add_reputation(50), "success"),
("Вы обнаружили секретный чат с важной информацией! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Ваш VPN отключился! -20 REP", lambda: self.add_reputation(-20), "error"),
("Вы написали вирус, который заразил весь интернет! +2000 BTC", lambda: self.add_bitcoin(2000), "success"),
("Вы спасли мир от кибер-апокалипсиса! +10000 BTC", lambda: self.add_bitcoin(10000), "success"),
("Вы случайно запустили антивирус! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Вы стали популярным в TikTok, и теперь вас ищут! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
("Вы выиграли в лотерею 1000 USD", lambda: self.add_usd(1000), "success"),
("Вас ограбили в реальной жизни! -500 USD", lambda: self.add_usd(-500), "error"),
("Вы нашли купон на скидку в магазине электроники! +10% на следующую покупку",
lambda: self.print_message("Получен купон на скидку! +10%", "success"), "success"),
("Вы обнаружили новый эксплойт! +250 BTC", lambda: self.add_bitcoin(250), "success"),
("Ваш компьютер сломался от перенапряжения! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
("Вы купили новый мощный процессор! +10 к скорости взлома", lambda: self.boost_overall_speed(10), "success"),
("У вас украли аккаунт в социальной сети! -10 REP", lambda: self.add_reputation(-10), "error"),
("Вы стали героем хакерского сообщества! +2000 REP", lambda: self.add_reputation(2000), "success"),
("Вы потеряли все свои BTC в мошеннической схеме! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Вы нашли 1 BTC на улице!", lambda: self.add_bitcoin(1), "success"),
("Ваши родители обнаружили, что вы хакер! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Вы создали игру, которая стала мировым хитом! +100000 BTC", lambda: self.add_bitcoin(100000), "success"),
("Вы случайно вызвали зомби-апокалипсис! -ALL BTC", lambda: self.reset_bitcoin(), "error"),
("У вас появился новый домашний питомец, который жуёт провода! -20 REP", lambda: self.add_reputation(-20),
"error"),
("Вы заработали деньги, участвуя в Bug Bounty Program! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Вы случайно отправили сообщение в не тот чат! -10 REP", lambda: self.add_reputation(-10), "error"),
("Ваши навыки взлома резко повысились! +20 к скорости", lambda: self.boost_overall_speed(20), "success"),
("Вы выиграли в конкурсе хакерских навыков! +5000 BTC", lambda: self.add_bitcoin(5000), "success"),
("Вы купили новый монитор с изогнутым экраном! +5 к комфорту работы",
lambda: self.print_message("+5 к комфорту работы!", "success"), "success"),
("Ваша мать нашла ваш секретный ноутбук! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Вы провели успешную DDoS атаку на сервер конкурентов! +1000 BTC", lambda: self.add_bitcoin(1000),
"success"),
("Ваша система безопасности взломана! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Вы случайно создали мем, который стал вирусным! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Вы стали жертвой фишинга! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Вы встретили своего кумира, известного хакера! +100 REP", lambda: self.add_reputation(100), "success"),
("Вы потеряли флешку с важными данными! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Вы получили приглашение на закрытую конференцию хакеров! +1000 REP", lambda: self.add_reputation(1000),
"success"),
("Твой кот на клавиатуре устроил рейв! +10 BTC", lambda: self.add_bitcoin(10), "success"),
("Лол, снесли систему! -5 репы", lambda: self.add_reputation(-5), "error"),
("Заценили скиллы! +15 репы", lambda: self.add_reputation(15), "success"),
("Выйграл в покер на битке! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Забанили акк! -15 BTC", lambda: self.add_bitcoin(-15), "warning"),
("Нашел баг, дали премию! +50 BTC", lambda: self.add_bitcoin(50), "success"),
("Комп завис на котах! -10 минут жизни", lambda: self.print_message("Комп завис на 10 минут!", "error"),
"error"),
("Кинул битки на благотворительность! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Засветился в даркнете! +50 репы", lambda: self.add_reputation(50), "success"),
("Нарыл инфу! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("VPN полетел! -20 репы", lambda: self.add_reputation(-20), "error"),
("Написал вирус! +2000 BTC (осторожно!)", lambda: self.add_bitcoin(2000), "success"),
("Спас мир от вируса! +10000 BTC", lambda: self.add_bitcoin(10000), "success"),
("Случайно запустил антивирусник! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Взорвал ТикТок! Теперь ищут! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
("Выйграл в лото 1000 баксов!", lambda: self.add_usd(1000), "success"),
("Ограбили в реале! -500 USD", lambda: self.add_usd(-500), "error"),
("Купон на скидку! +10% на следующую покупку",
lambda: self.print_message("Купон на скидку +10%!", "success"), "success"),
("Нашел новый эксплойт! +250 BTC", lambda: self.add_bitcoin(250), "success"),
("Комп сгорел! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
("Новый процессор! +10 к скорости", lambda: self.boost_overall_speed(10), "success"),
("Украли акк в соцсетях! -10 репы", lambda: self.add_reputation(-10), "error"),
("Стар стал популярным! +2000 репы", lambda: self.add_reputation(2000), "success"),
("Все битки слил в лохотрон! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Нашел биток на улице!", lambda: self.add_bitcoin(1), "success"),
("Родители узнали, что ты хакер! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Сделал игру-хит! +100000 BTC", lambda: self.add_bitcoin(100000), "success"),
("Случайно вызвал зомби-апокалипсис! -ALL BTC", lambda: self.reset_bitcoin(), "error"),
("Питомец грызет провода! -20 репы", lambda: self.add_reputation(-20), "error"),
("Заработал на баг-баунти! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Написал в не тот чат! -10 репы", lambda: self.add_reputation(-10), "error"),
("Скиллы прокачались! +20 к скорости", lambda: self.boost_overall_speed(20), "success"),
("Выйграл на хакатоне! +5000 BTC", lambda: self.add_bitcoin(5000), "success"),
("Крутой изогнутый монитор! +5 к комфорту", lambda: self.print_message("+5 к комфорту!", "success"),
"success"),
("Мамка нашла ноут! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Устроил DDoS! +1000 BTC", lambda: self.add_bitcoin(1000), "success"),
("Систему взломали! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Мем стал вирусным! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Стал жертвой фишинга! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Встретил кумира! +100 репы", lambda: self.add_reputation(100), "success"),
("Потерял флешку! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Пригласили на конферецию! +1000 репы", lambda: self.add_reputation(1000), "success"),
("Залили кофе на клаву! -10 репы", lambda: self.add_reputation(-10), "error"),
("Нашел заначку на старых дискетах! +5 BTC", lambda: self.add_bitcoin(5), "success"),
("Посылка с 200 баксами!", lambda: self.add_usd(200), "success"),
("Кот удалил систему! -ALL BTC", lambda: self.reset_bitcoin(), "error"),
("Удалил хард! -1000 репы", lambda: self.add_reputation(-1000), "error"),
("0-day эксплойт! +1000 BTC", lambda: self.add_bitcoin(1000), "success"),
("Нет интернета! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Помог другу с кодом! +10 репы", lambda: self.add_reputation(10), "success"),
("Обнова убила систему! -10 репы", lambda: self.add_reputation(-10), "error"),
("Выйграл на конкурсе! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Процесс жрет ОЗУ! -20 репы", lambda: self.add_reputation(-20), "error"),
("Нашел старый биткоин-кошелек! +1 BTC", lambda: self.add_bitcoin(1), "success"),
("Пароль слили! -500 репы", lambda: self.add_reputation(-500), "error")
]
if hasattr(self, "passive_income"):
self.timer = QTimer(self)
self.timer.timeout.connect(self.passive_income)
self.timer.start(5000)
else:
raise AttributeError("Метод passive_income не определен.")
# Второй таймер
self.market_timer = QTimer(self)
self.market_timer.timeout.connect(self.update_market)
self.market_timer.start(10000)
def update_crypto_prices(self):
for currency, data in self.cryptocurrencies.items():
change = random.uniform(-0.1, 0.1) # Изменение от -10% до +10%
data["price"] = int(data["price"] * (1 + change))
self.update_status()
commands = {
# ... другие команды ...
"buy": self.buy_crypto,
"sell": self.sell_crypto,
}
self.skills = {
"взлом": 1,
"криптография": 1,
"сетевая защита": 1,
"социальная инженерия": 1
}
self.equipment = {
"процессор": {"уровень": 1, "название": "Intel 386"},
"память": {"уровень": 1, "название": "1 MB RAM"},
"сеть": {"уровень": 1, "название": "Модем 14.4k"}
}
self.achievements = set()
self.current_mission = None
self.mission_progress = 0
# Торговая площадка
self.market = {
"софт": {
"брутфорс": {"цена": 1000, "уровень": 1},
"антивирус": {"цена": 800, "уровень": 1},
"файрвол": {"цена": 1200, "уровень": 1}
},
"железо": {
"процессор": {"цена": 2000, "базовый_множитель": 1.5},
"память": {"цена": 1500, "базовый_множитель": 1.3},
"сеть": {"цена": 1800, "базовый_множитель": 1.4}
}
}
# Список доступных миссий
self.available_missions = [
{
"название": "Взлом банкомата",
"сложность": 1,
"награда": 500,
"репутация": 10,
"требования": {"взлом": 2}
},
{
"название": "Взлом соцсети",
"сложность": 2,
"награда": 1000,
"репутация": 20,
"требования": {"социальная инженерия": 2}
},
{
"название": "Корпоративный шпионаж",
"сложность": 3,
"награда": 2000,
"репутация": 30,
"требования": {"криптография": 3}
}
]
self.timer = QTimer(self)
self.timer.timeout.connect(self.passive_income)
self.timer.start(5000)
self.market_timer = QTimer(self)
self.market_timer.timeout.connect(self.update_market)
self.market_timer.start(10000)
def initUI(self):
# Стилевая таблица для "Терминала Прошлого"
self.setStyleSheet("""
QWidget {
background-color: #0A0A0A; /* Глубокий черный фон для всего окна */
color: #00FF00; /* Яркий неоново-зеленый текст по умолчанию */
font-family: 'Consolas', 'DejaVu Sans Mono', 'Source Code Pro', monospace; /* Моноширинные шрифты */
font-size: 14px;
}
QTextEdit {
border: 2px solid #005500; /* Темно-зеленая рамка для области вывода */
padding: 10px; /* Отступы текста от рамки */
background-color: #000000; /* Черный фон для области вывода */
selection-background-color: #008800; /* Цвет выделения текста */
color: #00FF00; /* Основной цвет текста вывода */
}
QLineEdit {
border: 2px solid #00AA00; /* Более яркая зеленая рамка для поля ввода */
padding: 8px; /* Отступы текста от рамки */
background-color: #000000; /* Черный фон для поля ввода */
selection-background-color: #008800;
caret-color: #FFFF00; /* Желтый мигающий курсор */
color: #00FF00; /* Цвет текста ввода */
}
QProgressBar {
border: 2px solid #00AA00; /* Зеленая рамка для прогресс-бара */
text-align: center; /* Текст в центре */
color: #FFFFFF; /* Белый текст на прогресс-баре */
background-color: #333333; /* Темный фон для незаполненной части */
}
QProgressBar::chunk {
background-color: #00FF00; /* Ярко-зеленый заполняющий цвет прогресс-бара */
}
QLabel {
color: #00FFFF; /* Голубой цвет для меток статуса вверху (BTC, REP и т.д.) */
font-weight: bold; /* Жирный текст для меток */
padding: 2px 5px; /* Небольшие отступы */
}
""")
layout = QVBoxLayout()
# Статус бар вверху (отображает основные показатели)
status_top_layout = QHBoxLayout() # Используем горизонтальный макет для меток статуса
self.status_labels = {
"bitcoin": QLabel(f"BTC: {self.bitcoin_balance:.2f}"), "usd": QLabel(f"USD: {self.cryptocurrencies['USD']['balance']:.2f}"), # Добавлена метка для USD
"reputation": QLabel(f"REP: {self.reputation}"),
"level": QLabel(f"LVL: {self.software_level}"),
"btcp": QLabel(f"BTC/USD: {self.btc_price:.2f}"), # Цена BTC
}
for key, label in self.status_labels.items():
status_top_layout.addWidget(label)
status_top_layout.addStretch(1) # Растягиваем, чтобы метки были слева
layout.addLayout(status_top_layout) # Добавляем горизонтальный макет в основной вертикальный
# Основной вывод
self.output = QTextEdit()
self.output.setReadOnly(True)
layout.addWidget(self.output)
# Прогресс текущей миссии
self.mission_progress_bar = QProgressBar()
self.mission_progress_bar.setVisible(False)
layout.addWidget(self.mission_progress_bar)
# Ввод команд
self.command_input = QLineEdit()
self.command_input.returnPressed.connect(self.process_command)
layout.addWidget(self.command_input)
self.setLayout(layout)
self.setWindowTitle("H4CK3R 2.9 - TERMINAL")
self.setMinimumSize(900, 650) # Увеличил размер окна для лучшего вида
def buy_crypto(self, currency, amount):
if currency not in self.cryptocurrencies:
self.print_message(f"Криптовалюта {currency} не найдена.", "error")
return
amount = float(amount)
cost = amount * self.cryptocurrencies[currency]["price"]
if self.cryptocurrencies["USD"]["balance"] < cost:
self.print_message(f"Недостаточно USD для покупки {currency}.", "error")
return
self.cryptocurrencies["USD"]["balance"] -= cost
self.cryptocurrencies[currency]["balance"] += amount
self.print_message(f"Вы купили {amount} {currency} за {cost} USD.", "success")
self.update_status()
def sell_crypto(self, currency, amount):
if currency not in self.cryptocurrencies:
self.print_message(f"Криптовалюта {currency} не найдена.", "error")
return
amount = float(amount)
if self.cryptocurrencies[currency]["balance"] < amount:
self.print_message(f"Недостаточно {currency} для продажи.", "error")
return
revenue = amount * self.cryptocurrencies[currency]["price"]
self.cryptocurrencies["USD"]["balance"] += revenue
self.cryptocurrencies[currency]["balance"] -= amount
self.print_message(f"Вы продали {amount} {currency} за {revenue} USD.", "success")
self.update_status()
shop = {
"car": {"price": 50000, "boost": {"speed": 0.2}}, # 20% boost к скорости в миссиях
"computer": {"price": 2000, "boost": {"hack": 1}}, # +1 к навыку взлома
# ... другие товары
}
def print_welcome_message(self):
welcome = """
╔════════════════════════════════════════════════════╗
║ WELCOME TO H4CK3R 2.9 ║
║ INITIATING SECURE CONSOLE PROTOCOL... ║
╠════════════════════════════════════════════════════╣
║ ║
║ Available Commands: ║
║ > hack [password] - Attempt to breach a system ║
║ > market - Access the black market ║
║ > upgrade [skill] - Enhance your hacker skills ║
║ > missions - View available assignments ║
║ > start [number] - Begin a mission ║
║ > status - Display system status ║
║ > buy [currency] [amount]-Purchase cryptocurrency ║
║ > sell [currency] [amount] - Sell cryptocurrency ║
║ > buy [category] [item] - Acquire market items ║
║ > help - Show this message ║
║ ║
╚════════════════════════════════════════════════════╝
"""
self.print_message(welcome, "info") # Используем цвет "info" для приветствия
self.print_message(f"Target IP Address: {self.target_ip}", "default") # Обычный цвет для IP
def passive_income(self):
base_income = self.software_level * 10
skill_bonus = sum(self.skills.values()) * 5
equipment_bonus = sum(item["уровень"] * 10 for item in self.equipment.values())
total_income = base_income + skill_bonus + equipment_bonus
self.bitcoin_balance += total_income
self.update_status()
if random.random() < 0.1: # 10% шанс случайного события
self.random_event()
def trigger_random_event(self):
if self.events_triggered < self.total_events:
if random.random() < 0.02: # adjust this value to control frequency
self.random_event()
self.events_triggered += 1
def random_event(self):
event, action, color = random.choice(self.events)
self.print_message(f"[СОБЫТИЕ] {event}", color=color)
action()
self.update_status()
def update_btc_price(self):
change = random.uniform(-0.05, 0.05)
self.btc_price = int(self.btc_price * (1 + change))
self.update_status()
def update_market(self):
# Обновление цен на рынке
for category in self.market.values():
for item in category.values():
item["цена"] = int(item["цена"] * random.uniform(0.8, 1.2))
self.update_crypto_prices() # Добавил вызов функции
def process_command(self):
command = self.command_input.text().lower().split()
self.command_input.clear()
if not command:
return
commands = {
"buy": self.buy_item_or_crypto,
"hack": self.hack,
"market": self.show_market,
"upgrade": self.upgrade_skill,
"missions": self.show_missions,
"start": self.start_mission,
"status": self.show_status,
"buy": self.buy_item,
"help": self.print_welcome_message
}
cmd = command[0]
args = command[1:] if len(command) > 1 else []
if cmd in commands:
commands[cmd](*args)
else:
self.print_message("Неизвестная команда. Введите 'help' для справки.")
def buy_item_or_crypto(self, *args):
if len(args) == 1 and args[0] in self.shop: # Проверка на покупку товара
self.buy_item(args[0])
elif len(args) == 2 and args[0] in self.cryptocurrencies and args[1].replace('.', '',
1).isdigit(): # Проверка на покупку криптовалюты
self.buy_crypto(args[0], args[1])
else:
self.print_message("Неверный формат команды buy. Используйте: buy [товар] или buy [валюта] [количество]",
"error")
def hack(self, guess=None):
if not guess:
self.print_message("Использование: hack [пароль]")
return
hack_power = (self.skills["взлом"] *
self.equipment["процессор"]["уровень"] *
random.uniform(0.8, 1.2))
if guess == self.password:
bitcoin_earned = int(1000 * hack_power)
reputation_gained = int(10 * hack_power)
self.bitcoin_balance += bitcoin_earned
self.reputation += reputation_gained
self.print_message(f"""
╔══════════════════════════════╗
║ ВЗЛОМ УСПЕШЕН!!! ║
║-----------------------------|
║ +{bitcoin_earned} BTC ║
║ +{reputation_gained} REP ║
╚══════════════════════════════╝
""")
self.target_ip = self.generate_ip()
self.password = self.generate_password()
self.print_message(f"Новый целевой IP: {self.target_ip}")
self.hacks_remaining = 3
if random.random() < 0.2: # 20% шанс получить достижение
self.award_achievement()
else:
self.hacks_remaining -= 1
self.print_message(f"Взлом не удался! Осталось попыток: {self.hacks_remaining}")
if self.hacks_remaining == 0:
self.game_over()
def show_market(self):
market_text = """
<div style="font-family: monospace; border: 1px solid #00ff00; padding: 5px;">
<p><b>ТОРГОВАЯ ПЛОЩАДКА</b></p>
<p><b>СОФТ</b></p>
<table style="width:100%;">
"""
for name, item in self.market["софт"].items():
market_text += f"""
<tr>
<td style="text-align:left;">{name}</td>
<td style="text-align:right;">{item['цена']} BTC (Ур.{item['уровень']})</td>
</tr>
"""
market_text += """
</table>
<p><b>ЖЕЛЕЗО</b></p>
<table style="width:100%;">
"""
for name, item in self.market["железо"].items():
market_text += f"""
<tr>
<td style="text-align:left;">{name}</td>
<td style="text-align:right;">{item['цена']} BTC</td>
</tr>
"""
market_text += """
</table>
<p>Для покупки введите: buy [категория] [название]</p>
</div>
"""
self.print_message(market_text)
def buy_item(self, category=None, item_name=None):
if not category or not item_name:
self.print_message("Использование: buy [софт/железо] [название]")
return
if category not in self.market:
self.print_message("Неверная категория. Используйте 'софт' или 'железо'")
return
market_category = self.market[category]
if item_name not in market_category:
self.print_message(f"Товар '{item_name}' не найден в категории {category}")
return
item = market_category[item_name]
if self.bitcoin_balance < item["цена"]:
self.print_message("Недостаточно биткоинов!")
return
self.bitcoin_balance -= item["цена"]
if category == "софт":
item["уровень"] += 1
self.print_message(f"Софт '{item_name}' обновлен до уровня {item['уровень']}")
else:
self.equipment[item_name]["уровень"] += 1
self.print_message(f"Железо '{item_name}' улучшено до уровня {self.equipment[item_name]['уровень']}")
self.update_status()
def show_missions(self):
missions_text = """
╔═══════════════ ДОСТУПНЫЕ МИССИИ ═══════════════╗
"""
for i, mission in enumerate(self.available_missions):
missions_text += f"""
║ [{i + 1}] {mission['название']}
║ Сложность: {'█' * mission['сложность']}{'░' * (5 - mission['сложность'])}
║ Награда: {mission['награда']} BTC, {mission['репутация']} REP
║ Требования: {', '.join(f'{k}:{v}' for k, v in mission['требования'].items())}
"""
missions_text += """
║ Для начала миссии введите: start [номер] ║
╚══════════════════════════════════════════════════╝
"""
self.print_message(missions_text)
def start_mission(self, mission_num=None):
if not mission_num or not mission_num.isdigit():
self.print_message("Использование: start [номер миссии]")
return
mission_idx = int(mission_num) - 1
if mission_idx < 0 or mission_idx >= len(self.available_missions):
self.print_message("Неверный номер миссии")
return
mission = self.available_missions[mission_idx]
# Проверка требований
for skill, level in mission["требования"].items():
if self.skills[skill] < level:
self.print_message(f"Недостаточный уровень навыка {skill}!")
return
self.current_mission = mission
self.mission_progress = 0
self.mission_progress_bar.setVisible(True)
self.mission_progress_bar.setValue(0)
# Запускаем таймер выполнения миссии
self.mission_timer = QTimer(self)
self.mission_timer.timeout.connect(self.update_mission)
self.mission_timer.start(1000)
self.print_message(f"Начата миссия: {mission['название']}")
def update_mission(self):
if not self.current_mission:
return
self.mission_progress += random.randint(5, 15)
self.mission_progress_bar.setValue(min(self.mission_progress, 100))
if self.mission_progress >= 100:
self.complete_mission()
def complete_mission(self):
mission = self.current_mission
self.bitcoin_balance += mission["награда"]
self.reputation += mission["репутация"]
self.print_message(f"""
╔══════════════ МИССИЯ ВЫПОЛНЕНА ══════════════╗
║ {mission['название']}
║ Получено:
║ {mission['награда']} BTC
║ {mission['репутация']} REP
║ Бонус за скорость: +{self.calculate_speed_bonus()} BTC
╚═══════════════════════════════════════════════╝
""")
self.mission_timer.stop()
self.mission_progress_bar.setVisible(False)
self.current_mission = None
self.update_status()
def calculate_speed_bonus(self):
# Бонус зависит от уровня оборудования
base_bonus = 100
speed_multiplier = (self.equipment['процессор']['уровень'] * 0.5 +
self.equipment['память']['уровень'] * 0.3 +
self.equipment['сеть']['уровень'] * 0.2)
bonus = int(base_bonus * speed_multiplier)
self.bitcoin_balance += bonus
return bonus
def upgrade_skill(self, skill=None):
if not skill or skill not in self.skills:
self.print_message("""
Доступные навыки для прокачки:
- взлом
- криптография
- сетевая_защита
- социальная_инженерия
""")
return
cost = self.calculate_skill_upgrade_cost(skill)
if self.bitcoin_balance < cost:
self.print_message(f"Недостаточно биткоинов! Требуется: {cost} BTC")
return
self.bitcoin_balance -= cost
self.skills[skill] += 1
self.print_message(f"""
╔══════════ НАВЫК УЛУЧШЕН ══════════╗
║ {skill}: {self.skills[skill] - 1} → {self.skills[skill]}
║ Потрачено: {cost} BTC
╚═══════════════════════════════════╝
""")
self.update_status()
def calculate_skill_upgrade_cost(self, skill):
current_level = self.skills[skill]
return current_level * 1000
def show_status(self):
status_text = f"""
<div style="font-family: monospace; border: 2px solid #00ff00; padding: 10px; background-color: #000; color: #fff;">
<h3>СТАТУС СИСТЕМЫ</h3>
<p><b>Баланс:</b> {self.bitcoin_balance:.2f} BTC / {self.cryptocurrencies['USD']['balance']:.2f} USD</p>
<p><b>Репутация:</b> {self.reputation}</p>
<p><b>Цена BTC:</b> {self.btc_price:.2f} USD</p>
<hr>
<h4>НАВЫКИ</h4>
<ul>
"""
for skill, level in self.skills.items():
status_text += f"""<li><b>{skill}:</b> <div style="width: 100px; height: 20px; background-color: #ccc; border: 1px solid #000;">
<div style="width:{level * 10}px; height: 20px; background-color: #0f0;"></div>
</div> ({level}/10)</li>"""
status_text += """
</ul>
<hr>
<h4>ОБОРУДОВАНИЕ</h4>
<ul>
"""
for name, item in self.equipment.items():
status_text += f"<li><b>{name}:</b> {item['название']} (Ур.{item['уровень']})</li>"
status_text += """
</ul>
"""
if self.achievements:
status_text += """
<hr>
<h4>ДОСТИЖЕНИЯ</h4>
<ul>
"""
for achievement in self.achievements:
status_text += f"<li>★ {achievement}</li>"
status_text += "</ul>"
def award_achievement(self):
possible_achievements = [
"Первые шаги: Выполнить первый успешный взлом",
"Профессионал: Достичь 5 уровня в любом навыке",
"Железячник: Улучшить все оборудование до 3 уровня",
"Богач: Накопить 10000 BTC",
"Легенда: Достичь репутации 1000"
]
# Проверяем условия для каждого достижения
if len(self.achievements) < len(possible_achievements):
new_achievement = random.choice(
[a for a in possible_achievements if a not in self.achievements]
)
self.achievements.add(new_achievement)
self.print_message(f"""
╔══════════ НОВОЕ ДОСТИЖЕНИЕ ══════════╗
║ ★ {new_achievement}
╚═══════════════════════════════════════╝
""")
def add_bitcoin(self, amount):
self.bitcoin_balance += amount
self.update_status()
def add_reputation(self, amount):
self.reputation += amount
self.update_status()
def temporary_boost(self):
original_interval = self.timer.interval()
self.timer.setInterval(original_interval // 2)
QTimer.singleShot(30000, lambda: self.timer.setInterval(original_interval))
def update_status(self):
# Обновляем текст на метках в верхней панели
self.status_labels["bitcoin"].setText(f"BTC: {self.bitcoin_balance:.2f}")
self.status_labels["usd"].setText(f"USD: {self.cryptocurrencies['USD']['balance']:.2f}")
self.status_labels["reputation"].setText(f"REP: {self.reputation}")
self.status_labels["level"].setText(f"LVL: {self.software_level}")
self.status_labels["btcp"].setText(f"BTC/USD: {self.btc_price:.2f}")
# Подробный статус теперь отображается только по команде 'status'
# и выводится в основной QTextEdit методом print_message
def game_over(self):
self.print_message(f"""
╔═══════════ GAME OVER ════════════════╗
║ Финальный счёт: ║
║ BTC: {self.bitcoin_balance} ║
║ Репутация: {self.reputation} ║
║ Достижений: {len(self.achievements)} ║
╚══════════════════════════════════════╝
""")
self.command_input.setEnabled(False)
def print_message(self, message, color="info"):
self.output.setTextColor(QColor(self.COLORS[color]))
self.output.append(message)
def generate_ip(self):
return ".".join(map(str, [random.randint(0, 255) for _ in range(4)]))
def generate_password(self):
# Генерируем более сложные пароли с увеличением уровня
length = 8 + self.software_level
chars = "0123456789abcdef"
if self.software_level > 3:
chars += "ABCDEF"
if self.software_level > 5:
chars += "!@#$%^&*"
return "".join(random.choice(chars) for _ in range(length))
# Запуск приложения
def main():
app = QApplication(sys.argv)
ex = HackerGame()
sys.exit(app.exec())
if __name__ == '__main__':
main()
main.pyimport sys
import random
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QVBoxLayout,
QLineEdit, QTextEdit, QGridLayout, QProgressBar, QHBoxLayout)
from PyQt6.QtCore import Qt, QTimer, QTime
from PyQt6.QtGui import QFont, QColor
import traceback
# Определение класса HackerGame
class HackerGame(QWidget):
COLORS = {
"success": "#00FF00", # Неоново-зеленый
"error": "#FF0000", # Ярко-красный
"info": "#00FFFF", # Голубой электрик
"warning": "#FFFF00", # Ярко-желтый
"event": "#FFA500", # Оранжевый
"default": "#E0E0E0", # Светло-серый для общего текста
}
def update_game_time(self):
"""
Обновляет игровое время. Этот метод вызывается по таймеру game_time_timer.
"""
# Пример: добавляем 1 минуту к игровому времени
# Вы можете изменить это, чтобы моделировать разное течение времени
self.game_time = self.game_time.addSecs(60) # Добавляем 60 секунд (1 игровую минуту)
def reset_bitcoin(self):
self.bitcoin_balance = 0
self.print_message("Ваш баланс BTC сброшен до 0!", "error")
self.update_status()
def add_usd(self, amount):
# Убедимся, что USD существует в списке криптовалют
if "USD" in self.cryptocurrencies:
self.cryptocurrencies["USD"]["balance"] += amount
self.print_message(f"Баланс USD изменен на {amount}. Текущий баланс: {self.cryptocurrencies['USD']['balance']:.2f} USD", "info")
self.update_status()
else:
self.print_message("Ошибка: Валюта USD не инициализирована.", "error")
def boost_overall_speed(self, amount):
# Здесь мы увеличиваем множитель скорости.
# Например, если 'amount' это 10, то увеличиваем на 0.1
self.speed_multiplier += amount / 100.0
self.print_message(
f"Общая скорость действий увеличена на {amount}%. Текущий множитель: {self.speed_multiplier:.2f}x",
"success")
self.update_status()
def add_skill(self, skill_name, amount):
if skill_name in self.skills:
self.skills[skill_name] += amount
self.print_message(f"Навык '{skill_name}' увеличен на {amount}. Текущий уровень: {self.skills[skill_name]}", "success")
self.update_status()
else:
self.print_message(f"Ошибка: Навык '{skill_name}' не найден.", "error")
def start_random_events(self):
self.event_timer = QTimer(self)
self.event_timer.timeout.connect(self.trigger_random_event)
self.event_timer.start(1000) # Check every second for event trigger
self.total_events = random.randint(10, 30) # Total number of events to generate
self.events_triggered = 0
def update_crypto_prices(self):
for currency, data in self.cryptocurrencies.items():
if currency != "USD": # Не меняем цену USD
change = random.uniform(-0.1, 0.1)
data["price"] = int(data["price"] * (1 + change))
self.update_status()
def __init__(self):
super().__init__()
# --- 1. Инициализация данных игры ---
# Все переменные состояния игры и игрока инициализируются здесь
self.game_time_timer = QTimer(self)
self.software_level: int = 1
self.reputation: int = 0
self.btc_price: float = 1000.00 # Начальная цена BTC
self.bitcoin_balance: float = 1000.00 # Начальный баланс биткоинов
self.cryptocurrencies: dict = {
"USD": {"balance": 10000.00, "price": 1.00}, # USD всегда 1.0
"BTC": {"balance": 0.00, "price": self.btc_price},
# ... добавьте другие криптовалюты по аналогии ...
# "ETH": {"balance": 0.0, "price": 200.0},
# "XRP": {"balance": 0.0, "price": 0.5},
}
self.speed_multiplier: float = 1.0 # Множитель скорости для майнинга или взлома
self.target_ip: str = self.generate_ip() # Пример: генерируем первый IP
self.password: str = self.generate_password() # Пример: генерируем первый пароль
self.hacks_remaining: int = 3 # Пример: количество попыток взлома
# Инициализация навыков (одна инициализация)
self.skills: dict[str, int] = {
"взлом": 1,
"криптография": 1,
"сетевая защита": 1,
"социальная инженерия": 1
}
# Инициализация оборудования (одна инициализация с нужной структурой)
self.equipment: dict[str, dict] = {
"процессор": {
"уровень": 1,
"список_спеков": [ # Используем "список_спеков" для единообразия
"Intel 386",
"Pentium 166 MHz",
"Pentium III 500 MHz",
"Intel Core 2 Duo",
"Intel Core i7-2600K",
"AMD Ryzen 9 5950X",
"Quantum Processor"
]
},
"память": {
"уровень": 1,
"список_спеков": [
"1 MB RAM",
"4 MB RAM",
"32 MB RAM",
"128 MB RAM",
"1 GB RAM",
"16 GB DDR4",
"64 GB DDR5"
]
},
"сеть": {
"уровень": 1,
"список_спеков": [
"Модем 14.4k",
"Модем 56k",
"ISDN",
"DSL",
"Fiber 100Mbps",
"Fiber 1Gbps",
"Quantum Network"
]
}
}
# Торговая площадка (одна инициализация)
self.market: dict = {
"софт": {
"брутфорс": {"цена": 1000, "уровень": 1, "эффективность": 1.5}, # Пример
"антивирус": {"цена": 800, "уровень": 1, "эффективность": 1.2},
"файрвол": {"цена": 1200, "уровень": 1, "эффективность": 2.0}
}, "железо": { # Цены для покупки уровней железа
"процессор": {"цена": 2000},
"память": {"цена": 1500},
"сеть": {"цена": 1800}
}
}
# Список доступных миссий (одна инициализация)
self.available_missions: list = [
{
"название": "Взлом банкомата",
"сложность": 1, # Используется для определения требований или награды
"награда": 500,
"репутация": 10,
"требования": {"взлом": 2, "сеть": 1} # Требования к навыкам ИЛИ железу
},
{
"название": "Взлом соцсети",
"сложность": 2,
"награда": 1000,
"reputation": 20,
"требования": {"социальная инженерия": 2, "память": 2}
},
{
"название": "Корпоративный шпионаж",
"сложность": 3,
"награда": 2000,
"репутация": 30,
"требования": {"криптография": 3, "процессор": 2}
}
# ... добавьте больше миссий ...
]
self.current_mission: dict | None = None # Текущая миссия игрока
self.mission_progress: int = 0 # Прогресс текущей миссии (например, в процентах)
self.mission_timer = QTimer(self) # Таймер для миссий
self.mission_timer.timeout.connect(self.complete_mission)
self.achievements: set[str] = set() # Достижения игрока
# Список событий (одна инициализация)
# Проверьте этот список, он очень длинный и содержит дублирования
# Оставьте только нужные события без повторений
self.events: list = [
("Вы нашли уязвимость в системе! +150 BTC", lambda: self.add_bitcoin(150), "success"),
("Антивирус засек вашу активность! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Хакерское сообщество оценило ваши навыки! +5 REP", lambda: self.add_reputation(5), "success"),
("Случайный сбой в системе! Временное ускорение майнинга! +10% к скорости на 5 минут",
lambda: self.temporary_boost(0.1, 300), "info"), # временный буст на 10% на 5 минут (300 секунд)
("Вас атаковали! -25 BTC", lambda: self.add_bitcoin(-25), "warning"),
("Вы получили анонимный перевод! +100 BTC", lambda: self.add_bitcoin(100), "info"),
("Ваша репутация упала из-за слухов! -2 REP", lambda: self.add_reputation(-2), "warning"),
("Вы нашли скрытую информацию! +250 BTC", lambda: self.add_bitcoin(250), "success"),
("Вы взломали систему защиты банка! +1000 BTC, но ваша репутация упала на 20 REP!",
lambda: (self.add_bitcoin(1000), self.add_reputation(-20)), "success"), # Высокий риск, высокая награда
("Вас заметили! Полиция ищет вас! -500 BTC!", lambda: self.add_bitcoin(-500), "error"),
# Высокий риск, высокая потеря
("Вы нашли скрытую информацию о новой криптовалюте! +5000 USD", lambda: self.add_usd(5000), "success"),
# Добавили возможность получить USD
("Сервер перегружен, майнинг приостановлен на 1 минуту!",
lambda: self.print_message("Майнинг приостановлен на 1 минуту", "warning"), "warning"),
# событие без финансовых последствий
("Вы помогли другу-хакеру! +10 REP и 50 BTC", lambda: (self.add_reputation(10), self.add_bitcoin(50)),
"success"),
("Ваши навыки улучшились! +1 к уровню взлома!", lambda: self.add_skill("hack", 1), "success"),
# добавили прокачку навыков
("Вы установили новый рекорд скорости взлома! +100 BTC!", lambda: self.add_bitcoin(100), "success"),
# событие, зависящее от скорости
("Ваш кот сел на клавиатуру и запустил программу-майнер! +10 BTC", lambda: self.add_bitcoin(10), "success"),
("Вы случайно удалили системный файл! -5 REP", lambda: self.add_reputation(-5), "error"),
("Хакерское сообщество оценило ваши навыки! +15 REP", lambda: self.add_reputation(15), "success"),
("Вы выиграли в онлайн-покер на BTC! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Вас атаковали! -15 BTC", lambda: self.add_bitcoin(-15), "warning"),
("Вы нашли баг в игре и получили за него бонус! +50 BTC", lambda: self.add_bitcoin(50), "success"),
("Ваш компьютер завис на котиках! -10 минут времени",
lambda: self.print_message("Компьютер завис на 10 минут!", "error"), "error"),
("Вы случайно отправили BTC на благотворительность! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Вас заметили в тёмной сети! +50 REP", lambda: self.add_reputation(50), "success"),
("Вы обнаружили секретный чат с важной информацией! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Ваш VPN отключился! -20 REP", lambda: self.add_reputation(-20), "error"),
("Вы написали вирус, который заразил весь интернет! +2000 BTC", lambda: self.add_bitcoin(2000), "success"),
("Вы спасли мир от кибер-апокалипсиса! +10000 BTC", lambda: self.add_bitcoin(10000), "success"),
("Вы случайно запустили антивирус! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Вы стали популярным в TikTok, и теперь вас ищут! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
("Вы выиграли в лотерею 1000 USD", lambda: self.add_usd(1000), "success"),
("Вас ограбили в реальной жизни! -500 USD", lambda: self.add_usd(-500), "error"),
("Вы нашли купон на скидку в магазине электроники! +10% на следующую покупку",
lambda: self.print_message("Получен купон на скидку! +10%", "success"), "success"),
("Вы обнаружили новый эксплойт! +250 BTC", lambda: self.add_bitcoin(250), "success"),
("Ваш компьютер сломался от перенапряжения! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
(
"Вы купили новый мощный процессор! +10 к скорости взлома", lambda: self.boost_overall_speed(10), "success"),
("У вас украли аккаунт в социальной сети! -10 REP", lambda: self.add_reputation(-10), "error"),
("Вы стали героем хакерского сообщества! +2000 REP", lambda: self.add_reputation(2000), "success"),
("Вы потеряли все свои BTC в мошеннической схеме! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Вы нашли 1 BTC на улице!", lambda: self.add_bitcoin(1), "success"),
("Ваши родители обнаружили, что вы хакер! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Вы создали игру, которая стала мировым хитом! +100000 BTC", lambda: self.add_bitcoin(100000), "success"),
("Вы случайно вызвали зомби-апокалипсис! -ALL BTC", lambda: self.reset_bitcoin(), "error"),
("У вас появился новый домашний питомец, который жуёт провода! -20 REP", lambda: self.add_reputation(-20),
"error"),
("Вы заработали деньги, участвуя в Bug Bounty Program! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Вы случайно отправили сообщение в не тот чат! -10 REP", lambda: self.add_reputation(-10), "error"),
("Ваши навыки взлома резко повысились! +20 к скорости", lambda: self.boost_overall_speed(20), "success"),
("Вы выиграли в конкурсе хакерских навыков! +5000 BTC", lambda: self.add_bitcoin(5000), "success"),
("Вы купили новый монитор с изогнутым экраном! +5 к комфорту работы",
lambda: self.print_message("+5 к комфорту работы!", "success"), "success"),
("Ваша мать нашла ваш секретный ноутбук! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Вы провели успешную DDoS атаку на сервер конкурентов! +1000 BTC", lambda: self.add_bitcoin(1000),
"success"),
("Ваша система безопасности взломана! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Вы случайно создали мем, который стал вирусным! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Вы стали жертвой фишинга! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Вы встретили своего кумира, известного хакера! +100 REP", lambda: self.add_reputation(100), "success"),
("Вы потеряли флешку с важными данными! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Вы получили приглашение на закрытую конференцию хакеров! +1000 REP", lambda: self.add_reputation(1000),
"success"),
("Твой кот на клавиатуре устроил рейв! +10 BTC", lambda: self.add_bitcoin(10), "success"),
("Лол, снесли систему! -5 репы", lambda: self.add_reputation(-5), "error"),
("Заценили скиллы! +15 репы", lambda: self.add_reputation(15), "success"),
("Выйграл в покер на битке! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Забанили акк! -15 BTC", lambda: self.add_bitcoin(-15), "warning"),
("Нашел баг, дали премию! +50 BTC", lambda: self.add_bitcoin(50), "success"),
("Комп завис на котах! -10 минут жизни", lambda: self.print_message("Комп завис на 10 минут!", "error"),
"error"),
("Кинул битки на благотворительность! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Засветился в даркнете! +50 репы", lambda: self.add_reputation(50), "success"),
("Нарыл инфу! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("VPN полетел! -20 репы", lambda: self.add_reputation(-20), "error"),
("Написал вирус! +2000 BTC (осторожно!)", lambda: self.add_bitcoin(2000), "success"),
("Спас мир от вируса! +10000 BTC", lambda: self.add_bitcoin(10000), "success"),
("Случайно запустил антивирусник! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Взорвал ТикТок! Теперь ищут! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
("Выйграл в лото 1000 баксов!", lambda: self.add_usd(1000), "success"),
("Ограбили в реале! -500 USD", lambda: self.add_usd(-500), "error"),
("Купон на скидку! +10% на следующую покупку",
lambda: self.print_message("Купон на скидку +10%!", "success"), "success"),
("Нашел новый эксплойт! +250 BTC", lambda: self.add_bitcoin(250), "success"),
("Комп сгорел! -1000 BTC", lambda: self.add_bitcoin(-1000), "error"),
("Новый процессор! +10 к скорости", lambda: self.boost_overall_speed(10), "success"),
("Украли акк в соцсетях! -10 репы", lambda: self.add_reputation(-10), "error"),
("Стар стал популярным! +2000 репы", lambda: self.add_reputation(2000), "success"),
("Все битки слил в лохотрон! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Нашел биток на улице!", lambda: self.add_bitcoin(1), "success"),
("Родители узнали, что ты хакер! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Сделал игру-хит! +100000 BTC", lambda: self.add_bitcoin(100000), "success"),
("Случайно вызвал зомби-апокалипсис! -ALL BTC", lambda: self.reset_bitcoin(), "error"),
("Питомец грызет провода! -20 репы", lambda: self.add_reputation(-20), "error"),
("Заработал на баг-баунти! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Написал в не тот чат! -10 репы", lambda: self.add_reputation(-10), "error"),
("Скиллы прокачались! +20 к скорости", lambda: self.boost_overall_speed(20), "success"),
("Выйграл на хакатоне! +5000 BTC", lambda: self.add_bitcoin(5000), "success"),
("Крутой изогнутый монитор! +5 к комфорту", lambda: self.print_message("+5 к комфорту!", "success"),
"success"),
("Мамка нашла ноут! -10000 BTC", lambda: self.add_bitcoin(-10000), "error"),
("Устроил DDoS! +1000 BTC", lambda: self.add_bitcoin(1000), "success"),
("Систему взломали! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Мем стал вирусным! +200 BTC", lambda: self.add_bitcoin(200), "success"),
("Стал жертвой фишинга! -100 BTC", lambda: self.add_bitcoin(-100), "error"),
("Встретил кумира! +100 репы", lambda: self.add_reputation(100), "success"),
("Потерял флешку! -500 BTC", lambda: self.add_bitcoin(-500), "error"),
("Пригласили на конферецию! +1000 репы", lambda: self.add_reputation(1000), "success"),
("Залили кофе на клаву! -10 репы", lambda: self.add_reputation(-10), "error"),
("Нашел заначку на старых дискетах! +5 BTC", lambda: self.add_bitcoin(5), "success"),
("Посылка с 200 баксами!", lambda: self.add_usd(200), "success"),
("Кот удалил систему! -ALL BTC", lambda: self.reset_bitcoin(), "error"),
("Удалил хард! -1000 репы", lambda: self.add_reputation(-1000), "error"),
("0-day эксплойт! +1000 BTC", lambda: self.add_bitcoin(1000), "success"),
("Нет интернета! -50 BTC", lambda: self.add_bitcoin(-50), "error"),
("Помог другу с кодом! +10 репы", lambda: self.add_reputation(10), "success"),
("Обнова убила систему! -10 репы", lambda: self.add_reputation(-10), "error"),
("Выйграл на конкурсе! +500 BTC", lambda: self.add_bitcoin(500), "success"),
("Процесс жрет ОЗУ! -20 репы", lambda: self.add_reputation(-20), "error"),
("Нашел старый биткоин-кошелек! +1 BTC", lambda: self.add_bitcoin(1), "success"),
("Пароль слили! -500 репы", lambda: self.add_reputation(-500), "error")
]
# Инициализация таймеров (одна инициализация для каждого)
if hasattr(self, "update_game_time") and callable(self.update_game_time):
self.game_time_timer.timeout.connect(self.update_game_time)
else:
print("Предупреждение: Метод update_game_time не определен или не является вызываемым.")
self.passive_income_timer = QTimer(self) # Таймер для пассивного дохода/майнинга
# Проверяем, что метод passive_income существует, прежде чем его подключать
if hasattr(self, "passive_income") and callable(self.passive_income):
self.passive_income_timer.timeout.connect(self.passive_income)
self.passive_income_timer.start(5000) # Например, каждые 5 секунд
else:
print("Предупреждение: Метод passive_income не определен или не является вызываемым.")
self.market_update_timer = QTimer(self) # Таймер для обновления рынка
if hasattr(self, "update_market") and callable(self.update_market):
self.market_update_timer.timeout.connect(self.update_market)
self.market_update_timer.start(60000) # Например, каждую минуту
else:
print("Предупреждение: Метод update_market не определен или не является вызываемым.")
self.btc_price_update_timer = QTimer(self) # Таймер для обновления цены BTC
if hasattr(self, "update_btc_price") and callable(self.update_btc_price):
self.btc_price_update_timer.timeout.connect(self.update_btc_price)
self.btc_price_update_timer.start(60000) # Например, каждую минуту
else:
print("Предупреждение: Метод update_btc_price не определен или не является вызываемым.")
self.crypto_price_update_timer = QTimer(self) # Таймер для обновления цен других крипто
# У вас в коде метод update_crypto_prices был определен ВНУТРИ __init__, это неправильно
# Убедитесь, что update_crypto_prices определен как обычный метод класса
if hasattr(self, "update_crypto_prices") and callable(self.update_crypto_prices):
self.crypto_price_update_timer.timeout.connect(self.update_crypto_prices)
self.crypto_price_update_timer.start(30000) # Каждые 30 секунд
else:
print("Предупреждение: Метод update_crypto_prices не определен или не является вызываемым.")
# Время игры (если нужно отслеживать игровое время)
self.game_time_timer = QTimer(self)
self.game_time_timer.timeout.connect(self.update_game_time) # Создайте метод update_game_time
self.game_time = QTime(0, 0, 0) # Начальное игровое время (00:00:00)
# self.game_time_timer.start(1000) # Например, обновлять каждую секунду, если игровое время = реальному
# Цвета для вывода в терминал (одна инициализация)
self.COLORS = {
"default": "#FFFFFF", # Белый
"success": "#00FF00", # Зеленый
"error": "#FF0000", # Красный
"warning": "#FFFF00", # Желтый
"info": "#00FFFF" # Голубой/Циан
}
# --- 2. Создание пользовательского интерфейса ---
# Вызываем initUI() после того, как все данные инициализированы
try:
self.initUI() # <-- ЗДЕСЬ СОЗДАЮТСЯ ВИДЖЕТЫ, ВКЛЮЧАЯ self.output
except Exception as e:
print(f"Критическая ошибка при инициализации UI: {e}")
traceback.print_exc()
sys.exit(1) # Выходим, если UI не создался
# --- 3. Первичное обновление UI и запуск игровых процессов, использующих UI ---
# Эти вызовы должны быть ПОСЛЕ self.initUI()
try:
self.update_status() # <-- Использует self.equipment_labels, self.skills_labels, self.output
# Выводим приветственное сообщение в терминал (QTextEdit)
self.print_welcome_message() # <-- Использует self.output
# Запускаем систему случайных событий
# Проверяем, что метод start_random_events определен
if hasattr(self, "start_random_events") and callable(self.start_random_events):
self.start_random_events() # <-- Может использовать self.print_message (а значит self.output)
else:
print("Предупреждение: Метод start_random_events не определен или не является вызываемым.")
# Загружаем сохранение, если нужно (это может перезаписать начальные данные)
# Если есть функция загрузки, она должна вызываться после инициализации данных,
# но до первого обновления UI, или же вызывать update_status сама после загрузки.
# Рекомендуется вызывать update_status после загрузки.
# self.load_game() # Если есть такая функция
# Проверяем достижения после загрузки/инициализации
# if hasattr(self, "check_achievements") and callable(self.check_achievements):
# self.check_achievements() # <-- Может использовать self.print_message
# else:
# print("Предупреждение: Метод check_achievements не определен или не является вызываемым.")
except Exception as e:
print(f"Ошибка после инициализации UI: {e}")
traceback.print_exc()
# Окно показывается в главном цикле main()
# self.show() # Убираем отсюда, если есть в main()
# ... определения методов print_message, initUI, update_status,
# print_welcome_message, buy_item, upgrade_skill, и всех остальных методов класса ...
commands = {
# ... другие команды ...
"buy": self.buy_crypto,
"sell": self.sell_crypto,
}
def initUI(self):
# Стилевая таблица для "Терминала Прошлого"
self.setStyleSheet("""
QWidget {
background-color: #0A0A0A; /* Глубокий черный фон для всего окна */
color: #00FF00; /* Яркий неоново-зеленый текст по умолчанию */
font-family: 'Consolas', 'DejaVu Sans Mono', 'Source Code Pro', monospace; /* Моноширинные шрифты */
font-size: 14px;
}
QTextEdit {
border: 2px solid #005500; /* Темно-зеленая рамка для области вывода */
padding: 10px; /* Отступы текста от рамки */
background-color: #000000; /* Черный фон для области вывода */
selection-background-color: #008800; /* Цвет выделения текста */
color: #00FF00; /* Основной цвет текста вывода */
}
QLineEdit {
border: 2px solid #00AA00; /* Более яркая зеленая рамка для поля ввода */
padding: 8px; /* Отступы текста от рамки */
background-color: #000000; /* Черный фон для поля ввода */
selection-background-color: #008800;
caret-color: #FFFF00; /* Желтый мигающий курсор */
color: #00FF00; /* Цвет текста ввода */
}
QProgressBar {
border: 2px solid #00AA00; /* Зеленая рамка для прогресс-бара */
text-align: center; /* Текст в центре */
color: #FFFFFF; /* Белый текст на прогресс-баре */
background-color: #333333; /* Темный фон для незаполненной части */
}
QProgressBar::chunk {
background-color: #00FF00; /* Ярко-зеленый заполняющий цвет прогресс-бара */
}
QLabel {
color: #00FFFF; /* Голубой цвет для меток статуса вверху (BTC, REP и т.д.) */
font-weight: bold; /* Жирный текст для меток */
padding: 2px 5px; /* Небольшие отступы */
}
""")
layout = QVBoxLayout()
# Статус бар вверху (отображает основные показатели)
status_top_layout = QHBoxLayout()
self.status_labels = {
"bitcoin": QLabel(f"BTC: {self.bitcoin_balance:.2f}"),
"usd": QLabel(f"USD: {self.cryptocurrencies['USD']['balance']:.2f}"),
"reputation": QLabel(f"REP: {self.reputation}"),
"level": QLabel(f"LVL: {self.software_level}"), # LVL, возможно, относится к общему уровню или софту
"btcp": QLabel(f"BTC/USD: {self.btc_price:.2f}"),
}
for key, label in self.status_labels.items():
status_top_layout.addWidget(label)
status_top_layout.addStretch(1)
layout.addLayout(status_top_layout)
# ----- НАЧАЛО ДОБАВЛЕНИЯ ВИДЖЕТОВ ЖЕЛЕЗА И НАВЫКОВ -----
# Макет для отображения железа
hardware_layout = QVBoxLayout()
hardware_label = QLabel("<b>ЖЕЛЕЗО:</b>") # Заголовок
hardware_label.setStyleSheet("color: #00FFFF;") # Голубой цвет для заголовка
hardware_layout.addWidget(hardware_label)
self.equipment_labels = {} # Словарь для хранения меток железа
for item_name in self.equipment.keys():
# Создаем метку для каждого типа железа
label = QLabel(f"{item_name.capitalize()}: N/A") # Изначально N/A, обновится в update_status
self.equipment_labels[item_name] = label
hardware_layout.addWidget(label)
layout.addLayout(hardware_layout) # Добавляем макет железа в основной макет
# Макет для отображения навыков
skills_layout = QVBoxLayout()
skills_label = QLabel("<b>НАВЫКИ:</b>") # Заголовок
skills_label.setStyleSheet("color: #00FFFF;") # Голубой цвет для заголовка
skills_layout.addWidget(skills_label)
self.skills_labels = {} # Словарь для хранения меток навыков
for skill_name in self.skills.keys():
# Создаем метку для каждого навыка
label = QLabel(
f"{skill_name.capitalize()}: {self.skills[skill_name]}") # Изначально показываем текущий уровень
self.skills_labels[skill_name] = label
skills_layout.addWidget(label)
layout.addLayout(skills_layout) # Добавляем макет навыков в основной макет
# ----- КОНЕЦ ДОБАВЛЕНИЯ ВИДЖЕТОВ ЖЕЛЕЗА И НАВЫКОВ -----
# Основной вывод
self.output = QTextEdit()
self.output.setReadOnly(True)
layout.addWidget(self.output)
# Прогресс текущей миссии
self.mission_progress_bar = QProgressBar()
self.mission_progress_bar.setVisible(False)
layout.addWidget(self.mission_progress_bar)
# Ввод команд
self.command_input = QLineEdit()
self.command_input.returnPressed.connect(self.process_command)
layout.addWidget(self.command_input)
self.setLayout(layout)
self.setWindowTitle("H4CK3R 2.9 - TERMINAL")
self.setMinimumSize(900, 650)
self.update_status() # Вызываем update_status для отображения начальных значений
self.show() # Показываем окно
def buy_crypto(self, currency, amount):
if currency not in self.cryptocurrencies:
self.print_message(f"Криптовалюта {currency} не найдена.", "error")
return
amount = float(amount)
cost = amount * self.cryptocurrencies[currency]["price"]
if self.cryptocurrencies["USD"]["balance"] < cost:
self.print_message(f"Недостаточно USD для покупки {currency}.", "error")
return
self.cryptocurrencies["USD"]["balance"] -= cost
self.cryptocurrencies[currency]["balance"] += amount
self.print_message(f"Вы купили {amount} {currency} за {cost} USD.", "success")
self.update_status()
def sell_crypto(self, currency, amount):
if currency not in self.cryptocurrencies:
self.print_message(f"Криптовалюта {currency} не найдена.", "error")
return
amount = float(amount)
if self.cryptocurrencies[currency]["balance"] < amount:
self.print_message(f"Недостаточно {currency} для продажи.", "error")
return
revenue = amount * self.cryptocurrencies[currency]["price"]
self.cryptocurrencies["USD"]["balance"] += revenue
self.cryptocurrencies[currency]["balance"] -= amount
self.print_message(f"Вы продали {amount} {currency} за {revenue} USD.", "success")
self.update_status()
shop = {
"car": {"price": 50000, "boost": {"speed": 0.2}}, # 20% boost к скорости в миссиях
"computer": {"price": 2000, "boost": {"hack": 1}}, # +1 к навыку взлома
# ... другие товары
}
def print_welcome_message(self):
welcome = """
╔════════════════════════════════════════════════════╗
║ WELCOME TO H4CK3R 2.9 ║
║ INITIATING SECURE CONSOLE PROTOCOL... ║
╠════════════════════════════════════════════════════╣
║ ║
║ Available Commands: ║
║ > hack [password] - Attempt to breach a system ║
║ > market - Access the black market ║
║ > upgrade [skill] - Enhance your hacker skills ║
║ > missions - View available assignments ║
║ > start [number] - Begin a mission ║
║ > status - Display system status ║
║ > buy [currency] [amount]-Purchase cryptocurrency ║
║ > sell [currency] [amount] - Sell cryptocurrency ║
║ > buy [category] [item] - Acquire market items ║
║ > help - Show this message ║
║ ║
╚════════════════════════════════════════════════════╝
"""
self.print_message(welcome, "info") # Используем цвет "info" для приветствия
self.print_message(f"Target IP Address: {self.target_ip}", "default") # Обычный цвет для IP
def passive_income(self):
base_income = self.software_level * 10
skill_bonus = sum(self.skills.values()) * 5
equipment_bonus = sum(item["уровень"] * 10 for item in self.equipment.values())
total_income = base_income + skill_bonus + equipment_bonus
self.bitcoin_balance += total_income
self.update_status()
if random.random() < 0.1: # 10% шанс случайного события
self.random_event()
def trigger_random_event(self):
if self.events_triggered < self.total_events:
if random.random() < 0.02: # adjust this value to control frequency
self.random_event()
self.events_triggered += 1
def random_event(self):
event, action, color = random.choice(self.events)
self.print_message(f"[СОБЫТИЕ] {event}", color=color)
action()
self.update_status()
def update_btc_price(self):
change = random.uniform(-0.05, 0.05)
self.btc_price = int(self.btc_price * (1 + change))
self.update_status()
def update_market(self):
# Обновление цен на рынке
for category in self.market.values():
for item in category.values():
item["цена"] = int(item["цена"] * random.uniform(0.8, 1.2))
self.update_crypto_prices() # Добавил вызов функции
def process_command(self):
command = self.command_input.text().lower().split()
self.command_input.clear()
if not command:
return
commands = {
"buy": self.buy_item_or_crypto,
"hack": self.hack,
"market": self.show_market,
"upgrade": self.upgrade_skill,
"missions": self.show_missions,
"start": self.start_mission,
"status": self.show_status,
"buy": self.buy_item,
"help": self.print_welcome_message
}
cmd = command[0]
args = command[1:] if len(command) > 1 else []
if cmd in commands:
commands[cmd](*args)
else:
self.print_message("Неизвестная команда. Введите 'help' для справки.")
def buy_item_or_crypto(self, *args):
if len(args) == 1 and args[0] in self.shop: # Проверка на покупку товара
self.buy_item(args[0])
elif len(args) == 2 and args[0] in self.cryptocurrencies and args[1].replace('.', '',
1).isdigit(): # Проверка на покупку криптовалюты
self.buy_crypto(args[0], args[1])
else:
self.print_message("Неверный формат команды buy. Используйте: buy [товар] или buy [валюта] [количество]",
"error")
def hack(self, guess=None):
if not guess:
self.print_message("Использование: hack [пароль]")
return
hack_power = (self.skills["взлом"] *
self.equipment["процессор"]["уровень"] *
random.uniform(0.8, 1.2))
if guess == self.password:
bitcoin_earned = int(1000 * hack_power)
reputation_gained = int(10 * hack_power)
self.bitcoin_balance += bitcoin_earned
self.reputation += reputation_gained
self.print_message(f"""
╔══════════════════════════════╗
║ ВЗЛОМ УСПЕШЕН!!! ║
║-----------------------------|
║ +{bitcoin_earned} BTC ║
║ +{reputation_gained} REP ║
╚══════════════════════════════╝
""")
self.target_ip = self.generate_ip()
self.password = self.generate_password()
self.print_message(f"Новый целевой IP: {self.target_ip}")
self.hacks_remaining = 3
if random.random() < 0.2: # 20% шанс получить достижение
self.award_achievement()
else:
self.hacks_remaining -= 1
self.print_message(f"Взлом не удался! Осталось попыток: {self.hacks_remaining}")
if self.hacks_remaining == 0:
self.game_over()
def show_market(self):
market_text = """
<div style="font-family: monospace; border: 1px solid #00ff00; padding: 5px;">
<p><b>ТОРГОВАЯ ПЛОЩАДКА</b></p>
<p><b>СОФТ</b></p>
<table style="width:100%;">
"""
for name, item in self.market["софт"].items():
market_text += f"""
<tr>
<td style="text-align:left;">{name}</td>
<td style="text-align:right;">{item['цена']} BTC (Ур.{item['уровень']})</td>
</tr>
"""
market_text += """
</table>
<p><b>ЖЕЛЕЗО</b></p>
<table style="width:100%;">
"""
for name, item in self.market["железо"].items():
market_text += f"""
<tr>
<td style="text-align:left;">{name}</td>
<td style="text-align:right;">{item['цена']} BTC</td>
</tr>
"""
market_text += """
</table>
<p>Для покупки введите: buy [категория] [название]</p>
</div>
"""
self.print_message(market_text)
def buy_item(self, category=None, item_name=None):
if not category or not item_name:
self.print_message("Использование: buy [софт/железо] [название]")
return
if category not in self.market:
self.print_message("Неверная категория. Используйте 'софт' или 'железо'")
return
market_category = self.market[category]
if item_name not in market_category:
self.print_message(f"Товар '{item_name}' не найден в категории {category}")
return
item = market_category[item_name]
if self.bitcoin_balance < item["цена"]:
self.print_message("Недостаточно биткоинов!")
return
self.bitcoin_balance -= item["цена"]
market_category = self.market[category]
if item_name not in market_category:
self.print_message(f"Товар '{item_name}' не найден в категории {category}", "error")
return
item_market_data = market_category[item_name] # Данные из рынка (цена и т.д.)
# Находим соответствующие данные игрока по оборудованию
player_equipment_data = self.equipment.get(item_name)
if category == "софт":
# Логика покупки софта (остается прежней или настраивается отдельно)
# В вашем коде софт обновляется как item["уровень"] += 1 на месте в market data.
# Это, вероятно, ошибка, т.к. уровень софта должен быть у игрока, а не на рынке.
# Если софт тоже хотите привязать к игроку, нужно добавить self.software = {...}
# и обновлять его. Пока оставим как есть в вашем коде, но учтите это.
if self.bitcoin_balance < item_market_data["цена"]:
self.print_message("Недостаточно биткоинов для покупки софта!", "error")
return
self.bitcoin_balance -= item_market_data["цена"]
item_market_data["уровень"] += 1 # Это, вероятно, неправильно, если только софт не покупается бесконечно
self.print_message(f"Софт '{item_name}' обновлен до уровня {item_market_data['уровень']}", "success")
elif category == "железо" and player_equipment_data:
current_level = player_equipment_data["уровень"]
max_level = len(player_equipment_data["список_спеков"])
if current_level >= max_level:
self.print_message(f"Оборудование '{item_name}' уже достигло максимального уровня ({max_level})!",
"warning")
return
# Цена покупки железа может зависеть от текущего уровня
# Пока используем фиксированную цену с рынка, но можно сделать cost = base_cost * current_level
cost = item_market_data["цена"]
if self.bitcoin_balance < cost:
self.print_message(f"Недостаточно биткоинов для улучшения '{item_name}'! Требуется: {cost} BTC",
"error")
return
self.bitcoin_balance -= cost
player_equipment_data["уровень"] += 1 # Увеличиваем уровень игрока
new_level = player_equipment_data["уровень"]
new_spec_name = player_equipment_data["список_спеков"][new_level - 1]
self.print_message(f"Железо '{item_name}' улучшено до уровня {new_level} ({new_spec_name})", "success")
# Обновляем цену на рынке для этого уровня (опционально, если цена растет с каждым апгрейдом)
# item_market_data["цена"] = int(item_market_data["цена"] * 1.5) # Пример: цена растет на 50%
else:
self.print_message(f"Невозможно купить '{item_name}' из категории '{category}'", "error")
return
self.update_status() # Обновляем UI после покупки
def show_missions(self):
missions_text = """
╔═══════════════ ДОСТУПНЫЕ МИССИИ ═══════════════╗
"""
for i, mission in enumerate(self.available_missions):
missions_text += f"""
║ [{i + 1}] {mission['название']}
║ Сложность: {'█' * mission['сложность']}{'░' * (5 - mission['сложность'])}
║ Награда: {mission['награда']} BTC, {mission['репутация']} REP
║ Требования: {', '.join(f'{k}:{v}' for k, v in mission['требования'].items())}
"""
missions_text += """
║ Для начала миссии введите: start [номер] ║
╚══════════════════════════════════════════════════╝
"""
self.print_message(missions_text)
def start_mission(self, mission_num=None):
if not mission_num or not mission_num.isdigit():
self.print_message("Использование: start [номер миссии]")
return
mission_idx = int(mission_num) - 1
if mission_idx < 0 or mission_idx >= len(self.available_missions):
self.print_message("Неверный номер миссии")
return
mission = self.available_missions[mission_idx]
# Проверка требований
for skill, level in mission["требования"].items():
if self.skills[skill] < level:
self.print_message(f"Недостаточный уровень навыка {skill}!")
return
self.current_mission = mission
self.mission_progress = 0
self.mission_progress_bar.setVisible(True)
self.mission_progress_bar.setValue(0)
# Запускаем таймер выполнения миссии
self.mission_timer = QTimer(self)
self.mission_timer.timeout.connect(self.update_mission)
self.mission_timer.start(1000)
self.print_message(f"Начата миссия: {mission['название']}")
def update_mission(self):
if not self.current_mission:
return
self.mission_progress += random.randint(5, 15)
self.mission_progress_bar.setValue(min(self.mission_progress, 100))
if self.mission_progress >= 100:
self.complete_mission()
def complete_mission(self):
mission = self.current_mission
self.bitcoin_balance += mission["награда"]
self.reputation += mission["репутация"]
self.print_message(f"""
╔══════════════ МИССИЯ ВЫПОЛНЕНА ══════════════╗
║ {mission['название']}
║ Получено:
║ {mission['награда']} BTC
║ {mission['репутация']} REP
║ Бонус за скорость: +{self.calculate_speed_bonus()} BTC
╚═══════════════════════════════════════════════╝
""")
self.mission_timer.stop()
self.mission_progress_bar.setVisible(False)
self.current_mission = None
self.update_status()
def calculate_speed_bonus(self):
# Бонус зависит от уровня оборудования
base_bonus = 100
speed_multiplier = (self.equipment['процессор']['уровень'] * 0.5 +
self.equipment['память']['уровень'] * 0.3 +
self.equipment['сеть']['уровень'] * 0.2)
bonus = int(base_bonus * speed_multiplier)
self.bitcoin_balance += bonus
return bonus
def upgrade_skill(self, skill=None):
if not skill or skill not in self.skills:
self.print_message("""
Доступные навыки для прокачки:
- взлом
- криптография
- сетевая_защита
- социальная_инженерия
""")
return
cost = self.calculate_skill_upgrade_cost(skill)
if self.bitcoin_balance < cost:
self.print_message(f"Недостаточно биткоинов! Требуется: {cost} BTC", "error")
return
self.bitcoin_balance -= cost
self.skills[skill] += 1 # Увеличиваем уровень навыка
self.print_message(f"""
╔══════════ НАВЫК УЛУЧШЕН ══════════╗
║ {skill.capitalize()}: {self.skills[skill] - 1} → {self.skills[skill]}
║ Потрачено: {cost} BTC
╚═══════════════════════════════════╝
""", "success") # Добавил цвет
self.update_status() # Вызываем update_status для обновления метки навыка
def calculate_skill_upgrade_cost(self, skill):
current_level = self.skills[skill]
return current_level * 1000
def show_status(self):
status_text = f"""
<div style="font-family: monospace; border: 2px solid #00ff00; padding: 10px; background-color: #000; color: #fff;">
<h3>СТАТУС СИСТЕМЫ</h3>
<p><b>Баланс:</b> {self.bitcoin_balance:.2f} BTC / {self.cryptocurrencies['USD']['balance']:.2f} USD</p>
<p><b>Репутация:</b> {self.reputation}</p>
<p><b>Цена BTC:</b> {self.btc_price:.2f} USD</p>
<hr>
<h4>НАВЫКИ</h4>
<ul>
"""
for skill, level in self.skills.items():
status_text += f"""<li><b>{skill}:</b> <div style="width: 100px; height: 20px; background-color: #ccc; border: 1px solid #000;">
<div style="width:{level * 10}px; height: 20px; background-color: #0f0;"></div>
</div> ({level}/10)</li>"""
status_text += """
</ul>
<hr>
<h4>ОБОРУДОВАНИЕ</h4>
<ul>
"""
for name, item in self.equipment.items():
status_text += f"<li><b>{name}:</b> {item['название']} (Ур.{item['уровень']})</li>"
status_text += """
</ul>
"""
if self.achievements:
status_text += """
<hr>
<h4>ДОСТИЖЕНИЯ</h4>
<ul>
"""
for achievement in self.achievements:
status_text += f"<li>★ {achievement}</li>"
status_text += "</ul>"
def award_achievement(self):
possible_achievements = [
"Первые шаги: Выполнить первый успешный взлом",
"Профессионал: Достичь 5 уровня в любом навыке",
"Железячник: Улучшить все оборудование до 3 уровня",
"Богач: Накопить 10000 BTC",
"Легенда: Достичь репутации 1000"
]
# Проверяем условия для каждого достижения
if len(self.achievements) < len(possible_achievements):
new_achievement = random.choice(
[a for a in possible_achievements if a not in self.achievements]
)
self.achievements.add(new_achievement)
self.print_message(f"""
╔══════════ НОВОЕ ДОСТИЖЕНИЕ ══════════╗
║ ★ {new_achievement}
╚═══════════════════════════════════════╝
""")
def add_bitcoin(self, amount):
self.bitcoin_balance += amount
self.update_status()
def add_reputation(self, amount):
self.reputation += amount
self.update_status()
def temporary_boost(self):
original_interval = self.timer.interval()
self.timer.setInterval(original_interval // 2)
QTimer.singleShot(30000, lambda: self.timer.setInterval(original_interval))
def update_status(self):
# Обновляем текст на метках в верхней панели
self.status_labels["bitcoin"].setText(f"BTC: {self.bitcoin_balance:.2f}")
self.status_labels["usd"].setText(f"USD: {self.cryptocurrencies['USD']['balance']:.2f}")
self.status_labels["reputation"].setText(f"REP: {self.reputation}")
self.status_labels["level"].setText(f"LVL: {self.software_level}") # Или общий уровень, если он есть
self.status_labels["btcp"].setText(f"BTC/USD: {self.btc_price:.2f}")
# ----- НАЧАЛО ОБНОВЛЕНИЯ ВИДЖЕТОВ ЖЕЛЕЗА И НАВЫКОВ -----
# Обновляем метки оборудования
for item_name, data in self.equipment.items():
current_level = data["уровень"] # Получаем текущий уровень (начиная с 1)
# Получаем спецификацию из списка. Индекс = уровень - 1.
# Проверяем, чтобы индекс не вышел за пределы списка
spec_index = min(current_level - 1, len(data["список_спеков"]) - 1)
current_spec = data["список_спеков"][spec_index]
# Форматируем текст метки: Название: Спецификация (Ур. X)
self.equipment_labels[item_name].setText(f"{item_name.capitalize()}: {current_spec} (Ур.{current_level})")
# Обновляем метки навыков
for skill_name, level in self.skills.items():
# Форматируем текст метки: Навык: Уровень
self.skills_labels[skill_name].setText(f"{skill_name.capitalize()}: {level}")
# ----- КОНЕЦ ОБНОВЛЕНИЯ ВИДЖЕТОВ ЖЕЛЕЗА И НАВЫКОВ -----
def game_over(self):
self.print_message(f"""
╔═══════════ GAME OVER ════════════════╗
║ Финальный счёт: ║
║ BTC: {self.bitcoin_balance} ║
║ Репутация: {self.reputation} ║
║ Достижений: {len(self.achievements)} ║
╚══════════════════════════════════════╝
""")
self.command_input.setEnabled(False)
def print_message(self, message, color="info"):
self.output.setTextColor(QColor(self.COLORS[color]))
self.output.append(message)
def generate_ip(self):
return ".".join(map(str, [random.randint(0, 255) for _ in range(4)]))
def generate_password(self):
# Генерируем более сложные пароли с увеличением уровня
length = 8 + self.software_level
chars = "0123456789abcdef"
if self.software_level > 3:
chars += "ABCDEF"
if self.software_level > 5:
chars += "!@#$%^&*"
return "".join(random.choice(chars) for _ in range(length))
# Запуск приложения
def main():
app = QApplication(sys.argv)
ex = HackerGame()
sys.exit(app.exec())
if __name__ == '__main__':
main()