耗时20小时完成 ,不多说,直接贴代码
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,直接在下面留言就好了 (虽然最后还得自己改)
使用IDE为CodeBlocks17.12+Mingw 32位
做游戏的想法来自于一个老哥的期末大作业
游戏截图:
游戏界面:
游戏失败界面(佛系):游戏成功界面:
下面是代码结构预览:
流程图(部分参考):
//以下为所用的函数列表
/*函数列表*/
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"回车即可
厉害啦
TQL
可以可以很强