| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 991 人关注过本帖
标题:自已简单思路的2048,结果运行不下去,求大佬指点思路哪里错了
只看楼主 加入收藏
姚萌萌
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:40
专家分:55
注 册:2016-12-25
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
自已简单思路的2048,结果运行不下去,求大佬指点思路哪里错了
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#define W 87
#define S 83
#define A 65
#define D 68
#define ESC 27
int a[4][4]={0};/*存储得到的数*/

int i,j;/*行列的位置*/

void menu()/*开始界面*/

{
    setbkcolor(EGERGB(0xff,0xff,0xff));
    setcolor(EGERGB(0,0,0));
    outtextxy(240,200,"制作人:萌萌");
    outtextxy(220,280,"请按任意键开始游戏");
    outtextxy(230,300,"上下左右是WSAD");
}
void gezi()/*设置格子*/

{
    int i=0,j=0;

    setcolor(EGERGB(0,0,0xff));
   for(;i<=480;i+=160)/*设置格子*/

    {
    for(;j<=360;j+=120)
    {
    rectangle(i,j,i+160,j+120);
    }
    j=0;
    }
}
void show()/*用于将颜色和数字展现出来*/

{
    int color=0,t;
    setfont(80,0,"宋体");
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            t=a[i][j];
            if(t!=0)
            {
            for(;t=1;)
            {
                t=t/2;
                color++;
            setfillcolor(EGERGB(0,0x00+color,0xff-color));
            outtextxy(i*160+80,j*120+60,"a[i][j]");
            floodfill(i*160+1,j*120+1,EGERGB(0,0,0xff));
            }
            }
        }
    }
}
void change(int flags)/*根据按键改变对应数字*/

{
    switch(flags)
    {
        case 1:/*按下W键*/

           for(i=0;i<4;i++)
           {
               j=0;
                   while(a[i][j]==0)
                   {
                while(j<3)
                   {
                       a[i][j]=a[i][j+1];
                       a[i][j+1]=0;
                       j++;
                }
                j=0;
                   }
                for(j=0;j<3;)
                {
                    int n;
                    if(a[i][j]==a[i][j+1])
                    {
                        a[i][j]+=a[i][j+1];
                        a[i][i+1]=0;
                        for(n=j+1;n<3;n++)
                        {
                            a[i][n]=a[i][n+1];
                            a[i][n+1]=0;
                        }
                        j=0;
                    }
                    else
                    j++;
                }
           }
        case 2:/*按下S键*/

            for(i=0;i<4;i++)
            {
                j=3;
                while(a[i][j]==0)
                {
                while(j>0)
                {
                    a[i][j]=a[i][j-1];
                    a[i][j-1]=0;
                    j--;
                }
                j=3;
                }
                for(j=3;j>0;)
                {
                    int n;
                    if(a[i][j]==a[i][j-1])
                    {
                        a[i][j]+=a[i][j-1];
                        a[i][j-1]=0;
                    for(n=j-1;n>0;n--)
                    {
                        a[i][n]=a[i][n-1];
                        a[i][n-1]=0;
                    }
                    j=3;
                    }
                    else
                    j--;
                }
            }

        case 3:/*按下A键*/
           for(j=0;j<4;j++)
           {
               i=0;
               while(a[i][j]==0)
               {
                   while(i<3)
                   {
                       a[i][j]=a[i+1][j];
                       a[i+1][j]=0;
                       i++;
               }
               i=0;
           }
           for(i=0;i<3;)
           {
               int n;
               if(a[i][j]==a[i+1][j])
               {
                   a[i][j]+=a[i+1][j];
                   a[i+1][j]=0;
                   for(n=i+1;n<3;n++)
                   {
                       a[n][j]=a[n+1][j];
                       a[n+1][j]=0;
               }
               i=0;
          }
          else
          i++;
           }
           }
        case 4:/*按下D键*/
           for(j=0;j<4;j++)
           {
               i=3;
               while(a[i][j]==0)
               {
                   while(i>0)
                   {
                       a[i][j]=a[i-1][j];
                       a[i-1][j]=0;
                   }
                   i=3;
               }
            for(i=3;i>0;)
            {
                int n;
                if(a[i][j]==a[i-1][j])
                {
                    a[i][j]+=a[i-1][j];
                    a[i-1][j]=0;
                    for(n=i-1;n>0;n--)
                    {
                        a[n][j]=a[n-1][j];
                        a[n-1][j]=0;
                    }
                    i=3;
                }
                else
                i--;
            }  

           }       

    }
}
int WinMain()
{
    int c=0,b=0;
    int ch;
    initgraph(640,480);
    setcaption("2048");

    setfont(20,0,"宋体");
    menu();
    ch=getch();
    cleardevice();
    while(1)
    {
        gezi();
        Sleep(100);
        srand(time(NULL));/*得到重新出现的位置*/

        c=rand()%4;
        b=rand()%4;
        while(1)
        {
            int m=0;
            if(a[b][c]==0)
            {
                a[b][c]=2;
                m++;
            }
            else
            {
                b=rand()%4;
                c=rand()%4;
            }
            if(m==2)
            break;
        }
        show();
        Sleep(100);
        for(i=0;i<4;i++)
            for(j=0;j<4;j++)
            {
                int z=0;
            if(a[i][j]==1024)
            {
                setcolor(RED);
            cleardevice();
            outtextxy(280,240,"YOU WIN!");
            getch();
            closegraph();
            return 0;
            }
            if(a[i][j]!=0)
            {
                z++;
            }
            if(z==16)
            {
                outtextxy(280,240,"YOU LOSE!");
                return 0;
            }
            }
        ch=getch();
        if(ch==27)
        break;
        else
        {
            switch(ch)
            {
                case 87:
                    change(1);
                    break;
                case 83:
                    change(2);
                    break;
                case 65:
                    change(3);
                    break;
                case 68:
                    change(4);
                    break;           

               

            }
        }
        Sleep(100);
        cleardevice();
    }
    cleardevice();
    setcolor(EGERGB(0xff,0,0));
    outtextxy(240,220,"是否退出?");
    getch();
    closegraph();
    return 0;
   

}
2017-03-17 12:47
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:10 
for(;t=1;)这个循环是想做什么?退不出来的哦。
2017-03-17 14:02
姚萌萌
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:40
专家分:55
注 册:2016-12-25
收藏
得分:0 
回复 2楼 yangfrancis
我是想通过这个改变对应数字的颜色,我在里面每次t都去了二分之一,为什么会退不出来呢?因为都是2
的倍数,不断除于二不是会达到一吗?
2017-03-17 18:22
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:10 
以下是引用姚萌萌在2017-3-17 18:22:45的发言:

我是想通过这个改变对应数字的颜色,我在里面每次t都去了二分之一,为什么会退不出来呢?因为都是2
的倍数,不断除于二不是会达到一吗?

那你的逻辑错了,是2的倍数这个循环根本不会执行。应为t!=1。
2017-03-17 18:29
姚萌萌
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:40
专家分:55
注 册:2016-12-25
收藏
得分:0 
回复 4楼 ehszt
感谢指点,我估计脑子做的有点迷糊了!
2017-03-17 18:31
姚萌萌
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:40
专家分:55
注 册:2016-12-25
收藏
得分:0 
回复 4楼 ehszt
那请问一下,我的那个填充函数有问题吗?change函数也有问题,改变不了。。。求指点
2017-03-17 18:49
快速回复:自已简单思路的2048,结果运行不下去,求大佬指点思路哪里错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056308 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved