游戏源码2048

此为游戏代码,并无界面


/*2048*/

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>


int code[4][4]={0,0,0,0,
                0,0,0,0,
                0,0,0,0,
                0,0,0,0};/*游戏中的16个格子*/
int temp[5];/*中间变量*/
int move=0;/*移动次数*/
int score=0;/*分数*/


void print(void)/*显示游戏界面*/
{
    int i,j;


    clrscr();/*清屏*/
    printf("2048\n");
    printf("W--UP  A--LEFT  S--DOWN  D--RIGHT  0--EXIT\n");
    printf("Score:%d Move:%d\n",score,move);
    printf("Made by Yanjisheng\n");
    printf("|-------------------|\n");/*显示横向分隔线*/
    for(i=0;i<=3;i++)
    {
        for(j=0;j<=3;j++)
        {
            if(code[i][j]==0)
            {
                printf("|    ");/*0显示空格*/
            }
            else
            {
                printf("|%4d",code[i][j]);/*显示数字和分隔线*/
            }
        }
        printf("|\n|-------------------|\n");/*显示横向分隔线*/
    }
}


int add(void)/*对中间变量数组进行处理*/
{
    int i;
    int t=0;
    int change=0;/*判断数组是否有改变,0不变,1变化*/


    do
    {
        for(i=0;i<=3;i++)
        {
            if(temp[i]==0)
            {
                if(temp[i]!=temp[i+1])
                    change=1;/*当一个0后面不是0时数组改变*/
                temp[i]=temp[i+1];
                temp[i+1]=0;
            }
        }/*去掉中间的0*/
        t++;
    }while(t<=3);/*重复多次*/
    for(i=1;i<=3;i++)
    {
        if(temp[i]==temp[i-1])
        {


            if(temp[i]!=0)
            {
                change=1;/*当两个非零相同的数相加时数组改变*/
                score=score+temp[i];/*加分*/
            }
            temp[i-1]=temp[i-1]*2;
            temp[i]=0;
        }
    }/*把两个相邻的相同的数加起来*/
    do
    {
        for(i=0;i<=3;i++)
        {
            if(temp[i]==0)
            {
                temp[i]=temp[i+1];
                temp[i+1]=0;
            }
        }/*去掉中间的0*/
        t++;
    }while(t<=3);/*重复多次*/
    return change;
}


int main(void)
{
    int gameover=0;/*判断游戏是否结束,1结束,0继续*/
    int i,j;
    int change=1;/*判断格子中的数是否改变,0不变*/
    char input;


    srand((unsigned)time(NULL));/*设置随机数的起点*/
    while(gameover==0)
    {
        if(change>=1)/*仅当数发生改变时添加新数*/
        {
            do
            {
                i=((unsigned)rand())%4;
                j=((unsigned)rand())%4;
            }while(code[i][j]!=0);
            if(((unsigned)rand())%4==0)
            {
                code[i][j]=4;
            }
            else
            {
                code[i][j]=2;/*随机选一个空格填上2或4*/
            }
            move++;/*增加次数*/
        }
        print();/*显示*/
        input=getch();/*输入方向*/


        change=0;
        switch(input)
        {
            case '0':/*退出*/
                printf("Are you sure to exit?(y/n)");
                input=getchar();
                if(input=='y'||input=='Y')
                    exit(0);
                break;


            case 'W':
            case 'w':/*上*/
                for(j=0;j<=3;j++)
                {
                    for(i=0;i<=3;i++)
                    {
                        temp[i]=code[i][j];/*把一列数移到中间变量*/
                    }
                    temp[4]=0;
                    change=change+add();
                    for(i=0;i<=3;i++)
                    {
                        code[i][j]=temp[i];/*把处理好的中间变量移回来*/
                    }
                }
                break;


            case 'A':
            case 'a':/*左*/
                for(i=0;i<=3;i++)
                {
                    for(j=0;j<=3;j++)
                    {
                        temp[j]=code[i][j];/*把一行数移到中间变量*/
                    }
                    temp[4]=0;
                    change=change+add();
                    for(j=0;j<=3;j++)
                    {
                        code[i][j]=temp[j];/*把处理好的中间变量移回来*/
                    }
                }


                break;


            case 'S':
            case 's':/*下*/
                for(j=0;j<=3;j++)
                {
                    for(i=0;i<=3;i++)
                    {
                        temp[i]=code[3-i][j];/*把一列数移到中间变量*/
                    }
                    temp[4]=0;
                    change=change+add();
                    for(i=0;i<=3;i++)
                    {
                        code[3-i][j]=temp[i];/*把处理好的中间变量移回来*/
                    }
                }
                break;


            case 'D':
            case 'd':/*右*/
                for(i=0;i<=3;i++)
                {
                    for(j=0;j<=3;j++)
                    {
                        temp[j]=code[i][3-j];/*把一行数移到中间变量*/
                    }
                    temp[4]=0;
                    change=change+add();
                    for(j=0;j<=3;j++)
                    {
                        code[i][3-j]=temp[j];/*把处理好的中间变量移回来*/
                    }
                }
                break;
        }
        gameover=1;
        for(i=0;i<=3;i++)
            for(j=0;j<=3;j++)
                if(code[i][j]==0)
                    gameover=0;/*所有格子都填满则游戏结束*/


    }
    printf("Game over!\n");
    getch();
    return 0;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值