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;
}
}
}
简易般的2048
猜你喜欢
转载自blog.csdn.net/m0_52361859/article/details/115077080
今日推荐
周排行