c语言-2048代码解释,,小白看不懂

问题描述

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”学起一样,

到后面再回头一看,你就会发现“哦原来这段代码挺简单的啊”

解决方案十:

呵呵.....看了下, 简单

时间: 2024-10-25 20:58:22

c语言-2048代码解释,,小白看不懂的相关文章

操作系统 pv原语-操作系统里的信号量,下面的这道题是网上搜的,可是每一行代码没有解释,看不懂

问题描述 操作系统里的信号量,下面的这道题是网上搜的,可是每一行代码没有解释,看不懂 (五)有一个超市,最多可容纳N个人进入购物,当N个顾客满员时,后到的顾客在超市外等待:超市中只有一个收银员.可以把顾客和收银员看作两类进程,两类进程间存在同步关系.写出用P;V操作实现的两类进程的算法(2003年系统设计员考试的题目) 解:设信号量:S=0,C=0 (顾客与收银员的同步信号量),M=N 收银员 P(S) 收银 V(C) 顾客 P(M) 进入店内购物 V(S) P(C) V(M

vmware-VMware里Linux系统,键盘输入和终端输出不一样,度娘解释菜鸟看不懂,怎么解决?

问题描述 VMware里Linux系统,键盘输入和终端输出不一样,度娘解释菜鸟看不懂,怎么解决? 键盘输入方向键,终端输出ABCD,键盘输入e终端输出Tab 摁Fn+F8不管用 解决方案 VMware 里面安装个VmTools 解决方案二: 你装的时候是选择的美式键盘么?? 解决方案三: 进入 Vi 输入方向键变成 ABCD 解决方法 参考:http://blog.csdn.net/u011937547/article/details/43852913 解决方案四: 你的linux选择是美式键盘

c语言编程-这个c#程序看不懂??谢谢!

问题描述 这个c#程序看不懂??谢谢! 我不懂这个程序中entry类中声明一个entry next是什么意思,整个程序都不太懂.. 解决方案 有可能组成一个链表吧,反正就是要自身包含. 解决方案二: 这就是一个链栈的简单实现了.entry用于链栈的结点. 解决方案三: C语言中的链表记得吗 node->next执行下一个节点的指针. 解决方案四: C语言中的链表记得吗 node->next指向下一个节点的指针.因为C#是引用类型写法是node.next

winform一些代码看不懂

问题描述 winform一些代码看不懂 求解 解决方案 就是双击事件,先调用父类的,然后然后又调用了一个biView的click方法 解决方案二: 看不懂的代码代码太长看不懂怎么办为什么看不懂代码部分 解决方案三: 就是双击事件,先调用父类的,然后然后又调用了一个biView的click方法 解决方案四: 如果执行了datagridview的celldoubleclick事件则在执行一次datagridview的celldoubleclick事件并执行biview_click事件

指针-@C语言大神,这程序谭浩强给的答案看不懂,求解释?

问题描述 @C语言大神,这程序谭浩强给的答案看不懂,求解释? //题目:输出字符串里数字团,以及个数.比如89cy129//就输出89,129,一共2个数.// 问题:后面一大段为啥要复制粘贴前面一大段的代码?//有什么用?求解释.而且运行也不对,求修改!跪谢! include int main() { char str[80],*pstr; int m,i=0,j=0,k=0,digit=0,ndigit=0,e10,a[80],*pa; pstr=&str[0];pa=&a[0]; g

biginteger-Java中n!的代码看不懂啊,求解释

问题描述 Java中n!的代码看不懂啊,求解释 import java.math.BigInteger; import java.util.*; public class Main{ protected static ArrayList table = new ArrayList(); static { table.add(BigInteger.valueOf(1)); } public static synchronized BigInteger factorial(int x) { for

java web-这段代码看不懂啊,求解释

问题描述 这段代码看不懂啊,求解释 /s:iterator /s:iterator/sx:treenode/s:iterator </sx:treenode> </s:iterator> </sx:treenode> </s:iterator> 解决方案 <sx:tree label="%{#request.project.projectName}" id="parentId" > //项目名 <s:

算法 递归 数据结构-求解释代码,添加注释或者画图解释(在网上看到的求组合的递归算法,绕晕头了看不懂,求解释)

问题描述 求解释代码,添加注释或者画图解释(在网上看到的求组合的递归算法,绕晕头了看不懂,求解释) public class Test1 { public static void main(String[] args) { select(2); } private static void select(int k) { char[] result = new char[k]; subselect(0 1 result k); } private static void subselect(int

编程-代码中有两条语句看不懂,能解释一下吗?

问题描述 代码中有两条语句看不懂,能解释一下吗? 通过调试发现empty()函数执行了6次,而pop()和dequeue()分别执行了4次, while(!S.empty()&&S.pop()==Q.dequeue());这条语句到底等价于哪条语句, return (ptr==NULL);这条语句到底等价于哪条语句? #include<iostream> using namespace std; struct list { int data; struct list *next