2048原理

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

namespace ConsoleApplication1
{
    class Program
    {
        static int n;
        static int[,] a = new int[4, 4];
        public static void swap<t>(ref t  a, ref t b)
        {
            t temp = a;
            a = b;
            b = temp;
        }
       static void up_remove_blank()
        {
          
            int i, j, k;
            for (j = 0; j < 4; j++)
            {
                for (i = 1; i < 4; i++)
                {
                    k = i;
                    while (k - 1 >= 0 && a[k - 1,j] == 0)
                    {//上面的那个为空 
                        //swap(a[k,j], a[k - 1,j]);
                        k--;

                    }
                }
            }
        }
       static void down_remove_blank()
        {
            int i, j, k;
            for (j = 0; j < 4; j++)
            {
                for (i = 2; i >= 0; i--)
                {
                    k = i;
                    while (k + 1 <= 3 && a[k + 1,j] == 0)
                    {//上面的那个为空 
                        swap<int>(ref a[k,j], ref a[k + 1,j]);
                        k++;
                    }
                }
            }
        }
       static void left_remove_blank()
        {
            int i, j, k;
            for (i = 0; i < 4; i++)
            {
                for (j = 1; j < 4; j++)
                {
                    k = j;
                    while (k - 1 >= 0 && a[i,k - 1] == 0)
                    {//上面的那个为空 
                        swap<int>(ref a[i, k], ref  a[i, k - 1]);
                        k--;
                    }
                }
            }
        }
       static void right_remove_blank()
        {
            int i, j, k;
            for (i = 0; i < 4; i++)
            {
                for (j = 2; j >= 0; j--)
                {
                    k = j;
                    while (k + 1 <= 3 && a[i,k + 1] == 0)
                    {//上面的那个为空 
                        swap<int>(ref a[i, k], ref  a[i, k + 1]);
                        k++;
                    }
                }
            }
        }
       static void left()
        {
            int i, j;
            for (i = 0; i < 4; i++)
            {
                for (j = 0; j < 3; j++)
                {
                    if (a[i,j] == a[i,j + 1])
                    {
                        a[i,j] += a[i,j + 1];
                        a[i,j + 1] = 0;
                        left_remove_blank();
                    }
                }
            }
        }
       static void right()
        {
            int i, j;
            for (i = 0; i < 4; i++)
            {
                for (j = 3; j >= 1; j--)
                {
                    if (a[i,j] == a[i,j - 1])
                    {
                        a[i,j] += a[i,j - 1];
                        a[i,j - 1] = 0;
                        right_remove_blank();
                    }
                }
            }
        }
       static void up()
        {
            //int i, j;
            for (int j = 0; j < 4; j++)
            {//每一列 
                for (int i = 0; i < 3; i++)
                {
                    if (a[i,j] == a[i + 1,j])
                    {
                        a[i,j] = a[i,j] + a[i + 1,j];
                        a[i + 1,j] = 0;
                        //移除空格
                        up_remove_blank();
                    }
                }
            }
        }
       static void down()
        {
            int i, j;
            for (j = 0; j < 4; j++)
            {//每一列 
                for (i = 3; i >= 1; i--)
                {
                    if (a[i,j] == a[i - 1,j])
                    {
                        a[i,j] = a[i,j] + a[i - 1,j];
                        a[i - 1,j] = 0;
                        //移除空格
                        down_remove_blank();
                    }
                }
            }
        }
       static void output()
        {
            int i, j;
            for (i = 0; i < 4; i++)
            {
                for (j = 0; j < 4; j++)
                {
                    if (j == 3) Console.Write("{0}\n", a[i,j]);
                    else Console.Write("{0}", a[i, j]);
                }
            }
        }

        static void Main(string[] args)
        {
            int i, j;
            int s =int.Parse( Console.ReadLine());
            while (s == 1)
            {
                for (i = 0; i < 4; i++)
                {
                    for (j = 0; j < 4; j++)
                    {
                        a[i, j] = int.Parse(Console.ReadLine());
                    }
                }
                if (n == 0)
                {//左 
                    left_remove_blank();
                    left();

                }
                else if (n == 1)
                {//右 
                    right_remove_blank();
                    right();
                }
                else if (n == 2)
                {//上 
                    up_remove_blank();
                    up();

                }
                else
                {//下 
                    down_remove_blank();
                    down();
                }
                output();

            }
          //  return 0;

        }
    }
}

1 n=2
0 0 0 0
0 0 0 0
0 2 2 0
2 0 0 0

转载于:https://www.cnblogs.com/wlzhang/p/6913501.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值