卖萌向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") ;
}

  

时间: 2024-08-11 09:46:03

卖萌向2048小游戏的相关文章

C# 开发2048小游戏

这应该是几个月前,闲的手痒,敲了一上午代码搞出来的,随之就把它丢弃了,当时让别人玩过,提过几条更改建议,但是时至今日,我也没有进行过优化和更改(本人只会作案,不会收场,嘎嘎),下面的建议要给代码爱好的童鞋完成了. 更改建议: a.当数字超过四位数时,显示的时候有部分被它的容器TextBox遮挡了,能不能把显示的数值变小点?答案是可以的.代码里有一段通过矩阵数据填充TextBox值的操作,可以在填充时,判断下数值长度,然后修改TextBox的文字大小. b.玩游戏的时候,使用方向键移动时,焦点可能

2048小游戏(C语言版)

1 #include <climits> 2 #include <cstdio> 3 #include <cstring> 4 #include <stack> 5 #include <string> 6 #include <map> 7 #include <vector> 8 #include <cmath> 9 10 11 /* 12 玩法说明:编译运行后,输入一个整数n,表示自己想玩的游戏中是n*n的表格

canvas随笔之2048小游戏

HTML: <!DOCTYPE HTML> <html> <head> <title>2048小游戏</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, u

如何在CentOS上安装一个2048小游戏

如何在centos上安装一个2048小游戏 最近在学习CentOS系统,就琢磨着玩点什么,然后我看到有人在玩2048小游戏,所有我就在想,为啥不装一个2048小游戏搞一下嘞,于是乎,我就开始工作啦 由于我个人的编程能力不强,所以我就在网上找到了一个C语言版的2048游戏小程序,我把它放到我的百度网盘上,可以供大家下载(链接:http://pan.baidu.com/s/1jIutb3g 密码:mu9z),然后我们把这个程序给复制到CentOS系统下,在进行下一步的工作.我们可以在CentOS上安

Swift实战之2048小游戏

上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完善,就这么整理一下过程中一些值得记录的点吧. 用的Swift版本是2.0,原书中的Swift版本会低一些,所以实践起来有些地方语法并不一样. 一.开始页面   在程序的第一张页面(Main.storyboard)上,只放了一个“开始游戏”按钮,点击按钮,弹出一个提示对话框,确认后,进入游戏页面. 1

2048小游戏-JS实现(BUG调试中)

刚刚学习JS的菜鸟,游戏没有实现滑动效果.希望有前辈能指点一下······ 定义的主要方法: 1.fuzhi()生成一对随机数,然后根据这对随机数取得一个随机单元格,先判断其是否为空,不为空,对其进行赋值为2的操作:为空,则再次调用fuzhi(). 2.secai()遍历表格,根据单元格的数值改变单元格的背景颜色. 3.score()遍历单元格,计算实时总得分. 4.keyDown()主要方法,根据用户按上下左右键来进行不同的数值相加.消除动作.这一段代码写得很冗余····· 1 <!DOCTY

2048小游戏用例图

用例图主要用来描述"用户.需求.系统功能单元"之间的关系.它展示了一个外部用户能够观察到的系统功能模型图. 下面是我们2048小游戏的用例图:

2048小游戏(变态版哦)

近日,由于博主同学暑假有个作业是写个2048小游戏,我一听挺好玩的..然后就开始了.. 首先,2048在移动过程中的规则其实也没有特别难,但是感觉也不是一句话就能说完的.(不过玩的多--感觉总是有的) 废话不多说,其实博主同学提供了pdf描述了2048的算法. 各位筒子入坑前请先过几眼这个规则,以及其算法(当然我觉得算法第二点有点问题,后述) 那么在游戏的编写前,可以先对细枝末节做一些准备. 1.出现数字2/4的概率 int getRand() { int i = rand() % 10; if

用控制台写类窗体2048小游戏

原文地址:用控制台写类窗体2048小游戏作者:余文 2048是一个很简单的小游戏,这是我自己实现的一个版本. 这个版本有两个特色 这是一个高仿窗体程序的控制台程序. 通过使用指针将四个方向的移动简化成了一个方向的移动. 当初刚出来2048小游戏的时候,玩的不亦乐乎.之后根据游戏规则自己花了一下午时间用控制台写了一个玩,没有参考源码. 当时只实现了游戏的移动逻辑和胜负判定逻辑,界面很简单,但已经可以玩玩了. 这是当初刚写完发空间说说得瑟的时候. 今年5月有段时候比较闲,对程序做了较大更新. 实时显