卖萌向2048小游戏

Posted 天翎月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卖萌向2048小游戏相关的知识,希望对你有一定的参考价值。

五一前的某天 离散课上突发奇想 我是不是可以用c语言模拟各种小游戏

当时想了三个 贪吃蛇 2048 俄罗斯方块

俄罗斯方块的话..想起了ccf中的简单的模拟下落都熬了将近一个小时 更别说各种随机判断了 当场放弃..淞淞告诉我有现成的程序 几十行就可以..简直..

然后思考了一下贪吃蛇 我的思想是枚举蛇身 没错就是枚!举! 反正不怕超时...

当时认为2048应该是最简单的 毕竟只有16个空 枚举起来..很方便..(只会枚举的渣渣瑟瑟发抖)

本来打算五一假期看看 然而当时准备省赛就忘了这件事 (其实假期也没有准备省赛...)

创业培训的时候看见小牟搞了个贪吃蛇代码 各种指针递归...代码极其魔性 我是看不懂的 .. 不过F9之后很高端的样子就对了...

于是忽然想起自己也想过这种小东西 于是今天十点多早起要把认为最简单的2048搞出来

看了二十分钟愣是没有搞懂怎么把程序弄成始终是一个框的..

但是这并不能难住我 因为我精通枚举...

于是我还是弄了个每次操作后都打印一遍的版本...

不到一个小时就打出来了..果然极其简单

交给杨杨试玩 过了一会给出了两个回答

1 伤眼伤眼伤眼

2 把程序给了一个搞游戏的大神朋友看 答曰:这么智障的程序谁不会写...

喂喂...

等我学会了高端的做法一定要搞出来一个不伤眼的程序...

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
#include<queue>
#include<time.h>
using namespace std;
/// 2048游戏
/// 目标 每次读取一个命令 wasd 都进行一次滑动屏幕
/// 并没有学会systempause一类..所以..暂且每次进行命令后..都进行一次重新printf...伤眼
/// 我了解的2048游戏
/// 每次进行滑动后 所有数字朝滑动方向进行试加
/// 每次试加 如果两个数字相同 就相加
/// 每次试加后 随机生成 2
/// 如果没有位置生成 2 游戏结束
/// 游戏格式 4*4
int a[5][5];
void init() /// 初始化
{
    srand(time(0)); /// 生成随机数  x = rand();
    memset(a,0,sizeof(a));
}
void print() /// 试加后的输出
{
    for(int i=1; i<=4; i++)
    {
        for(int k=1; k<=4; k++)
        {
            if(a[i][k]!=0)
            {
                int z=a[i][k];
                int d=0;
                while(z)
                {
                    d++;
                    z/=10;
                }
                for(int j=1; j<=7-d; j++)
                    printf("_");
                printf("%d",a[i][k]);
            }
            else
            {
                for(int j=1; j<=7; j++)
                    printf("*");
            }
        }
        printf("\n");
    }
}
bool caozuo(char c)
{
    bool kexing=false;
    if(c==‘a‘)
    {
        for(int i=1; i<=4; i++)
        {
            for(int k=2; k<=4; k++)
            {
                if(a[i][k]==0)
                    continue;
                int j=k-1;
                while(j>=1&&a[i][j]==0)
                    j--;
                if(j==0)
                    continue;
                if(a[i][j]!=a[i][k])
                    continue;
                a[i][j]+=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
            for(int k=2; k<=4; k++)
            {
                if(a[i][k]==0)
                    continue;
                int j=k-1;
                while(j>=1&&a[i][j]==0)
                    j--;
                j++;
                if(j==k)
                    continue;
                a[i][j]=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
        }
    }
    else if(c==‘d‘)
    {
        for(int i=1; i<=4; i++)
        {
            for(int k=3; k>=1; k--)
            {
                if(a[i][k]==0)
                    continue;
                int j=k+1;
                while(j<=4&&a[i][j]==0)
                    j++;
                if(j==5)
                    continue;
                if(a[i][j]!=a[i][k])
                    continue;
                a[i][j]+=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
            for(int k=3; k>=1; k--)
            {
                if(a[i][k]==0)
                    continue;
                int j=k+1;
                while(j<=4&&a[i][j]==0)
                    j++;
                j--;
                if(j==k)
                    continue;
                a[i][j]=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
        }
    }
    else if(c==‘w‘)
    {
        for(int k=1; k<=4; k++)
        {
            for(int i=2; i<=4; i++)
            {
                if(a[i][k]==0)
                    continue;
                int j=i-1;
                while(j>=1&&a[j][k]==0)
                    j--;
                if(j==0)
                    continue;
                if(a[j][k]!=a[i][k])
                    continue;
                a[j][k]+=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
            for(int i=2; i<=4; i++)
            {
                if(a[i][k]==0)
                    continue;
                int j=i-1;
                while(j>=1&&a[j][k]==0)
                    j--;
                j++;
                if(j==i)
                    continue;
                a[j][k]=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
        }
    }
    else if(c==‘s‘)
    {
        for(int k=1; k<=4; k++)
        {
            for(int i=3; i>=1; i--)
            {
                if(a[i][k]==0)
                    continue;
                int j=i+1;
                while(j<=4&&a[j][k]==0)
                    j++;
                if(j==5)
                    continue;
                if(a[j][k]!=a[i][k])
                    continue;
                a[j][k]+=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
            for(int i=3; i>=1; i--)
            {
                if(a[i][k]==0)
                    continue;
                int j=i+1;
                while(j<=4&&a[j][k]==0)
                    j++;
                j--;
                if(j==i)
                    continue;
                a[j][k]=a[i][k];
                a[i][k]=0;
                kexing=true;
            }
        }
    }
    if(!kexing)
        return true;
    int have=1000;
    for(int i=1; i<=4; i++)
    {
        for(int k=1; k<=4; k++)
        {
            if(a[i][k]==0)
            {
                a[i][k]=have;
                have++;
            }
        }
    }
    if(have==1000)
        return false;
    int ok=have-1000;
    int z=rand()%ok;
    for(int i=1; i<=4; i++)
    {
        for(int k=1; k<=4; k++)
        {
            if(a[i][k]>=1000&&a[i][k]<=1015)
            {
                a[i][k]-=1000;
                if(a[i][k]==z)
                    a[i][k]=2;
                else a[i][k]=0;
            }
        }
    }
    print();
    return true;
}
int main()
{
    init();
    char command[3];
    bool jx=true;
    while(jx)
    {
        scanf("%s",command);
        jx=caozuo(command[0]);
    }
    for(int i=1; i<=5; i++)
        printf("\n");
    printf("you lose\n") ; 
}

  

以上是关于卖萌向2048小游戏的主要内容,如果未能解决你的问题,请参考以下文章

为游戏卖萌,哆啦A梦蛮拼的,这就是营销

王思聪推荐过的“丘吉尔”,正确卖萌拯救教育游戏

狗年特别篇:卖萌的狗游戏,脑洞够大不如体验够萌

Python 2048游戏实现

Java实现2048小游戏代码

python学习使用python写一个2048小游戏