• 小游戏实战-Python实现石头剪刀布+扫雷小游戏


    我想说

    • 本文无华丽的词藻、无优美的代码,只有n个Python基础知识应用;
    • 本文的目的是通过写一些常见的Python小游戏,对Python一些基础知识比如字典、元组、列表、字符串、函数、类等进行回顾,帮助大家巩固Python基础;
    • 本文的小游戏写作思想其实已经非常成熟,网上也有很多例子,文章主要站在初学者的角度去认识和学习。
    • 哦,对了,文末给大家介绍个产品,建议看看哈。

    废话止于此

    • 不多说了,本文主要汇集一些常见Python小游戏,包括石头剪刀布、扫雷等;
    • 每个小游戏均会说下游戏规则、简单的思路、用到的知识点,并且会给出完整可运行的代码,以及效果展示等。

    石头剪刀布-入门必学游戏

    游戏规则

    和生活中一样,石头、剪刀和布分别代表不同的手势,游戏规则如下:

    • 石头 VS 剪刀:石头胜;
    • 剪刀 VS 布:剪刀胜;
    • 布 VS 石头:布胜;
    • 手势一样:平局。

    实现思路

    • 用户从键盘获取输入数字,1:石头、2:剪刀、3:布;
    • 计算机保存1:石头、2:剪刀、3:布存入一个列表,并随机取值;
    • 用户先输入,然后计算机随机出数字,比对结果即可。

    示例代码

    import random
    
    '''
    1:石头   2:剪刀  3:布;
    '''
    
    while True:
        computer = [1, 2, 3]
        user_input = int(input("请输入数字(1:石头、2:剪刀、3:1布):"))
        computer_result = random.choice(computer)
    
        if user_input == computer_result:
            result = "平局"
        elif (user_input == 1 and computer_result == 2) or \
            (user_input == 2 and computer_result == 3) or \
            (user_input == 3 and computer_result == 1):
            result = "你赢了"
        else:
            result = "计算机赢了"
        print(f"你的出的是:{user_input}")
        print(f"计算机出的是:{computer_result}")
        print(f"结果:{result}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    知识要点

    • python的random函数,是一个随机函数,这个工作中用到的比较多,主要是对一些随机数的处理;
    • while循环的使用;
    • 列表的使用;
    • 从键盘获取用户输入;
    • if语句的使用;
    • print格式化输出的使用。

    注意:有兴趣的话,以上代码可以优化下,比如输入的不是1,2,3,那应该如何处理?

    运行效果

    请在此添加图片描述

    扫雷-内网摸鱼必备游戏

    游戏规则

    • 主要是进行打印输出;
    • 输出显示雷游戏区域;
    • 显示整个游戏区域,包含是雷和不包含雷的区域。

    实现思路

    • 打印游戏区域;
    • 创建雷;
    • 计算非雷格的邻居雷数;
    • 显示安全格子(即不包含雷的格子);
    • 组织游戏打印输出。

    示例代码

    import random
    
    class TestSweep():
    
        # 打印游戏区域
        def game_area(self, area):
            """
            :param area: 游戏区域
            :return:
            """
            for row in area:
                print(' '.join(row))
    
        # 创建地雷
        def create_mines(self, area, mine_num):
            """
            :param area: 游戏区域
            :param mines_count: 地雷个数
            :return:
            """
            while mine_num > 0:
                i = random.randrange(len(area))
                j = random.randrange(len(area))
                if area[i][j] != '*':
                    area[i][j] = '*'
                    mine_num -= 1
    
        # 计算不是雷的邻居雷数
        def not_mines_num(self, area, i, j):
            """
            :param area: 游戏区
            :param i:计数
            :param j:计数
            :return:
            """
            count = 0
            for x in range(i-1, i+2):
                for y in range(j-1, j+2):
                    if 0<=x<len(area) and 0<=y<len(area[x]):
                        if area[x][y] == '*':
                            count += 1
            return count
    
        # 计算不包含雷的格
        def cells_num(self, area):
            """
            :param area: 游戏区
            :return:
            """
            for i in range(len(area)):
                for j in range(len(area[i])):
                    if area[i][j] == ' ':
                        area[i][j] = str(self.not_mines_num(area, i, j))
    
        # 组织打印游戏
        def play_minesweeper(self, r, c, mines_num):
            """
            :param r: 行
            :param c: 列
            :param mines_num:雷数
            :return:
            """
            area = [[' ' for _ in range(c)] for _ in range(r)]
            self.create_mines(area, mines_num)
            self.game_area(area)
            self.cells_num(area)
            self.game_area(area)
    
    
    if __name__ == "__main__":
        seweep = TestSweep()
        rows = 6
        cols = 6
        mines_num = 3
        seweep.play_minesweeper(rows, cols, mines_num)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    知识要点

    • 类的应用;
    • 随机函数使用;
    • 列表、循环使用。

    运行效果

    请在此添加图片描述

    进阶练习-走迷宫(预留)

    我们预留一个小作业,感兴趣的可以玩玩,游戏说明如下:

    游戏规则

    • 打印输出一个迷宫,字母C表示人,通过输入a,d,w,s键来控制闯迷宫的左右上下方向;
    • 当人C遇到墙时,不能进行前行,只能走通的方向,模拟人走迷宫。

    预期效果

    • 我们来看网友做的预期效果,大家可以试试;

    请在此添加图片描述
    请在此添加图片描述

    总结

    本文主要是简单的Python基础应用,基础是语言的核心,只有多练才能熟能生巧。文章内容浅显易懂,适合刚入门Python的你练练手。文中的小游戏其实网上也有很多的版本,建议学习的时候可以自行发挥,还有很多可以进行优化的地方,比如石头剪刀布的非指定数字的判断、扫雷游戏的互动(可以增加和电脑的互动),有兴趣的也可以看看预留的一个作业走迷宫。

  • 相关阅读:
    【Flink】第一节 源码编译
    聚焦云原生安全|如何为5G边缘云和工业互联网应用筑牢安全防线
    Ping工作原理
    4、CSS立体盒子动画——复仇者联盟
    MySQL优化(1):B+树与索引
    Chatgpt掘金之旅—有爱AI商业实战篇|品牌故事业务|(十六)
    mysql [Err] 1118 - Row size too large (> 8126).
    字符串5:剑指Offer58-II.左旋转字符串
    Git原理架构详解
    五款好用到爆炸的小众软件,用过的都好说!建议收藏转发
  • 原文地址:https://blog.csdn.net/NoamaNelson/article/details/136797765