日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2048的核心算法的初步实现

發(fā)布時(shí)間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2048的核心算法的初步实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200401_2048
{
? ? class Program
? ? {
? ? ? ? #region
? ? ? ? //**********************2048核心算法***********************
? ? ? ? /*最有代表性的,三消游戲
? ? ? ? ?* 上移
? ? ? ? ?* --從上到下獲取列數(shù)據(jù),形成一維數(shù)組
? ? ? ? ?* 2 2 0 0 ==》 4 0 0 0
? ? ? ? ?* 2 2 2 0 ==》 4 0 2 0 ==》4 2 0 0
? ? ? ? ?* 2 0 2 0 ==》 2 2 0 0 ==》4 0 0 0?
? ? ? ? ?* 2 0 2 4 ==》 2 2 4 0 ==》 4 0 4 0 ==>4 4 0 0 ?每次只合并一次
? ? ? ? ?* --合并數(shù)據(jù)
? ? ? ? ?* ? --去零:將0元素移動(dòng)到末尾
? ? ? ? ?* ? --相鄰相同,則合并(將后一個(gè)元素累加到前一個(gè)元素上,前一個(gè)元素)
? ? ? ? ?* ? --去零,將0元素移動(dòng)到末尾
? ? ? ? ?* --將一維數(shù)組 還原至原列
? ? ? ? ?*?
? ? ? ? ?* 下移1.0
? ? ? ? ?* ?--從上到下獲取列數(shù)據(jù),形成一維數(shù)組
? ? ? ? ?* 2 2 0 0 ==》 4 0 0 0
? ? ? ? ?* 2 2 2 0 ==》 4 0 2 0 ==》4 2 0 0
? ? ? ? ?* 2 0 2 0 ==》 2 2 0 0 ==》4 0 0 0?
? ? ? ? ?* 2 0 2 4 ==》 2 2 4 0 ==》 4 0 4 0 ==>4 4 0 0 ?每次只合并一次
? ? ? ? ?* 2 0 0 2 ==> 2 0 2 0
? ? ? ? ?* --合并數(shù)據(jù)
? ? ? ? ?* ? --去零:將0元素移動(dòng)到末尾
? ? ? ? ?* ? --相鄰相同,則合并(將前一個(gè)元素累加到前一個(gè)元素上,后一個(gè)元素)
? ? ? ? ?* ? --去零,將0元素移動(dòng)到末尾
? ? ? ? ?* --將一維數(shù)組 還原至原列
? ? ? ? ?*?
? ? ? ? ?* 下移2.0
? ? ? ? ?* --從下到上獲取列數(shù)據(jù),形成一維數(shù)組
? ? ? ? ?* --合并數(shù)據(jù)
? ? ? ? ?* ? --去零:將0元素移動(dòng)到末尾
? ? ? ? ?* ? --相鄰相同,則合并(將前一個(gè)元素累加到前一個(gè)元素上,后一個(gè)元素)
? ? ? ? ?* ? --去零,將0元素移動(dòng)到末尾
? ? ? ? ?* --將一維數(shù)組 還原至原列
? ? ? ? ?*?
? ? ? ? ?*?
? ? ? ? ?* 1.定義去零的方法(針對(duì)一維數(shù)組):將0元素移動(dòng)到末尾
? ? ? ? ?* 2.合并數(shù)據(jù)的方法
? ? ? ? ?* ? --去零:將0元素移動(dòng)到末尾
? ? ? ? ?* ? --相鄰相同,則合并(將后一個(gè)元素累加到前一個(gè)元素上,前一個(gè)元素)
? ? ? ? ?* ? --去零,將0元素移動(dòng)到末尾
? ? ? ? ?* 3.上移
? ? ? ? ?* ?--從上到下獲取列數(shù)據(jù),形成一維數(shù)組
? ? ? ? ?* ?--調(diào)用合并數(shù)據(jù)方法
? ? ? ? ?* ?--將一維數(shù)組元素還原至原列
? ? ? ? ?* ?4.下移
? ? ? ? ?* ?--從下到上獲取數(shù)據(jù)
? ? ? ? ?* ?--
? ? ? ? ?* ?5.左移
? ? ? ? ?* ?6.右移
? ? ? ? ?*/
? ? ? ? #endregion
? ? ? ? static Random random = new Random();
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? int[,] map = new int[4, 4]
? ? ? ? ? ? {
? ? ? ? ? ? ? ? { 2,2,4,8},
? ? ? ? ? ? ? ? {2,4,4,4},
? ? ? ? ? ? ? ? {0,8,4,0 },
? ? ? ? ? ? ? ? { 2,4,0,4 }
? ? ? ? ? ? };
? ? ? ? ? ? Console.WriteLine("原數(shù)組");
? ? ? ? ? ? PrintDouble(map);
? ? ? ? ? ? map = UpMove(map);
? ? ? ? ? ? Console.WriteLine("上移動(dòng)");
? ? ? ? ? ? PrintDouble(map);
? ? ? ? ? ? Console.WriteLine("下移動(dòng)");
? ? ? ? ? ? map = DownMove(map);
? ? ? ? ? ? PrintDouble(map);
? ? ? ? ? ? Console.WriteLine("左移動(dòng)");
? ? ? ? ? ? map = LeftMove(map);
? ? ? ? ? ? PrintDouble(map);
? ? ? ? ? ? Console.WriteLine("右移動(dòng)");
? ? ? ? ? ? map = RightMove(map);
? ? ? ? ? ? PrintDouble(map);
? ? ? ? }
? ? ? ? static void PrintDouble(Array array)
? ? ? ? {
? ? ? ? ? ? for (int r = 0; r < array.GetLength(0); r++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int c = 0; c < array.GetLength(1); c++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? Console.Write(array.GetValue(r, c) + "\t");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? Console.WriteLine();
? ? ? ? ? ? }
? ? ? ? ? ? Console.ReadLine();
? ? ? ? }
? ? ? ? static int[] RemoveZero(int[] array)
? ? ? ? {

? ? ? ? ? ? int[] temp = new int[array.Length];

? ? ? ? ? ? int index = 0;
? ? ? ? ? ? for (int j = 0; j < 4; j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (array[j] != 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //賦值成功之后,才對(duì)temp[i]進(jìn)行加1,不成功的話一直在array[j]循環(huán),知道不為0的值出現(xiàn)
? ? ? ? ? ? ? ? ? ? temp[index++] = array[j];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return temp;
? ? ? ? }
? ? ? ? static int[] MergeNum(int[] array)
? ? ? ? {
? ? ? ? ? ? array = RemoveZero(array);
? ? ? ? ? ? for (int i = 0; i < array.Length - 1;i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (array[i]!=0&&array[i] == array[i + 1])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? array[i] += array[i+1];
? ? ? ? ? ? ? ? ? ? array[i + 1] = 0;
? ? ? ? ? ? ? ? }

? ? ? ? ? ? }
? ? ? ? ? ? array = RemoveZero(array);
? ? ? ? ? ? return array;
? ? ? ? }
? ? ? ? static int[,] DownMove(int[,] map)
? ? ? ? {
? ? ? ? ? ? //下移
? ? ? ? ? ? int[] mergeArray = new int[map.GetLength(0)];
? ? ? ? ? ? for (int c = 0; c < map.GetLength(1); c++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int r = map.GetLength(0) - 1; r >= 0; r--)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? mergeArray[3 - r] = map[r, c];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? mergeArray = MergeNum(mergeArray);
? ? ? ? ? ? ? ? for (int r = map.GetLength(0) - 1; r >= 0; r--)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? map[r, c] = mergeArray[3 - r];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return map;
? ? ? ? }
? ? ? ? static int[,] UpMove(int[,] map)
? ? ? ? {
? ? ? ? ? ? //向上移動(dòng)
? ? ? ? ? ? int[] mergeArray = new int[map.GetLength(0)];
? ? ? ? ? ? for (int c = 0; c < map.GetLength(1); c++)
? ? ? ? ? ? {


? ? ? ? ? ? ? ? for (int r = 0; r < map.GetLength(0); r++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? mergeArray[r] = map[r, c];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? mergeArray = MergeNum(mergeArray);
? ? ? ? ? ? ? ? for (int r = 0; r < map.GetLength(0); r++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? map[r, c] = mergeArray[r];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return map;
? ? ? ? }
? ? ? ? static int[,] RightMove(int[,] map)
? ? ? ? {
? ? ? ? ? ? /*
? ? ? ? ? ? ?* 0,0 ? 0,1 ? 0.2 ? 0.3
? ? ? ? ? ? ?* 1.0 ? 1.0 ? 1.2 ? 1.3
? ? ? ? ? ? ?* 2.0 ? 2.1 ? 2.2 ? 2.3
? ? ? ? ? ? ?* 3.0 ? 3.1 ? 3.2 ? 3.3
? ? ? ? ? ? ?*/
? ? ? ? ? ? int[] mergeArray = new int[map.GetLength(1)];
? ? ? ? ? ? for (int r = 0; r < map.GetLength(0); r++)
? ? ? ? ? ? {


? ? ? ? ? ? ? ? for (int c = map.GetLength(0) - 1; c >= 0; c--)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? mergeArray[3 - c] = map[r, c];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? mergeArray = MergeNum(mergeArray);
? ? ? ? ? ? ? ? for (int c = map.GetLength(0) - 1; c >= 0; c--)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? map[r, c] = mergeArray[3 - c];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return map;
? ? ? ? }
? ? ? ? static int[,] LeftMove(int[,] map)
? ? ? ? {
? ? ? ? ? ? /*
? ? ? ? ? ? ?* 0,0 ? 0,1 ? 0.2 ? 0.3
? ? ? ? ? ? ?* 1.0 ? 1.0 ? 1.2 ? 1.3
? ? ? ? ? ? ?* 2.0 ? 2.1 ? 2.2 ? 2.3
? ? ? ? ? ? ?* 3.0 ? 3.1 ? 3.2 ? 3.3
? ? ? ? ? ? ?*/
? ? ? ? ? ? //先取出第0行的每一列的數(shù)據(jù),map[0,c] ?最后再進(jìn)行所有行的循環(huán)
? ? ? ? ? ? int[] mergeArray = new int[map.GetLength(1)];
? ? ? ? ? ? for (int r = 0; r < map.GetLength(1); r++)
? ? ? ? ? ? {


? ? ? ? ? ? ? ? for (int c = 0; c < map.GetLength(0); c++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? mergeArray[c] = map[r, c];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? mergeArray = MergeNum(mergeArray);
? ? ? ? ? ? ? ? for (int c = 0; c < map.GetLength(0); c++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? map[r, c] = mergeArray[c];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return map;
? ? ? ? }
? ? }
}
?

總結(jié)

以上是生活随笔為你收集整理的2048的核心算法的初步实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。