其他分享
首页 > 其他分享> > 2048

2048

作者:互联网

编写收获:1.学会用键盘控制输入的方法(wsad控制上下左右)2.简化代码 3.随机赋值函数思路的创新,解决了算法运行量太大的问题。其他的不多说了,源码如下,欢迎大家提改进建议,知无不言,言无不尽。
#include<iostream>
#include<time.h>
#include<conio.h>
#include<iomanip>
using namespace std;
int kong = 16;
int nums[4][4] = { 0 };

void Show()//展示页面
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
cout << setw(6) << left << nums[i][j];//控制格式
}
cout << endl; cout << endl;
}
cout << endl;
}

void mood(int m, int n, int k)//实现每个块的移动!精华部分!
{
if (!nums[m][n]) return;
int mm = m; int bro; int nn = n;
if (k == 0)//Down
{
mm = m + 1; bro = 3;
}
if (k == 1)//Up
{
mm = m - 1; bro = 0;
}
if (k == 2)//Right
{
nn = n + 1; bro = 3;
}
if (k == 3)//Left
{
nn = n - 1; bro = 0;
}
while (1) {
if (m == bro && (k == 0 || k == 1))break;
else if (n == bro && (k == 2 || k == 3))break;
else if (nums[mm][nn] != nums[m][n] && nums[mm][nn]) break;
else if (nums[mm][nn] == 0)
{
nums[mm][nn] = nums[m][n];
nums[m][n] = 0;
if (k == 0) { m++; mm++; } if (k == 1) { m--; mm--; }
if (k == 2) { n++; nn++; } if (k == 3) { n--; nn--; }
}
else if (nums[mm][nn] == nums[m][n])
{
nums[mm][nn] = 2 * nums[mm][nn];
nums[m][n] = 0;
kong++;
break;
}
}
}



void Random()//省时间的随机赋值,值得一看的思路
{
int r;
while (1) {
srand(time(0)); int r;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (!nums[i][j])
{
r = rand();
if (r % 2) { nums[i][j] = 2; kong--; return; }
}
}

}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (!nums[i][j])
{
if (r % 2) {
nums[i][j] = 2; kong--; return;
}
}
}
}
}

}

void Move(int k)//实现整体的移动
{

for (int n = 0; n < 4; n++)
{
if (k == 0 || k == 2)
for (int m = 3; m >= 0; m--)
{
if (k == 0)
mood(m, n, k);
else mood(n, m, k);
}
if (k == 1 || k == 3)
for (int m = 0; m < 4; m++)
{
if (k == 1)
mood(m, n, k);
else mood(n, m, k);
}
}



}


int main()
{
Random(); Random();
Show();
char ch;
while (ch = _getch())//这是一个可以用键盘控制上下左右的功能!奇怪的知识增加了!
{
if (ch != 'a' && ch != 'w' && ch != 's' && ch != 'd') continue;
switch (ch)
{
case 'w':Move(1); break;
case 's':Move(0);  break;
case 'a':Move(3);  break;
case 'd':Move(2);  break;
default:
break;
}
system("cls");
if (kong == 0) {
cout << "NMSL"; break;
}
Random();
Show();
};

}

标签:nn,nums,int,2048,break,mm,--
来源: https://www.cnblogs.com/sheep-mr/p/16387818.html