python实现剪刀石头布游戏(初版)

实现功能:

1.创建游戏对象

2.游戏对象可以加入到房间

3.同一个房间内的两个游戏对象可以进行游戏

4.每次两个游戏对象随机的出剪刀石头布

5.三局两胜 决出谁胜谁负

6.循环游戏

类:

玩家类

属性:姓名,房间

方法:战斗

房间类

属性:房间号 房间成员

方法:加入玩家 移除玩家

代码: 

"""
@author:psl
@file:剪刀石头布.py
@time:2024/8/23 14:33
"""
import random
class Player():
    def __init__(self,name,room=None):
        self.name = name
        self.room=room
    def fight(self,other):
        player_score=0
        other_score=0
        print("提示:1表示剪刀,2表示石头,3表示布")
        while player_score<2 and other_score<2:
            player_choice=random.randint(1,3)
            other_choice=random.randint(1,3)
            print(f"玩家与对手的出拳为:{player_choice}, {other_choice}")
            result = player_choice - other_choice
            if result == -2 or result == 1:
                player_score += 1
                # print(f"player:{player_score}")
            elif result == -1 or result == 2:
                other_score += 1
                # print(f"other:{other_score}")
        if player_score>other_score:
            print(f"玩家{self.name}获胜!玩家与对手比分为{player_score}:{other_score}".center(30,"*"))
        else:
            print(f"对手{other.name}获胜!玩家与对手比分为{player_score}:{other_score}".center(30,"*"))
class Room():
    def __init__(self,id):
        self.id=id
        self.members=[]
    def add_player(self,player):
        self.members.append(player)
        pass
    def remove_player(self,player):
        self.members.remove(player)
#无限输入:
#1、创建房间
#2、创建角色
#3、将角色加入房间
#4、选择房间战斗
#5、退出

#1、创建初始房间与初始角色
# 房间"I can win"初始无人,房间"the best"原有成员xfb,房间"come on"原有成员xfb,snh
# 初始角色有psl,xfb,snh
r1=Room("I can win")
r2=Room("the best")
r3=Room("come on")
p1=Player("psl")
p2=Player("xfb")
p3=Player("snh")
r2.members=[p2]
r3.members=[p2,p3]
lst_players={"psl":p1,"xfb":p2,"snh":p3}
lst_rooms={"1":r1,"2":r2,"3":r3}

#设置退出房间指令:look="2"时退出房间
look=""
#设置退出玩家账号指令:ex="q"时退出账户
ex=""
#设置退出程序指令:qu="exit"时退出程序
qu=""
def quit(bye):
    global qu
    if bye=="exit":
        qu=bye

#2、创建角色
while qu!="exit":
    #设置退出房间指令:look="2"时退出房间
    look = ""
    # 设置退出玩家账号指令:ex="q"时退出账户
    ex = ""
    print("欢迎进入猜拳游戏!(按exit退出游戏)")
    u=input("请输入您的玩家名:")
    #输入exit就退出程序
    quit(u)
    if qu=="exit":
        print("您已退出游戏")
        continue
    if u in lst_players:
        print(f"欢迎回来,玩家{u}")
        #将老玩家设置为出战玩家
        for i,j in lst_players.items():
            if j.name==u:
                player_now=j
    else:
        #将新玩家加入玩家列表
        p4=Player(u)
        lst_players[u]=p4
        #将新玩家设置为出战玩家player_now
        player_now=p4
        print(f"您是新用户,已为您创建玩家角色{u}")
    #print(f"玩家列表为:{lst_players}")
    print(f"当前登录玩家为{player_now.name}".center(30,"*"))

    #3、将角色加入房间
    while ex!="q":
        print("现有房间为:1、I can win 2、the best 3、come on")
        print("或者您可以选择:4、创建一个新房间并进入")
        print(f"按q退出当前登录账户{player_now.name}选择重新登录")
        choice=input("请输入您的选择:")
        quit(choice)
        if qu == "exit":
            print("您已退出游戏")
            break
        if choice in lst_rooms:
            # 设置当前房间名为room_now
            room_now = lst_rooms[choice]
            room_include_player=room_now
            if player_now in room_now.members and len(room_now.members)==1:
                print(f"玩家{player_now.name},您已经处于该房间".center(30,"*"))
                other_name=input("人数不够,请再选择一位玩家加入:")
                quit(other_name)
                if qu == "exit":
                    print("您已退出游戏")
                    break#退出了房间,回到第一层循环头部再进行qu=“exit”判断退出游戏
                for i,j in lst_players.items():
                    if other_name==i:
                        room_include_player.add_player(j)
                        room_include_player.members[0].fight(room_now.members[1])
                        #游戏结束后玩家和自定义对手都退出房间
                        room_include_player.remove_player(j)
                        print(f"玩家{player_now.name},您和对手{j.name}退出了房间{room_now.id}".center(30, "*"))
                        break#退出判断玩家是否在当前房间内的循环,
                    else:
                        print("您选择的玩家不存在,请重新选择房间")
                        #break #这里很奇怪,加了break在输入对手时就不能识别到snh,不加就可以了,但是不加上面这句话又会重复循环三遍而且退回到选择房间那一步
                        #continue #这个没必要,反正在循环末尾了
                continue#退出本次房间循环回到房间选择那一步
            else:
                room_now.add_player(player_now)
                # print(lst_rooms[choice].members)#输出房间成员列表
                print(f"您已加入房间 {lst_rooms[choice].id},现在开始你的战斗吧".center(30,"*"))
        elif choice =="4":
            #创建新房间
            room_new=input("设置房间名:")#room_new是新房间id,新房间实例是r4
            quit(room_new)
            if qu == "exit":
                print("您已退出游戏")
                break
            r4=Room(room_new)
            lst_rooms[room_new]=r4
            # 设置当前房间名为room_now
            room_now = lst_rooms[room_new]
            #玩家player_now加入新房间r4
            room_now.add_player(player_now)
            print(f"玩家{player_now.name}成功创建房间{r4.id}并加入".center(30,"*"))
            print(f"房间现有成员为:{room_now.members[0].name}")
            #print(len(room_now.members))
        elif choice=="q":
            ex="q"
            break
        else:
            print("请选择正确的选项".center(30,"*"))
            continue

        #4、判断房间人数是否足够战斗(play_now是当前玩家,room_now是当前房间)
        if len(room_now.members)==2:
            for i in room_now.members:
                if i!=player_now:
                    other=i
            print(f"对决席为:{player_now.name}和{other.name}开始战斗")
            player_now.fight(other)
            room_now.remove_player(player_now)
            print(f"对决完毕,玩家{player_now.name}自动退出房间{room_now.id}".center(30,"*"))
        elif len(room_now.members)==1:
            other_name=input("人数不够,请再选择一位玩家加入:")
            quit(other_name)
            if qu == "exit":
                print("您已退出游戏")
                break
            for i,j in lst_players.items():
                if j.name==other_name:
                    other = j
                    room_now.add_player(other)
                    player_now.fight(other)
                    room_now.remove_player(player_now)
                    print(f"对决完毕,玩家{player_now.name}自动退出房间{room_now.id}".center(30, "*"))
                    break
                else:
                    print("您选择的玩家不存在,请重新选择房间")
            continue
        else:
            if player_now in room_now.members:
                print("房间对决已有两人,您暂处于观战席")
                look = input("1、观战 2、退出当前房间重新选择新房间加入")
                quit(look)
                if qu == "exit":
                    print("您已退出游戏")
                    break
                if look == "1":
                    room_now.members[0].fight(room_now.members[1])
                    room_now.remove_player(player_now)
                    print(f"对决完毕,玩家{player_now.name}自动退出房间{room_now.id}".center(30, "*"))
                elif look == "2":
                    room_now.remove_player(player_now)
                    print(f"玩家{player_now.name},您退出了房间{room_now.id}".center(30, "*"))
            else:
                room_now.members[0].fight(room_now.members[1])

待实现功能:

1.将是否加减玩家写入类方法中

2.简化代码,有些循环和判断要删除

3.加入功能:查看房间,查看房间内玩家情况

4.设想功能:增加记录玩家胜负功能,实现段位匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值