因为是2015年写的,所以代码水平可能稍微差些。也懒得修改了。暂时做个备份,
下面的小游戏仅供参考,可以给新手多多学习。
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int a[4][4] = {0};
void show()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
cout<<endl;
}
}
//2还是4
int random(int Max = 10)
{
if (rand()%Max == 0)
{
return 4;
}
else
return 2;
}
int randomPos(int Max = 4)
{
return rand()%Max;
}
void addNewNumber()
{
int iPos = randomPos();
int jPos = randomPos();
while (a[iPos][jPos] != 0)
{
iPos = randomPos();
jPos = randomPos();
}
a[iPos][jPos] = random();
}
void newGame()
{
int count = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
a[i][j] = 0;
}
}
int iFirstPos = randomPos();
int jFirstPos = randomPos();
a[iFirstPos][jFirstPos] = random();
addNewNumber();
show();
}
void realChange(int &a0, int &a1, int &a2, int &a3)
{
int a[4] ={0};
a[0] = a0;
a[1] = a1;
a[2] = a2;
a[3] = a3;
int sum = 0;
for (int i = 0; i < 4; i++)
{
sum = 0;
for (int j = i; j < 4; j++)
{
sum += a[j];
}
if (sum == 0)
{
break;
}
while (a[i] == 0)
{
for (int j = i; j < 3; j++)
{
a[j] = a[j+1];
}
a[3] = 0;
}
}
if (a[0] == a[1])
{
if (a[2] == a[3])
{
a[0] = 2*a[0];
a[1] = 2*a[2];
a[2] = 0;
a[3] = 0;
}
else
{
a[0] = 2*a[0];
a[1] = a[2];
a[2] = a[3];
a[3] = 0;
}
}
else
{
if (a[1] == a[2])
{
a[1] = 2*a[1];
a[2] = a[3];
a[3] = 0;
}
else
{
if (a[2] == a[3])
{
a[2] = 2*a[2];
a[3] = 0;
}
else
{
}
}
}
a0 = a[0];
a1 = a[1];
a2 = a[2];
a3 = a[3];
//if (a ==0 && b == 0 && c == 0 && d == 0)
//{
// return ;
//}
//while (a == 0)//保证a!=0 直到a!=0
//{
// a = b;
// b = c;
// c = d;
// d = 0;
//}
//if (b == 0 && c == 0 && d == 0)
//{
// return ;
//}
//while (b == 0)//保证b!=0 直到b!=0
//{
// b = c;
// c = d;
// d = 0;
//}
//if (c == 0 && d == 0)
//{
// return ;
//}
//while (c == 0)
//{
// c = d;
// d = 0;
//}
//if (d == 0)
//{
// return ;
//}
}
void upChange()
{
cout<<"您输入的是upChange"<<endl;
for (int j = 0; j < 4; j++)
{
realChange(a[0][j], a[1][j], a[2][j], a[3][j]);
}
addNewNumber();
show();
}
void downChange()
{
cout<<"您输入的是downChange"<<endl;
for (int j = 0; j < 4; j++)
{
realChange(a[3][j], a[2][j], a[1][j], a[0][j]);
}
addNewNumber();
show();
}
void leftChange()
{
cout<<"您输入的是leftChange"<<endl;
for (int i = 0; i < 4; i++)
{
realChange(a[i][0], a[i][1], a[i][2], a[i][3]);
}
addNewNumber();
show();
}
void rightChange()
{
cout<<"您输入的是rightChange"<<endl;
for (int i = 0; i < 4; i++)
{
realChange(a[i][3], a[i][2], a[i][1], a[i][0]);
}
addNewNumber();
show();
}
bool judge(char chGet)
{
switch(chGet)
{
case 'n':
newGame();
cout<<"新游戏开始了啊! 输入n重新开始一盘,wsad分别是上下左右,q是退出"<<endl;
break;
case 'w':
upChange();
break;
case 'a':
leftChange();
break;
case 's':
downChange();
break;
case 'd':
rightChange();
break;
case 'q':
return false;
default:
break;
}
return true;
}
int main()
{
cout << "新游戏开始了啊! 输入n重新开始一盘,wsad分别是上下左右,q是退出" << endl;
srand((int)time(0));
//show();
newGame();
char chGet;
while (1)
{
cin>>chGet;
if( !judge(chGet))
{
break;
}
}
return 0;
}