下面我將為你設計一個"吃洋蔥小游戲"的Python實現方案,使用Pygame庫開發。這個游戲模擬吃洋蔥的過程,玩家需要收集不同種類的洋蔥以獲得高分,同時避免吃到辣椒。
🧅 吃洋蔥小游戲 - Python實現方案
🎮 1. 游戲設計概念
- ??游戲目標??:玩家控制角色吃掉盡可能多的洋蔥獲得高分
- ??核心機制??:
- 洋蔥從屏幕上方隨機下落
- 玩家左右移動角色接住洋蔥
- 不同洋蔥有不同分值(普通洋蔥+10,紅洋蔥+20,紫洋蔥+50)
- 辣椒會扣減生命值
- 生命值耗盡游戲結束
先安裝洋蔥
打開鏈接--->高級
配置 ?瀏覽器如何連接互聯網。
配置成127.0.0.1? 7890? socket5(配置 洋蔥瀏覽器如何連接互聯網)
?
D:\Tor Browser\Browser\TorBrowser\Data\Tor里面有一個torrc文件然后配置一下
# 基本配置
DataDirectory D:\Tor Browser\Browser\TorBrowser\Data\Tor
GeoIPFile D:\Tor Browser\Browser\TorBrowser\Data\Tor\geoip
GeoIPv6File D:\Tor Browser\Browser\TorBrowser\Data\Tor\geoip6# 控制端口配置
ControlPort 9051
CookieAuthentication 1# 啟用網絡
DisableNetwork 0
Flask代碼:
from flask import Flask, render_template_string
from stem.control import Controller
import os
from threading import Thread
import logging
import time
import socket
import subprocessapp = Flask(__name__)# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)# HTML模板
HTML_TEMPLATE = """
<!DOCTYPE html>
<html>
<head><title>Tor Hidden Service</title><style>body {font-family: Arial, sans-serif;max-width: 800px;margin: 0 auto;padding: 20px;background-color: #f0f0f0;}.container {background-color: white;padding: 20px;border-radius: 5px;box-shadow: 0 2px 5px rgba(0,0,0,0.1);}h1 {color: #333;}</style>
</head>
<body><div class="container"><h1>歡迎訪問服務</h1><p>這是一個通過服務網站。</p><p>當前時間: {{ current_time }}</p></div>
</body>
</html>
"""@app.route('/')
def index():from datetime import datetimereturn render_template_string(HTML_TEMPLATE, current_time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'))def check_tor_running():"""檢查Tor是否正在運行"""try:# 嘗試連接到Tor的SOCKS端口(9150)來檢查Tor是否運行sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)result = sock.connect_ex(('127.0.0.1', 9150))sock.close()return result == 0except:return Falsedef start_tor_browser():"""啟動Tor Browser"""try:tor_path = "D:\\Tor Browser\\Browser\\TorBrowser\\Tor\\tor.exe"if os.path.exists(tor_path):subprocess.Popen([tor_path])logger.info("正在啟動...")time.sleep(10) # 等待啟動return Trueexcept Exception as e:logger.error(f"啟動失敗: {str(e)}")return Falsedef start_hidden_service():max_retries = 3retry_count = 0while retry_count < max_retries:try:# 檢查Tor是否運行if not check_tor_running():logger.error("未運行")if not start_tor_browser():logger.error("無法啟動")returnlogger.info("正在嘗試連接到控制端口...")# 連接到Tor控制端口controller = Controller.from_port(port=9051)# 嘗試不同的認證方法try:controller.authenticate()except Exception as auth_err:logger.error(f"認證失敗: {str(auth_err)}")# 嘗試使用cookie認證cookie_path = "D:\\Tor Browser\\Browser\\TorBrowser\\Data\\Tor\\control_auth_cookie"if os.path.exists(cookie_path):with open(cookie_path, 'rb') as f:cookie_data = f.read()controller.authenticate(cookie_data)else:raise Exception("無法找到認證cookie文件")logger.info("成功連接到Tor控制端口")# 獲取當前目錄并創建隱藏服務目錄hidden_service_dir = os.path.join(os.getcwd(), 'hidden_service')os.makedirs(hidden_service_dir, exist_ok=True)# 使用單獨的命令添加隱藏服務配置response = controller.msg('SETCONF HiddenServiceDir="{0}" HiddenServicePort="80 127.0.0.1:5000"'.format(hidden_service_dir.replace('\\', '/')))if response.is_ok():logger.info("成功設置隱藏服務")# 給Tor一些時間來生成密鑰和hostname文件logger.info("等待生成密鑰和地址...")# 等待20秒,確保hostname文件被創建max_wait = 20hostname_file = os.path.join(hidden_service_dir, 'hostname')for i in range(max_wait):if os.path.exists(hostname_file):breaktime.sleep(1)logger.info(f"等待hostname文件生成...({i+1}/{max_wait}秒)")# 從文件讀取onion地址if os.path.exists(hostname_file):try:with open(hostname_file, 'r') as f:onion_address = f.read().strip()logger.info(f"隱藏服務地址: {onion_address}")except Exception as e:logger.error(f"讀取hostname文件失敗: {str(e)}")else:logger.warning("未找到hostname文件,請稍后手動查看hidden_service目錄")logger.info(f"隱藏服務目錄: {hidden_service_dir}")logger.info(f"網站可通過Tor Browser訪問: {onion_address}")return # 成功后退出else:raise Exception(f"設置隱藏服務失敗: {response.str()}")except Exception as e:logger.error(f"嘗試 {retry_count + 1}/{max_retries} 失敗: {str(e)}")# 檢查具體錯誤類型if isinstance(e, socket.error):logger.error("網絡錯誤: 請檢查是否正在運行,以及端口9051是否可訪問")retry_count += 1if retry_count < max_retries:logger.info("等待5秒后重試...")time.sleep(5)else:logger.error("請確保:")logger.error("1. 已經啟動")logger.error("2. torrc 文件已正確配置")logger.error("3. 控制端口 9051 可訪問")logger.error("4. 檢查端口占用情況:")try:subprocess.run(["netstat", "-ano", "|", "findstr", "9051"], shell=True)except:pass# 最后一次嘗試從文件讀取hostname_file = os.path.join(os.getcwd(), 'hidden_service', 'hostname')if os.path.exists(hostname_file):try:with open(hostname_file, 'r') as f:onion_address = f.read().strip()logger.info(f"從文件獲取的隱藏服務地址: {onion_address}")logger.info(f"隱藏服務已創建,但連接過程中出現錯誤")logger.info(f"你可以通過訪問:{onion_address}")except:passif __name__ == '__main__':# 在后臺線程中啟動隱藏服務hidden_service_thread = Thread(target=start_hidden_service)hidden_service_thread.daemon = Truehidden_service_thread.start()# 啟動Flask應用app.run(host='127.0.0.1', port=5000)
123