Python外部数据源文件处理作业(二)

每行都要写注释,提交github链接

  1. 使用yaml改良你之前的小游戏代码,将两个角色信息通过yaml传递进去
  2. 预习pytest视频(不用提交,但是很重要)
  3. 对着ppt装饰器的部分,自己敲一遍(选做作业)

游戏规则:
设定一个回合制2人对打游戏。
每个人物都有hp,power,skill
hp代表血量,power代表攻击力,
每三个回合可以使用一次skill,skill将攻击力翻倍

作业1.使用yaml改良你之前的小游戏代码,将两个角色信息通过yaml传递进去

疑问:读取2个人血量、攻击力等信息时,为什么不从default中读取呢?

self.first_hp = battle[self.first][“hp”]
or
self.first_hp = default[self.first][“hp”]

源码地址:

运行截图:

image

使用yaml改良你之前的小游戏代码,将两个角色信息通过yaml传递进去

1、tonglao类
https://github.com/jinzhe-mu/muwj/blob/master/yaml_python/game_tlbb/tonglao.py
2、xuzhu类


3、游戏主体index

4、yaml文件

image

作业

每行都要写注释,提交github链接

  1. 使用yaml改良你之前的小游戏代码,将两个角色信息通过yaml传递进去
  2. 预习pytest视频(不用提交,但是很重要)
  3. 对着ppt装饰器的部分,自己敲一遍(选做作业)

游戏规则:
设定一个回合制2人对打游戏。
每个人物都有hp,power,skill
hp代表血量,power代表攻击力,
每三个回合可以使用一次skill,skill将攻击力翻倍

规则改为:
四个人物,随机分成两组,进行两回合比赛,每个人物获胜为本组赢得一分。比分高的组获胜,独得奖金;若比分一致,奖金平分。
每个人物都有hp,power,skill
hp代表血量,power代表攻击力,
每三个回合可以使用一次skill,skill将攻击力翻倍

第一种执行结果

image

第二种执行结果

image

第三种执行结果

image

作业一 利用yaml配置游戏数据

import yaml

class Game:
    def __init__(self):
        self.character_info = yaml.safe_load(open("./game_character.yml"))  #读取角色信息的yml文件,并存入character_info中
        #print(character_info)  #打印结果为:{'Sunshangxiang': {'hp': 1000, 'power': 150, 'skill': 2}, 'Xiaoqiao': {'hp': 800, 'power': 180, 'skill': 2.5}, 'Hanxin': {'hp': 1500, 'power': 200, 'skill': 1.5}, 'Yase': {'hp': 2000, 'power': 100, 'skill': 1.2}, 'default': ['Sunshangxiang', 'Xiaoqiao', 'Hanxin', 'Yase']}
        self.group1 = [self.character_info["default"][0],self.character_info["default"][1]]  #分组pk,第一轮为1,2pk
        #print(group1)  #打印结果:['Sunshangxiang', 'Xiaoqiao']
        self.group2 = [self.character_info["default"][2],self.character_info["default"][3]]  #第二轮为3,4pk
        #print(group2)  #打印结果:['Hanxin', 'Yase']
        self.group3 = []   #第三轮为第一、二轮中胜利的两个进行pk

    def bi_fight(self,group):  #定义一个两两pk函数,传入pk的两人信息,返回胜者信息
        man1_hp = self.character_info[group[0]]["hp"]      #传入选手1的血量
        man1_power = self.character_info[group[0]]["power"] #传入选手1的power
        man1_skill = self.character_info[group[0]]["skill"]  ##传入选手1的技能
        man2_hp = self.character_info[group[1]]["hp"]  #传入选手2的血量
        man2_power = self.character_info[group[1]]["power"]  #传入选手2的power
        man2_skill = self.character_info[group[1]]["skill"]  ##传入选手2的技能
        round = 0  #定义轮数
        while man1_hp > 0 and man2_hp >0:  #双方血量都大于0时进行对打,直到一方血量小于等于0停止
            if round % 3 == 0:  #每三轮会进行一次技能
                man1_hp = man1_hp - man2_power * man2_skill   #血量公式
                man2_hp = man2_hp - man1_power * man1_skill
            else:
                man1_hp = man1_hp - man2_power
                man2_hp = man2_hp - man1_power
        if man1_hp > 0:   #若结束时选手1血量为正,则他胜利
            return group[0]   #返回胜者姓名
        else:
            return group[1]

    def fight(self):  #定义游戏流程:两两pk,选出最终胜利的一方
        print("比赛正式开始,首先介绍今天的参赛选手,他们分别是:{},{},{},{}".format(self.group1[0],self.group1[1],self.group2[0],self.group2[1]))
        print("----------------------------------------------------------------------------")
        print("第一轮,参赛选手:{}和{}".format(self.group1[0],self.group1[1]))
        print("第一轮胜利的是:{}".format(self.bi_fight(self.group1)))
        self.group3.append(self.bi_fight(self.group1))
        print("-----------------------------中场休息--------------------------------------")
        print("第二轮,参赛选手:{}和{}".format(self.group2[0],self.group2[1]))
        print("第二轮胜利的是:{}".format(self.bi_fight(self.group2)))
        self.group3.append(self.bi_fight(self.group2))
        print("-----------------------------中场休息--------------------------------------")
        print("第三轮,参赛选手:{}和{}".format(self.group3[0],self.group3[1]))
        print("第三轮胜利的是:{}".format(self.bi_fight(self.group3)))
        print("-----------------------------颁奖环节--------------------------------------")
        print("比赛结束,最终获胜的选手是{}".format(self.bi_fight(self.group3)))

game = Game()
game.fight()

结果:

源码地址:

运行结果:

image

作业

使用yaml改良你之前的小游戏代码,将两个角色信息通过yaml传递进去

代码地址

https://github.com/llpanyuan/tianlongbabugai/blob/master/tianlong_babu_game.py

对着ppt装饰器的部分,自己敲一遍(选做作业)

代码地址

https://github.com/llpanyuan/decorator/blob/master/decorator.py

default字段里面没有血量和攻击力吧。你是什么意思的? 有多种取值方法,不做限制,能取到正确的值就行了。

装饰器的注释其实可以再详细一些

关闭