带你用Python制作超级经典的2048游戏(文末赠书)

news2024/11/15 23:33:46

名字:阿玥的小东东

学习:Python、C/C++

主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主

目录

2048游戏Python实现

本期赠书


2048游戏Python实现

2048游戏是一款非常流行的益智游戏,玩家需要通过合并数字方块来获得更高的分数。本文将介绍如何使用Python语言来实现这个游戏。

首先,定义游戏方块的数据结构,我们可以使用一个二维数组来表示游戏面板。每个格子都有一个数字或者为空。我们可以通过以下代码来定义游戏面板:

board = [[0 for x in range(4)] for y in range(4)]

这段代码将创建一个4x4的游戏面板,每个格子都初始值为0。

接下来,我们需要生成新的方块。我们可以使用一个函数来实现这个功能,如下所示:

import random

def generate_new_block(board):
    empty_blocks = []
    for i in range(4):
        for j in range(4):
            if board[i][j] == 0:
                empty_blocks.append((i,j))
    if len(empty_blocks) == 0:
        return False
    block = random.choice(empty_blocks)
    value = random.choice([2,2,4])
    board[block[0]][block[1]] = value
    return True

这段代码将生成一个新的方块,并将其放置在游戏面板上。我们使用了random库来选择一个空白的方块,并随机生成2或4的数字。

接下来,我们需要实现方块合并的逻辑。当两个数字方块相邻时,它们可以合并成一个数字方块。我们可以使用一个函数来实现这个功能,如下所示:

def merge_blocks(blocks):
    merged_blocks = []
    i = 0
    while i < len(blocks):
        if i == len(blocks) - 1:
            merged_blocks.append(blocks[i])
        else:
            if blocks[i][1] == blocks[i+1][1] and blocks[i][0] == blocks[i+1][0] - 1:
                merged_blocks.append((blocks[i][0], blocks[i][1], blocks[i][2]*2))
                i += 1
            else:
                merged_blocks.append(blocks[i])
        i += 1
    return merged_blocks

这段代码将合并相邻的数字方块,并将它们放置在合适的位置。例如,如果一个2方块和一个2方块相邻,它们将合并成一个4方块。

最后,我们需要实现游戏的主循环。在游戏的每个回合中,玩家可以选择上、下、左、右四个方向来移动数字方块。我们可以使用以下代码来实现游戏的主循环:

while True:
    # 绘制游戏面板
    draw_board(board)
    # 处理玩家输入
    move = input("请输入移动方向:")
    # 移动数字方块
    if move == "left":
        for i in range(4):
            row = [(i,j,board[i][j]) for j in range(4) if board[i][j] != 0]
            row = merge_blocks(row)
            for j in range(4):
                if j < len(row):
                    board[i][j] = row[j][2]
                else:
                    board[i][j] = 0
    elif move == "right":
        for i in range(4):
            row = [(i,j,board[i][j]) for j in range(3,-1,-1) if board[i][j] != 0]
            row = merge_blocks(row)
            for j in range(3,-1,-1):
                if j > 3 - len(row):
                    board[i][j] = row[3-j][2]
                else:
                    board[i][j] = 0
    elif move == "up":
        for j in range(4):
            col = [(i,j,board[i][j]) for i in range(4) if board[i][j] != 0]
            col = merge_blocks(col)
            for i in range(4):
                if i < len(col):
                    board[i][j] = col[i][2]
                else:
                    board[i][j] = 0
    elif move == "down":
        for j in range(4):
            col = [(i,j,board[i][j]) for i in range(3,-1,-1) if board[i][j] != 0]
            col = merge_blocks(col)
            for i in range(3,-1,-1):
                if i > 3 - len(col):
                    board[i][j] = col[3-i][2]
                else:
                    board[i][j] = 0
    # 生成新的数字方块
    generate_new_block(board)

这段代码将实现游戏的主循环,循环中包括绘制游戏面板、处理玩家输入、移动数字方块、生成新的数字方块等步骤。

最后,我们需要实现游戏结束的判断。当游戏面板上没有空格,并且没有相邻的数字方块可以合并时,游戏结束。我们可以使用以下代码来实现游戏结束的判断:

def is_game_over(board):
    for i in range(4):
        for j in range(4):
            if board[i][j] == 0:
                return False
    for i in range(4):
        for j in range(4):
            if j < 3 and board[i][j] == board[i][j+1]:
                return False
            if i < 3 and board[i][j] == board[i+1][j]:
                return False
    return True

这段代码将判断游戏是否结束,如果游戏结束,将返回True,否则返回False。

综上所述,我们可以使用Python语言来实现2048游戏。通过定义游戏面板的数据结构、生成新的数字方块、合并相邻的数字方块、实现游戏主循环以及判断游戏是否结束等步骤,我们可以实现一个简单的2048游戏。

本期赠书

截止日期:7月3日20:00

参与方式:点赞+收藏+评论:人生苦短,我用Python!!!(否则无效

 

 主要卖点 

1)既科普了超级计算及其发展历史,又结合云计算的发展趋势阐明了超级计算的未来方向

2)对算力经济进行了清晰的介绍,助力数字经济的发展。

3)算力经济的提出者和超级计算的资深专家强强联手之作,兼具科普性、专业性和前沿性。

 目标读者 

1.企业技术负责人。

2.算力、超级计算领域的技术人员

3 想了解算力经济和超级计算的读者

 上架建议 

算力经济 超级计算 高性能计算

 名人推荐 

本书的意义在于既科普了超级计算及其发展历史,又结合了当下云计算的发展趋势,阐明了超级计算的未来发展方向。我期待本书的出版能进一步推动社会各界对算力经济时代超级计算重要性的认知。

                      陈国良 中国科学院院士

本书两位作者在高性能计算领域的知识和经验非常互补,不仅在学术和技术方面有精准的阐述,而且在建设和应用方面也提出了真知灼见。我相信,这本书一定会帮助读者深入了解高性能计算,以及高性能计算和云计算融合的趋势。

田溯宁  亚信联合创始人,宽带资本董事长

本书以算力经济为主线,从超级计算机的历史开始,详细介绍了超级计算机与超算应用的演化,进而深入探讨了现在主流的超级计算机的建设与运营模式。随着计算机行业迈入云时代,两位作者依据多年的行业洞察,预见到超算与云计算的融合已成为超算发展的必经之路。我认为这是一段献给中国超算人的最美时光曲。

陈健  北京并行科技有限公司董事长、总经理

作为分布式计算的典型计算模式,无论是曾经的网格计算还是如今普遍采用的云计算和极具潜力的边缘计算,其核心思想就是提供算力。本书从超级计算入手,说明了超级计算能解决什么问题,以及超级计算和云计算融合的趋势,展现了算力经济时代的远景,是一本科普性与专业性兼具的优秀著作,适合学生、科技工作者、工程技术人员学习和参考。

                                 金 海 华中科技大学教授、中国计算机学会副理事长

超级计算机作为国之重器是各国追逐的科技制高点。两位作者以其在行业多年的耕耘和实践经验,诠释了超级计算的内涵,阐述了超级计算对国家和科技企业的重要性,提出了超级计算和云计算在算力经济时代必将交叉融合的观点,无论是超算云还是云超算最终都属于算力经济体。从科学计算、工程计算、数据分析到人工智能,算力的应用将无处不在。本书对算力和算力经济给出了详尽的介绍,助你在算力经济时代大显身手! 

                               杨广文 清华大学计算机系教授、国家无锡超算中心主任

两位作者以渊博的知识、长年从事超级计算和云计算的丰富阅历为基石,撰写了这本书。该书深入浅出地介绍了超级计算机和量子计算机的概念与发展,通俗易懂。书中有大量的应用案例,比较了云计算与超级计算的特点,指出了两者融合发展的趋势。这是一本既有丰富的知识含量,又有实战参考价值的书,值得阅读。

                                              李根国 上海超级计算中心主任

超级计算机是什么,有什么用处?本书将原本属于阳春白雪的超级计算机技术娓娓道来,辅以建设和应用案例,还包括了最近非常热门的算力网络和“东数西算”的介绍,内容丰富,深入浅出,值得一读!

                                           陈文光 清华大学计算机系教授

当前,云计算产品的迭代和发布速度已经远远超过传统的企业应用软件的发布速度,这恰恰从另一个侧面验证了两位作者的洞察,就是云计算必将以远超传统HPC发展的速度,使HPC即服务成为普惠的现实,推动我国科学和工程领域的全面创新。这本由两位高性能计算“躬身入局”的大咖合作的作品,非常值得一读。

                    何万青 阿里云原高性能计算负责人现任英特尔中国数据中                               心与人工智能集团首席工程师 

 关 键 词 

算力 算力经济 数字经济 高性能计算 超级计算 云计算 云超算

 营销支持/重点销售地区 

三大网店、文轩网、博库网、天猫、北上广、江浙及全国各大书城、书店、相关技术社区和自媒体

其 他 说 明

编辑推荐 

算力已成为科技创新和发展的重要支撑,算力经济也成为数字经济社会的重要支柱。本书基于两位作者多年来的行业实践和思考编写而成,从为什么需要超级计算机、超级计算机能解决什么样的问题、超级计算机的演变与发展,以及超级计算的发展等方面进行了深入讨论,更对当前广受关注的算力经济进行了深刻的诠释。本书既具科普性,又具有专业性和前沿性,无论是算力和算力经济相关行业的技术人员、管理人员,还是超级计算技术的爱好者,都能从本书中受益。

 内容简介

算力、数据、AI已经成为驱动当今社会技术发展的三架马车,而算力也从传统的超级计算向云超算的方向发展。本书旨在探讨当前超级计算与云计算的融合而给算力带来的新的发展,介绍当前在算力领域的一些实践和探索,从理论到工程,帮助读者了解超级计算的关键技术与未来发展,从而更好地应用和发展高性能技术。

 作者简介

张福波 天云软件创始人、首席科学家,在软件行业有30多年的工作经验。在比利时皇家根特大学获得博士学位,获得多项技术专利。曾为美国罗斯拉姆斯核物理中心开发超级计算机调度系统。参与和主持了国家863制造网格项目,作为网格专家参与实施了当时国内第一大超级计算中心——上海超级计算中心的建设项目。1988年参与“银河二号”超级计算机的设计和编译系统的建设。曾被评为“中国软件十大领军人物”。

张云泉  博士,中科院计算所研究员,博士生导师,并行软件实验室主任。中国工业与应用数学学会副秘书长,中国计算机学会理事、会士、高性能计算专业委员会秘书长,中国智能计算产业联盟执行理事长,ACM中国高性能计算专家委员会主席,中国软件行业协会常务理事。主要研究方向为并行程序设计和性能评价、并行计算和并行编程模型等。获2000年和2019年国家科技进步奖二等奖各一项,2021年度ACM 戈登·贝尔奖提名,首届CCF“青竹奖”。中国高性能计算机TOP100排行榜创始人和发布者,国际人工智能算力排行榜AIPerf500发起人,PAC、CCF CPC和ACM IPCC超算大赛创始人。担任国际会议程序委员会委员和共同主席一百余次。国家基因库高级顾问,青海省大数据与云计算咨询专家委员会委员,贵州省农业大数据专家委员会委员等。

 专家推荐

本书的意义在于既科普了超级计算及其发展历史,又结合了当下云计算的发展趋势,阐明了超级计算的未来发展方向。我期待本书的出版能进一步推动社会各界对算力经济时代超级计算重要性的认知。

                      陈国良 中国科学院院士

本书两位作者在高性能计算领域的知识和经验非常互补,不仅在学术和技术方面有精准的阐述,而且在建设和应用方面也提出了真知灼见。我相信,这本书一定会帮助读者深入了解高性能计算,以及高性能计算和云计算融合的趋势。

田溯宁  亚信联合创始人,宽带资本董事长

本书以算力经济为主线,从超级计算机的历史开始,详细介绍了超级计算机与超算应用的演化,进而深入探讨了现在主流的超级计算机的建设与运营模式。随着计算机行业迈入云时代,两位作者依据多年的行业洞察,预见到超算与云计算的融合已成为超算发展的必经之路。我认为这是一段献给中国超算人的最美时光曲。

陈健  北京并行科技有限公司董事长、总经理

作为分布式计算的典型计算模式,无论是曾经的网格计算还是如今普遍采用的云计算和极具潜力的边缘计算,其核心思想就是提供算力。本书从超级计算入手,说明了超级计算能解决什么问题,以及超级计算和云计算融合的趋势,展现了算力经济时代的远景,是一本科普性与专业性兼具的优秀著作,适合学生、科技工作者、工程技术人员学习和参考。

                                                        金 海 华中科技大学教授、中国计算机学会副理事长

超级计算机作为国之重器是各国追逐的科技制高点。两位作者以其在行业多年的耕耘和实践经验,诠释了超级计算的内涵,阐述了超级计算对国家和科技企业的重要性,提出了超级计算和云计算在算力经济时代必将交叉融合的观点,无论是超算云还是云超算最终都属于算力经济体。从科学计算、工程计算、数据分析到人工智能,算力的应用将无处不在。本书对算力和算力经济给出了详尽的介绍,助你在算力经济时代大显身手! 

                                                     杨广文 清华大学计算机系教授、国家无锡超算中心主任

两位作者以渊博的知识、长年从事超级计算和云计算的丰富阅历为基石,撰写了这本书。该书深入浅出地介绍了超级计算机和量子计算机的概念与发展,通俗易懂。书中有大量的应用案例,比较了云计算与超级计算的特点,指出了两者融合发展的趋势。这是一本既有丰富的知识含量,又有实战参考价值的书,值得阅读。

                                                                           李根国 上海超级计算中心主任

超级计算机是什么,有什么用处?本书将原本属于阳春白雪的超级计算机技术娓娓道来,辅以建设和应用案例,还包括了最近非常热门的算力网络和“东数西算”的介绍,内容丰富,深入浅出,值得一读!

                                                                陈文光 清华大学计算机系教授

当前,云计算产品的迭代和发布速度已经远远超过传统的企业应用软件的发布速度,这恰恰从另一个侧面验证了两位作者的洞察,就是云计算必将以远超传统HPC发展的速度,使HPC即服务成为普惠的现实,推动我国科学和工程领域的全面创新。这本由两位高性能计算“躬身入局”的大咖合作的作品,非常值得一读。

                    何万青 阿里云原高性能计算负责人现任英特尔中国数据中                               心与人工智能集团首席工程师 

图书在版编目(CIP)数据

 

 

 

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

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

相关文章

vue-cli的Nuxt重构

我的博客用vuecli写的&#xff0c;SEO不忍直视。于是用Nuxt重构了代码&#xff0c;过程中踩了无数坑 一&#xff1a;body样式不生效 正常的body样式设置不能生效&#xff0c;需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性&#xff0c;该属性值对应一个类名 2、该…

Unity 聚焦任意大小的物体

聚焦任意大小的物体 &#x1f371;效果&#x1f96a;食用方法 &#x1f371;效果 &#x1f96a;食用方法 &#x1f4a1;.安装Cinemachine &#x1f4a1;.把Assets/ZYF/Tools/Camera/Scene/FocusGo/FocusCtrl.prefab拖入场景 &#x1f4a1;.调用FocusCtrl.Focus(gameObject)即可…

《kafka 核心技术与实战》课程学习笔记(九)

客户端都有哪些不常见但是很高级的功能&#xff1f; 什么是 Kafka 拦截器&#xff1f; 拦截器基本思想就是允许应用程序在不修改逻辑的情况下&#xff0c;动态地实现一组可插拔的事件处理逻辑链。它能够在主业务操作的前后多个时间点上插入对应的“拦截”逻辑。Spring MVC 拦…

接口跨域问题

只要协议不同/端口号不同/域名不同都会导致跨域问题

深入浅出设计模式 - 中介者模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

C++之lambda表达式回调函数作为参数(一百四十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【python】matplotlib 绘制火山图、条形图

文章目录 火山图条形图 火山图 绘制火山图&#xff0c;输入是两个datafreme&#xff0c;行是样本名&#xff0c;列是基因名。使用T-test检验绘制基因表达情况。 def minmax_scale(data):import numpy as np# # 示例数据# data np.array([2, 4, 6, 8, 10])# 进行Min-Max标准化…

go并发编程之channel

目录 1.简介 2.channel类型 无缓冲区的channel 无缓冲区channel的创建 带缓冲区的channel 带缓冲区channel的创建 3.channel使用代码演示 4.获取channel中的值 ​编辑 5.单向channel 单向发送data&#xff0c;发送到channel中 单向接收&#xff0c;channel接收数据 6…

汇编的各种指令及使用方法

***************************************************************** 汇编中的符号 1.指令&#xff1a; 能够编译生成一条32位的机器码&#xff0c;且能被CPU识别和执行 2.伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若干条等效指令 3.伪操作&#xff1a…

Linux进程间通信——管道(下)

前文 一&#xff0c;什么是命名管道? 二&#xff0c;命名管道的基本原理 三&#xff0c;创建命名管道实现两个进程对写 四&#xff0c;匿名管道和命名管道的区别 总结 前文 上篇文章我们主要讲了匿名管道的定义以及基本原理&#xff0c;但是匿名管道有一个致命的缺陷&#…

HashSet、LinkedHashSet、TreeSet有什么区别

- HashSet、LinkedHashSet 和 TreeSet 都是 Set接口的实现类&#xff0c;都能保证元素唯一&#xff0c;并且都不是线程安全的。HashSet 的底层数据结构是哈希表&#xff08;基于 HashMap 实现&#xff09;&#xff0c;元素存入和取出顺序不一致。LinkedHashSet 的底层数据结构…

C++制作五子棋

正文 01 思路 我没有选择专业的五子棋棋型&#xff0c;用我自己的逻辑&#xff08;初高中玩五子棋的方法&#xff09;&#xff0c;去实现简单的人机对战。 首先因为要计算五子棋每一步的分数&#xff0c;那么你就要分析每一步形成的棋盘&#xff0c;以下图为例&#xff1a;…

蓝桥杯专题-试题版含答案-【风险度量】【括号配对问题】【ASCII码排序】【素数求和】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【Java高级编程】枚举类注解

枚举类&注解 1、枚举类的使用1.1、枚举类的使用1.2、如何定义枚举类1.3、Enum类的主要方法 2、注解的使用2.1、注解的概述2.2、常见的Annotation示例2.3、如何自定义注解&#xff1a;参照SuppressWarnings定义2.4、JDK提供的4种元注解2.5、JDK 8中注解的新特性&#xff1a;…

2023-06-25:redis中什么是缓存穿透?该如何解决?

2023-06-25&#xff1a;redis中什么是缓存穿透&#xff1f;该如何解决&#xff1f; 答案2023-06-25&#xff1a; 缓存穿透 缓存穿透指的是查询一个根本不存在的数据&#xff0c;在这种情况下&#xff0c;无论是缓存层还是存储层都无法命中。因此&#xff0c;每次请求都需要访…

关于C++图论树的某些题图形提示

一、去教室的路。 猫猫大学有n条路&#xff0c;每条路都有一个数字编号&#xff0c;其中的一条路一定与另外2条路相连&#xff0c;请你打出这个学校的地图。 输入1&#xff1a; 1 2 3 4 2 3 45 4 45 1 输出1&#xff1a; 1 2 3 4 5 45 图解 &#xff1…

动态住宅代理VS静态住宅代理,怎么选择?

现在&#xff0c;越来越多的海外代理服务商均支持动态住宅IP与静态住宅IP,很多小伙伴就疑惑&#xff0c;这二者有什么区别呢&#xff1f;哪个更好&#xff1f;其实&#xff0c;没有哪个更好&#xff0c;只有哪一个更合适您的业务。 无论动态住宅IP还是静态住宅IP都来自真实的住…

【软件测试】10道性能测试高频面试题,你能答上多少?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试包含了…

表格el-table多出一条横线,怎么解决(el-table表格下方多一条线的问题)

最近在写el-table表格的时候&#xff0c;发现的问题&#xff0c;表格多出一条横线&#xff0c; 可以看出其它行&#xff0c;都是正常显示&#xff0c;只有第7行多出一条横线&#xff0c;找了好久&#xff0c; 最后发现是el-table表格的伪元素&#xff0c;问题就出在这&#xf…

B站化播放量为播放时长,是谁的狂欢?

6月26日晚&#xff0c;B站举办了14周年庆典晚会。在晚会上&#xff0c;除了周深、美依礼芽同框献唱受到关注&#xff0c;B站董事长兼CEO陈睿的演讲内容同样值得深思&#xff1a; 一来&#xff0c;陈睿提到&#xff0c;要将目前B站视频前台显示的播放量数据从次数改为分钟数&am…