Python实训 姓名大作战

Python实训 姓名大作战

文档介绍:
原创人:蒲成伟
发表目的:保存代码,作为以后的借鉴模型,以防数据丢失。
提示:网友可以借鉴,可以提意见,有更好的修改方案本人一定改正

实训要求

三、实验内容
姓名大作战小游戏设计和开发要求:
(1)输入两个人的姓和名。
(2)分别根据两个人的姓和名计算他们的攻击力、防御力、生命值。
提示:姓的编码为攻击力、名的编码为防御力、姓名的编码为生命值
思考:复姓、两个字的名,攻击力和防御力如何设定?
(3)开始游戏,记录两人的战斗过程和战斗结果,直到某一方的生命值为0或负数。
提示:
·战斗过程:轮流攻防
·每次攻防之后计算并显示攻击结果,攻击效果要结合双方的攻击力和防御力来设计(思考:攻击效果如何判定?)

进阶要求:
1、战斗前可以随机给双方提供武器或防具
2、战斗前可以随机给双方赋予特殊技能
3、可以在战斗时设计暴击,设计随机事件
4、战斗过程不是由计算机控制,每次攻击由游戏者来操纵
其他特别要求:
变量名、类名都要以“姓的全拼和名字的声母作为前缀”,例如学生张三的类名叫Player,那么张三实际的类名叫“ZhangsPlayer”

代码截图

main.py:

from NameAttack import Pusplayers
from NameAttack import Pusjudge
import random
import time


def readey_player1():     #系统做玩家一做战斗前的准备工作(询问需要使用哪个技能)
    print("请" + player1.quanming + "选择你要使用的技能")
    print("你可以选择的技能是:" + player1_skill_choosed[0], player1_skill_choosed[1], player1_skill_choosed[2])
    result=islegal_choice(input("技能:"), player1_skill_choosed)
    return result  # 返回玩家选择的技能编号,给打斗函数告知需使用哪个技能的数据


def readey_player2():     #系统做玩家一做战斗前的准备工作(询问需要使用哪个技能)
    print("请" + player2.quanming + "选择你要使用的技能")
    time.sleep(0.5)
    print("你可以选择的技能是:" + player2_skill_choosed[0], player2_skill_choosed[1], player2_skill_choosed[2])
    time.sleep(0.5)
    result=islegal_choice(input("技能:"), player2_skill_choosed)
    return result
    #玩家的攻击前系统做的准备#玩家的攻击前系统做的准备
def islegal_choice(num,option):
    flg="技能指令有误,输入的技能不存在,你将失去本次攻击机会"
    flg2="技能指令有误,输入的技能不属于你,你将失去本次攻击机会"
    while(0<int(num)<7):

        for i in range(len(option)):
            if num == option[i]:
                time.sleep(0.5)
                print("你选择了技能:"+num+" :"+str(Judger.skill[int(num)-1][1]))

                flg=num
                return flg    #判断技能是否合法,符合哪个技能,如不属于任何一个技能就告知玩家数据有误,并对战斗数值不做变更
        print(flg2)
        return 6

    print(flg)
    return 6
    #判断输入的是否合法
def numerical_variation(index, attacker, Defenser):#已经确认了技能了,无需再判断是否合法,开始攻击

    print("接收到的技能数值:" + str(index))
    time.sleep(0.5)
    index=int(index)-1
    print("为保障游戏公平,玩家每局攻击力减:2000点")
    time.sleep(0.5)
    attacker.Exocet -=2000     #由于攻击力可以叠加,每局给玩家削减一部分攻击力
    attacker.Exocet = attacker.Exocet + (Judger.skill[index])[2]         #技能可以对玩家有增益的效果,先加上增益的数值再参与战斗
    attacker.blood = attacker.blood + (Judger.skill[index])[6]
    attacker.Defense = attacker.Defense + (Judger.skill[index])[4]
    attacker.baoji = attacker.baoji + (Judger.skill[index])[3]
    attacker.shanbi =(Judger.skill[index])[5]
    print(attacker.quanming +
                          "生命值:" + str(attacker.blood) +"增加(" + str((Judger.skill[index])[6]) + ")  " +
                          "攻击力:" + str(attacker.Exocet) + "增加(" + str((Judger.skill[index])[2]) + ")  " +
                          "暴击率:" + str(attacker.baoji) + "增加(" + str((Judger.skill[index])[3]) + ")  " +
                          "闪避几率:" + str(attacker.shanbi) + "增加(" + str((Judger.skill[index])[5]) + ")  " +
                          "防御力:" + str(attacker.Defense) +"增加(" + str((Judger.skill[index])[4]) + ")")     # 玩家选择技能后对各属性进行加成
    time.sleep(0.5)
    suijishu = random.randint(0, 100)     #生成随机数,如果随机数<玩家的闪避概率,判定本次攻击无效
    if suijishu <= Defenser.shanbi:#加成成功后开始攻击对手,先判断对方是否可以闪避攻击
        print(Defenser.quanming + "闪避了来自" + attacker.quanming + "的攻击")
        time.sleep(0.5)
        return 0
    else:
        if Defenser.Defense > attacker.Exocet * attacker.baoji:      #如果护甲可以完全抵挡本次攻击。那么血量等其他参数不变,在护甲数值上减去本次攻击数值即可(护甲值-=攻击者攻击值)
            Defenser.Defense -= attacker.Exocet * attacker.baoji
            print(Defenser.quanming +
                  "生命值:" + str(Defenser.blood) + "(受到 0 " "点伤害)" +
                  "攻击力:" + str(Defenser.Exocet) +
                  "暴击率:" + str(Defenser.baoji) +
                  "闪避几率:" + str(Defenser.shanbi) +
                  "防御力:" + str(Defenser.Defense) + "(损失" + str(attacker.Exocet * attacker.baoji) + "点护甲)")
            time.sleep(0.5)
        else:
            Defenser.blood -= attacker.Exocet * attacker.baoji      #如果护甲值不足以抵挡本次攻击,   Blood-=攻击者攻击值,然后  blood+=护甲残值,最后把护甲值赋值为0;
            Defenser.blood += Defenser.Defense
            Defenser.Defense = 0
            print(Defenser.quanming +
                      "生命值:" + str(Defenser.blood) + "(受到" + str(attacker.Exocet * attacker.baoji) + "点伤害)" +
                      "攻击力:" + str(Defenser.Exocet) +
                      "暴击率:" + str(Defenser.baoji) +
                      "闪避几率:" + str(Defenser.shanbi) +
                      "防御力:" + str(Defenser.Defense) + "(损失 0 点护甲)")
            time.sleep(2)

if __name__ == '__main__':
    print("-----------------------------------------------------------------------------")
    print("-----------------------------欢迎来到姓名大作战-------------------------------")
    print("-----------------------------------------------------------------------------")

    player1 = Pusplayers.player()
    player2 = Pusplayers.player()      #实例化两个对象

    Judger=Pusjudge.caipan()      #创建裁判对象
    player1_skill_choosed = Judger.choose_Skill(player1.quanming)
    player2_skill_choosed = Judger.choose_Skill(player2.quanming)      #玩家开始选择技能
    Rounds=1     #定义回合数

    while player1.blood>=0 and player2.blood>=0:     #当满足两个玩家的Blood都>=0时,执行战斗,否则结束战斗
        print("     ")
        print("     ")
        print("     ")
        print("     ")
        print("     ")
        print("---------------------------第 "+str(Rounds)+" 回合开始---------------------------")
        if Rounds==1:       #第一回合需判定谁先开始
            Attacker = Judger.which_first(player1.quanming, player2.quanming)    #传入两个玩家的名字,开始随机选择并返回攻击者的姓名
            if Attacker==player1.quanming:
                numerical_variation(readey_player1(), player1, player2)      #开始战斗,使用函数  readey_player1 执行玩家1的战斗准备工作,再讲执行结果(选择的技能编号)作为参数传递给 numerical_variation 进行战斗数据变更
                Rounds+=1    #回合数加一
                xianshouwanjia =1   #记录是谁先动手的
            else:
                numerical_variation(readey_player2(), player2, player1)      #开始战斗,使用函数  readey_player2 执行玩家1的战斗准备工作,再讲执行结果(选择的技能编号)作为参数传递给 numerical_variation 进行战斗数据变更
                Rounds += 1  # 回合数加一
                xianshouwanjia = 2  # 记录是谁先动手的
        else:
            if xianshouwanjia == 2:    #如果不是第一局,判断谁先动的手
                if Rounds%2==0:#如果是玩家2先动手,则偶数局都为玩家二攻击,反之玩家一攻击
                    numerical_variation(readey_player2(), player2, player1)
                    Rounds += 1
                else :
                    numerical_variation(readey_player1(), player1, player2)
                    Rounds += 1
            else :
                if Rounds%2==0:
                    numerical_variation(readey_player1(), player1, player2)
                    Rounds += 1
                else :
                    numerical_variation(readey_player2(), player2, player1)
                    Rounds += 1
    if player1.blood<=0:
        print(player2.quanming+"终于战胜了"+player1.quanming)
    else:
        print(player1.quanming + "终于战胜了" + player2.quanming)   #判定谁的血量<=0
    print("--------游戏结束,将会在5秒后退出--------")
    print("制作人:蒲成伟")
    time.sleep(5)

Pusplayer:

class player:
    xing = None
    ming = None
    quanming=None
    blood=None
    Exocet=None
    Defense=None
    baoji=0
    shanbi=0
    def __init__(self):



        self.xing = input("请输入你的姓:")
        self.ming = input("请输入你的名:")
        for i in range(len(self.xing)):
            self.Exocet = ord(self.xing[i])
        for j in range(len(self.ming)):
            self.Defense = ord(self.ming[j])
        self.blood = self.Exocet + self.Defense
        self.quanming=self.xing+self.ming
        self.Exocet/=7
        self.Exocet=round(self.Exocet,2)
        print('{} 的血量为:{} 攻击力:{} 防御力: {}'.format(self.xing + self.ming, self.blood, self.Exocet, self.Defense))


Pusjudge.py

from NameAttack import Pusplayers
from NameAttack import main
import random
import time


class caipan(Pusplayers.player):
    Skill_1=None
    Skill_2=None
    Skill_3 = None
    Skill_4 = None
    Skill_5 = None
    Skill_6 = None
    skill_1_message = [1, "雷霆半月斩", 3000, 1.2, 1300, 10, 1000]     #将技能的参数都储存在数组中,方便程序调用
    skill_2_message = [2,"九天雷霆山脚蹬",1500,1.1,900,40,2000]
    skill_3_message = [3, "万象重生", 700, 1.1, 2300, 20, 6000]
    skill_4_message = [4, "反伤刺甲", 2000, 1.15, 300, 32, 3000]
    skill_5_message = [5, "火烧赤壁", 3500, 1, 0, 20, -1000]
    skill_6_message = [6, "铁索连环", 200, 1, 200, 10, 500]
    ERRor_message=[7,1,1,1,1,1,1]
    skill=[skill_1_message,skill_2_message,skill_3_message,skill_4_message,skill_5_message,skill_6_message,ERRor_message]


    def __init__(self):
        print("游戏载入中...")
        time.sleep(2)
        self.Skill_1 = "            |       技能代号: 1 ,技能: 雷霆月斩, 伤害: 3000, 暴击率: 1.2,  防御增益: 1300, 闪避增益: 10, 血量回复:1000,  技能简介:大刀之下,寸草不生        |"

        self.Skill_2 = "            |       技能代号: 2 ,技能: 九天雷霆, 伤害: 1500, 暴击率: 1.13, 防御增益: 900,  闪避增益: 40, 血量回复:2000,  技能简介:三十六计走为上策          |"

        self.Skill_3 = "            |       技能代号: 3 ,技能: 万象重生, 伤害: 700,  暴击率: 1.05, 防御增益: 2300, 闪避增益: 20, 血量回复:6000,  技能简介:稳住,待我回口血          |"

        self.Skill_4 = "            |       技能代号: 4 ,技能: 反伤刺甲, 伤害: 2000, 暴击率: 1.5,  防御增益: 300,  闪避增益: 32, 血量回复:3000,  技能简介:伤害转移。                |"

        self.Skill_5 = "            |       技能代号: 5 ,技能: 火烧赤壁, 伤害: 5000, 暴击率: 1,    防御增益: 0     闪避增益: 0,  血量回复:-1000, 技能简介:火焰攻击,真实伤害        |"

        self.Skill_6 = "            |       技能代号: 6 ,技能: 铁索连环, 伤害: 200,  暴击率: 1,    防御增益: 200,  闪避增益: 10, 血量回复:500,   技能简介:杀敌一千,自损八百        |"
        self.Skill_7 = "            |       技能代号: 7 ,技能: 错误代码, 伤害: 0,    暴击率: 1,    防御增益: 0,    闪避增益: 0,  血量回复: 0,    技能简介:后备代码,输入不符时调用  |"

        print("——————————————————————————————————————————————————————————————————————————————————————")
        print(str(self.Skill_1))
        print(str(self.Skill_2))
        print(str(self.Skill_3))
        print(str(self.Skill_4))
        print(str(self.Skill_5))
        print(str(self.Skill_6))
        print("——————————————————————————————————————————————————————————————————————————————————————")

    def choose_Skill(self,name):              #让玩家选择技能
        player_skill1 = input(name + "请选择你的第一个技能(技能代号):")
        player_skill2 = input(name + "请选择你的第二个技能:")
        player_skill3 = input(name + "请选择你的第三个技能:")
        player_skill_choosed=[player_skill1,player_skill2,player_skill3]
        print("你选择的技能:"+str(player_skill_choosed))


        return player_skill_choosed
    def which_first(self,player1_quanming,player2_quanming):      #随机选择哪个玩家先手
        a = random.randint(0, 1)
        if a == 0:
            print("经系统随机选择" + player1_quanming + "先出手")
            return player1_quanming
        else:
            print("经系统随机选择" + player2_quanming + "先出手")
            return player2_quanming
            

程序运行截图:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值