因为是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; }