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

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;}}
http://www.lryc.cn/news/122504.html

相关文章:

  • 设计模式(5)代理模式
  • Django配置(部署环境较乱,暂时启用)
  • 【设计模式】桥接模式
  • ol问题总结二
  • 批量打印-----jsPDF将图片转为pdf,并合并pdf
  • 【Git】版本控制器详解之git的概念和基本使用
  • C语言 棱形图案
  • 在idea使用GitHub账号、Copilot异常
  • 面试热题(反转字符串中的单词)
  • Stable Diffusion WebUI 从零基础到入门
  • 【uniapp】一文读懂app端安装包升级
  • 【算法题】2518. 好分区的数目
  • 编写守护进程
  • stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘
  • 面试热题(合并两个有序列表)
  • QT生成Word PDF文档
  • 阿里云服务器搭建WordPress建站教程基于Windows系统
  • 动态链接(8/11)
  • Python 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息
  • 干不完根本干不完,我也不想加班,快来围观时间管理大师
  • 常见设计模式
  • Android之版本号、版本别名、API等级对应关系(全)(一百六十二)
  • Redis的简介,安装(Linux、Windows),配置文件的修改---详细介绍
  • Vscode-工具使用
  • Ceph Reef版本 RBD 性能测试:80万写IOPS(10节点、60个NVMe SSD)
  • 微信小程序调用map数据 并在wxml中对数组进行截取的操作
  • 前端项目打包
  • venv使用教程及pyvenv与python3-venv的区别
  • 协程(一)单机--》并发--》协程
  • P1722 矩阵 II