当前位置: 首页 > news >正文

Python的2042小游戏及其详解

源码:

import random
import os# 游戏界面尺寸
SIZE = 4# 游戏结束标志
GAME_OVER = False# 初始化游戏界面
board = [[0] * SIZE for _ in range(SIZE)]# 随机生成一个初始方块
def add_random_tile():empty_tiles = [(i, j) for i in range(SIZE) for j in range(SIZE) if board[i][j] == 0]if empty_tiles:i, j = random.choice(empty_tiles)board[i][j] = random.choice([2, 4])# 绘制游戏界面
def draw_board():os.system('cls' if os.name == 'nt' else 'clear')print("2042小游戏")print("---------------------")for row in board:for num in row:print(f"{num:4}", end=" ")print()print("---------------------")# 检查游戏是否结束
def check_game_over():for i in range(SIZE):for j in range(SIZE):if board[i][j] == 0:return Falseif i < SIZE - 1 and board[i][j] == board[i + 1][j]:return Falseif j < SIZE - 1 and board[i][j] == board[i][j + 1]:return Falsereturn True# 处理方向键输入
def handle_input():key = input("请输入方向键(w上,s下,a左,d右):")if key == "w":move_up()elif key == "s":move_down()elif key == "a":move_left()elif key == "d":move_right()# 合并相同数字的方块
def merge_tiles(line):merged = [False] * SIZEmerged_line = []for i in range(SIZE):if i < SIZE - 1 and line[i] == line[i + 1] and not merged[i]:merged_line.append(line[i] * 2)merged[i] = Trueelif line[i] != 0:merged_line.append(line[i])merged_line.extend([0] * (SIZE - len(merged_line)))return merged_line# 将游戏界面向上移动
def move_up():global boardnew_board = []for j in range(SIZE):line = [board[i][j] for i in range(SIZE)]merged_line = merge_tiles(line)new_board.append(merged_line)board = [[new_board[i][j] for i in range(SIZE)] for j in range(SIZE)]add_random_tile()# 将游戏界面向下移动
def move_down():global boardnew_board = []for j in range(SIZE):line = [board[i][j] for i in range(SIZE - 1, -1, -1)]merged_line = merge_tiles(line)new_board.append(merged_line[::-1])board = [[new_board[i][j] for i in range(SIZE)] for j in range(SIZE)]add_random_tile()# 将游戏界面向左移动
def move_left():global boardnew_board = []for i in range(SIZE):line = board[i]merged_line = merge_tiles(line)new_board.append(merged_line)board = new_boardadd_random_tile()# 将游戏界面向右移动
def move_right():global boardnew_board = []for i in range(SIZE):line = board[i][::-1]merged_line = merge_tiles(line)new_board.append(merged_line[::-1])board = new_boardadd_random_tile()# 游戏主循环
while not GAME_OVER:draw_board()handle_input()GAME_OVER = check_game_over()draw_board()
print("游戏结束!")

这段代码实现了一个简单的2048游戏。下面是对整体代码的分析:

1. 导入了`random`和`os`模块,用于生成随机数和清空命令行窗口。

2. 定义了常量`SIZE`,表示游戏界面的尺寸,这里是4x4的方格。

3. 定义了全局变量`GAME_OVER`,用于判断游戏是否结束。

4. 初始化游戏界面`board`,使用二维列表表示,初始时所有元素都为0。

5. 定义了函数`add_random_tile()`,用于在空白位置随机生成一个初始方块,值为2或4。

6. 定义了函数`draw_board()`,用于绘制游戏界面,清空命令行窗口后打印出当前界面的方块布局。

7. 定义了函数`check_game_over()`,用于检查游戏是否结束。遍历游戏界面的每个方块,如果存在空白方块或相邻方块有相同的值,则游戏未结束,否则游戏结束。

8. 定义了函数`handle_input()`,用于处理方向键的输入。根据用户输入的方向键(w上,s下,a左,d右),调用相应的移动函数。

9. 定义了函数`merge_tiles(line)`,用于合并一行或一列中相同数字的方块。遍历行或列中的每个方块,如果相邻的方块有相同的值且未合并过,则合并它们,生成新的合并后的行或列。

10. 定义了四个移动函数`move_up()`、`move_down()`、`move_left()`和`move_right()`,分别实现游戏界面的上、下、左、右移动。在移动前,将每一行或每一列提取出来,调用`merge_tiles()`合并相同数字的方块,然后将合并后的行或列重新放回游戏界面,并随机生成一个新的方块。

11. 使用`while`循环来不断绘制游戏界面、处理用户输入并检查游戏是否结束,直到游戏结束为止。

12. 最后绘制最终的游戏界面,并打印游戏结束提示。

整体而言,该代码通过不断更新游戏界面、处理用户输入和检查游戏状态的方式,实现了一个简单的2048游戏。

相关文章:

Python的2042小游戏及其详解

源码&#xff1a; import random import os# 游戏界面尺寸 SIZE 4# 游戏结束标志 GAME_OVER False# 初始化游戏界面 board [[0] * SIZE for _ in range(SIZE)]# 随机生成一个初始方块 def add_random_tile():empty_tiles [(i, j) for i in range(SIZE) for j in range(SIZ…...

怎么去掉邮件内容中的回车符

上图是Outlook 截图&#xff0c;可见1指向的总有回车符&#xff1b; 故障原因&#xff1a; 不小心误按了箭头4这个选项&#xff1b; 解决方法&#xff1a; 点击2箭头确保tab展开&#xff1b; 点击3以找到箭头4. 取消勾选或者多次点击&#xff0c;即可解决。...

Git-概念与架构

GIT-概念与架构 一、背景和起源二、版本控制系统1.版本控制分类1.1 集中式版本控制1.2 分布式版本控制 2.Git和SVN对比2.1 SVN2.2 GIT 三、GIT框架1.工作区&#xff08;working directory&#xff09;2.暂存区&#xff08;staging area&#xff09;3.本地仓库&#xff08;local…...

android 数独小游戏 经典数独·休闲益智

一款经典数独训练app 标题资源下载 &#xff08;0积分&#xff09;https://download.csdn.net/download/qq_38355313/88544810 首页页面&#xff1a; 1.包含有简单、普通、困难、大师四种难度的数独挑战供选择&#xff1b; 记录页面&#xff1a; 1.记录用户训练过的数独信息&…...

GAT里面的sofamax函数的实现:

1.sofamx 公式&#xff1a; 2. GAT里的sofamax函数的实现&#xff1a; 1. 因为指数在x轴正轴爆炸式地快速增长&#xff0c;如果zi比较大&#xff0c;exp⁡(zi)也会非常大&#xff0c;得到的数值可能会溢出。溢出又分为下溢出&#xff08;Underflow&#xff09;和上溢出&#x…...

Idea 编译SpringBoot项目Kotlin报错/Idea重新编译

原因应该是一次性修改了大量的文件, SpringBoot项目启动Kotlin报错, Build Project也是同样的结果, 报错如下 Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.1.13. Build-&…...

【Qt之QWizard问题】setPixmap()设置logo、background、watermark无效不显示解决方案

问题原因&#xff1a; 使用QWizard或者QWizardPage设置像素图&#xff0c;结果设置完不显示效果。 设置示例&#xff1a; setPixmap(QWizard::WatermarkPixmap, QPixmap("xxx/xxx/xxx.png"));setPixmap(QWizard::BackgroundPixmap, QPixmap("xxx/xxx/xxx.png&…...

mysql 设置远程登录

为了允许远程连接到MySQL服务器&#xff0c;你需要采取以下步骤&#xff1a; 编辑MySQL配置文件&#xff1a; 打开MySQL的配置文件 my.cnf 或 my.ini&#xff0c;这取决于你的操作系统和MySQL版本。该文件通常位于MySQL安装目录下的 etc 或 etc/mysql 目录中。 添加或确保以下行…...

ES的索引概念

1. 概念&#xff1a;Elasticsearch&#xff08;ES&#xff09;是一个开源的全文搜索引擎&#xff0c;可以快速地存储、搜索和分析大量的结构化和非结构化数据。 2. 索引的作用&#xff1a;ES索引是将数据存储在Elasticsearch中的基本方式。它用于存储、搜索、分析和查询数据。…...

text/xml和application/xml

困惑 在http消息中&#xff0c;同样是传送xml信息&#xff0c;有的时候看到Content-Type的值是text/xml&#xff0c;有的时候值是application/xml&#xff0c;感到困惑。 例如&#xff0c;用Postman发送http消息给Tomcat中的基于JAX-WS的 web服务&#xff1a; 请求中传送了xm…...

鸿蒙4.0正式版升级机型

官网支持升级机型入口&#xff1a;HarmonyOS 4支持机型 | 华为官网 (huawei.com) 正式版 手机 HUAWEI P60 HUAWEI P60 Pro HUAWEI P60 Art HUAWEI Mate X3 HUAWEI Mate X3 典藏版 HUAWEI Mate 50 HUAWEI Mate 50 Pro HUAWEI Mate 50 RS 保时捷设计 HUAWEI Mate 50E …...

架构开发与优化咨询和实施服务

服务概述 得益于硬件平台算力的提升&#xff0c;汽车电子电气架构的集成度逐渐提高&#xff0c;从单体ECU、到功能域集成控制器、到区域集成控制器&#xff0c;多域融合成为了目前行业中软件工程的重要工作内容。同时&#xff0c;在传统控制器C代码开发的基础上&#xff0c;C、…...

react hook ts 实现 列表的滚动分页加载,多参数混合混合搜索

InfiniteScroll 的组件见&#xff1a; https://blog.csdn.net/Zhooson/article/details/134396945 search.tsx 页面 import { FC, useEffect, useState } from react import InfiniteScroll from ../../components/InfiniteScrollconst tabs [{id: 1,title: tab-1,index: 1…...

Java应用如何不改代码,调整窗口大小

最近工作上遇到了这个问题&#xff0c;浅浅的研究了一点&#xff0c;这里记录一下。 有不同意见欢迎评论区交流。 需求 项目需求&#xff1a; 客户已经开发好了应用&#xff0c;不过应用在系统上看起来有点小&#xff0c;希望应用能在不修改代码的情况下&#xff0c;通过其他…...

汽车 CAN\CANFD数据记录仪

CAN FD数据记录仪解决汽车电子数据记录与偶发性故障查找问题。 1、脱机离线记录两路CAN/CANFD通道数据 脱机离线记录两路CAN/CANFD通道数据&#xff0c;可记录6个月数据。每个通 道单独设置触发记录模式、触发前预记录报文个数&#xff08;默认1000帧&#xff09;及 过滤规则&a…...

Kafka中topic(主题)、broker(代理)、partition(分区)和replication(副本)它们的关系

在Apache Kafka中&#xff0c;有四个重要的概念&#xff1a;topic&#xff08;主题&#xff09;、broker&#xff08;代理&#xff09;、partition&#xff08;分区&#xff09;和replication&#xff08;副本&#xff09;。它们的关系如下&#xff1a; Topic&#xff08;主题&…...

Mysql字符串类型编码问题

Q: 数据库 Redis 出现 字符比较不一致问题 A:调查后发现在数据库中使用的 account 编码为 utf8mb4_unicode_ci&#xff0c;而这种其实是不区分大小写的&#xff0c;后面我们根据情况&#xff0c;将编码换为 utf8mb4_bin就可以了 参考: utf8mb4_Sageice的博客-CSDN博客 MySQ…...

LabVIEW关于USRPRIO的示例代码

LabVIEW关于USRPRIO的示例代码 USRPRIO 通常以两种方式使用&#xff1a; 1 基于 FPGA 的编程 对于希望修改USRP上的底层FPGA代码以添加自定义DSP模块的应用&#xff0c;请使用USRP示例项目。它可作为构建 USRP RIO 流式处理应用程序的起点&#xff0c;可从“创建项目”对话框…...

【深度学习实验】网络优化与正则化(六):逐层归一化方法——批量归一化、层归一化、权重归一化、局部响应归一化

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、优化算法0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正&#xff1a;动量法Momen…...

低代码编辑平台后台实现

背景 之前做过一个前端低代码编辑平台&#xff0c;可以实现简单的移动端页面组件拖拽编辑&#xff1a; https://github.com/li-car-fei/react-visual-design 最近基于C的oatpp框架实现了一下后台。使用oatpp框架做web后台开发时&#xff0c;发现按照官方的示例使用的话&#…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...