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

news2024/11/24 2:24:22

小游戏实战-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}")

知识要点

  • 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)

知识要点

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

运行效果

请在此添加图片描述

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

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

游戏规则

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

预期效果

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

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1528413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法第三十天-矩阵中移动的最大次数

矩阵中移动的最大次数 题目要求 解题思路 网格图 DFS 从第一列的任一单元格 ( i , 0 ) (i,0) (i,0) 开始递归。枚举往右上/右/右下三个方向走&#xff0c;如果走一步后&#xff0c;没有出界&#xff0c;且格子值大于 g r i d [ i ] [ j ] grid[i][j] grid[i][j]&#xff0c;则…

Java使用itextpdf往pdf中插入图片

引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version> </dependency>java代码 import cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; i…

华为携手8家企业打造“AI大模型+行业”生态网络 | 百能云芯

据媒体报道&#xff0c;在“大模型行业创新合作计划”签约仪式上&#xff0c;华为云携手循环智能、迪安诊断、零浩网络、云译科技、蓝青教育、航天天目、标普云、乐聚机器人等8家企业&#xff0c;共同开启了一段全新的合作旅程。 这次合作将聚焦于“AI大模型行业”的应用开发&a…

IP代理的认证方式和协议介绍

“IP代理是指使用固定的IP地址作为代理服务器进行代理访问的方式。在网络应用中&#xff0c;IP代理可以为用户提供更加稳定的代理服务&#xff0c;同时也提高了访问网站的安全性。IP代理的认证方式和协议是实现代理服务的重要组成部分。” 一、认证方式 1.用户名和密码认证&am…

RK平台第一次开机速度优化 “Large app, accepted running with swap.“

RK平台第一次开机速度优化 "Large app, accepted running with swap." 问题描述解决方法 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip OS:Android 6.0.1 CPU:3368 Kernel: 3.10 问…

Elasticsearch:使用 OpenAI、LangChain 和 Streamlit 的基于 LLM 的 PDF 摘要器和 Q/A 应用程序

嘿&#xff01; 您是否曾经感觉自己被淹没在信息的海洋中&#xff1f; 有这么多的书要读&#xff0c;而时间却这么少&#xff0c;很容易就会超负荷&#xff0c;对吧&#xff1f; 但猜猜怎么了&#xff1f; 你可以使用大型语言模型创建自定义聊天机器人&#xff0c;该模型可以帮…

重磅升级!P230焕新而来,支持双目SLAM+YOLO点击跟踪,算力高达100TOPS

全新升级的Prometheus 230科研无人机&#xff08;简称P230&#xff09;是一款专为科研工作者及开发者设计的小型&#xff08;250mm轴距&#xff09;无人机实验平台。机载计算机升级为算力100TOPS的Allspark2-Orin NX&#xff0c;结合Prometheus自主无人机开源项目和Prometheus专…

H4010耐压40V降压恒压芯片 40V降12V降5V 支持电流2.5A

H4010是一种内置30V耐压MOS&#xff0c;并且能够实现精确恒压以及恒流的同步降压型 DC-DC 转换器&#xff1b; 支持 1A 持续输出电流输出电压可调&#xff0c;最大可支持 100%占空比&#xff1b;通过调节 FB 端口的分压电阻&#xff0c;可以输出 2.5V到 22V 的稳定电压 。H4010…

一文快速掌握docker的理念和基本使用

写在文章开头 写于一个周末&#xff0c;在复盘梳理文章时候发现这一篇关于早期了解docker时记录的文档&#xff0c;仔细阅读了一下&#xff0c;为了保证文章更加清晰以便读者使用。故再次重新一次梳理一次&#xff0c;通过这篇文章&#xff0c;你将会对docker的基本理念和基础…

Machine Learning ---- Gradient Descent

目录 一、The concept of gradient&#xff1a; ① In a univariate function&#xff1a; ②In multivariate functions&#xff1a; 二、Introduction of gradient descent cases&#xff1a; 三、Gradient descent formula and its simple understanding: 四、Formula o…

GPIO和Pinctrl子系统的使用

一、 Pinctrl子系统 1、基本架构 现在的芯片动辄几百个引脚&#xff0c;在使用到GPIO功能时&#xff0c;让你一个引脚一个引脚去找对应的寄存器&#xff0c;说实话很烦。所以&#xff0c;要把引脚的复用、配置抽出来&#xff0c;做成Pinctrl子系统&#xff0c;给GPIO、UART等模…

2082.找单词

动态规划问题&#xff1a; 先声明两个数组&#xff1a; 数组 a&#xff1a;存储当前状态下&#xff0c;所有可能的单词价值总和的计数。在每次迭代开始时&#xff0c;我们使用 a 数组来跟踪包含当前字母之前的所有可能单词的价值总和。 数组 b&#xff1a;在处理每个字母时&a…

XMind for mac/Win:解锁思维新境界,让思维导图成为你的创意引擎

在信息爆炸的时代&#xff0c;如何高效地整理思绪、捕捉灵感&#xff0c;成为每个人都需要面对的挑战。而XMind&#xff0c;作为一款功能强大的思维导图软件&#xff0c;正以其独特的魅力&#xff0c;帮助无数用户解锁思维新境界&#xff0c;让思维导图成为他们的创意引擎。 无…

idea远程试调jar、远程试调war

idea远程试调jar、远程试调war 目的&#xff1a;测试运行时与ide开发时是否一致。 配置jar Maven中添加 <packaging>jar</packaging>将其打包为jar。 设置运行入口main 编译jar 看到jar输出 配置试调 添加jar运行 远程试调 先在源码中打好断点试调 debug运行…

String类型详解

1. Java为何要创造String类 在C语言中,是没有String这个类型的,通常使用字符数组中存放一个个字符,再加上最后一个\0来表示/存放一个字符串.也可以使用一个字符指针指向字符串的首元素,直到遇到\0停止,再加上C语言头文件string.h中封装的函数,对于字符串的操作已经够用了. Java…

Learn OpenGL 18 几何着色器

几何着色器 在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader)&#xff0c;几何着色器的输入是一个图元&#xff08;如点或三角形&#xff09;的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而&#xff0c;几何着色器最有趣的地方…

入门:Vue全家桶都有谁,分别肩负什么责任?

当使用Vue.js开发项目时&#xff0c;通常会使用Vue全家桶来提供完整的开发工具和功能。以下是Vue全家桶的各个部分的详细介绍&#xff1a; 项目构建工具 - Vue-cli&#xff1a; Vue-cli是Vue.js官方提供的脚手架工具&#xff0c;可以快速生成一个Vue.jswebpack的项目模板。它提…

【机器学习-01】机器学习基本概念与建模流程

机器学习的过程本质上是一个不断通过数据训练来提升模型在对应评估指标上表现的过程。在此过程中&#xff0c;为模型提供有效的反馈并基于这些反馈进行持续的调整是至关重要的。只有当这个过程顺利进行时&#xff0c;模型才能得到有效的训练&#xff0c;机器才能真正实现学习。…

nodejs基于vue大学生健身爱好者交流网站flask-django-php

任何系统都要遵循系统设计的基本流程&#xff0c;本系统也不例外&#xff0c;同样需要经过市场调研&#xff0c;需求分析&#xff0c;概要设计&#xff0c;详细设计&#xff0c;编码&#xff0c;测试这些步骤&#xff0c;基于python技术、django/flask框架、B/S机构、Mysql数据…

边缘计算网关能够解决企业数改中哪些问题?-天拓四方

随着工业4.0时代的到来&#xff0c;数字化转型已经成为工业企业发展的必然趋势。在这一过程中&#xff0c;边缘计算网关以其独特的优势&#xff0c;正逐渐成为工业企业实现智能化、高效化运营的关键技术。 边缘计算网关是一种部署在网络边缘的设备&#xff0c;它集成了计算、存…