C# 2048游戏核心逻辑(beta)

核心逻辑:

C# 2048游戏核心逻辑(beta)_第1张图片
        using System;

namespace VSc02
{
    class Program
    {
        static void Main()
        {
            int[,] arr ={
                {4,2,0,2},
                {2,0,2,0},
                {0,0,0,2},
                {2,0,2,2}
            };
            PrintArr(arr);
            MoveUp(arr);
            Console.WriteLine("----------------");
            PrintArr(arr);
            
        }
        //格式化打印二维数组
        private static void PrintArr(int[,] arr){
            for(int i=0;i<arr.GetLength(0);i++){
                for(int j=0;j<arr.GetLength(1);j++){
                    Console.Write(arr[i,j]+"\t");
                }
                Console.WriteLine();
            }
        }
        //上移函数
        private static void MoveUp(int[,] resaveArr)
        {
            int[] temp = new int[4];
            for (int i = 0; i < resaveArr.GetLength(1); i++)
            {
                for (int j = 0; j < resaveArr.GetLength(0); j++)
                {
                    temp[j] = resaveArr[j, i];
                }
                AddLine(temp);
                for(int k=0 ;k< temp.Length;k++){
                    resaveArr[k,i]=temp[k];
                }
            }
        }
        //下移函数
        private static void MoveDown(int[,] resaveArr)
        {
            int[] temp = new int[4];
            for (int i = 0; i < resaveArr.GetLength(1); i++)
            {
                for (int j = 0; j < resaveArr.GetLength(0); j++)
                {
                    temp[j] = resaveArr[3-j, i];
                }
                AddLine(temp);
                for(int k=0 ;k< temp.Length;k++){
                    resaveArr[3-k,i]=temp[k];
                }
            }
        }
        //左移函数
        private static void MoveLeft(int[,] resaveArr)
        {
            int[] temp = new int[4];
            for (int i = 0; i < resaveArr.GetLength(0); i++)
            {
                for (int j = 0; j < resaveArr.GetLength(1); j++)
                {
                    temp[j] = resaveArr[i, j];
                }
                AddLine(temp);
                for(int k=0 ;k< temp.Length;k++){
                    resaveArr[i,k]=temp[k];
                }
            }
        }
        //右移函数
        private static void MoveRight(int[,] resaveArr)
        {
            int[] temp = new int[4];
            for (int i = 0; i < resaveArr.GetLength(0); i++)
            {
                for (int j = 0; j < resaveArr.GetLength(1); j++)
                {
                    temp[j] = resaveArr[i, 3-j];
                }
                AddLine(temp);
                for(int k=0 ;k< temp.Length;k++){
                    resaveArr[i,3-k]=temp[k];
                }
            }

        }
        //排序函数,将为0的值靠后,非0的值提前
        private static void RemvoeZero(int[] arr)
        {
            int index = 0;
            int[] arr0 = new int[4];
            foreach (int each in arr)
            {
                if (each != 0) arr0[index++] = each;
            }
            arr0.CopyTo(arr,0);
        }
        //数组中相邻的同样的数相加的方法
        private static void AddLine(int[] arr){
            RemvoeZero(arr);
            for (int i = 0; i < arr.Length-1; i++)
            {
                if(arr[i]!=0 && arr[i]==arr[i+1]){
                    arr[i] +=arr[i+1];
                    arr[i+1]=0;
                }
            }
            RemvoeZero(arr);
        }
    }
}

      

你可能感兴趣的:(C# 2048游戏核心逻辑(beta))