文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用python做一个罚点球小游戏

2023-06-30 18:28

关注

本篇内容介绍了“如何使用python做一个罚点球小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在学习了一点 Python 基础之后,我们可以做一个罚点球的小游戏,大概流程是这样:

实现方法有很多种,我这里提供的只是一种参考。你可以按照自己喜欢的方式去做,那样才是属于你的游戏。

先说一下方向的设定。我的想法比较简单,就是左、中、右三个方向,用字符串来表示。射门或者扑救的时候,直接输入方向。所以这里我用 input 来实现。有同学是用 1-9 的数字来表示八个方向和原地不动,每次输入一个数字,这也是可以的。不过这样守门员要扑住的概率可就小多了。

至于电脑随机挑选方向,如果你是用数字表示,就用我们之前讲过的 randint 来随机就行。不过我这里打算用 random 的一个方法:choice。它的作用是从一个 list 中随机挑选一个元素。

于是,罚球的过程可以这样写:

from random import choiceyou = input('选择你要踢的方向:(左、中、右)')print('你踢向了' + you)direction = ['左', '中', '右']com = chice(direction)print ('电脑扑向了' + com)if you != com:    print ('进球得分!')else:    print ('被扑出去了...')

反之亦然,这里不赘述。

接下来,我们让它循环5次,并且记录下得分。暂时先不判断胜负。

用 score_you 表示你的得分,score_com 表示电脑得分。开始都为0,每进一球就加1。

from random import choicescore_you = 0score_com = 0direction = ['左', '中', '右']for i in range(5):    print('==== 第 %d 回合 - 玩家罚球 ====' % (i+1))    you = input('选择你要踢的方向:(左、中、右)')    print('你踢向了' + you)    com = choice(direction)    print('电脑扑向了' + com)    if you != com:        print('进球得分!')        score_you += 1    else:        print('被扑出去了...')    print('比分: %d(you) - %d(com)\n' % (score_you, score_com))    print('==== 第 %d 回合 - 玩家扑救 ====' % (i+1))    you = input('选择你要扑的方向:(左、中、右)')    print('你扑向了' + you)    com = choice(direction)    print('电脑踢向了' + com)    if you == com:        print('扑出去了!')    else:        print('丢球了...')        score_com += 1    print('比分: %d(you) - %d(com)\n' % (score_you, score_com))

这段代码里有两段相似度很高,你可以想想是不是有办法可以用个函数把它简化。

在此基础之上,我们再加上胜负判断,如果5轮结束之后是平分,就继续踢。

所以我们把一轮的过程单独拿出来作为一个函数kick,在5次循环之后再加上一个while循环。

另外,这里把之前的 score_you 和 score_com 合并成了一个 score 数组。这里的原因是,要让 kick 函数里用到外部定义的变量,需要使用全局变量的概念。暂时想避免说这个,而用 list 不存在这个问题。

from random import choicescore = [0, 0]direction = ['左', '中', '右']def kick():    print('==== 玩家罚球 ====')    you = input('选择你要踢的方向:(左、中、右)')    print('你踢向了' + you)    com = choice(direction)    print('电脑扑向了' + com)    if you != com:        print('进球得分!')        score[0] += 1    else:        print('被扑出去了...')    print('比分: %d(you) - %d(com)\n' % (score[0], score[1]))    print('==== 玩家扑救! ====')    you = input('选择你要扑的方向:(左、中、右)')    print('你扑向了' + you)    com = choice(direction)    print('电脑踢向了' + com)    if you == com:        print('扑出去了!')    else:        print('丢球了...')        score[1] += 1    print('比分: %d(you) - %d(com)\n' % (score[0], score[1]))for i in range(5):    print('==== 第 %d 轮 ====' % (i + 1))    kick()while score[0] == score[1]:    i += 1    print('==== 第 %d 轮 ====' % (i + 1))    kick()if score[0] > score[1]:    print('玩家获胜!')else:    print('玩家落败.')

到这里我们的点球游戏已经快完成了,现在要做的就是增加比赛提前结束的机制,让它更真实。

我的思路是这样:比赛提前结束,就是落后一方的得分,加上他在5轮中剩下的轮数,仍然低于领先方现在的得分。虽然可以根据当前的轮数计算剩下的机会,但由于先踢和后踢的情况不同,这样计算会有些复杂,容易搞错。

所以我决定再增加一个 list,里面记录双方剩余的轮数,初始均为5。

每踢一球,就把对应那一方的计数减1。

每踢一球,就判断输的那一方是否还有机会。

于是需要在最开始增加代码:

rest = [5, 5]

以玩家为例,每踢完一球的判断:

if rest[0] > 0:   rest[0] -= 1   if score[0] < score[1] and score[0] + rest[0] < score[1]:       return True   if score[1] < score[0] and score[1] + rest[1] < score[0]:       return True

由于提前结束仅限于5轮内,所以要判断 rest[0]>0。return 可以让 kick 函数提前结束。电脑的判断与这个类似,只是要换成 rest[1]。

因为需要有个方法提前结束循环,所以我让 kick 函数返回一个 bool 值,正常情况返回 False,一旦提前结束就返回 True。

之前的 for 循环也改成 while,以便于提前结束循环:

i = 0end = Falsewhile i < 5 and not end:   print '==== 第 %d 轮 ====' % (i+1)   end = kick()   i += 1

完整代码如下:

from random import choicescore = [0, 0]rest = [5, 5]direction = ['左', '中', '右']def kick():    print('==== 玩家罚球 ====')    you = input('选择你要踢的方向:(左、中、右)')    print('你踢向了' + you)    com = choice(direction)    print('电脑扑向了' + com)    if you != com:        print('进球得分!')        score[0] += 1    else:        print('被扑出去了...')    print('比分: %d(you) - %d(com)\n' % (score[0], score[1]))    if rest[0] > 0:        rest[0] -= 1        if score[0] < score[1] and score[0] + rest[0] < score[1]:            return True        if score[1] < score[0] and score[1] + rest[1] < score[0]:            return True    print('==== 玩家扑救! ====')    you = input('选择你要扑的方向:(左、中、右)')    print('你扑向了' + you)    com = choice(direction)    print('电脑踢向了' + com)    if you == com:        print('扑出去了!')    else:        print('丢球了...')        score[1] += 1    print('比分: %d(you) - %d(com)\n' % (score[0], score[1]))    if rest[1] > 0:        rest[1] -= 1        if score[0] < score[1] and score[0] + rest[0] < score[1]:            return True        if score[1] < score[0] and score[1] + rest[1] < score[0]:            return True    return Falsei = 0end = Falsewhile i < 5 and not end:    print('==== 第 %d 轮 ====' % (i + 1))    end = kick()    i += 1while score[0] == score[1]:    i += 1    print('==== 第 %d 轮 ====' % (i + 1))    kick()if score[0] > score[1]:    print('玩家获胜!')else:    print('玩家落败.')

“如何使用python做一个罚点球小游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯