C语言完成2048,辣鸡代码(#滑稽#)

今天早上两点半起床太亢奋,于是写了这个2048终端版的游戏,其实2048实现起来还是比较简单的,基本和是哪个没有太深奥的东西,有点C语言基础还是能很容易的写下来。虽然是比较简单还是被我写出了四百多行,真实太辣鸡了(#滑稽#)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
int num[4][4];
int socre;

void display();
void initialization();
void produceDigital();
void gamePlay();
int isFull();
int moveup();
int movedown();
int moveleft();
int moveright();
int isWin();
void win();
int isLost();
void lost();

int main()
{
    initialization();
    gamePlay();
    system("pause");
    return 0;
}

void initialization()
{
    system("cls");
    system("mode con  cols=100 lines=20");
    system("color 04");
    printf("\t\t###################################################################\n");
    printf("\t\t###########################游戏规则################################\n");
    printf("\t\t#################玩家可以使用W,A,S,D移动滑块#######################\n");
    printf("\t\t#################相同的滑块将会被合并,合并后#######################\n");
    printf("\t\t#################的新数字相加就是玩家所得的########################\n");
    printf("\t\t#################有效分,每一次操作都会随机产#######################\n");
    printf("\t\t#################一个2或4,如果产生2048即为获#######################\n");
    printf("\t\t#################胜,如果无法继续移动则为输.########################\n");
    printf("\t\t###################################################################\n");
    printf("\n\n\n");
    printf("\t\t\t\t\t******************\n");
    printf("\t\t\t\t\t*按任意键开始游戏*\n");
    printf("\t\t\t\t\t******************\n");
    getch();
    system("cls");
    system("mode con  cols=50 lines=20");
    int i, j;
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
            num[i][j] = 0;
    socre = 0;
    produceDigital();
    produceDigital();
    produceDigital();
    display();
}

void display()
{
    system("cls");
    int i, j;
    printf("\t#################################\n");
    printf("\t#        当前得分:%6d        #\n", socre);
    printf("\t#################################\n");
    printf("\n\n\n");
    for(i = 0; i < 4; i++)
    {
        printf("\t\t=====================\n");
        printf("\t\t║");
        for(j = 0; j < 4; j++)
        {
            if(num[i][j] == 0)
                printf("    ║");
            else
                printf("%4d║",num[i][j]);
        }
        printf("\n");
    }
    printf("\t\t=====================\n");
}

int isFull()
{
    int i, j;
    int flag = 1;
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
            if(num[i][j] == 0)
            {
                flag = 0;
                return flag;
            }
    return flag;
}

void produceDigital()
{
    if(isFull())
        return;
    srand(time(0));
    while(1)
    {
        int x,y;
        x = rand()%4;
        y = rand()%4;
        if(num[x][y] == 0)
        {
            num[x][y] = (rand()%2 + 1) * 2;
            break;
        }
    }
}

void gamePlay()
{
    char ch;
    while(1)
    {

        int flag = 0;
        ch = getch();
        switch(ch)
        {
        case 'w':
        case 'W':
            flag = moveup();
            break;
        case 's':
        case 'S':
            flag = movedown();
            break;
        case 'a':
        case 'A':
            flag = moveleft();
            break;
        case 'd':
        case 'D':
            flag = moveright();
            break;
        default:
            continue;
        }
        if(flag)
        {
            produceDigital();
            display();
        }
        if(isWin())
        {
            win();
            break;
        }
        if(isLost())
        {
            lost();
            break;
        }

    }
}

int moveup()
{
    int i, j, k, q;
    int flag = 0;

    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
            if(num[i][j] == 0)
            {
                for(k = i + 1; k < 4; k++)
                    if(num[k][j] != 0)
                    {
                        num[i][j] = num[k][j];
                        num[k][j] = 0;
                        flag = 1;
                        for(q = i + 1; q < 4; q++)
                        {
                             if(num[q][j] != 0 && num[i][j] != num[q][j])
                                break;
                             else if(num[i][j] == num[q][j])
                             {
                                 num[i][j] *= 2;
                                 socre += num[i][j];
                                 num[q][j] = 0;
                                 flag = 1;
                                 break;
                             }
                        }
                        break;
                    }
            }
            else
                for(k = i + 1; k < 4; k++)
                {
                     if(num[k][j] != 0 && num[i][j] != num[k][j])
                        break;
                     else if(num[i][j] == num[k][j])
                     {
                         num[i][j] *= 2;
                         socre += num[i][j];
                         num[k][j] = 0;
                         flag = 1;
                         break;
                     }
                }


    return flag;
}

int movedown()
{
    int i, j, k, q;
    int flag = 0;

    for(i = 3; i >= 0; i--)
        for(j = 3; j >= 0; j--)
            if(num[i][j] == 0)
            {
                for(k = i - 1; k >= 0; k--)
                    if(num[k][j] != 0)
                    {
                        num[i][j] = num[k][j];
                        num[k][j] = 0;
                        flag = 1;
                        for(q = i - 1; q >= 0; q--)
                        {
                             if(num[q][j] != 0 && num[i][j] != num[q][j])
                                break;
                             else if(num[i][j] == num[q][j])
                             {
                                 num[i][j] *= 2;
                                 socre += num[i][j];
                                 num[q][j] = 0;
                                 flag = 1;
                                 break;
                             }
                        }
                        break;
                    }
            }
            else
                for(k = i - 1; k >= 0; k--)
                {
                     if(num[k][j] != 0 && num[i][j] != num[k][j])
                        break;
                     else if(num[i][j] == num[k][j])
                     {
                         num[i][j] *= 2;
                         socre += num[i][j];
                         num[k][j] = 0;
                         flag = 1;
                         break;
                     }
                }


    return flag;
}
int moveleft()
{
    int i, j, k, q;
    int flag = 0;

    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
            if(num[i][j] == 0)
            {
                for(k = j + 1; k < 4; k++)
                    if(num[i][k] != 0)
                    {
                        num[i][j] = num[i][k];
                        num[i][k] = 0;
                        flag = 1;
                        for(q = j + 1; q < 4; q++)
                        {
                             if(num[i][q] != 0 && num[i][j] != num[i][q])
                                break;
                             else if(num[i][j] == num[i][q])
                             {
                                 num[i][j] *= 2;
                                 socre += num[i][j];
                                 num[i][q] = 0;
                                 flag = 1;
                                 break;
                             }
                        }
                        break;
                    }

            }
            else
                for(k = j + 1; k < 4; k++)
                {
                     if(num[i][k] != 0 && num[i][j] != num[i][k])
                        break;
                     else if(num[i][j] == num[i][k])
                     {
                         num[i][j] *= 2;
                         socre += num[i][j];
                         num[i][k] = 0;
                         flag = 1;
                         break;
                     }
                }


    return flag;
}

int moveright()
{
    int i, j, k, q;
    int flag = 0;

    for(i = 3; i >= 0; i--)
        for(j = 3; j >= 0; j--)
            if(num[i][j] == 0)
            {
                for(k = j - 1; k >= 0; k--)
                    if(num[i][k] != 0)
                    {
                        num[i][j] = num[i][k];
                        num[i][k] = 0;
                        flag = 1;
                        for(q = j - 1; q >= 0; q--)
                        {
                             if(num[i][q] != 0 && num[i][j] != num[i][q])
                                break;
                             else if(num[i][j] == num[i][q])
                             {
                                 num[i][j] *= 2;
                                 socre += num[i][j];
                                 num[i][q] = 0;
                                 flag = 1;
                                 break;
                             }
                        }
                        break;
                    }

            }
            else
                for(k = j - 1; k >= 0; k--)
                {
                     if(num[i][k] != 0 && num[i][j] != num[i][k])
                        break;
                     else if(num[i][j] == num[i][k])
                     {
                         num[i][j] *= 2;
                         socre += num[i][j];
                         num[i][k] = 0;
                         flag = 1;
                         break;
                     }
                }


    return flag;
}

int isWin()
{
    int i, j;
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
            if(num[i][j] == 2048)
                return 1;

    return 0;
}

void win()
{
    system("cls");
    system("mode con  cols=100 lines=20");
	printf("\n\n");
	printf("\t\t   ##      #      ##    ##    ##      ## \n");
	printf("\t\t   ##     # #     ##          ####    ##\n");
	printf("\t\t    ##   ## ##   ##     ##    ## ##   ##\n");
	printf("\t\t    ##   ## ##   ##     ##    ##  ##  ##\n");
	printf("\t\t     ## ##   ## ##      ##    ##   ## ##\n");
	printf("\t\t      # #     # #       ##    ##    ####\n");
	printf("\t\t       #       #        ##    ##      ##\n");
	printf("\n\n");
	printf("\t\t\t#################################\n");
    printf("\t\t\t#          得分:%6d          #\n", socre);
    printf("\t\t\t#################################\n");
}

int isLost()
{
    if(isFull())
    {
        int i, j;
        for(i = 0; i < 3; i++)
            for(j = 0; j < 3; j++)
                if(num[i][j] == num[i+1][j] || num[i][j] == num[i][j+1])
                    return 0;
        return 1;
    }

    return 0;
}

void lost()
{
    system("cls");
    system("mode con  cols=100 lines=20");
	printf("\n\n");
	printf("\t\t##             #####          #########     ##############\n");
	printf("\t\t##           ##     ##        ##            ##############\n");
	printf("\t\t##          ##       ##       ##                  ##      \n");
	printf("\t\t##         ##         ##      ##                  ##      \n");
	printf("\t\t##        ##           ##     #########           ##      \n");
	printf("\t\t##         ##         ##             ##           ##      \n");
	printf("\t\t##          ##       ##              ##           ##      \n");
	printf("\t\t#######      ##     ##               ##           ##      \n");
	printf("\t\t#######        #####          #########           ##      \n");
	printf("\n\n");
	printf("\t\t\t#################################\n");
    printf("\t\t\t#          得分:%6d          #\n", socre);
    printf("\t\t\t#################################\n");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值