什么是面向对象编程:

Object Oriented Programming,简称OOP,面向对象编程就是以类的方式组织代码,以对象的形式封装数据

# 面向过程的编程:着重于做什么
# 面向对象的编程,着重于谁去做
# • 类(Class): 用来描述具有相同的属性和方法(能做的事)的对象的集合。
# • 它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
# 属性:对象描述信息--表现形式为变量
# 方法:对象的行为---表现形式为函数
# 实例化:创建一个类的实例,类的具体对象

  • 定义类以及类的方法和属性

# 定义需要的类:对战的角色,对战的房间
# 类的属性和方法:也就是它们的信息和行为
class Role():def __init__(self,name,sex,blood=100,body_armor=None):self.name = nameself.sex = sexself.blood = bloodself.body_armor = body_armorself.room = Nonedef attack(self,other):if self.room == other.room:  # 注:同一房间if self != other:       # 注:不同的人if self.blood > 0 and other.blood > 0:reduce_blood = 5 if other.body_armor else 10# 注:body_armor为假 返回10(没有设置防弹衣)other.blood -= reduce_bloodprint(f"{self.name}攻击{other.name} {reduce_blood}点血量\t{self.name}当前血量:{self.blood}\t{other.name}当前血量:{other.blood}")else:print("其中一方已死亡,不能攻击")exit()else:print("你不能攻击自己")else:print("攻击对象,不在同一个房间")
class Room():def __init__(self,name):self.member = []self.name = namedef join(self,role):if role.room == None:# 注:在角色的类里定义的属性roomif len(self.member) < 2:self.member.append(role)# 注:member房间的属性,房间只能加2个人 所以<2role.room = self.name# 注:达到条件,定义角色加入到 某个房间else:print("此房间已满")else:print("此角色已经加入房间了")role_dict = {}  # 存放初始化实例 # 注:存放名字和对象的关系
room_dict = {}  # 存放初始化实例
  • 定义好类以及实例化对象后,主程序流程控制如下

while True:print("请选择:1.创建角色\t2.创建房间\t3.加入房间\t4.开始战斗\t5.退出")enter_number = input("请输入你的选择\t")if enter_number.isdigit():enter_number = int(enter_number)if 1 <= enter_number <=5:if enter_number == 1:name, sex = input("请输入角色的姓名与性别,空格隔开\n").split()#注:split()是为了 分割 将字符 赋给2个变量role_dict[name] = Role(name, sex)def_blood = input("输入自定义血量\n")if def_blood.isdigit():role_dict[name].blood = int(def_blood)print(f"自定义成功,用户{name}当前血量{role_dict[name].blood}")else:print(f"自定义失败,用户{name}当前血量{role_dict[name].blood}")wear_body_armor = input("输入y装备防弹衣\n")if wear_body_armor == "y":role_dict[name].body_armor = 1elif enter_number == 2:name = input("请输入房间的名字\n")room_dict[name] = Room(name)# 注:创建好的对象(实例化对象) 保存在字典里elif enter_number == 3:print(f"当前角色有{role_dict.keys()},当前房间有{room_dict.keys()}")role_name, room_name = input("请输入要加入的角色和房间名,空格隔开\n").split()# 注:这里可以做1个判断 (考虑到各种情况),角色要一个一个进房间room_dict[room_name].join(role_dict[role_name])continue# 注:从字典 取出房间对象,调用房间对象的join()方法elif enter_number == 4:print(f"当前房间有{room_dict.keys()}")room_name = input("请输入房间的名字\n")  # 注:选择房间if len(room_dict[room_name].member) == 2:# 注:len()==2 这是保证房间里有2个人  才能对打while True:room_dict[room_name].member[0].attack(room_dict[room_name].member[1])room_dict[room_name].member[1].attack(room_dict[room_name].member[0])# 注:通过字典获取房间实例对象,member是房间的属性# 注:为什么房间实例能获取到创建角色类的对象?因为选项3 是角色类属性 加入 房间member属性,保证了这一步能调用成功实例化对象else:print(f"房间{room_name}人数不足2人,对战失败!")continueelif enter_number == 5:print("退出对战")breakelse:print("输入错误,请输入1-5选择操作!")else:print("输入错误,请输入1-5选择操作!")
  • 代码效果展示如图

python实现回合制对战游戏-面向对象编程相关推荐

  1. python实现回合制对战小游戏

    回合制对战游戏 1.创建角色:姓名.性别 2.创建房间: 角色可加入房间 房间内的人可互打 房间上限3人 3.战斗: 装备.默认血量.被正常攻击掉血与有装备掉血不同 #回合制对战游戏 #角色,房间,战 ...

  2. Python一个回合制兵棋小游戏(1)

    1.步兵能力 按照输入移动部队 def move(self):if self.v > 0 and self.free:print(self.name+"##########" ...

  3. JAVA 面向对象编程练习(一个回合制的战斗游戏:战士,骑兵,法师,电脑互相攻击)

    文章目录 一. 小编有话说 二. 游戏的要求 三. 编程前的准备 四. 代码及详细注释 五. 结果 一. 小编有话说 前面一篇文章写了JAVA面向对象编程的思想,本文主要展示关于面向对象编程的实例(一 ...

  4. C++/数据结构——课程设计——回合制对战小游戏

    数据结构的课程设计,基于easyx绘图库做的一个回合制对战小游戏. easyx安装教程:Easyx库安装教程_我叫RT的博客-CSDN博客_easyx怎么安装https://blog.csdn.net ...

  5. 奇美拉遇上战术小队,回合制射击策略游戏的小暖春为这个类型带来了什么?

    GEARS:TACTICS 9月底的这段时期,两款'类X-COM'游戏先后发售.分别是业内标杆<X-COM>系列的新作<奇美拉小队>以及微软一线IP<战争机器>衍生 ...

  6. Python制作回合制手游外挂简单教程(中)

    Python制作回合制手游外挂简单教程(中) 接着上篇的博文,今天我们讲如何实现自动组队刷道 引入: 自动组队刷道的流程是先点击刷道按钮.再点击前往按钮.再点击便捷组队······ 这些操作上篇博文已 ...

  7. 简单回合制打怪升级游戏(Python实现)

    文字对战 主要的系统分类: 角色系统:种族系统和技能系统 战斗系统:采用回合制 商城系统:游戏的道具贩卖系统 充值系统:充值 各系统功能细化: 角色系统--种族系统 分为2大种类:法师和战士 法师系: ...

  8. Python制作回合制手游外挂简单教程(下)

    引入: 接着上篇的博文,今天我们讲如何实现助人为乐 前期准备: 如何获取图片中指定文字的坐标? 我的思路是截取一个小区域,再根据小区域左上角的坐标获取中央坐标 例如: 获取坐上角的x和y坐标,测量x到 ...

  9. android 游戏服务器,用于Android / iOS回合制棋盘游戏的游戏服务器

    编辑您将如何进行大型多人游戏? 嗨西里尔, 正如你所注意到的,有两个主要的事情是两个考虑的: >发送到服务器的信息 >发送给客户的信息 只有一种类型的信息要发送到服务器:用户输入.如果你不 ...

最新文章

  1. 从GPT-3到DETR,一起来盘点2020有哪些突破?
  2. cvBlob 作为静态库链接问题
  3. 01:初识Redis
  4. 代码审查工具StyleCop
  5. boost::mp11::tuple_transform相关用法的测试程序
  6. Docker环境下报错:unknown group ‘mlocate‘ in statoverride file E: Sub-process /usr/bin/dpkg
  7. sbt安装、配置、運行(scala sbt helloworld)
  8. 江森系统设置服务器日期,江森自控METASYS操作手册
  9. 用samba来创建windows下的文件共享
  10. Linux忘记root密码怎么办?
  11. java三目表达式_Java8新特性Lambda表达式
  12. php ftp 账号密码修改,月光软件站 - 编程文档 - 其他语言 - 用PHP即时添加,删除FTP帐号和更改FTP密码的函数...
  13. 实用分享-Visual Studio图像查看插件(Image Watch)
  14. LINUX虚拟机安装增强功能时报错: Kernel headers not found for target kernel. Please install them and execute
  15. Tabulator PDF下载中文字体设置
  16. MS PROJECT 下载
  17. 百度AI Studio飞桨平台 “深度学习”结课总结
  18. 腾讯、阿里纷纷看好的NFT,能否成为拯救区块链的良药?
  19. windows设置有线访问内网,无线访问外网
  20. vs插件html,VSCode插件推荐-html实时加载插件-live server

热门文章

  1. ESP32温湿度 DHT11 实验
  2. 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
  3. 欢迎关注公众号:Kotlin开发者社区
  4. 官方最新版teamview15.5.3.exe
  5. 用matlab检测波峰数量,如何将该组数据计算出波峰与波谷的数量?
  6. 面试太诚实居然被淘汰?真的不公平!
  7. HR是怎么看待PMP证书呢?
  8. 基于java的医院分诊系统的设计与实现
  9. 干翻一切的王者语言到底是谁?
  10. vscode代码自动排版对齐的方法