简易般的2048

using System;

namespace wuxin2048
{
    
    
    class Program
    {
    
    
        static int[,] array = new int[4, 4];
        static void Main()
        {
    
    
            Console.Title = "2048";
            Init();
            Show(array);
            while (true)
            {
    
    
                if (IfExit(array)) break;
                Console.WriteLine("\r\n1 左 2 右 3 上 4 下");
                string op = Console.ReadLine();
                switch(op)
                {
    
    
                    case "1":
                        array = MoveLeft(array);
                        AddNumber();
                        break;
                    case "2":
                        array = MoveRight(array);
                        AddNumber();
                        break;
                    case "3":
                        array = MoveUp(array);
                        AddNumber();
                        break;
                    case "4":
                        array = MoveDown(array);
                        AddNumber();
                        break;
                    default:
                        Console.WriteLine("输入错误");
                        break;
                }
                Console.Clear();
                Show(array);
            }
            Console.WriteLine(" 结束了!!!");
            Console.ReadKey();
        }
        private static int[] RemoveZero(int[] array)
        {
    
    
            int[] newArray = new int[array.Length];
            int index = 0;
            for (int i = 0; i < 4; i++)
                if (array[i] != 0)
                    newArray[index++] = array[i];
            return newArray;
        }
        private static int[] Merge(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;
                }
            return array = RemoveZero(array);
        }
        private static int[,] MoveUp(int[,] array)
        {
    
    
            for (int j = 0; j < array.GetLength(1); j++)
            {
    
    
                int[] mergeArray = new int[array.GetLength(0)];
                for (int i = 0; i < array.GetLength(0); i++)
                    mergeArray[i] = array[i, j];
                mergeArray = Merge(mergeArray);
                for (int i = 0; i < array.GetLength(0); i++)
                    array[i, j] = mergeArray[i];
            }
            return array;
        }
        private static int[,] MoveDown(int[,] array)
        {
    
    
            for (int j = 0; j < array.GetLength(1); j++)
            {
    
    
                int[] mergeArray = new int[array.GetLength(0)];
                for (int i = array.GetLength(0) - 1, k = 0; i >= 0; i--, k++)
                    mergeArray[k] = array[i, j];
                mergeArray = Merge(mergeArray);
                for (int i = array.GetLength(0) - 1, k = 0; i >= 0; i--, k++)
                    array[i, j] = mergeArray[k];
            }
            return array;
        }
        private static int[,] MoveLeft(int[,] array)
        {
    
    
            for (int i = 0; i < array.GetLength(0); i++)
            {
    
    
                int[] mergeArray = new int[array.GetLength(1)];
                for (int j = 0; j < array.GetLength(1); j++)
                    mergeArray[j] = array[i, j];
                mergeArray = Merge(mergeArray);
                for (int j = 0; j < array.GetLength(1); j++)
                    array[i, j] = mergeArray[j];
            }
            return array;
        }
        private static int[,] MoveRight(int[,] array)
        {
    
    
            for (int i = 0; i < array.GetLength(0); i++)
            {
    
    
                int[] mergeArray = new int[array.GetLength(1)];
                for (int j = array.GetLength(1) - 1, k = 0; j >= 0; j--, k++)
                    mergeArray[k] = array[i, j];
                mergeArray = Merge(mergeArray);
                for (int j = array.GetLength(1) - 1, k = 0; j >= 0; j--, k++)
                    array[i, j] = mergeArray[k];
            }
            return array;
        }
        private static void Show(int[,] array)
        {
    
    
            Console.WriteLine("-------------------------");
            for (int i = 0; i < array.GetLength(0); i++)
            {
    
    
                for (int j = 0; j < array.GetLength(1); j++)
                    Console.Write("|{0,5}",array[i, j]);
                Console.WriteLine("|");
                Console.WriteLine("-------------------------");
            }
        }
        private static void Init()
        {
    
    
            Random random = new Random();
            int x = random.Next(0, 4);
            int y = random.Next(0, 4);
            array[x, y] = (random.Next(1, 5) == 4 ? 4 : 2);
        }
        private static void AddNumber()
        {
    
    
            Random random = new Random();
            int x, y;
            do
            {
    
    
                x = random.Next(0, 4);
                y = random.Next(0, 4);
            } while (array[x, y] != 0);
            array[x, y] = (random.Next(1, 5) == 4 ? 4 : 2);
        }
        private static bool IfExit(int[,] array)
        {
    
    
            for (int i = 0; i < array.GetLength(0); i++)
                for (int j = 0; j < array.GetLength(1); j++)
                    if (array[i, j] == 0 && array[i, j] != 2048) return false;
            return true;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/m0_52361859/article/details/115077080