用Python实现的这五个小游戏,你真的学会了嘛?

2023-11-03

相关文件

源码分享,问题解答!!
关注小编,私信小编领取哟!
当然别忘了一件三连哟~~

对了大家可以关注小编的公众号哟~~
有很多资源可以领取的哟!!

Python日志在这里插入图片描述

游戏名称

  1. 五子棋
  2. 雷霆战机
  3. 贪吃蛇
  4. 坦克大战
  5. 俄罗斯方块

开发环境

Python版本:3.6.4
相关模块:
pygame模块;
以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

一:五子棋

五子棋是是一种两人对弈的纯策略型棋类游戏。

五子棋有两种玩法。玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。玩法二:自己形成五子连线就替换对方任意一枚棋子。被替换的棋子可以和对方交换棋子。最后以先出完所有棋子的一方为胜。

pygame模块

游戏采用pygame模块需要先安装

pip install pygame

窗口启动

import pygame
 
pygame.init()
pygame.display.set_caption('五子棋-IT入门') # 改标题
# pygame.display.set_mode()表示建立个窗口,左上角为坐标原点,往右为x正向,往下为y轴正向
screen = pygame.display.set_mode((640,640))

绘制棋子
需要说一下的是画棋子,因为没找到什么合适的棋子图片,所以只要自己来画棋子。
我们用pygame.draw.circle

绘制棋盘

定义棋盘这个类
class RenjuBoard(object):
 
    def __init__(self):
        # self._board = board = [[EMPTY] * 15 for _ in range(15)]
        # 将棋盘每一个交叉点都看作列表的一个元素位,一共有15*15共225个元素
        self._board = [[]] * 15
        self.reset()
    #重置棋盘
    def reset(self):
        for row in range(len(self._board)):
            self._board[row] = [EMPTY] * 15
    #定义棋盘上的下棋函数,row表示行,col表示列,is_black表示判断当前点位该下黑棋,还是白棋
    def move(self, row, col, is_black):
        if self._board[row][col] == EMPTY:
            self._board[row][col] = BLACK if is_black else WHITE
            return True
        return False
    # 给棋盘定义一个函数将自己在screen上面画出来,使用pygame.draw()函数。并且顺便将下了的棋子也画出来
    def draw(self, screen):
        for h in range(1, 16):
            pygame.draw.line(screen, black_color,
                             [40, h * 40], [600, h * 40], 1)
            pygame.draw.line(screen, black_color,
                             [h * 40,40], [h * 40, 600], 1)
        # 给棋盘加一个外框,使美观
        pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 3)
 
        # 在棋盘上标出,天元以及另外4个特殊点位
        pygame.draw.circle(screen, black_color, [320, 320], 5, 0)
        pygame.draw.circle(screen, black_color, [160, 160], 3, 0)
        pygame.draw.circle(screen, black_color, [160, 480], 3, 0)
        pygame.draw.circle(screen, black_color, [480, 160], 3, 0)
        pygame.draw.circle(screen, black_color, [480, 480], 3, 0)
        #做2次for循环取得棋盘上所有交叉点的坐标
        for row in range(len(self._board)):
            for col in range(len(self._board[row])):
                # 将下在棋盘上的棋子画出来
                if self._board[row][col] != EMPTY:
                    ccolor = black_color \
                        if self._board[row][col] == BLACK else white_color
                    # 取得这个交叉点下的棋子的颜色,并将棋子画出来
                    pos = [40 * (col + 1), 40 * (row + 1)]
                    # 画出棋子
                    pygame.draw.circle(screen, ccolor, pos, 18, 0)

最后就是代码的实现啦,代码有点长我就不一一写出来啦,需要的小伙伴可以看相关文件哟!!

效果展示
在这里插入图片描述

二:雷霆战机

敌人精灵
首先定义Mob(小怪物)类型:

class Mob(pygame.sprite
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Python实现的这五个小游戏,你真的学会了嘛? 的相关文章

  • numba 函数何时编译?

    我正在研究这个例子 http numba pydata org numba doc 0 15 1 examples html multi threading http numba pydata org numba doc 0 15 1 ex
  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • Pandas 根据 diff 列形成簇

    我正在尝试使用 Pandas 根据表示时间 以秒为单位 的列中的差异来消除数据框中的一些接近重复项 例如 import pandas as pd numpy as np df pd DataFrame 1200 1201 1233 1555
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • 字典和数组作为类变量与实例变量

    这是赚取积分的简单方法 请解释以下内容 class C a b 0 c def init self self x def d self k v self x k v self a k v self b v self c append v d
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐

  • Oracle数据库还原数据基础知识

    还原数据在用户修改数据内容时创建 保存修改前的值 还原数据至少会保留到事务结束 便于rollback时使用 还原数据保证读取一致性 还原数据可用于闪回查询 查找过去某个时间点的数据 用于闪回表 将表恢复到特定时间点 还原表空间自动进行管理
  • Mybatis构建sql语法

    构建sql 之前通过注解开发时 相关 SQL 语句都是自己直接拼写的 一些关键字写起来比较麻烦 而且容易出错 MyBatis 给我们提供了 org apache ibatis jdbc SQL 功能类 专门用于构建 SQL 语句 常用方法
  • Mssql注入——dns注入,反弹注入

    DNS注入 DNS注入原理 通过子查询 将内容拼接到域名内 让load file 去访问共享文件 访问的域名被记录此时变为显错注入 将盲注变显错注入 读取远程共享文件 通过拼接出函数做查询 拼接到域名中 访问时将访问服务器 记录后查看日志
  • 新生代接口测试神器ApiFox总结,你真的会用吗?

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • linux启动生成文件,Linux重新生成启动引导文件

    1 重新生成grub2的配置文件 grub mkconfig o boot grub grub cfg 2 将grub2安装到硬盘引导扇区 grub install root directory dev sda 3 使用密码保护grub2
  • Unicode编码详解

    Unicode定义 Unicode 统一码 万国码 单一码 是计算机科学领域里的一项业界标准 包括字符集 编码方案等 Unicode 是为了解决传统的字符编码方案的局限而产生的 它为每种语言中的每个字符设定了统一并且唯一的二进制编码 以满足
  • Java svg图片转png图片

    Java svg图片转png图片 比较简单 主要使用batik包里的batik transcoder模块 网上的教程引的包太多了 只是转化的话 这个包就够了 你们引用的时候 记得查一下version 之前我引用的包太老了 项目就起不来了 p
  • Windows下端口号被占用排查方法

    1 WIN R CMD进入命令行 本示例端口号为8081 实操根据自己的端口号来 查找哪个进程号 PID 占用了本端口号 netstat ano findstr 8081 通过PID查到对应占用程序 tasklist findstr 142
  • IP:网际协议

    本文是为了记录学习过程中的知识点所写 用于对自己的理解做一个记录 4位版本 目前的版本号为4 因此IP也称为IPv4 4位首部长度 首部占32bit 4字节 的数目 4bit最大值为15 也就是说最多为480bit 即60字节 包括选项 也
  • Axios----web数据交互方式

    一 VUE生命周期 Created gt Vue 对象创建完成触发的函数 二 缩写 v bind 给属性赋值 缩写为 v on 事件绑定 缩写为 缩写 三 计算属性 computed中定义 以匿名函数形式实现数据的操作 计算 返回的值为计算
  • Docker容器数据卷详解

    文章目录 1 数据卷介绍 2 简单使用 3 MySQL容器建立数据卷同步数据 4 常用命令 5 具名挂载和匿名挂载 5 1 匿名挂载 5 2 具名挂载 6 Dockerfile中设置数据卷 7 容器数据卷 1 数据卷介绍 Docker将运用
  • 详解MOSFET详解MOSFET与IGBT的本质区别与IGBT的本质区别

    http www dzsc com data 2017 11 27 113799 html
  • mysql中if()函数使用

    在mysql中if 函数的用法类似于java中的三目表达式 其用处也比较多 具体语法如下 IF expr1 expr2 expr3 如果expr1的值为true 则返回expr2的值 如果expr1的值为false 则返回expr3的值 其
  • (十)蓝牙MAC地址

    BLE MAC地址分类 1 BLE设备可以使用公共地址和随机地址 至少使用其中一种 也可以有两种 地址的长度是6个字节 严格来说广播中不用包含地址 默认已经有了 2 公共地址 从IEEE购买 保证唯一性 3 随机静态地址 自己定义 上电初始
  • 计算机网络不完全整理(下)--春招实习

    HTTP 从输入url到显示主页的过程 参考 segmentfault com a 119000000 DNS解析 网址到ip地址的转换 TCP连接 HTTP协议使用TCP作为传输层协议 发送HTTP请求 服务器处理请求并返回HTTP报文
  • Flink Watermark分配策略

    Flink Watermark分配策略 WaterMark是Flink为了处理Event Time窗口计算提出的一种机制 本质上是一种时间戳 主要用来处理乱序数据或者延迟数据的 这里通常watermark机制结合window来实现 wate
  • Spring 单例 bean 的线程安全问题

    首先解释一下什么是单例 bean 单例的意思就是说在 Spring IoC 容器中只会存在一个 bean 的实例 无论一次调用还是多次调用 始终指向的都是同一个 bean 对象 用代码来解释单例 bean public class User
  • Cisco L2TP 配置实例

    1 在企业端配置L2TP ENT LNS config username cisco password 0 cisco ENT LNS config vpdn enable ENT LNS config vpdn group myl2tp
  • 创建小程序WePY项目过程报错指南

    笔者在第一次创建小程序 WePY 项目的时候 遇到了各种各样的问题 也在网上搜索了一番 终于也还是把 WePY 项目创建起来了 为了日后遇到问题更快的处理 笔者也把在创建过程的遇到的问题记录了下来 如下 1 在 WebStorm 中创建一个
  • 用Python实现的这五个小游戏,你真的学会了嘛?

    相关文件 源码分享 问题解答 关注小编 私信小编领取哟 当然别忘了一件三连哟 对了大家可以关注小编的公众号哟 有很多资源可以领取的哟 Python日志 游戏名称 五子棋 雷霆战机 贪吃蛇 坦克大战 俄罗斯方块 开发环境 Python版本 3