怎么用C语言做简易小游戏(2048开发)

2025-12-01 01:54:42

1、2048程序

2、//声明

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<conio.h>

#include<windows.h>

#define SIZE 4

static int score=0;

void putn(int n[][SIZE]);

void getn(int n[][SIZE]);

int isempty(int n[][SIZE]);

int isfull(int n[][SIZE]);

void math(int n[][SIZE],char c);

void tow(int n[][SIZE]);

void toa(int n[][SIZE]);

void tos(int n[][SIZE]);

void tod(int n[][SIZE]);

3、//主函数

int main()

{

    int i,j;

    int n[SIZE][SIZE];

    char c=' ';

    for(i=0;i<SIZE;i++)

    {

        for(j=0;j<SIZE;j++)

        {

            n[i][j]=0;

        }

    }

    printf( "***********************\n"

            "      2048(%dX%d)      \n"

            "   control:W/A/S/D    \n"

            "press any key to begin \n"

            "***********************\n",SIZE,SIZE);

            getch();

            system("cls");

            //n[0][1]=2048;

            //n[0][3]=2048;

    while(1)

    {

    if(isempty(n))

    getn(n);

    putn(n);

    if(!isempty(n)&&isfull(n))

    break;

    sleep(200);

    c=getch();

    while(c!='w'&&c!='a'&&c!='s'&&c!='d')

    c=getch();

    math(n,c);

    system("cls");

    }

    printf("      Game Over!\n",score);

    return 0;

}

4、//函数

void putn(int n[][SIZE])

{

    int i,j;

    for(i=0;i<SIZE;i++)

    {

        for(j=0;j<SIZE;j++)

            printf("|     ");

        printf("|\n");

        for(j=0;j<SIZE;j++)

        {

            if(n[i][j]==0)

            printf("|     ");

            else

            printf("|%4d ",n[i][j]);

        }

        printf("|\n");

        for(j=0;j<SIZE;j++)

            printf("|_____");

        printf("|\n");

    }

    printf("score: %d",score);

}

void getn(int n[][SIZE])

{

    int a,b;

    a=rand()%SIZE;

    b=rand()%SIZE;

    while(n[a][b]!=0)

    {

        a=rand()%SIZE;

        b=rand()%SIZE;

    }

    n[a][b]=2;

}

int isempty(int n[][SIZE])

{

    int i,j,count=0;

    for(i=0;i<SIZE;i++)

    for(j=0;j<SIZE;j++)

    if(n[i][j]==0)

    count++;

    return count;

}

int isfull(int n[][SIZE])

{

    int i,j,count=0;

    for(i=0;i<SIZE;i++)

    {

    for(j=1;j<SIZE-1;j++)

    {

        if(n[i][j]==n[i][j+1]||n[i][j]==n[i][j-1])

        count++;

    }

    }

    for(j=0;j<SIZE;j++)

    {

    for(i=1;i<SIZE-1;i++)

    {

        if(n[i][j]==n[i+1][j]||n[i][j]==n[i-1][j])

        count++;

    }

    }

    return count>0?0:1;

}

void math(int n[][SIZE],char c)

{

    switch(c)

    {

        case 'w':tow(n);break;

        case 'a':toa(n);break;

        case 's':tos(n);break;

        case 'd':tod(n);break;

        default :;

    }

}

void tow(int n[][SIZE])

{

   int i,j,a;

    int m[SIZE];

    for(a=0;a<SIZE;a++)

    m[a]=0;

for(j=0;j<SIZE;j++)

{

    for(a=0;a<SIZE;a++)

    {

        for(i=0;i<SIZE-1;i++)

        {

            if(n[i][j]==0)

            {

            n[i][j]=n[i+1][j];

            n[i+1][j]=0;

            }

        }

    }

}

for(j=0;j<SIZE;j++)

{

    for(a=0,i=0;i<SIZE;i++)

    {

        if(n[i][j]!=n[i+1][j]&&n[i][j]!=0||n[i][j]==2048)

        {

            m[a++]=n[i][j];

            n[i][j]=0;

        }

        else if(n[i][j]==n[i+1][j])

        {

            m[a++]=n[i][j]+n[i+1][j];

            score+=m[a-1];

            n[i][j]=0,n[i+1][j]=0;

        }

    }

    for(i=0;i<SIZE;i++)

    {

        n[i][j]=m[i];

        m[i]=0;

    }

}

}

void toa(int n[][SIZE])

{

    int i,j,a;

    int m[SIZE];

    for(a=0;a<SIZE;a++)

    m[a]=0;

for(i=0;i<SIZE;i++)

{

    for(a=0;a<SIZE;a++)

    {

        for(j=0;j<SIZE-1;j++)

        {

            if(n[i][j]==0)

            {

            n[i][j]=n[i][j+1];

            n[i][j+1]=0;

            }

        }

    }

}

for(i=0;i<SIZE;i++)

{

    for(a=0,j=0;j<SIZE;j++)

    {

        if(n[i][j]!=n[i][j+1]&&n[i][j]!=0||n[i][j]==2048)

        {

            m[a++]=n[i][j];

            n[i][j]=0;

        }

        else if(n[i][j]==n[i][j+1])

        {

            m[a++]=n[i][j]+n[i][j+1];

            score+=m[a-1];

            n[i][j]=0,n[i][j+1]=0;

        }

    }

    for(j=0;j<SIZE;j++)

    {

        n[i][j]=m[j];

        m[j]=0;

    }

}

}

void tos(int n[][SIZE])

{

    int i,j,a;

    int m[SIZE];

    for(a=0;a<SIZE;a++)

    m[a]=0;

for(j=SIZE-1;j>=0;j--)

{

    for(a=SIZE-1;a>=0;a--)

    {

        for(i=SIZE-1;i>0;i--)

        {

            if(n[i][j]==0)

            {

            n[i][j]=n[i-1][j];

            n[i-1][j]=0;

            }

        }

    }

}

for(j=SIZE-1;j>=0;j--)

{

    for(a=SIZE-1,i=SIZE-1;i>=0;i--)

    {

        if(n[i][j]!=n[i-1][j]&&n[i][j]!=0||n[i][j]==2048)

        {

            m[a--]=n[i][j];

            n[i][j]=0;

        }

        else if(n[i][j]==n[i-1][j])

        {

            m[a--]=n[i][j]+n[i-1][j];

            score+=m[a+1];

            n[i][j]=0,n[i-1][j]=0;

        }

    }

    for(i=SIZE-1;i>=0;i--)

    {

        n[i][j]=m[i];

        m[i]=0;

    }

}

}

void tod(int n[][SIZE])

{

    int i,j,a;

    int m[SIZE];

    for(a=0;a<SIZE;a++)

    m[a]=0;

for(i=SIZE-1;i>=0;i--)

{

    for(a=SIZE-1;a>=0;a--)

    {

        for(j=SIZE-1;j>0;j--)

        {

            if(n[i][j]==0)

            {

            n[i][j]=n[i][j-1];

            n[i][j-1]=0;

            }

        }

    }

}

for(i=SIZE-1;i>=0;i--)

{

    for(a=SIZE-1,j=SIZE-1;j>=0;j--)

    {

        if(n[i][j]!=n[i][j-1]&&n[i][j]!=0||n[i][j]==2048)

        {

            m[a--]=n[i][j];

            n[i][j]=0;

        }

        else if(n[i][j]==n[i][j-1])

        {

            m[a--]=n[i][j]+n[i][j-1];

            score+=m[a+1];

            n[i][j]=0,n[i][j-1]=0;

        }

    }

    for(j=SIZE-1;j>=0;j--)

    {

        n[i][j]=m[j];

        m[j]=0;

    }

}

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢