问题描述
- 2048代码解释,,小白看不懂
-
#include
#include
#include
#include
#include
int random_number_2_4();//随机出2和4
int* random_number_16(int* p);//确定随机的格子,返回指针。
int main()
{
int end=0;
long mark=0;//总分
int i,j;
int c=0;//判误参数
char key;//键盘输入
int line,colum;
int temp1;//临时数组下标
int temp[4]={0};
int* blank=NULL;//指向空格子的指针
int interface[4][4]={0};//界面二维数组。blank=random_number_16(&interface[0][0]);//开始出现的两个。 *blank=random_number_2_4(); blank=random_number_16(&interface[0][0]); *blank=random_number_2_4();
while(1) //循环现实界面
{system("cls");//清屏 for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(interface[i][j]==0) printf("%ct",'-'); else printf("%dt",interface[i][j]); } printf("nn"); }printf("n"); printf("tMark=%lldt",mark);//显示参数 printf("nn|* 上是w,下是s,左是a,右是d *|nnn|* 阿杜亲编,欢迎扩散~ *|nn"); /*输入是否合法*/
cannot://错误则返回的地方。
c=0;
do//错误就循环输入
{
key=getchar();
}while(key!='w' && key!='s' && key!='a' && key!='d');/*上下左右都是一个原理,所以这里只介绍“上”——“w”*/ switch(key)
{
case 'w':
{
/*判断是否符合移动条件*/
for(colum=0;colum
for(line=3;line>0;line--)
{
if((interface[line][colum]!=0&&interface[line-1][colum]==0)||(interface[line][colum]==interface[line-1][colum]))
{c++;break;}
}if(c==0) { goto cannot;//不能移动就回去再输入 } /*判断是否有空位置,有则补上。*/ //基本思想是通过把一行或者一列非零的赋值给临时全为0的一维数组,再把一维数组赋值回去。 for(temp1=0;temp1<4;temp1++)//清空临时数组 temp[temp1]=0; for(colum=0;colum<4;colum++)//先把一列赋值给一个一维数组 {for(line=0,temp1=0;line<4;line++) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1++; } } for(line=0,temp1=0;line<4;line++,temp1++)//再把数组赋值回去 interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++)//清空临时数组 temp[temp1]=0; } /*先判断相邻的是否相等,然后相加。*/ for(colum=0;colum<4;colum++) for(line=0;line<3;line++) { if(interface[line][colum]==interface[line+1][colum]) {interface[line][colum]+=interface[line+1][colum]; mark+=interface[line][colum]; interface[line+1][colum]=0; }} /*再判断是否有空位置,有则补上。*/ //基本思想是通过把一行或者一列非零的赋值给临时全为0的一维数组,再把一维数组赋值回去。 for(temp1=0;temp1<4;temp1++)//清空临时数组 temp[temp1]=0; for(colum=0;colum<4;colum++)//先把一列赋值给一个一维数组 {for(line=0,temp1=0;line<4;line++) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1++; } } for(line=0,temp1=0;line<4;line++,temp1++)//再把数组赋值回去 interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++)//清空临时数组 temp[temp1]=0; } }break;
case 's':
{
for(colum=0;colum<4;colum++)
for(line=0;line<3;line++)
{
if((interface[line][colum]!=0&&interface[line+1][colum]==0)||(interface[line][colum]==interface[line+1][colum]))
{c++;break;}
}
if(c==0)
{
goto cannot;
}for(temp1=0;temp1<4;temp1++) temp[temp1]=0; for(colum=0;colum<4;colum++) {for(line=3,temp1=3;line>=0;line--) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1--; } } for(line=0,temp1=0;line<4;line++,temp1++) interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++) temp[temp1]=0; } for(colum=0;colum<4;colum++) for(line=3;line>0;line--) { if(interface[line][colum]==interface[line-1][colum]) {interface[line][colum]+=interface[line-1][colum]; mark+=interface[line][colum]; interface[line-1][colum]=0; }} for(temp1=0;temp1<4;temp1++) temp[temp1]=0; for(colum=0;colum<4;colum++) {for(line=3,temp1=3;line>=0;line--) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1--; } } for(line=0,temp1=0;line<4;line++,temp1++) interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++) temp[temp1]=0; } }break;
case 'a':
{for(line=0;line<4;line++) for(colum=3;colum>0;colum--) { if((interface[line][colum]!=0&&interface[line][colum-1]==0)||(interface[line][colum]==interface[line][colum-1])) {c++;break;} } if(c==0) { goto cannot; } for(temp1=0;temp1<4;temp1++) temp[temp1]=0; for(line=0;line<4;line++) {for(colum=0,temp1=0;colum<4;colum++) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1++; } } for(colum=0,temp1=0;colum<4;colum++,temp1++) interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++) temp[temp1]=0; } for(line=0;line<4;line++) for(colum=0;colum<3;colum++) { if(interface[line][colum]==interface[line][colum+1]) {interface[line][colum]+=interface[line][colum+1]; mark+=interface[line][colum]; interface[line][colum+1]=0; }} for(temp1=0;temp1<4;temp1++) temp[temp1]=0; for(line=0;line<4;line++) {for(colum=0,temp1=0;colum<4;colum++) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1++; } } for(colum=0,temp1=0;colum<4;colum++,temp1++) interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++) temp[temp1]=0; } }break;
case 'd':
{for(line=0;line<4;line++) for(colum=0;colum<3;colum++) { if((interface[line][colum]!=0&&interface[line][colum+1]==0)||(interface[line][colum]==interface[line][colum+1])) {c++;break;} } if(c==0) { goto cannot; } for(temp1=0;temp1<4;temp1++) temp[temp1]=0; for(line=0;line<4;line++) {for(colum=3,temp1=3;colum>=0;colum--) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1--; } } for(colum=0,temp1=0;colum<4;colum++,temp1++) interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++) temp[temp1]=0; } for(line=0;line<4;line++) for(colum=3;colum>0;colum--) { if(interface[line][colum]==interface[line][colum-1]) {interface[line][colum]+=interface[line][colum-1]; mark+=interface[line][colum]; interface[line][colum-1]=0; }} for(temp1=0;temp1<4;temp1++) temp[temp1]=0; for(line=0;line<4;line++) {for(colum=3,temp1=3;colum>=0;colum--) { if(interface[line][colum]) { temp[temp1]=interface[line][colum]; temp1--; } } for(colum=0,temp1=0;colum<4;colum++,temp1++) interface[line][colum]=temp[temp1]; for(temp1=0;temp1<4;temp1++) temp[temp1]=0; } }break;
}
blank=random_number_16(&interface[0][0]);//随机给出一个数 *blank=random_number_2_4(); /*判断是不是已经挂了= =*/ for(colum=0;colum<4;colum++) for(line=3;line>0;line--) { if(((interface[line][colum]!=0&&interface[line-1][colum]==0)||(interface[line][colum]==interface[line-1][colum]))) end++; } for(colum=0;colum<4;colum++) for(line=0;line<3;line++) { if(((interface[line][colum]!=0&&interface[line+1][colum]==0)||(interface[line][colum]==interface[line+1][colum]))) end++; } for(line=0;line<4;line++) for(colum=3;colum>0;colum--) { if(((interface[line][colum]!=0&&interface[line][colum-1]==0)||(interface[line][colum]==interface[line][colum-1]))) end++; } for(line=0;line<4;line++) for(colum=0;colum<3;colum++) { if(((interface[line][colum]!=0&&interface[line][colum+1]==0)||(interface[line][colum]==interface[line][colum+1]))) end++; } if(end==0) break; end=0;//重置end
/*显示最后结果*/
}system("cls");//清屏
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(interface[i][j]==0)
printf("%ct",'=');
else
printf("%dt",interface[i][j]);
}
printf("nn");
}printf("n");printf("tMark=%lldt",mark);//显示参数 printf("nn|* 上是w,下是s,左是a,右是d *|nnn|* 阿杜亲编,欢迎扩散~ *|nn"); printf("tGame Over!T_T");
while(1);
return 0;}
/*以下为子函数*/
int random_number_2_4()//随机出2和4
{
int a,b;
srand(time(0));
a=rand()%2;
b=2*(a+1);
return b;
}int* random_number_16(int* p)//确定随机的格子,返回指针。
{
int k;
int judge[16];
int i,j;
int L;
for(k=0;k<16;k++)
{
judge[k]=NULL;//存放界面指针的函数。
}
for(i=0,j=0;i<16;i++)//存放指针
{
if((p+i)==0)
{judge[j]=p+i;
j++;}
}
srand(time(0));//确定位置
L=rand()%j;return (judge[L]);
}
解决方案
楼主代码没贴全吧,那5个include分别包含的是什么文件?
解决方案二:
2048这些游戏,难的不是代码,而是想法。看看设计思路,再看代码吧。
思路最重要,不了解的话就像是天书。
解决方案三:
或者这个怎么简化呢?能不能缩到200行左右
解决方案四:
既然你连代码都看不懂,你凭什么认为可以缩减到200行以内?
当然,C++允许你在一行内写多个语句,你完全可以删除所有的换行符,把代码堆在一起。
解决方案五:
既然你看不懂,我解释了你也不会懂,我估计你的C语言功底不行啊
解决方案六:
看不懂的话先从基础开始学c吧。都不难,if while switch int string 数组 这几个东西都懂了的话,基本这代码就能看懂了。
解决方案七:
看不懂的话先从基础开始学c吧。都不难,if while switch int string 数组 这几个东西都懂了的话,基本这代码就能看懂了。
解决方案八:
2048这些游戏,难的不是代码,而是想法。看看设计思路,再看代码吧
http://www.guokr.com/blog/748078/
这是高级版本的2048,试试吧,虐残你
解决方案九:
楼上的都说的很清楚,楼主看起来没有C语言功底,而C语言是程序的基础
就好像你想读懂一篇英文文章,而现在连单词都不认识,更别说语法,旁边的人即使懂该怎么给你解释?
所以还是建议从基础学起。从最基础的hello world代码学起,就好像学英文时从最简单的“what's your name”学起一样,
到后面再回头一看,你就会发现“哦原来这段代码挺简单的啊”
解决方案十:
呵呵.....看了下, 简单