3v3小游戏

本文介绍了一个使用Python实现的3v3小游戏,通过随机选择角色和属性,然后根据玩家指定的出场顺序进行战斗。文章详细阐述了如何从列表中随机选取元素、封装函数、询问玩家出场顺序以及实现战斗逻辑。最后,通过整合所有功能,形成完整的游戏流程。
摘要由CSDN通过智能技术生成

1、显示效果

在这里插入图片描述

2、功能拆分

在这里插入图片描述

3、程序设计

当程序需要同时调用多个函数的话,一个习惯的用法是定义一个主函数main(),将其他函数放在主函数main()内部,起到一种封装的效果。
#第一个函数:打印我喜欢的两个数字

def fav_num(num1,num2): 
    print('我喜欢的数字是%d,还有%d。' % (num1,num2))

#第二个函数:打印两个这两个数字之和
def add_num(num1,num2):
    print('这两个数字相加的和为%d。'% (num1 + num2))

#定义主函数,让我们可以一次性调用两个函数
def main(num1,num2):
    fav_num(num1,num2)
    add_num(num1,num2)

main(7,9)
main(4,7)
>>>
我喜欢的数字是7,还有9。
这两个数字相加的和为16。
我喜欢的数字是4,还有7。
这两个数字相加的和为11

版本1.0:封装函数,自定属性

#双方属性,函数式代码
import time
def show_role(player_life,player_attack,enemy_life,enemy_attack):
  print('【玩家】\n血量:%s\n攻击:%s'%(player_life,player_attack))
  time.sleep(1.5)
  print('【敌人】\n血量:%s\n攻击:%s'%(enemy_life,enemy_attack))
#双方PK,函数式代码
def pk_role(player_life,player_attack,enemy_life,enemy_attack):
  while (player_life>0)and (enemy_life)>0:
    player_life=player_life-enemy_attack
    enemy_life=enemy_life-player_attack
    print('你发起攻击,【玩家】剩余血量为%s'%player_life)
    print('玩家发起攻击,【敌人】剩余血量为'+str(enemy_life))
    show_result(player_life,enemy_life)
    #函数调用在定义之前也是可以的,与C语言的区别
    
#打印战果,函数式代码
def show_result(player_life,enemy_life):
  if player_life>0 and enemy_life<=0:
    print('敌人死翘翘了,这局你赢了')
  elif player_life<=0 and enemy_life>0:
    print('悲催,这局敌人把你干掉了!')
  else:
    print('哎呀,这局你和敌人同归于尽了!')
def main(player_life,player_attack,enemy_life,enemy_attack): 
  show_role(player_life,player_attack,enemy_life,enemy_attack)
  pk_role(player_life,player_attack,enemy_life,enemy_attack)
  #show_result(player_life,enemy_life)
  #这样会始终输出平局,因为player_life和enemy_life的参数是100和105,属于else情况
main(100,35,105,33)
>>>

版本2.0:随机角色,随机属性
目标是:随机生成游戏的不同角色及属性。具体来说,是在一定数量的角色名单里各为双方随机选出3个角色,并为他们随机生成血量值和攻击值。
1、从列表中随机选取多个元素
random.sample(population, k)
其中,population:序列(列表、字符串、元组) k:随机返回的个数
注意:即使k=1,抽到的也是含一个元素的序列

poppulation = [4,5,9,2,1,5,3,0]
import random
random.sample(poppulation,3)
>>>
[3, 2, 5]

2、从列表中随机选取一个元素
random.choice(seq)
其中,seq:序列

poppulation = [4,5,9,2,1,5,3,0]
import random
random.choice(poppulation)
>>>
5

3、Python的函数返回值可以是多个,多个返回值的数类型是元组
思路:另一种存储血量和攻击力的方法,就是将血量和攻击力放在一个列表或者元组里,当成是字典的值,比如说player_info = {’【狂血战士】’: (135,40)}

import random

player = ['狂血战士']
#角色列表,有一个元素

dict1 = {
   }
#创建一个字典,存放角色属性信息

def info():
    a = random.randint(1,3)
    b = random.randint(4,6)
    return a,b  # return 多个值时,返回一个元组(a,b)

data = info()
#调用info()函数,将返回的元组(a,b)赋值给变量data
print(data)

dict1[player[0]] = data
#往空字典添加键值对,player[0]即'狂血战士'为键,data(元组)为值。
print(dict1)  
print(dict1[player[0]]) # 打印出字典的值
print(dict1[player[0]][0]) # 打印出字典的值data的第0个元素
print(dict1[player[0]][1]) # 打印出字典的值data的第1个元素
>>>
(1, 6)
{
   '狂血战士': (1, 6)}
(1, 6)
1
6

程序:

import random

player_list=['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
enemys_list=['【暗黑战士】','【黑暗弩手】','【骷髅骑士】','【嗜血刀客】','【首席刺客】','【陷阱之王】']
players=random.sample(player_list,3)  #从列表里随机选取三个元素
enemys=random.sample(enemy_list,3) 
player_info={
   }#字典里最终嵌套元组
enemy_info={
   }

# 随机生成角色的属性,并用return语句返回元组
def born_role():    
  life=random.randint(100,180) 
  attack=random.randint(30,50) 
  return life,attack
#用元组参数给键players[i]赋值
def show_role():
  for i in range(3):
    player_info[players[i]]=born_role()
    enemy_info[players[i]]=born_role()
show_role()
       
print('----------------- 玩家角色信息 -----------------')
for i in range(3):
  print('%s 血量:%d 攻击:%d'%(players[i],player_info[players[i]][0],player_info[players[i]][1]))
print('--------------------------------------------------')

print('----------------- 敌人角色信息 -----------------')
for i in range(3):
  print('%s 血量:%d 攻击:%d'%(enemys[i],enemy_info[players[i]][0],enemy_info[players[i]][1]))
print('--------------------------------------------------')
>>>
--------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值