如何修改网球游戏代码,使分数显示为15-30而非1-2
网球游戏计分规则适配修改方案
我们需要基于网球标准计分规则,把数字形式的分数映射为15、30、40、占先(Advantage)、平分(Deuce)这类专业计分格式,同时处理获胜判定的特殊逻辑。以下是修改后的完整代码及关键说明:
import numpy as np # 基础计分映射表,对应网球规则的核心计分 score_map = {0: '0', 1: '15', 2: '30', 3: '40'} def get_tennis_score(server_points, receiver_points): # 处理双方均拿到3分及以上的特殊场景 if server_points >= 3 and receiver_points >= 3: if server_points == receiver_points: return "Deuce" elif server_points - receiver_points == 1: return "Advantage Server" elif receiver_points - server_points == 1: return "Advantage Receiver" else: # 一方领先两分且均过3分,直接判定获胜 return "Server Wins" if server_points > receiver_points else "Receiver Wins" # 常规计分场景:直接映射数字到网球计分 else: server_display = score_map.get(server_points, str(server_points)) receiver_display = score_map.get(receiver_points, str(receiver_points)) return f"{server_display}-{receiver_display}" # 游戏核心逻辑(替换为你原代码的实际运行逻辑即可) def tennis_game(): server_points = 0 receiver_points = 0 while True: # 模拟随机得分(替换成你原游戏的得分触发逻辑) point_winner = np.random.choice(['server', 'receiver']) if point_winner == 'server': server_points += 1 else: receiver_points += 1 # 输出标准格式的当前分数 current_score = get_tennis_score(server_points, receiver_points) print(f"Current Score: {current_score}") # 游戏结束判定:一方至少4分且领先对手两分 if (server_points >=4 or receiver_points >=4) and abs(server_points - receiver_points) >=2: print(f"Game Over: {'Server' if server_points > receiver_points else 'Receiver'} Wins!") break if __name__ == "__main__": tennis_game()
关键修改说明
- 统一计分映射:用
score_map替代原代码中分开的server_dict和receiver_dict,避免重复定义,简化映射逻辑。 - 特殊场景覆盖:
- 当双方分数都≥3时,优先处理平分、占先的情况,符合网球的核心规则;
- 只有当一方领先两分且分数≥4时,才判定游戏结束,避免提前终止。
- 无缝替换:如果你的原代码中有独立的分数显示逻辑,直接调用
get_tennis_score函数即可输出标准计分格式,无需修改原有得分累计逻辑。
内容的提问来源于stack exchange,提问作者philippamensah00
相关产品推荐
相关产品推荐

