C# 2048小游戏核心算法
文章目录
- 01.程序结构划分
- 02.去零
- 03.合并
- 04.上移
- 05.下移/左移/右移,只是取数据的方向不同
- 06.提高可读性
01.程序结构划分

02.去零
有序向量“唯一化”的思路。
/// <summary>/// 去零/// </summary>/// <param name="row">对于一行或一列元素</param>private static void Remove0(int[] row){int pos = 0;for (int i = 0; i < 4; ++i) if (row[i] != 0) row[pos++] = row[i];for (; pos < 4; ++pos) row[pos] = 0;}
03.合并
/// <summary>/// 合并/// </summary>/// <param name="row">对于一行或一列元素,完成一次向左合并的操作</param>private static void Merge(int[] row){// 去零Remove0(row);// 相邻相同则合并for (int i=0; i<4-1; ++i){if (row[i] != 0 && row[i] == row[i+1]){row[i] *= 2;row[i + 1] = 0;}}// 去零Remove0(row);}
04.上移
/// <summary>/// 上移/// </summary>/// <param name="map">原棋盘</param>/// <returns></returns>private static void Up(int[,] map){int[] arr = new int[4] ;for (int j=0; j<4; ++j){for (int i=0; i<4; ++i) arr[i] = map[i, j];Merge(arr);for (int i = 0; i < 4; ++i) map[i, j] = arr[i];}}
05.下移/左移/右移,只是取数据的方向不同
比如,“下移” 取数据和还数据的方向与“上移”相反。
/// <summary>/// 下移/// </summary>/// <param name="map">原棋盘</param>/// <returns></returns>private static int[,] Down(int[,] map){int[] arr = new int[4];for (int j = 0; j < 4; ++j){for (int i = 0; i < 4; ++i) arr[3-i] = map[i, j];Merge(arr);for (int i = 0; i < 4; ++i) map[i, j] = arr[3-i];}return map;}/// <summary>/// 左移/// </summary>/// <param name="map"></param>/// <returns></returns>private static int[,] Left(int[,] map){int[] arr = new int[4];for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j) arr[j] = map[i, j];Merge(arr);for (int j = 0; j < 4; ++j) map[i, j] = arr[j];}return map;}/// <summary>/// 右移/// </summary>/// <param name="map">原棋盘</param>/// <returns></returns>private static int[,] Right(int[,] map){int[] arr = new int[4];for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j) arr[3-j] = map[i, j];Merge(arr);for (int j = 0; j < 4; ++j) map[i, j] = arr[3-j];}return map;}
06.提高可读性
枚举
enum Direction { up, down, left, right }
/// <summary>/// 进行一次移动操作/// </summary>/// <param name="map">原棋盘</param>/// <param name="dir">移动的方向(枚举)</param>private static void Move(int[,] map, Direction dir){switch (dir){case Direction.up:Up(map); break;case Direction.down:Down(map); break;case Direction.left:Left(map); break;case Direction.right:Right(map); break;}}
相关文章:
C# 2048小游戏核心算法
文章目录 01.程序结构划分02.去零03.合并04.上移05.下移/左移/右移,只是取数据的方向不同06.提高可读性 01.程序结构划分 02.去零 有序向量“唯一化”的思路。 /// <summary>/// 去零/// </summary>/// <param name"row">对于一行或一…...
设计模式(5)代理模式
一、介绍: 【Subject/抽象角色】定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以使用Proxy 【RealSubject/真实角色】定义Proxy所代表的真实实体 【Proxy/代理角色】保存一个引用使得代理可以访问实体,并…...
Django配置(部署环境较乱,暂时启用)
django配置 web服务器中部署项目及WSGI简介 web服务器 WSGI 在IIS中部署django项目 安装 wfastcgi :pip install wfastcgi安装IIS: 以上选择项勾选后确定 将CGI文件复制到项目中, 将项目复制到IIS默认目录中 部署IIS 添加变量信息如下…...
【设计模式】桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得…...
ol问题总结二
一、加载坐标系是4326格式的,使用wfsServer发布的服务,图层加载失败;坐标系是3857格式的。图层加载正常 原因:4326格式的,发布出来的,经纬度是颠倒的 解决方案一:将经纬度进行反转 <templa…...
批量打印-----jsPDF将图片转为pdf,并合并pdf
安装依赖并引入 import jsPDF from jspdf; import { PDFDocument, } from pdf-lib;注意一、 使用jspdf将图片(jpg/jpeg/png/bmp)转pdf(记为pdfA),得到的pdf(pdfA)和需要合并的pdf(记为pdfB)类…...
【Git】版本控制器详解之git的概念和基本使用
版本控制器git 初始Gitgit的安装git的基本使用初始化本地仓库配置本地仓库三区协作添加---add修改文件--status|diff版本回退--reset撤销修改删除文件 初始Git 为了能够更⽅便我们管理不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是⼀个可以记…...
C语言 棱形图案
目录 一、问题分析 上部分: 下部分: 二、代码演示 一、问题分析 如上图所示,我们可以将棱形进行拆解,分为上下两个部分。 上部分: 通过观察,我们得到 单边空格数 上半部分总行数 - 行数 - 1 …...
在idea使用GitHub账号、Copilot异常
登录GitHub显示这样的信息: Invalid authentication data.Connection refused: connect Failed to initiate the GitHub login process. Please try again. 修改hosts(C:\Windows\System32\drivers\etc\hosts),添加以下参数即可…...
面试热题(反转字符串中的单词)
给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格…...
Stable Diffusion WebUI 从零基础到入门
本文主要介绍Stable Diffusion WebUI的实际操作方法,涵盖prompt推导、lora模型、vae模型和controlNet应用等内容,并给出了可操作的文生图、图生图实战示例。适合对Stable Diffusion感兴趣,但又对Stable Diffusion WebUI使用感到困惑的同学&am…...
【uniapp】一文读懂app端安装包升级
一、前言 首先,在app端开发上线的过程中,会面临一个问题,就是关于app端的版本升级的问题。如果不做相关处理来引导用户的话,那么app就会出现版本没有更新出现的各种问题,我们常见的有在线升级和去指定地址下载安装两种…...
【算法题】2518. 好分区的数目
题目: 给你一个正整数数组 nums 和一个整数 k 。 分区 的定义是:将数组划分成两个有序的 组 ,并满足每个元素 恰好 存在于 某一个 组中。如果分区中每个组的元素和都大于等于 k ,则认为分区是一个好分区。 返回 不同 的好分区的…...
编写守护进程
守护进程是一个后台进程,当操作系统启动时就可以运行的进程,当操作系统结束时结束的进程,与终端无关。 结果 不想要了就杀死...
stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘
打开webui.bat 把 if not defined VENV_DIR (set "VENV_DIR%~dp0%venv") 中的%~dp0venv改成自己python的安装路径就行获取直接set值即可 如 set VENV_DIRD:\Users\xxx\AppData\Local\Programs\Python\Python310 另外就是直接运行webui-user.bat也可以 如果运行…...
面试热题(合并两个有序列表)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 合并链表这类型题也是比较经典的题了,因为链表是由指针相互指向而确定位置,所以我们只需要改变某些节点的指针便可以做到对链表进行排序 今天这个方法…...
QT生成Word PDF文档
需求:将软件处理的结果保存为一个报告文档,文档中包含表格、图片、文字,格式为word的.doc和.pdf。生成word是为了便于用户编辑。 开发环境:qt4.8.4vs2010 在qt的官网上对于pdf的操作介绍如下:http://qt-project.org/…...
阿里云服务器搭建WordPress建站教程基于Windows系统
本教程是使用阿里云服务器镜像系统选择的是Windows操作系统,手动安装WordPress博客网站全过程。本教程介绍如何在Windows操作系统的ECS实例上搭建WordPress网站。 目录 准备工作 搭建WordPress网站 解析WordPress网站域名 准备工作 创建Windows操作系统的ECS实…...
动态链接(8/11)
静态链接的缺点:生成的可执行文件体积较大,当多个程序引用相同的公共代码时,这些公共代码会多次加载到内存,浪费内存资源。 为了解决这个问题,动态链接对静态链接做了一些优化:对一些公用的代码࿰…...
Python 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息
Python之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息 目录 Python之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息...
YOLOv8/v11-ONNX-QT-C++实战:从模型推理到界面渲染的性能调优与稳定性保障指南
1. YOLOv8模型在QT-C环境中的性能瓶颈分析 第一次把YOLOv8模型部署到QT界面时,我遇到了一个典型问题:明明模型推理结果正确,但整个界面卡得像幻灯片。通过性能分析工具发现,单帧处理时间竟然高达150ms,完全达不到实时性…...
接口测试——pytest框架续集倚
智能体时代的代码范式转移与 C# 的战略转型 传统的 C# 开发模式,即所谓的“工程导向型”开发,要求开发者创建一个复杂的项目结构,包括项目文件(.csproj)、解决方案文件(.sln)、属性设置以及依赖…...
从聊天到办公全能:Kimi AI的隐藏功能大揭秘(含Prompt优化技巧)
从聊天到办公全能:Kimi AI的隐藏功能大揭秘(含Prompt优化技巧) 在AI工具井喷式发展的今天,Kimi AI凭借其独特的多场景适应能力,正在重新定义"智能助手"的边界。这款最初以聊天功能进入大众视野的工具&#x…...
从USB充电到HDMI传4K:聊聊PCB板上那些‘隐形’的100Ω和90Ω差分线
从USB充电到HDMI传4K:PCB板上那些‘隐形’的100Ω和90Ω差分线 当你用USB线给手机快速充电时,是否想过为什么有些充电线能稳定传输2.5A大电流?当你用HDMI线连接4K显示器时,是否疑惑过为什么画面从不闪烁?这些看似简单…...
Qwen3-ASR-1.7B部署教程:OpenShift平台容器化部署与水平扩缩容配置
Qwen3-ASR-1.7B部署教程:OpenShift平台容器化部署与水平扩缩容配置 1. 项目概述 Qwen3-ASR-1.7B是基于阿里云通义千问语音识别模型开发的高精度本地语音转文字工具。相比之前的0.6B版本,这个1.7B模型在复杂长难句和中英文混合语音识别方面有显著提升&a…...
Seurat去批次整合实战:如何用多线程加速FindIntegrationAnchors处理大型单细胞数据集
Seurat多线程加速实战:突破大型单细胞数据集整合的性能瓶颈 当单细胞RNA测序技术遇上高通量时代,研究人员手中的数据集正以惊人的速度膨胀。面对数十万细胞的整合分析,传统的单线程处理模式往往让实验陷入漫长的等待——特别是当运行到FindIn…...
贝叶斯vs频率派:医疗诊断案例告诉你为什么选择贝叶斯推理
贝叶斯vs频率派:医疗诊断案例告诉你为什么选择贝叶斯推理 在医疗诊断的决策过程中,一个看似简单的阳性检测结果可能引发连锁反应。当医生告诉你某项检测呈阳性时,你是否思考过这个结果真实的患病概率?传统频率学派与贝叶斯学派对…...
终极指南:如何使用BOTW存档编辑器定制你的海拉鲁冒险
终极指南:如何使用BOTW存档编辑器定制你的海拉鲁冒险 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 你是否曾在《塞尔达传说:旷野之息》的…...
为什么92%的大模型项目卡在集群规模化阶段?3个被低估的工程瓶颈与可立即部署的轻量级编排方案
第一章:大模型工程化多集群管理方案 2026奇点智能技术大会(https://ml-summit.org) 大模型训练与推理的规模化落地,正驱动企业从单集群架构向跨地域、多异构环境的联邦式集群体系演进。单一Kubernetes集群已难以承载模型版本灰度发布、数据合规隔离、算…...
200K极致轻量化:勇芳自动校时工具的技术与应用探析
在软件行业普遍追求功能丰富性的今天,勇芳自动校时工具走出了一条截然不同的发展道路。 它以极致的轻量化设计理念,用仅仅200K的体积,实现了精准的网络时间同步功能。 这款由吾爱论坛wyl0205开发的小工具,向我们展示了软件设计的…...
