那么,猜拳首先无非就是:赢了,输了,平局这三种情况。
如果用列表来表示玩家(左)胜利的三种情况,那就是
[石,剪]
[剪,布]
[布,石]
那么,我的思路就是,把玩家和电脑的出拳弄成这样子:
[玩家,电脑]
对,就是列表,然后跟上面三种情况做比对(==),用if语句分别写出玩家赢,平局的情况,剩下的就是玩家输的情况了。
if 玩家赢
elif 平局
else 玩家输
大概这样子。
然后只需要解决掉亿点小问题就完成啦
import random #为了让电脑随机出数而引用的东西
print('剪刀 = 1 | 石头 = 2 | 布 = 3') #声明一下哪个是哪个
x1 = ord(input('玩家出拳: ')) #ord是取ascii码。我知道肯定会有银想输字母
x2 = random.randint(1,3) #意思是让电脑在1,2,3里面随机出一个
print(f'玩家使用了:{x1-48}\n电脑使用了:{x2}')#本着公平公正公开的原则让大家都看到电脑到底出了啥
l1 = [49,3] #这三个list是玩家获胜的三种情况.
l2 = [51,2] #49,50,51即1,2,3的ascii码
l3 = [50,1] #也可以写成l3 = [ ord(2), 1]
l5 = [x1,x2] #卧槽为什么不是l4?
if 49 <= x1 <= 51 : #保证玩家输入的是123而不是什么奇怪的数值
if l5 == l1 or l5 == l2 or l5 == l3:#通过比较l5与l123是否相等来判断玩家是否获胜
print('玩家赢辽')
elif (x1-48) == x2: #平局是这样的
print('平局嗷')
else: #除了赢、平局,剩下的情况就是玩家输了
print('玩家苏辽')
else: #这就是玩家瞎输入的后果
print('你出你马呢')
大概说一下,
但是人类有种东西叫猫饼,所以
我就看啊,输出结果是这样的:
这不还得脑内转换一遍吗wdnmd
1,嗯。。。是剪刀哇。2,,,,嗷是石头。嗯,我赢了,是这样子。赢个几把
不行不行太费事了
所以我就想哇,能不能。。。让他输出的时候别输出123,输出博大精深的汉字呢?
欸,所以就有了下面的新版本:
桥豆麻袋
我写着新版本突然想到,能不能让文本慢点出来哇
一下蹦出来一堆字看着不爽
emmm所以就有了下面的船新版本:
桥豆麻袋!
我写着船新版本写着写着突然就想到这个猜拳他不是一般都是 、
抱歉。
以下是船新版本:
import random
import os
import time
def sl(): #这个函数意思是延时0.5秒。nice
time.sleep(0.5)
print('剪刀 = 1 | 石头 = 2 | 布 = 3')
sl()
x1 = ord(input('玩家出拳: '))
sl()
os.system('cls') #意思是清屏,上面import os调用的
sl()
x2 = random.randint(1,3)
l1 = [49,3]
l2 = [51,2]
l3 = [50,1]
ll = ['剪刀','石头','布'] #剪刀的下标是0,石头是1,布是2.我不粉lovelive的。真的
l5 = [x1,x2]
if 1 <= (x1-48) <= 3 : #保证玩家输入的是123而不是什么奇怪的数值
s1 = ll[x1-49] #需要保证x1-49得到的值必须是lovelive中元素的下标,否则会报错。
s2 = ll[x2-1] #比如电脑出2,是石头,要-1得到的才是lovelive中石头的下标
print(f'玩家使用了:{s1}') #把这句话挪下来是因为得先定义s1 s2之后才能调用
sl()
print(f'电脑使用了:{s2}')
sl()
if l5 == l1 or l5 == l2 or l5 == l3: #真的没有办法优化这个判断了吗
print('玩家赢辽')
elif (x1-48) == x2:
print('平局嗷dd')
else:
print('玩家苏辽')
else:
print('\n你出你马呢\n')
请注意代码的改变。即使是这样,如果出拳的时候输入两个字符时仍然会报错。
止まるんじゃねぇぞ
猜拳不得是三局两胜吗?ennnnnh?
だからね,
怎样把它改成三局两胜呢
那,我把之前的代码写成一个函数,比如说round_win()
然后。。。让它循环执行不就好了吗
那么,具体的说,三局两胜就是,玩家或者电脑谁先赢两局。
或者说,谁先拿到2分,游戏就结束。平局不计算分。100局平局也不算
假设玩家的得分是m1,电脑是m2,用max(m1,m2)得到最大值,判断是否为2
max(m1,m2) == 2
以此来决定是否结束游戏。
那么只需要对之前的船新版本做亿点改变即可。
jo等了!
最后不管输入什么都能完美解决的supermotherfuckinglatestversion:
完整版如下:
import random
import time
m1 = m2 = 0 #m1是玩家得分,m2是电脑得分
def sl():
time.sleep(0.8)
def rule():
global x1,x2,l1,l2
while 1 != 2:
x1 = input('剪刀 = 1 | 石头 = 2 | 布 = 3\n撒 出拳吧: ')
if x1 =='1' or x1 =='2' or x1 =='3':
x1 = int(x1)-1
x2 = random.randint(0,2)
l1 = [x1,x2]
l2 = [[0,2],[1,0],[2,1]]
l3 = ['剪刀','石头','布']
sl(),print(f'爷使用了*{l3[x1]}*,电脑使用了*{l3[x2]}*')
break
else:
guolaoshi()
continue
def round1(): #一局定江山
global m1,m2
rule()
b = False
for i in l2:
a = (l1 == i)
b = a or b
if x1 == x2:
sl(),print('平局嗷')
elif b == True:
sl(),print('爷赢了')
m1 += 1
elif b == False:
sl(),print('电脑赢了')
m2 += 1
sl(),print(f'爷{m1}分,电脑{m2}分')
def guolaoshi():
list1 = ['你在 无中生有','你在 暗度陈仓','你在 凭空捏造','你在 凭空想象','你在 无言无语','你在 无可救药']
i = random.randint(0,5)
print('\n\n\n\n\n\n\n\n\n'),sl(),sl(),sl()
print(list1[i]) ,sl(),sl(),sl()
print('\n\n\n\n\n\n\n\n\n'),sl(),sl(),sl()
def r3w2(): #三局两胜
n=i=0 #赋初值
while n != 2: #双方均未达到2分则继续游戏
i+=1
sl(),round1()
sl(),print(f'第{i}回合结束!\n\n ')
sl()
n = max(m1,m2)
if m1 > m2: #比较总分,判断最终淫家
print('爷获胜')
else:
print('电脑获胜')
r3w2()
(yeahhhhhh)