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

Python 版本的 2024详细代码

在这里插入图片描述

2048游戏的Python实现

概述:
2048是一款流行的单人益智游戏,玩家通过滑动数字瓷砖来合并相同的数字,目标是合成2048这个数字。本文将介绍如何使用Python和Pygame库实现2048游戏的基本功能,包括游戏逻辑、界面绘制和用户交互。

主要功能:

  1. 游戏界面:游戏界面由一个4x4的网格组成,每个格子可以显示不同的数字。游戏开始时,随机生成两个瓷砖,分别为2或4。
  2. 用户输入:玩家可以通过键盘的方向键(上、下、左、右)来控制瓷砖的移动和合并。
  3. 瓷砖合并:当两个相同的数字瓷砖碰撞时,它们会合并成一个新的瓷砖,数字会加倍。
  4. 胜利条件:当玩家成功合成2048时,游戏会显示胜利信息。
  5. 游戏重置:玩家可以通过按空格键重置游戏,开始新一轮。

代码结构:

  • 颜色设置:定义了不同数字对应的颜色,以便在界面上进行美观的显示。
  • 绘制函数:包括draw_griddraw_tile函数,用于绘制游戏网格和瓷砖。
  • 移动逻辑:实现了瓷砖的移动和合并逻辑,包括move_leftmove_rightmove_upmove_down函数。
  • 游戏循环:包含主菜单和游戏循环,处理用户输入并更新游戏状态。

运行环境:

  • Python 3.x
  • Pygame库(可通过pip install pygame安装)

总结:
这个2048游戏的Python实现是一个很好的练手项目,适合初学者学习游戏开发的基本概念。通过这个项目,开发者可以掌握如何处理用户输入、绘制图形界面以及实现简单的游戏逻辑。可以根据需要进一步扩展功能,例如添加分数记录、游戏结束提示、音效等。

import pygame
import random
import sys# 初始化pygame
pygame.init()# 设置屏幕大小
screen_width = 400
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))# 设置颜色
background_color = (187, 173, 160)
tile_colors = {0: (205, 193, 180),2: (238, 228, 218),4: (237, 224, 200),8: (242, 177, 121),16: (246, 149, 72),32: (245, 124, 36),64: (246, 94, 51),128: (237, 207, 114),256: (237, 204, 97),512: (237, 200, 80),1024: (237, 197, 63),2048: (237, 194, 46),
}# 设置字体
font = pygame.font.Font(None, 32)# 游戏变量
grid_size = 4
tiles = [[0] * grid_size for _ in range(grid_size)]def draw_grid():for x in range(1, grid_size):pygame.draw.line(screen, (105, 104, 104), (x * (screen_width // grid_size), 0), (x * (screen_width // grid_size), screen_height))for y in range(1, grid_size):pygame.draw.line(screen, (105, 104, 104), (0, y * (screen_height // grid_size)), (screen_width, y * (screen_height // grid_size)))def draw_tile(value, x, y):size = screen_width // grid_sizestart_x = x * sizestart_y = y * sizecolor = tile_colors.get(value, tile_colors[0])  # 使用get方法提供默认颜色pygame.draw.rect(screen, color, (start_x + 5, start_y + 5, size - 10, size - 10))if value:text_surface = font.render(str(value), True, (255, 255, 255))text_rect = text_surface.get_rect(center=(start_x + size // 2, start_y + size // 2))screen.blit(text_surface, text_rect)def draw_board():screen.fill(background_color)draw_grid()for x in range(grid_size):for y in range(grid_size):draw_tile(tiles[x][y], x, y)def add_new_tile():available_positions = [(x, y) for x in range(grid_size) for y in range(grid_size) if tiles[x][y] == 0]if available_positions:x, y = random.choice(available_positions)tiles[x][y] = random.choice([2, 4])def move_left():for y in range(grid_size):new_line = [tiles[x][y] for x in range(grid_size) if tiles[x][y] != 0]new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for x in range(grid_size - 1, 0, -1):if new_line[x] == new_line[x - 1]:new_line[x] = new_line[x] + new_line[x - 1]new_line[x - 1] = 0new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for x in range(grid_size):tiles[x][y] = new_line[x]def move_right():for y in range(grid_size):new_line = [tiles[x][y] for x in range(grid_size) if tiles[x][y] != 0]new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for x in range(0, grid_size - 1):if new_line[x] == new_line[x + 1]:new_line[x] = new_line[x] + new_line[x + 1]new_line[x + 1] = 0new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for x in range(grid_size):tiles[x][y] = new_line[x]def move_up():for x in range(grid_size):new_line = [tiles[x][y] for y in range(grid_size) if tiles[x][y] != 0]new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for y in range(grid_size - 1, 0, -1):if new_line[y] == new_line[y - 1]:new_line[y] = new_line[y] + new_line[y - 1]new_line[y - 1] = 0new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for y in range(grid_size):tiles[x][y] = new_line[y]def move_down():for x in range(grid_size):new_line = [tiles[x][y] for y in range(grid_size) if tiles[x][y] != 0]new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for y in range(0, grid_size - 1):if new_line[y] == new_line[y + 1]:new_line[y] = new_line[y] + new_line[y + 1]new_line[y + 1] = 0new_line = [value for value in new_line if value != 0]new_line += [0] * (grid_size - len(new_line))for y in range(grid_size):tiles[x][y] = new_line[y]def check_for_winner():for x in range(grid_size):for y in range(grid_size):if tiles[x][y] == 2048:return Truereturn Falsedef main_menu():running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:for i in range(grid_size):for j in range(grid_size):tiles[i][j] = 0add_new_tile()add_new_tile()elif event.key == pygame.K_ESCAPE:running = Falsescreen.fill((0, 0, 0))text_surface = font.render('Press SPACE to start', True, (255, 255, 255))text_rect = text_surface.get_rect(center=(screen_width // 2, screen_height // 2))screen.blit(text_surface, text_rect)pygame.display.flip()returndef game_loop():running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:move_left()add_new_tile()elif event.key == pygame.K_RIGHT:move_right()add_new_tile()elif event.key == pygame.K_UP:move_up()add_new_tile()elif event.key == pygame.K_DOWN:move_down()add_new_tile()elif event.key == pygame.K_ESCAPE:running = Falseif check_for_winner():running = Falsegame_message = "You win!"print(game_message)draw_board()pygame.display.flip()returnmain_menu()
game_loop()pygame.quit()
sys.exit()

相关文章:

Python 版本的 2024详细代码

2048游戏的Python实现 概述: 2048是一款流行的单人益智游戏,玩家通过滑动数字瓷砖来合并相同的数字,目标是合成2048这个数字。本文将介绍如何使用Python和Pygame库实现2048游戏的基本功能,包括游戏逻辑、界面绘制和用户交互。 主…...

SpringCloud框架学习(第四部分:Gateway网关)

目录 十一、Gateway新一代网关 1.概述 2.Gateway三大核心 3.工作流程 4.入门配置 5.路由映射 (1)8001 外部添加网关 (2)服务间调用添加网关 (3)存在问题 6.Gateway高级特性 (1&#x…...

C++ 类和对象 (上 )

学习本身就是一件很快乐的事情 一. 面向对象和面向过程 我们在学习计算机的过程中经常会听到xxx是一门面向对象的语言 xxx是一门面向过程的语言 那么到底什么是面向对象 什么是面向过程呢? 简单介绍下 面向过程 面向过程关注的是过程 分析出求解问题的步骤&…...

HAProxy面试题及参考答案(精选80道面试题)

目录 什么是 HAProxy? HAProxy 主要有哪些功能? HAProxy 的关键特性有哪些? HAProxy 的主要功能是什么? HAProxy 的作用是什么? 解释 HAProxy 在网络架构中的作用。 HAProxy 与负载均衡器之间的关系是什么? HAProxy 是如何实现负载均衡的? 阐述 HAProxy 的四层…...

探索PyCaret:一个简化机器学习的全栈库

探索PyCaret:一个简化机器学习的全栈库 机器学习领域充满了挑战,从数据预处理、特征工程到模型训练与评估,再到模型部署。对于数据科学初学者或者时间有限的开发者,这一流程可能显得繁琐且复杂。幸运的是,PyCaret 提供…...

英语写作中“联系、关联”associate correlate 及associated的用法

似乎是同义词的associate correlate 实际上意思差别明显,associate 是人们把两者联系在一起(主观联系),而correlate 指客观联系。 例如: We always associate sports with health.(我们总是将运动和健康联…...

深度学习之目标检测的技巧汇总

1 Data Augmentation 介绍一篇发表在Big Data上的数据增强相关的文献综述。 Introduction 数据增强与过拟合 验证是否过拟合的方法:画出loss曲线,如果训练集loss持续减小但是验证集loss增大,就说明是过拟合了。 数据增强目的 通过数据增强…...

【Flask+Gunicorn+Nginx】部署目标检测模型API完整解决方案

【Ubuntu 22.04FlaskGunicornNginx】部署目标检测模型API完整解决方案 文章目录 1. 搭建深度学习环境1.1 下载Anaconda1.2 打包环境1.3 创建虚拟环境1.4 报错 2. 安装flask3. 安装gunicorn4. 安装Nginx4.1 安装前置依赖4.2 安装nginx4.3 常用命令 5. NginxGunicornFlask5.1 ng…...

Spark核心组件解析:Executor、RDD与缓存优化

Spark核心组件解析:Executor、RDD与缓存优化 Spark Executor Executor 是 Spark 中用于执行任务(task)的执行单元,运行在 worker 上,但并不等同于 worker。实际上,Executor 是一组计算资源(如…...

“AI玩手机”原理揭秘:大模型驱动的移动端GUI智能体

作者|郭源 前言 在后LLM时代,随着大语言模型和多模态大模型技术的日益成熟,AI技术的实际应用及其社会价值愈发受到重视。AI智能体(AI Agent)技术通过集成行为规划、记忆存储、工具调用等机制,为大模型装上…...

离散数学【关系】中的一些特殊关系

在数学中,关系是描述集合之间元素间关系的方式。以下是对一些常见关系的详细分析及举例: 1. 空关系 (Empty Relation) 空关系是指在一个集合中,没有任何元素之间存在关系。即对于集合中的所有元素,空关系都不包含任何有序对。 …...

docker 配置代理

创建 Docker 服务配置文件&#xff1a; sudo mkdir -p /etc/systemd/system/docker.service.d sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf添加代理配置&#xff1a; [Service] Environment"HTTP_PROXYhttp://<proxy-address>:<port>&q…...

Dockerfile详解:构建简单高效的容器镜像

引言 在容器化技术日益普及的今天&#xff0c;Dockerfile 成为了构建 Docker 镜像的核心工具。通过编写 Dockerfile&#xff0c;开发者可以将应用程序及其依赖打包成一个可移植、可复用的镜像&#xff0c;从而简化部署和运维工作。本文将详细介绍 Dockerfile 的基本概念、常用指…...

RHCD-----shell

要求&#xff1a; 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 ​ 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务是…...

<硬件有关> 内存攒机认知入门,内存的选择 配置 laptop PC 服务器

原因 这不是黑五吗&#xff0c;给我儿子买了台最便宜 ($300) DELL laptop&#xff0c;CPU 是 i5-1235U&#xff0c;但只有 8GB 内存。升级内存吧。 如何选择内存&#xff1a;家用范围 这里不考虑品牌&#xff0c;在我眼里&#xff0c;区别就是价格&#xff0c;还有所谓的物理…...

基于springboot的来访管理系统的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的来访管理系统的设计与实…...

window11编译pycdc.exe

一、代码库和参考链接 在对python打包的exe文件进行反编译时&#xff0c;会使用到uncompyle6工具&#xff0c;但是这个工具只支持python3.8及以下&#xff0c;针对更高的版本的python则不能反编译。 关于反编译参考几个文章&#xff1a; Python3.9及以上Pyinstaller 反编译教…...

11.22.2024 面试后记

Watching those fucking ap’s paper is bullshit and wasting your time. you’d mother fucker directly say I’m not qualified. if I’m qualified, how could I see u at this place. your dad is alread being rich and enjoy the world. 抽了一周时间去看那些教授的文章…...

Bug Fix 20241122:缺少lib文件错误

今天有朋友提醒才突然发现 gitee 上传的代码存在两个很严重&#xff0c;同时也很低级的错误。 因为gitee的默认设置不允许二进制文件的提交&#xff0c; 所以PH47框架下的库文件&#xff08;各逻辑层的库文件&#xff09;&#xff0c;以及Stm32Cube驱动的库文件都没上传到Gi…...

Pinia 实战教程:构建高效的 Vue 3 状态管理系统

前言 在前端开发中&#xff0c;状态管理已成为必不可少的一部分&#xff0c;Vue.js 生态系统中提供了多种状态管理解决方案。Pinia 是 Vue 3 推出的一种全新的状态管理库&#xff0c;旨在取代 Vuex&#xff0c;提供更简洁的 API、更优雅的 TypeScript 支持以及更高效的性能表现…...

Qwen3-14B私有部署镜像Visio流程图智能生成:从文本描述到架构图

Qwen3-14B私有部署镜像Visio流程图智能生成&#xff1a;从文本描述到架构图 1. 引言&#xff1a;技术文档绘图的痛点与解决方案 技术文档编写过程中&#xff0c;最耗时费力的环节之一就是绘制系统架构图和流程图。传统方式需要手动在Visio中拖拽图形、调整布局、添加连接线&a…...

SimCLR揭秘:自监督学习中的对比学习艺术

1. 自监督学习与对比学习的革命性结合 第一次听说SimCLR这个名词时&#xff0c;我正被海量无标注图像数据的处理问题困扰。传统监督学习需要大量人工标注&#xff0c;成本高得吓人。而SimCLR的出现&#xff0c;就像给计算机视觉领域投下了一颗震撼弹——原来模型可以自己教自己…...

5分钟掌握PESQ:Python语音质量评估终极指南

5分钟掌握PESQ&#xff1a;Python语音质量评估终极指南 【免费下载链接】PESQ PESQ (Perceptual Evaluation of Speech Quality) Wrapper for Python Users (narrow band and wide band) 项目地址: https://gitcode.com/gh_mirrors/pe/PESQ 想要客观评估语音处理算法效果…...

K8s定时任务实战:如何用CronJob每分钟输出Hello World(附表达式详解)

K8s定时任务实战&#xff1a;从Hello World到生产级CronJob配置 在云原生技术栈中&#xff0c;定时任务作为自动化运维的核心组件&#xff0c;其重要性不言而喻。Kubernetes提供的CronJob资源&#xff0c;让开发者能够以声明式的方式管理周期性任务&#xff0c;而无需依赖传统…...

基于python开发的送货上门系统

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点扩展功能建议部署与维护项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 用户注册与登录…...

JienDa聊PHP:ThinkPHP 8.0 企业级API开发与性能调优实战

1. ThinkPHP 8.0企业级API开发基础 ThinkPHP 8.0作为现代化PHP框架的代表&#xff0c;在企业级API开发领域展现出强大的优势。我最近刚用TP8完成了一个日活50万的电商平台API重构&#xff0c;实测下来性能提升非常明显。相比传统开发方式&#xff0c;TP8的API开发流程更加规范…...

xi-mac性能优化指南:7个技巧让你的编辑器运行如飞

xi-mac性能优化指南&#xff1a;7个技巧让你的编辑器运行如飞 【免费下载链接】xi-mac The xi-editor mac frontend. 项目地址: https://gitcode.com/gh_mirrors/xim/xi-mac xi-mac是一款基于Rust后端和Cocoa前端的现代文本编辑器&#xff0c;以其卓越的性能表现而闻名。…...

AQS深度探索:以ReentrantLock看Java并发编程的高效实现

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

Kandinsky-5.0-I2V-Lite-5s企业应用:HR招聘海报→候选人互动式动态介绍视频生成

Kandinsky-5.0-I2V-Lite-5s企业应用&#xff1a;HR招聘海报→候选人互动式动态介绍视频生成 1. 引言&#xff1a;让招聘海报"活"起来 想象一下这样的场景&#xff1a;你的HR团队精心设计了一份招聘海报&#xff0c;但投递量却不如预期。问题可能出在传统静态海报难…...

自动驾驶小白必看:航向角、偏航角、前轮转角到底有什么区别?

自动驾驶入门&#xff1a;航向角、偏航角与前轮转角的本质差异与应用解析 刚接触自动驾驶技术时&#xff0c;最让人困惑的莫过于那些描述车辆方向的专业术语——航向角、偏航角、前轮转角&#xff0c;它们看起来相似却又各有所指。理解这些概念不仅是掌握车辆控制的基础&#…...