python 简单的实现和电脑玩的猜拳游戏

懒得看的话可以直接去看最后的那个代码

python 简单的实现和电脑玩的猜拳游戏_第1张图片
这是最终的三局两胜版本的运行结果。

那么,猜拳首先无非就是:赢了,输了,平局这三种情况。
如果用列表来表示玩家(左)胜利的三种情况,那就是

[石,剪]
[剪,布]
[布,石]

那么,我的思路就是,把玩家和电脑的出拳弄成这样子:

[玩家,电脑]

对,就是列表,然后跟上面三种情况做比对(==),用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('你出你马呢')

大概说一下,

  • 因为电脑使用的是随机数(int),所以玩家输入的也得是int
  • ord取ascii码是为了避免玩家试图输入字母
  • 因为取了ascii码所以后面统一把玩家的数据都按照ascii码来计算。

但是人类有种东西叫猫饼,所以

我就看啊,输出结果是这样的:
python 简单的实现和电脑玩的猜拳游戏_第2张图片
这不还得脑内转换一遍吗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')



请注意代码的改变。即使是这样,如果出拳的时候输入两个字符时仍然会报错。

止まるんじゃねぇぞ

python 简单的实现和电脑玩的猜拳游戏_第3张图片
但是,

猜拳不得是三局两胜吗?ennnnnh?

だからね,

怎样把它改成三局两胜呢

那,我把之前的代码写成一个函数,比如说round_win()

然后。。。让它循环执行不就好了吗

那么,具体的说,三局两胜就是,玩家或者电脑谁先赢两局。

或者说,谁先拿到2分,游戏就结束。平局不计算分。100局平局也不算

假设玩家的得分是m1,电脑是m2,用max(m1,m2)得到最大值,判断是否为2

max(m1,m2) == 2

以此来决定是否结束游戏。

那么只需要对之前的船新版本做亿点改变即可。

jo等了!

最后不管输入什么都能完美解决的supermotherfuckinglatestversion:

python 简单的实现和电脑玩的猜拳游戏_第4张图片
很简洁是不是?

完整版如下:

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)

你可能感兴趣的:(编程语言)