Написал: rand
Специально для: xss.pro
Всем привет, тут недавно захотелось вспомнить молодость и игры в стиле 90, вот на петухоне порция говнокода, мож кому и зайдет такое. =)
Немного скринов в студию:
Для запуска требуется: Python 3.10
Код:
P.S. По настроению буду обновлять и править баги в этой ветке. Да и интерфейс плывет, надо на HTML под pyqt все переделывать.
Специально для: xss.pro
Всем привет, тут недавно захотелось вспомнить молодость и игры в стиле 90, вот на петухоне порция говнокода, мож кому и зайдет такое. =)
Немного скринов в студию:
Для запуска требуется: Python 3.10
Bash:
pip install PyQt6
Код:
Python:
import sys
import random
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QPushButton, QVBoxLayout,
QLineEdit, QTextEdit, QGridLayout, QProgressBar)
from PyQt6.QtCore import Qt, QTimer
from PyQt6.QtGui import QFont, QColor
# Определение класса HackerGame
class HackerGame(QWidget):
COLORS = {
"success": "#00ff00",
"error": "#ff0000",
"info": "#ffffff",
"warning": "#ffff00",
"event": "#ff8c00",
}
def __init__(self):
super().__init__()
self.software_level = 1
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)
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)
self.initUI()
# Новые параметры
self.reputation = 0
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)
self.initUI()
def initUI(self):
self.setStyleSheet("""
QWidget {
background-color: black;
color: #00ff00;
font-family: 'Courier';
}
QTextEdit, QLineEdit {
border: 1px solid #00ff00;
padding: 5px;
}
QProgressBar {
border: 1px solid #00ff00;
text-align: center;
}
QProgressBar::chunk {
background-color: #00ff00;
}
""")
layout = QVBoxLayout()
# Статус бар
status_layout = QGridLayout()
self.status_labels = {
"bitcoin": QLabel(f"BTC: {self.bitcoin_balance}"),
"reputation": QLabel(f"REP: {self.reputation}"),
"level": QLabel(f"LVL: {self.software_level}")
}
for i, (key, label) in enumerate(self.status_labels.items()):
status_layout.addWidget(label, 0, i)
layout.addLayout(status_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.0")
self.setMinimumSize(800, 600)
self.print_welcome_message()
self.show()
def print_welcome_message(self):
welcome = """
╔══════════════════════════════════════════╗
║ WELCOME TO H4CK3R 2.0 ║
║------------------------------------------║
║ Доступные команды: ║
║ > hack [пароль] - попытка взлома ║
║ > market - торговая площадка ║
║ > upgrade [навык] - прокачка навыка ║
║ > missions - список доступных миссий ║
║ > start [номер] - начать миссию ║
║ > status - показать статус ║
║ > help - показать это сообщение ║
╚══════════════════════════════════════════╝
"""
self.print_message(welcome)
self.print_message(f"Целевой IP: {self.target_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 random_event(self):
events = [
("Вы нашли уязвимость в системе! +500 BTC", lambda: self.add_bitcoin(500)),
("Антивирус засек вашу активность! -200 BTC", lambda: self.add_bitcoin(-200)),
("Хакерское сообщество оценило ваши навыки! +10 REP", lambda: self.add_reputation(10)),
("Случайный сбой в системе! Временное ускорение майнинга!", lambda: self.temporary_boost())
]
event, action = random.choice(events)
self.print_message(f"[СОБЫТИЕ] {event}")
action()
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))
def process_command(self):
command = self.command_input.text().lower().split()
self.command_input.clear()
if not command:
return
commands = {
"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 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 = """
╔════════════════ ТОРГОВАЯ ПЛОЩАДКА ════════════════╗
║ СОФТ ║
"""
for name, item in self.market["софт"].items():
market_text += f"║ {name:.<20} {item['цена']} BTC (Ур.{item['уровень']})║\n"
market_text += "║ ЖЕЛЕЗО ║\n"
for name, item in self.market["железо"].items():
market_text += f"║ {name:.<20} {item['цена']} BTC ║\n"
market_text += """
║ Для покупки введите: buy [категория] [название] ║
╚════════════════════════════════════════════════════╝
"""
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"""
╔══════════════ СТАТУС СИСТЕМЫ ══════════════╗
║ Баланс: {self.bitcoin_balance} BTC ║
║ Репутация: {self.reputation} ║
║ Текущая цена BTC: {self.btc_price} ║
║ ║
║ НАВЫКИ: ║
╚════════════════════════════════════════════╝
"""
for skill, level in self.skills.items():
status_text += f"║ {skill}: {'█' * level}{'░' * (10 - level)} ({level}/10)\n"
status_text += "\n║ ОБОРУДОВАНИЕ:\n"
for name, item in self.equipment.items():
status_text += f"║ {name}: {item['название']} (Ур.{item['уровень']})\n"
if self.achievements:
status_text += "\n║ ДОСТИЖЕНИЯ:\n"
for achievement in self.achievements:
status_text += f"║ ★ {achievement}\n"
status_text += "╚═══════════════════════════════════════════╝"
self.print_message(status_text)
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}")
self.status_labels["reputation"].setText(f"REP: {self.reputation}")
self.status_labels["level"].setText(f"LVL: {self.software_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()
P.S. По настроению буду обновлять и править баги в этой ветке. Да и интерфейс плывет, надо на HTML под pyqt все переделывать.
Вложения
Последнее редактирование: