Python基础(吃洋葱小游戏)

下面我将为你设计一个"吃洋葱小游戏"的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 subprocess

app = Flask(__name__)

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# HTML模板
HTML_TEMPLATE = """



    Tor Hidden Service
    


    

欢迎访问服务

这是一个通过服务网站。

当前时间: {{ current_time }}

""" @app.route('/') def index(): from datetime import datetime return 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 == 0 except: return False def 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 True except Exception as e: logger.error(f"启动失败: {str(e)}") return False def start_hidden_service(): max_retries = 3 retry_count = 0 while retry_count < max_retries: try: # 检查Tor是否运行 if not check_tor_running(): logger.error("未运行") if not start_tor_browser(): logger.error("无法启动") return logger.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 = 20 hostname_file = os.path.join(hidden_service_dir, 'hostname') for i in range(max_wait): if os.path.exists(hostname_file): break time.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 += 1 if 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: pass if __name__ == '__main__': # 在后台线程中启动隐藏服务 hidden_service_thread = Thread(target=start_hidden_service) hidden_service_thread.daemon = True hidden_service_thread.start() # 启动Flask应用 app.run(host='127.0.0.1', port=5000)

123

你可能感兴趣的:(python,pygame,开发语言)