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

实现功能:

1.创建游戏对象

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

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

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

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

6.循环游戏

类:

玩家类

属性:姓名,房间

方法:战斗

房间类

属性:房间号 房间成员

方法:加入玩家 移除玩家

代码:

python 复制代码
"""
@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.设想功能:增加记录玩家胜负功能,实现段位匹配

相关推荐
AGG_Chan2 分钟前
flutter专栏--深入了解widget原理
开发语言·javascript·flutter
Darenm11139 分钟前
JavaScript事件流:冒泡与捕获的深度解析
开发语言·前端·javascript
whltaoin44 分钟前
Java 后端与 AI 融合:技术路径、实战案例与未来趋势
java·开发语言·人工智能·编程思想·ai生态
wjs20241 小时前
jEasyUI 自定义窗口工具栏
开发语言
二十雨辰1 小时前
vite与ts的结合
开发语言·前端·vue.js
xiaohanbao091 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
亦良Cool1 小时前
如何部署一个Java项目
java·开发语言
沐知全栈开发1 小时前
JavaScript 输出
开发语言
love530love2 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫2 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python