写了一个简陋的2048
wsda控制方向
可能有bug
欢迎评论
#include <bits/stdc++.h>
#include <conio.h>
#define linemax 4
#define empty -1
#define randnum 10000
#define victory 2048
using namespace std;
int flag,allnum,conflag,victoryflag;
int form[linemax][linemax];
int random() {
return rand()%randnum;
}
void randomnum() {
int i,j,num=allnum;
for(i=0; i<linemax; i++)
for(j=0; j<linemax; j++) {
if(form[i][j]!=empty)
continue;
if(random()<=randnum/num) {
form[i][j]=random()<(randnum/3)?4:2;
allnum--;
return ;
}
num--;
}
allnum--;
}
void welcome() {
int i,j;
for(i=0; i<linemax; i++)
for(j=0; j<linemax; j++)
form[i][j]=empty;
randomnum();
randomnum();
}
void print() {
int i,j;
system("cls");
printf("%d\n",flag++);
for(i=0; i<linemax; i++) {
for(j=0; j<linemax; j++) {
putchar('\t');
if(form[i][j]!=empty)
printf("%d",form[i][j]);
if(form[i][j]==victory)
victoryflag=1;
putchar('.');
}
printf("\n\n");
}
printf("%d\n",allnum);
}
void up() {
int i,j,k;
for(j=0; j<linemax; j++)
for(i=0; i<linemax-1; i++) {
if(form[i][j]==empty) {
for(k=i+1; k<linemax; k++) {
if(form[k][j]!=empty) {
form[i][j]=form[k][j];
form[k][j]=empty;
i--;
conflag=1;
break;
}
}
}
else {
for(k=i+1; k<linemax; k++) {
if(form[k][j]!=empty) {
if(form[k][j]==form[i][j]) {
form[i][j]*=2;
form[k][j]=empty;
allnum++;
conflag=1;
}
break;
}
}
}
}
}
void down() {
int i,j,k;
for(j=0; j<linemax; j++)
for(i=linemax-1; i>0; i--) {
if(form[i][j]==empty) {
for(k=i-1; k>=0; k--) {
if(form[k][j]!=empty) {
form[i][j]=form[k][j];
form[k][j]=empty;
conflag=1;
i++;
break;
}
}
}
else {
for(k=i-1; k>=0; k--) {
if(form[k][j]!=empty) {
if(form[k][j]==form[i][j]) {
form[i][j]*=2;
form[k][j]=empty;
allnum++;
conflag=1;
}
break;
}
}
}
}
}
void left() {
int i,j,k;
for(i=0; i<linemax; i++)
for(j=0; j<linemax-1; j++) {
if(form[i][j]==empty) {
for(k=j+1; k<linemax; k++) {
if(form[i][k]!=empty) {
form[i][j]=form[i][k];
form[i][k]=empty;
conflag=1;
j--;
break;
}
}
}
else {
for(k=j+1; k<linemax; k++) {
if(form[i][k]!=empty) {
if(form[i][k]==form[i][j]) {
form[i][j]+=form[i][k];
form[i][k]=empty;
allnum++;
conflag=1;
}
break;
}
}
}
}
}
void right() {
int i,j,k;
for(i=0; i<linemax; i++)
for(j=linemax-1; j>0; j--) {
if(form[i][j]==empty) {
for(k=j-1; k>=0; k--) {
if(form[i][k]!=empty) {
form[i][j]=form[i][k];
form[i][k]=empty;
j++;
conflag=1;
break;
}
}
}
else {
for(k=j-1; k>=0; k--) {
if(form[i][k]!=empty) {
if(form[i][k]==form[i][j]) {
form[i][j]+=form[i][k];
form[i][k]=empty;
allnum++;
conflag=1;
}
break;
}
}
}
}
}
int jiancha() {
int i,j,e,k,i1;
int ar[4][2]= {1,0,0,1,-1,0,0,-1};
for(i=0; i<linemax; i++)
for(j=0; j<linemax; j++) {
for(i1=0; i1<4; i1++) {
e=ar[i1][0]+i;
k=ar[i1][1]+j;
if(e<0||k<0||e>=linemax||k>=linemax)
continue;
if(form[i][j]==form[e][k])
return 0;
}
}
return 1;
}
void over() {
printf("你失败了\n游戏结束");
}
int main() {
flag=0;
victoryflag=0;
conflag=0;
srand(time(NULL));
allnum=16;
welcome();
print();
char get;
while(1) {
get=getch();
if(get=='w')
up();
else if(get=='s')
down();
else if(get=='a')
left();
else if(get=='d')
right();
if(conflag) {
randomnum();
conflag=0;
}
print();
if(victoryflag)
{
printf("你赢了666");
break;
}
if(!allnum) {
if(jiancha()) {
over();
break;
}
}
}
return 0;
}