|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
是这样,我在写一个简单的游戏,假如A,B,C与D,E,F是对手,他们每个人持有一个数字,A:5,B:4,C:7,D:1,E:9,F:4,
要实现的操作有:1、先判定谁的数字最大,谁就先发起进攻(这里是E先发起进攻,对手人员比自己数字少的A,B,C生命减少9)
2、判定第数字第二大的发起进攻的,比它数字小的都减少生命(这里第2人为C,D,F生命减少7)
3、以此类推...如果有重复的,再进行一次内部随机取值,判定谁大谁小进行进攻,对手谁数字比它小谁就扣血....
我苦思冥想不得其解,还求大佬指点,麻烦了!
本帖最后由 Twilight6 于 2020-6-10 00:48 编辑
看注释吧,第一个代码是你举例子的卡片值,第二个代码是随机卡片值:
- from random import choice
- team1 = [('A', 5), ('B', 4), ('C', 7)] # 队伍 1
- team2 = [('D', 1), ('E', 9), ('F', 4)] # 队伍 2
- number = {}.fromkeys([i[0] for i in team1 + team2], 50) # 初始化各个人的生命值为 50
- sort_number = sorted(team1 + team2, key=lambda x: x[1])[::-1] # 大小排序
- over = [] # 记录已经攻击过的人员
- for i in range(len(sort_number) - 1):
- if sort_number[i] in over: # 判断是否已经参与过比较
- continue
- temp = [sort_number[i]]
- while True: # 循环判断卡片数值大小是否相等
- if sort_number[i][1] != sort_number[i + 1][1]: # 不相等就退出循环
- break
- temp.append(sort_number[i + 1]) # 大小相等加入列表,待 choice 随机选择进行攻击
- i += 1
- while temp != []:
- win = 0 # 用于判断是否进行过攻击,若为0则没有进行过攻击
- random_men = choice(temp) # 从数字排相等的人中随机挑选一个出来攻击
- over.append(random_men) # 加入已经攻击的列表
- temp.remove(random_men) # 移除本次选中的人,因为怕会有大于 2 个人的情况
- print(f'------{random_men[0]}的回合------'.center(38))
- if random_men in team1: # 判断是队伍 1 的人攻击 还是 队伍 2的人攻击
- for i in team2:
- if i[1] < random_men[1]: # 判断卡片是否比攻击人小
- win = 1 # 用于记录该人进行过攻击
- number[i[0]] -= random_men[1] # 减少生命值
- print(
- f'{i[0]}所持有的卡片数字为{i[1]}小于{random_men[0]}的卡片数{random_men[1]},{i[0]}的生命值-{random_men[1]},剩余{number[i[0]]}')
- elif random_men in team2: # 和上面同理,其实这里可以用 else
- for i in team1:
- if i[1] < random_men[1]:
- win = 1
- number[i[0]] -= random_men[1]
- print(f'{i[0]}所持有的卡片数字为{i[1]}小于{random_men[0]}的卡片数{random_men[1]},{i[0]}的生命值-{random_men[1]},剩余{number[i[0]]}')
- if win == 0:
- print(f'对手的卡片没有人比{random_men[0]}小,因此跳过{random_men[0]}的攻击回合')
- print('剩余的生命值情况:A:{},B:{},C:{},D:{},E:{},F:{}'.format(*number.values()))
复制代码
- from random import choice,randint
- team1 = [('A',randint(1,10)),('B',randint(1,10)),('C',randint(1,10))] # 队伍 1
- team2 = [('D',randint(1,10)),('E',randint(1,10)),('F',randint(1,10))] # 队伍 2
- number = {}.fromkeys([i[0] for i in team1+team2],50) # 初始化各个人的生命值为 50
- sort_number = sorted(team1+team2,key=lambda x:x[1])[::-1] # 大小排序
- over = [] # 记录已经攻击过的人员
- for i in range(len(sort_number)-1):
- if sort_number[i] in over: # 判断是否已经参与过比较
- continue
- temp = [sort_number[i]]
- while True: # 循环判断卡片数值大小是否相等
- if sort_number[i][1] != sort_number[i+1][1]: # 不相等就退出循环
- break
- temp.append(sort_number[i+1]) # 大小相等加入列表,待 choice 随机选择进行攻击
- i += 1
- while temp != []:
- win = 0
- random_men = choice(temp)
- over.append(random_men)
- temp.remove(random_men)
- print(f'------{random_men[0]}的回合------'.center(38))
- if random_men in team1:
- for i in team2:
- if i[1] < random_men[1]:
- win = 1
- number[i[0]] -= random_men[1]
- print(f'{i[0]}所持有的卡片数字为{i[1]}小于{random_men[0]}的卡片数{random_men[1]},{i[0]}的生命值-{random_men[1]},剩余{number[i[0]]}')
- elif random_men in team2:
- for i in team1:
- if i[1] < random_men[1]:
- win = 1
- number[i[0]] -= random_men[1]
- print(f'{i[0]}所持有的卡片数字为{i[1]}小于{random_men[0]}的卡片数{random_men[1]},{i[0]}的生命值-{random_men[1]},剩余{number[i[0]]}')
- if win == 0:
- print(f'对手的卡片没有人比{random_men[0]}小,因此跳过{random_men[0]}的攻击回合')
- print('剩余的生命值情况:A:{},B:{},C:{},D:{},E:{},F:{}'.format(*number.values()))
复制代码
|
|