面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作数据的方法组织在一起,形成对象。Python是一种支持面向对象编程的高级编程语言。
在Python中,面向对象编程的核心概念是类(class)和对象(object)。类是一个抽象的概念,它定义了一类对象的属性和行为。对象是类的实例,它具有类定义的属性和行为。
面向对象编程的主要特点包括封装、继承和多态:
封装(Encapsulation):封装是将数据和操作数据的方法封装在一起,形成一个类。类通过提供公共接口来隐藏内部实现细节,使得对象的使用者只需要关注对象的行为而不需要了解其内部实现。
继承(Inheritance):继承是一种机制,允许一个类继承另一个类的属性和方法。通过继承,子类可以重用父类的代码,并可以在不修改父类的情况下扩展或修改其行为。
多态(Polymorphism):多态是指同一个方法可以在不同的对象上产生不同的行为。通过多态,可以编写通用的代码,使得代码可以处理不同类型的对象,而不需要针对每种类型编写特定的代码。
在Python中,定义一个类使用关键字class,类中的属性和方法通过成员访问运算符.来访问。创建一个对象使用类名后跟一对括号,类似于函数调用。
下面我们完成一个回合制对战游戏:
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("玩家已阵亡,请重新开始游戏")
上述代码定义了一个名为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
以上代码定义了一个名为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("错误输入!请重新输入:")
以上代码是一个简单的游戏类,包含了创建角色和创建房间的功能。
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()
最后,创建一个 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()