Python2048小游戏核心算法(python系列26)

前言:做核心算法之前我们可以玩一玩这个小游戏来了解一下规则。2048在线试玩

运行效果:

 

代码案例:

# 2048小游戏

# 1.将列表中零移动到列表的末尾
def move_zeroes():
    x = 0
    for i in range(len(list_nums)):
        if list_nums[i] != 0:
            list_nums[x], list_nums[i] = list_nums[i], list_nums[x]
            x += 1


# 2.将相邻相等的合并
def merge():
    move_zeroes()
    for i in range(len(list_nums) - 1):
        if list_nums[i] == list_nums[i + 1]:
            list_nums[i] *= 2
            list_nums.pop(i + 1)
            list_nums.append(0)


# 向左移动
def move_left():
    global list_nums
    for item in list_map:
        list_nums = item
        merge()


# 向左移动
def move_right():
    global list_nums
    for item in list_map:
        list_nums = item[::-1]
        merge()
        item[::-1] = list_nums

def transpose():
    global list_map
    list_map = list((list(item) for item in zip(*list_map)))


# 向上移动
def move_up():
    transpose()
    move_left()
    transpose()


# 向上移动
def move_down():
    transpose()
    move_right()
    transpose()


def select_num():
    show_all()
    num = input("请操作(wsad):")
    if num == 'w':
        move_up()
        show_all()
    elif num =='s':
        move_down()
        show_all()
    elif num == 'a':
        move_left()
        show_all()
    elif num == 'd':
        move_right()
        show_all()


def show_all():
    for item in list_map:
        for i in item:
            print(i, end='\t')
        print()


if __name__ == '__main__':
    list_nums = None  # type:list | None
    list_map = [
        [2, 0, 2, 0],
        [0, 2, 0, 2],
        [4, 0, 4, 0],
        [0, 2, 0, 2]
    ]
    while True:
        select_num()
        print("---------------------")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL / MySQL 高级知识点

1. 事务 1.1 什么是数据库事务? ​ 数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行&…

给充电桩嵌入一个强大的“心脏”——工控机

到底什么样的工控机才算是真正的好用? 小编还特地去问了技术老王 他表示:稳定第一,性能第二! 不稳定,性能再好也白搭! 什么是工控机呢? 工控机是一种专门为工业现场而设计的计算机设备&…

Find My玩具车|苹果Find My技术与玩具车结合,智能防丢,全球定位

玩具车的结构有惯性式、机械式、电动式及电动遥控式等。玩具汽车与仿真汽车模型相比,其尺寸设计灵活,工艺略为粗糙,材料简单。一般采用普通塑料、铁皮制造。玩具车为孩子们提供了娱乐和放松的机会,让他们在游戏中放松身心&#xf…

网安入门12-文件上传(黑白名单,00截断)

黑名单绕过 Pass-03 有的时候后端限制了一些黑名单,比如过滤后缀名.php 我们就可以用黑名单里没有的后缀名进行绕过,例如: 大小写:.phP .pHp .AsPphp1 .php2 .php3 .php9 .phtml(成功率较高)特殊文件名绕…

基于JavaWeb+BS架构+SpringBoot+Vue+Spark的共享单车数据存储系统的设计和实现

基于JavaWebBS架构SpringBootVueSpark的共享单车数据存储系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 第一章 概述 2 1.1课题研究背景 2 1.2 课题研究意义 2 1.3国内…

消息队列-RockMQ-定时延时发送消息

定时延时发送消息 任务需要延迟一段时间再进行处理。 生产者 public class Producer {public static void main(String[] args) throws Exception {DefaultMQProducer producer new DefaultMQProducer("producer_group");producer.setNamesrvAddr("ip:9876&q…

前端炫酷动画特效分享(附在线预览)

分享7款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 canvas鼠标粒子跟随动画 canvas鼠标粒子跟随动画 当鼠标移入背景区域时 粒子动画会…

Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻直播带货及 免 费 小程序商城搭建的完整指南

随着互联网的快速发展,越来越多的企业开始注重数字化转型,以提升自身的竞争力和运营效率。在这个背景下,鸿鹄云商SAAS云产品应运而生,为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的软…

jvm虚拟机初识

JVM Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪…

4.7 MEMORY AS A LIMITING FACTOR TO PARALLELISM

虽然CUDA寄存器和共享内存在减少对全局内存的访问次数方面非常有效,但必须注意保持在这些内存的容量范围内。这些内存是线程执行所需的资源形式。每个CUDA设备提供有限的资源,从而限制了给定应用程序可以同时驻留在SM中的线程数量。通常,每个…

setup 语法糖

只有vue3.2以上版本可以使用 优点: 更少的样板内容,更简洁的代码 能够使用纯 Typescript 声明props 和抛出事件 更好的运行时性能 更好的IDE类型推断性能 在sciprt标识上加上setup 顶层绑定都可以使用 不需要return ,可以直接使用 使用组件…

快速学习SpringBoot

SpringBoot springboot传统方式构建spring应用程序使用springboot子项目构建起步依赖自动配置其它特性 SpringBoot项目部署Spring项目部署属性配置方式命令行参数方式配置环境变量方式外部配置文件方式 多环境开发-Pofiles多环境开发分组 springboot 传统方式构建spring应用程…

Unity中URP下开启和使用深度图

文章目录 前言一、在Unity中打开URP下的深度图二、在Shader中开启深度图1、使用不透明渲染队列才可以使用深度图2、半透明渲染队列深度图就会关闭 三、URP深度图 和 BRP深度图的区别四、在Shader中,使用深度图1、定义纹理和采样器2、在片元着色器对深度图采样并且输…

【Gin实战教程】快速入门

Gin是一个轻量级的Web框架,使用Go语言开发。它具有高性能、易用性和灵活性的特点,是构建可扩展的Web应用程序的理想选择。 首先,Gin是一个高性能的框架。它基于Go语言的原生HTTP包进行开发,利用了Go语言的并发特性和协程模型&…

WPF自定义漂亮顶部工具栏 WPF自定义精致最大化关闭工具栏 wpf导航栏自定义 WPF快速开发工具栏

在WPF应用程序开发中,自定义一个漂亮的顶部工具栏具有多重关键作用,它不仅增强了用户体验,还提升了整体应用的专业性和易用性。以下是对这一功能的详细介绍: 首先,自定义顶部工具栏是用户界面设计的重要组成部分&…

C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手

文章目录 🚀前言🚀C中的随机函数✈️介绍✈️使用✈️用C的暴力求解✈️用C的优化解法 🚀Java中的Math.random()函数 🚀前言 大家好啊!阿辉在刷题时遇到一个很有意思的题LeetCode470.用rand7()实现rand10()&#xff0…

应对 DevOps 中的技术债务:创新与稳定性的微妙平衡

技术性债务在DevOps到底意味着什么?从本质上讲,这是小的开发缺陷的积累,需要不断地返工。它可能由多种原因引起,例如快速交付新功能的压力,这可能会导致团队不得不牺牲代码的整洁和完善。但这些不完整的小代码&#xf…

5.3 WARPS AND SIMD HARDWARE

我们现在把注意力转向线程执行中可能限制性能的方面。回想一下,启动CUDA内核会生成一个线程网格,该网格被组织为两级层次结构。在顶层,网格由一维、二维或三维块阵列组成。在底层,每个块依次由一维、二维或三维线程阵列组成。在第…

从0开始python学习-45.pytest框之将所有的用例封装到一个类中,实现极限封装,并测试用例校验

目录 1. 封装一个用于校验yaml测试用例参数的方法:model_util.py 2. 校验方法是否正确 3. 封装一个方法,用于读取所有的用例:test_all_case.py 1. 封装一个用于校验yaml测试用例参数的方法:model_util.py from dataclasses imp…

Ant Design 日期选择器 a-date-picker 的使用

代码如下&#xff1a; data() {return {initializationTime: } },<a-form-item label"上映时间" :labelCol"labelCol" :wrapperCol"wrapperCol"><a-date-pickerv-model"initializationTime"format"YYYY-MM-DD HH:mm:ss&…