python:使用面向对象,编写一个一对一的回合制游戏
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作数据的方法组织在一起,形成对象。Python是一种支持面向对象编程的高级编程语言。
在Python中,面向对象编程的核心概念是类(class)和对象(object)。类是一个抽象的概念,它定义了一类对象的属性和行为。对象是类的实例,它具有类定义的属性和行为。
面向对象编程的主要特点包括封装、继承和多态:
封装(Encapsulation):封装是将数据和操作数据的方法封装在一起,形成一个类。类通过提供公共接口来隐藏内部实现细节,使得对象的使用者只需要关注对象的行为而不需要了解其内部实现。
继承(Inheritance):继承是一种机制,允许一个类继承另一个类的属性和方法。通过继承,子类可以重用父类的代码,并可以在不修改父类的情况下扩展或修改其行为。
多态(Polymorphism):多态是指同一个方法可以在不同的对象上产生不同的行为。通过多态,可以编写通用的代码,使得代码可以处理不同类型的对象,而不需要针对每种类型编写特定的代码。
在Python中,定义一个类使用关键字class,类中的属性和方法通过成员访问运算符.来访问。创建一个对象使用类名后跟一对括号,类似于函数调用。
下面我们完成一个回合制对战游戏:
import random 1'
输入需要的模块
class Role(): blood = 100 mana_pool = 100 defence = 0 def __init__(self, name): self.name = name print(f"角色{self.name}创建成功") def attack(self, name): if self.blood > 0: i = random.randint(10, 30) if self.defence >= i: self.defence -= i else: name.blood = name.blood - (i - self.defence) print(f"{self.name}受到{i}点伤害,当前剩余血量:{name.blood}") if name.blood <= 0: print(f"{self.name} died.game over!please create new roles") else: print("玩家已阵亡,请重新开始游戏") def updefence(self): if self.blood > 0 and self.mana_pool >= 10: i = random.randint(10, 20) self.mana_pool -= 10 self.defence += i print(f"{self.name}增加防御{i}点,当前防御为:{self.defence}") elif self.mana_pool < 10: print("蓝量不足") def unique_skill(self, name): # 无视防御 if self.blood > 0 and self.mana_pool >= 40: self.mana_pool -= 40 i = random.randint(30, 60) name.blood -= i print(f"{self.name}受到大招伤害{i}点,当前剩余血量:{name.blood}") if name.blood <= 0: print(f"{self.name} died.game over!please create new roles") elif self.mana_pool < 40: print("蓝量不足,无法使用") elif self.blood < 0: print("玩家已阵亡,请重新开始游戏")
1234567891011121314151617181920212223242526272829303132333435363738394041424344'上述代码定义了一个名为Role的类,表示游戏中的角色。该类具有以下属性和方法:
属性:
blood:角色的血量,默认为100。
mana_pool:角色的法力值,默认为100。
defence:角色的防御值,默认为0。
name:角色的名称。
方法:
init(self, name):类的构造函数,用于初始化角色对象。接受一个参数name,表示角色的名称。在构造函数中,会打印出角色创建成功的消息。
attack(self, name):角色的攻击方法,接受一个参数name,表示被攻击的角色对象。该方法会生成一个随机数作为攻击伤害,并根据被攻击角色的防御值计算实际伤害。如果被攻击角色的血量小于等于0,则打印出角色死亡的消息。
updefence(self):角色增加防御值的方法。如果角色的血量大于0且法力值大于等于10,则生成一个随机数作为增加的防御值,并扣除相应的法力值。
unique_skill(self, name):角色的特殊技能方法。如果角色的血量大于0且法力值大于等于40,则生成一个随机数作为特殊技能的伤害,并扣除相应的法力值。该技能会无视被攻击角色的防御值。如果被攻击角色的血量小于等于0,则打印出角色死亡的消息。
这个类可以用于创建游戏中的角色对象,并进行攻击、增加防御值和使用特殊技能等操作。在每个方法中都有一些条件判断,以确保角色的状态满足使用条件。
class Room(): roommax = 2 current_players = 0 def __init__(self, roomname, roomnum, player1, player2): self.room_name = roomname self.room_num = roomnum self.player1 = player1 self.player2 = player2 print(f"当前房间为{self.room_name}{self.room_num}") print(f"房间成员:{self.player1},{self.player2}") if self.player1 and self.player2: flag = input("游戏已就绪,输入1开始游戏,输入其它任意键退出房间:") if flag == '1': print("游戏开始") self.start() else: print("已退出房间") else: print("角色数量不足,无法开始游戏") def start(self): role1 = Role(self.player1) role2 = Role(self.player2) menu_data = """ 1.攻击 2.提高防御 3.发动大招 """ while True: print(menu_data) whose_round = random.randint(1, 2) print("掷筛中...") if whose_round == 1: choice = input("角色1回合,输入角色1的技能序号:") if choice == "1": role1.attack(role2) if role2.blood <= 0: break elif choice == "2": role1.updefence() elif choice == "3": role1.unique_skill(role2) if role2.blood <= 0: break else: choice = input("角色2回合,输入角色2的技能序号:") if choice == "1": role2.attack(role1) if role1.blood <= 0: break elif choice == "2": role2.updefence() elif choice == "3": role2.unique_skill(role1) if role1.blood <= 0: break
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263'以上代码定义了一个名为Room的类,表示游戏中的房间。该类具有以下属性和方法:
属性:
roommax:房间最大容纳人数,默认为2。
current_players:当前房间中的玩家数量,默认为0。
room_name:房间名称。
room_num:房间编号。
player1:房间中的玩家1。
player2:房间中的玩家2。
方法:
init(self, roomname, roomnum, player1, player2):类的构造函数,用于初始化房间对象。接受四个参数:roomname表示房间名称,roomnum表示房间编号,player1表示玩家1,player2表示玩家2。在构造函数中,会打印出房间创建成功的消息,并显示房间成员。如果房间中有两个玩家,则询问是否开始游戏,如果输入1则开始游戏,否则退出房间。
start(self):开始游戏的方法。在该方法中,创建了两个角色对象role1和role2,分别对应玩家1和玩家2。然后进入一个循环,显示游戏菜单供玩家选择技能。通过随机数确定当前回合是哪个角色的回合,然后根据玩家的选择调用相应的角色方法。如果某个角色的血量小于等于0,则游戏结束。
这个类可以用于创建游戏中的房间对象,并进行游戏的初始化和进行游戏回合的操作。在构造函数中,会检查房间中是否有足够的玩家数量来开始游戏。在游戏开始后,会根据随机数确定回合顺序,并根据玩家的选择调用相应的角色方法进行游戏操作。
class Game(): def start(self): menu_data = """ 1.创建角色 2.创建房间 """ player1 = None player2 = None while True: print(menu_data) choice = input("请输入你的操作:") if choice == "1": n = 1 while n < 3: print("提示:你需要创建两名角色才能开始游戏!") name = input("请输入角色名称:") if n == 1: player1 = name Role(player1) n += 1 print(f"当前角色数量为{n - 1}") else: player2 = name Role(player2) n += 1 print(f"当前角色数量为{n - 1}") elif choice == "2": if player2 and player1: roomname = input("请输入需要创建的房间名称:") roomnum = input("请输入需要创建的房间号") room1 = Room(roomname, roomnum, player1, player2) else: print("角色不足无法创建房间") else: print("错误输入!请重新输入:")
123456789101112131415161718192021222324252627282930313233343536373839404142'以上代码是一个简单的游戏类,包含了创建角色和创建房间的功能。
Game 类是游戏的主类,其中的 start 方法是游戏的入口函数。
menu_data 是一个包含菜单选项的字符串,用于在控制台显示菜单。
player1 和 player2 是两个角色的变量,初始值为 None。
while True 循环用于持续显示菜单,直到用户选择退出游戏。
用户输入选择后,通过 input 函数获取用户的选择。
如果选择是 “1”,则进入创建角色的逻辑。
n 是一个计数器,用于记录已创建的角色数量。
在一个 while 循环中,用户需要输入两个角色的名称。
如果 n 等于 1,将第一个角色的名称赋值给 player1,并创建一个 Role 对象。
如果 n 大于 1,将第二个角色的名称赋值给 player2,并创建一个 Role 对象。
每次成功创建一个角色后,n 的值增加 1,并显示当前已创建的角色数量。
如果选择是 “2”,则进入创建房间的逻辑。
首先检查 player1 和 player2 是否都存在,如果存在则继续,否则提示角色不足无法创建房间。
用户需要输入房间名称和房间号。
创建一个 Room 对象,并传入房间名称、房间号、以及 player1 和 player2 的名称。
如果选择既不是 “1” 也不是 “2”,则显示错误提示信息。
game = Game() game.start() 12
最后,创建一个 Game 对象,调用了 start 方法来开始游戏。通过调用 game.start() 方法,游戏将一直运行,直到用户选择退出游戏。
以下是代码运行结果:
附上完整代码:
import random class Role(): blood = 100 mana_pool = 100 defence = 0 def __init__(self, name): self.name = name print(f"角色{self.name}创建成功") def attack(self, name): if self.blood > 0: i = random.randint(10, 30) if self.defence >= i: self.defence -= i else: name.blood = name.blood - (i - self.defence) print(f"{self.name}受到{i}点伤害,当前剩余血量:{name.blood}") if name.blood <= 0: print(f"{self.name} died.game over!please create new roles") else: print("玩家已阵亡,请重新开始游戏") def updefence(self): if self.blood > 0 and self.mana_pool >= 10: i = random.randint(10, 20) self.mana_pool -= 10 self.defence += i print(f"{self.name}增加防御{i}点,当前防御为:{self.defence}") elif self.mana_pool < 10: print("蓝量不足") def unique_skill(self, name): # 无视防御 if self.blood > 0 and self.mana_pool >= 40: self.mana_pool -= 40 i = random.randint(30, 60) name.blood -= i print(f"{self.name}受到大招伤害{i}点,当前剩余血量:{name.blood}") if name.blood <= 0: print(f"{self.name} died.game over!please create new roles") elif self.mana_pool < 40: print("蓝量不足,无法使用") elif self.blood < 0: print("玩家已阵亡,请重新开始游戏") class Room(): roommax = 2 current_players = 0 def __init__(self, roomname, roomnum, player1, player2): self.room_name = roomname self.room_num = roomnum self.player1 = player1 self.player2 = player2 print(f"当前房间为{self.room_name}{self.room_num}") print(f"房间成员:{self.player1},{self.player2}") if self.player1 and self.player2: flag = input("游戏已就绪,输入1开始游戏,输入其它任意键退出房间:") if flag == '1': print("游戏开始") self.start() else: print("已退出房间") else: print("角色数量不足,无法开始游戏") def start(self): role1 = Role(self.player1) role2 = Role(self.player2) menu_data = """ 1.攻击 2.提高防御 3.发动大招 """ while True: print(menu_data) whose_round = random.randint(1, 2) print("掷筛中...") if whose_round == 1: choice = input("角色1回合,输入角色1的技能序号:") if choice == "1": role1.attack(role2) if role2.blood <= 0: break elif choice == "2": role1.updefence() elif choice == "3": role1.unique_skill(role2) if role2.blood <= 0: break else: choice = input("角色2回合,输入角色2的技能序号:") if choice == "1": role2.attack(role1) if role1.blood <= 0: break elif choice == "2": role2.updefence() elif choice == "3": role2.unique_skill(role1) if role1.blood <= 0: break class Game(): def start(self): menu_data = """ 1.创建角色 2.创建房间 """ player1 = None player2 = None while True: print(menu_data) choice = input("请输入你的操作:") if choice == "1": n = 1 while n < 3: print("提示:你需要创建两名角色才能开始游戏!") name = input("请输入角色名称:") if n == 1: player1 = name Role(player1) n += 1 print(f"当前角色数量为{n - 1}") else: player2 = name Role(player2) n += 1 print(f"当前角色数量为{n - 1}") elif choice == "2": if player2 and player1: roomname = input("请输入需要创建的房间名称:") roomnum = input("请输入需要创建的房间号") room1 = Room(roomname, roomnum, player1, player2) else: print("角色不足无法创建房间") else: print("错误输入!请重新输入:") game = Game() game.start()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159相关知识
Python游戏开发入门
Python制作5款安卓与iOS手机游戏视频教程
【python小游戏设计】走迷宫游戏设计与实现
Pygame高分回合制游戏项目
策略卡牌游戏《狭小空间中的骑士》面向PC公布
十大开源游戏引擎深入比较
《去月球 传奇RPG之最终一小时》面向PC公布
【Unity】Unity游戏开发入门:新手必读的完整游戏开发指南,手把手教你从零开始到制作第一个游戏
【Python游戏开发】俄罗斯方块(Tetris)游戏(附完整Python完整代码)
各位大神,请问为何我的python在安装Turtle库时会报错
推荐资讯
- 1老六爱找茬美女的烦恼怎么过- 4999
- 2博德之门3黄金雏龙法杖怎么得 4867
- 3《大侠立志传》剿灭摸金门任务 4312
- 4代号破晓官方正版角色介绍 4023
- 5赛马娘锻炼到底的伙伴支援卡事 3802
- 6闪烁之光11月兑换码大全20 3774
- 7原神原海异种刷怪路线-原神原 3547
- 8爆梗找茬王厕所特工怎么通关- 3542
- 9《我的世界》领地删除指令是什 3440
- 10原神开局星落湖怎么出去 原神 3426