【记录】花了几天时间用C写了第一款游戏-2048

 :huaji14: 耗时20小时完成 ,不多说,直接贴代码 :huaji12: 

2020-7-7 16.10:

1.(ver 0.3)修复了程序对UTF-8编码的支持。


2020-7.5 18.20:

1.(ver 0.2)修复了行列输出时位置写反的BUG(笑死)

2.添加了黑洞版2048(指定一个位置为黑洞,所有在黑洞的数字都会被“吃掉”)


2020-7.5 18.00:修复了向下和向右合并时左两行和上两行无法合并的BUG


2048小游戏源码: 本地下载

本代码仅做参考学习,尊守MIT共享协议

如有bug,直接在下面留言就好了 :huaji14: (虽然最后还得自己改)

使用IDE为CodeBlocks17.12+Mingw 32位

做游戏的想法来自于一个老哥的期末大作业 :cup:

游戏截图:
游戏界面:

游戏失败界面(佛系):游戏成功界面:

下面是代码结构预览:

流程图(部分参考):

//以下为所用的函数列表
/*函数列表*/
void WelcomeMenu();     //开始界面
void gotoxy(int,int);   //CMD提供的光标位移API
int color(int);         //CMD提供的文本颜色API
int InputMenuOption();  //主界面输入函数
void KeyRule();
void GameRule();
void GameBoxDrawer();   //绘制BOX框架
int Game();             //游戏主体
int PrintBoxNumber(int);//打印GameBox中的内容
int RandNum();          //随机输出2和4
int IfFail();           //判断box是否满,满则失败
void FailUI();          //绘制游戏结束图像,并清空游戏记录
void ResetGameValue();  //重置游戏记录,(分数时间步数)
int IfUp();             //判断是否能向上移动
int IfDown();           //判断是否能向下移动
int IfRight();          //判断是否能向右移动
int IfLeft();           //判断是否能向左移动
int TextColors(int row,int col);		//改变格子内数字颜色
void KeyBoardMov();
int IfWin();//其实和If2048是同一个函数。。
int If2048();
void WinUI();
/*全局变量*/
int GameWinValue=2048;//设置游戏成功需要合并的最大值(默认2048)
int step=0,score=0;
long GameTime=0;
long ClockStart_Other;//获取游戏菜单滞留时间
int Kano_Box[4][4]={
    {0,0,0,0},
    {0,0,0,0},
    {0,0,0,0},
    {0,0,0,0}
};
/*主函数*/
int main(){
    srand(time(NULL));
    int GameOption; //用于存放用户输入的游戏选项1-4
    long TryTimes=9999; //这里用一个大数来伪造死循环
    while(TryTimes--){
    GameTime=0;
    WelcomeMenu();
    GameOption=InputMenuOption();
    if(GameOption==1){
        Game();
        }
    if(GameOption==2){
        GameRule();
        }
    if(GameOption==3){
        KeyRule();
        }
    if(GameOption==4||GameOption==0)
        exit(0);
    }
}

最后提示一个可以修改游戏判定阈值的“外挂”:

在游戏主界面输入3进入按键说明,输入"kanokano.cn"回车即可

点赞
  1. 鹿先森说道:
    Google Chrome Windows 10

    厉害啦

  2. aBear说道:
    Google Chrome Windows 10

    TQL :huaji:

发表评论

电子邮件地址不会被公开。必填项已用 * 标注