💖游戏简介
这是一款基于C++开发的2048游戏,集成了成就系统、插件扩展、游戏记录、倍速调节等功能,支持Windows控制台运行。代码结构清晰,包含完整的游戏逻辑、界面渲染和扩展接口,适合学习或二次开发。
⭐核心功能特性
1. 🌟玩法介绍
- 基础规则:通过
WASD键控制方块移动,相同数字合并得分,生成2或4。 - 界面优化:使用控制台字符绘制动态棋盘,支持数字格式化显示
- 倍速调节:按
X键可设置移动速度倍率,支持极速模式。 - 环境支持:windows7可正常运行
2. 🌟成就系统
| 成就名称 | 解锁条件 |
|---|---|
| 初出茅庐 | 完成第一次移动 |
| 如日中升 | 合成数字512 |
| 终极目标 | 合成数字2048 |
| 闪电战 | 50回合内结束游戏 |
| 幸运星 | 连续生成3次数字4 |
| 持久战 | 游戏持续300回合以上 |
| 超越极限 | 合成数字4096 |
| 改代码的狗 | 修改代码中的地图大小常量 |
3. 🌟插件扩展支持
- 移动辅助插件:通过
移动插件.txt实现自动托管,支持自定义移动策略。 - 输入辅助插件:通过
输入插件.txt模拟按键输入,适合自动化测试或特殊玩法。 - 接口说明:插件通过文本文件与主程序交互,格式简单易扩展。
4. 🌟游戏记录与存档
- 自动保存最近20局游戏记录,包含得分、棋盘状态和成就进度。
- 记录加密存储,支持错误校验。
5. 🌟技术细节
- 开发环境:C++,依赖
Windows.h(控制台控制)、conio.h(按键读取)、fstream(文件操作)。 - 可配置项:地图大小(
ab常量,默认4x4)、成就提示时长(time_au)、随机数种子(基于系统时间)。 - 性能优化:使用
Sleep()控制动画帧率,动态计算棋盘状态避免冗余渲染。
⭐代码结构说明
核心模块划分- 界面层:home()主菜单、out()棋盘渲染、day()更新日志
- 逻辑层:game()游戏主循环、over()结束判断、unl()成就解锁检测
- 工具层:de()插件状态读取、last_out()记录存档、ass_co()插件初始化
- 扩展接口:插件通信(in_i()输入代理、ma()地图数据导出)
⭐快速开始
1. 🌟编译运行
- 直接编译运行即可。
- 首次运行会自动生成配置文件。
2. 🌟操作指南
- 主菜单:
1开始游戏,2查看记录,3操作说明
4成就列表,5插件管理,6更新日志。 - 游戏中:
WASD移动,X调倍速,E结束游戏。
3. 🌟二次开发建议
- 修改
ab常量调整地图大小。 - 扩展插件协议,实现更复杂的自动化策略。
- 添加新成就或调整解锁条件。
👉注意事项
记录文件采用简单加密,直接修改可能导致数据损坏,建议通过游戏内菜单管理。
📖开发者信息
- 作者:qihangxing
- 版本:v2.0.0(2025.04.07)
- 开源协议:MIT(允许自由修改和商用,但需保留原作者声明)
⭐主体代码
点击查看代码
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<fstream>
#include<string>
/*成就: 1.初出茅庐: 完成第一次移动2.如日中升: 合成数字5123.终极目标: 合成数字20484.闪电战: 游戏在50回合内结束 5.幸运星: 连续生成3次数字4 6.持久战: 游戏持续300回合以上 7.超越极限: 合成数字40968.改代码的狗:更改代码数据
*/
using namespace std;
const int ab=4,m=8;
double s,s_;
bool flag_ach[m+1],ove,ma_flag=0,in_flag=0,game_f=1;
char in;
long long mp[ab+1][ab+1],last[ab+1][ab+1][25];
int last_f[25],f,num4=0,H,time_start,flag_au=0,time_au=3;
char in_i(){if(in_flag==1){bool flag_in;string str;char in_i;ifstream inFile("输入插件.txt");inFile>>in_flag>>str>>in_i>>flag_in;if(str=="main"&&flag_in){ofstream outfile("输入插件.txt");outfile<<in_flag<<" "<<"main "<<in_i<<" 0";outfile.close();return in_i;}elsereturn ' ';inFile.close();}else{return getch();}
}
void home(){cout<<"欢迎来到2048 v.2.0.0\n\n\n";cout<<"1.开始游戏 2.检索记录 3.使用需知\n\n";cout<<"4.成就列表 5.插件管理 6.更新日志\n\n";do in=in_i(); while(in==' ');
}
void de_1(){ifstream inFile("移动插件.txt");if(inFile.good()){inFile>>ma_flag;}inFile.close();
}
void de_2(){ifstream inFile("输入插件.txt");if(inFile.good()){inFile>>in_flag;}inFile.close();
}
void de(){de_1();de_2();
}
void ass(){ifstream inFile("记录.txt");if(!inFile.good()){ofstream outfile("记录.txt");outfile<<"0\n";for(int i=1;i<=m;i++){outfile<<"0 ";}outfile.close();}inFile.close();for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){mp[i][j]=0;}}system("title 2048 v.2.0.0");srand(time(0));
}
void ass_co1(){ifstream inFile("移动插件.txt");if(inFile.good()){ofstream outfile("移动插件.txt");outfile<<"0\n";outfile.close();}inFile.close();
}
void ass_co2(){ifstream inFile("输入插件.txt");if(inFile.good()){ofstream outfile("输入插件.txt");outfile<<"0\n";outfile.close();}inFile.close();
}
void ass_co(){ass_co1();ass_co2();
}
void ma(){if(ma_flag){ofstream outfile("地图.txt");outfile<<ove<<"\n";for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){outfile<<mp[i][j]<<" ";}outfile<<"\n";}outfile.close();}
}
void out(){system("cls");cout<<f<<"\t*"<<s_<<"\t第"<<H<<"回合\n\n";if(time(0)<time_start+time_au){if(flag_au==1) cout<<"解锁成就:初出茅庐"; if(flag_au==2) cout<<"解锁成就:如日中升"; if(flag_au==3) cout<<"解锁成就:终极目标"; if(flag_au==5) cout<<"解锁成就:幸运星"; if(flag_au==6) cout<<"解锁成就:持久战"; if(flag_au==7) cout<<"解锁成就:超越极限"; if(flag_au==8) cout<<"解锁成就:改代码的狗"; }else{time_start=0;}cout<<"\n\n";for(int i=1;i<=8*(ab+1)+3;i++){cout<<"_";}for(int i=1;i<=ab;i++){cout<<"\n│\t";for(int j=1;j<=ab;j++){if(mp[i][j]==0){cout<<" ";}else if(mp[i][j]<10000){cout<<mp[i][j];}else if(mp[i][j]<1000000){cout<<mp[i][j]/1000<<"K";}else{cout<<mp[i][j]/1000000<<"B";}cout<<"\t ";}cout<<"│\n";}for(int i=1;i<=8*(ab+1)+3;i++){cout<<"_";}cout<<"\n";
}
bool over(){bool flag=0;for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(mp[i][j]==0){flag=1;break;}else if(i>1&&mp[i-1][j]==mp[i][j]){flag=1;break;}else if(j>1&&mp[i][j-1]==mp[i][j]){flag=1;break;}else if(i<ab&&mp[i+1][j]==mp[i][j]){flag=1;break;}else if(j<ab&&mp[i][j+1]==mp[i][j]){flag=1;break;}}}return flag;
}
void last_in(){system("cls");int n;ifstream inFile("记录.txt");if(!inFile.good()){ofstream outfile("记录.txt");outfile<<"0\n";for(int i=1;i<=m;i++){outfile<<"0 ";}outfile.close();}inFile>>n;for(int i=1;i<=n;i++){inFile>>last_f[i];if(last_f[i]%3||(last_f[i]/3-2)%2){cout<<"记录读取错误\n\n";return ;}last_f[i]=(last_f[i]/3-2)/2; for(int a=1;a<=ab;a++){for(int b=1;b<=ab;b++){inFile>>last[a][b][i];if(last[a][b][i]%3||(last[a][b][i]/3-2)%2){cout<<"记录读取错误\n\n";return ;}last[a][b][i]=(last[a][b][i]/3-2)/2;}}}for(int i=1;i<=m;i++){inFile>>flag_ach[i];}inFile.close();
}
void last_in_out(){int n;ifstream inFile("记录.txt");inFile>>n;inFile.close();if(n==0){cout<<"当前暂无记录,快开始游戏吧\n\n";}else{cout<<"检索到"<<n<<"个记录\n\n\n";}for(int i=1;i<=n;i++){if(i!=1){cout<<"\n\n\n";}cout<<i<<".";cout<<"共计"<<last_f[i]<<"分\n\n地图如下\n";for(int a=1;a<=ab;a++){for(int b=1;b<=ab;b++){if(last[a][b][i]<10000){cout<<last[a][b][i];}else if(last[a][b][i]<1000000){cout<<last[a][b][i]/1000<<"K";}else{cout<<last[a][b][i]/1000000<<"B"; }cout<<"\t";}cout<<"\n";}}cout<<"\n\n按任意键返回主界面\n\n";while(in_i()==' ') continue;
}
void last_out(bool fla){int n;ifstream inFile("记录.txt");if(!inFile.good()){ofstream outfile("记录.txt");outfile<<"0\n";for(int i=1;i<=m;i++){outfile<<"0 ";}outfile.close();}inFile>>n;for(int i=1;i<=n;i++){inFile>>last_f[i];if(last_f[i]%3||(last_f[i]/3-2)%2){cout<<"记录读取错误\n\n";return ;}last_f[i]=(last_f[i]/3-2)/2; for(int a=1;a<=ab;a++){for(int b=1;b<=ab;b++){inFile>>last[a][b][i];if(last[a][b][i]%3||(last[a][b][i]/3-2)%2){cout<<"记录读取错误\n\n";return ;}last[a][b][i]=(last[a][b][i]/3-2)/2; //x=(x*2+2)*3}}}ofstream outFile("记录.txt");if(fla){outFile<<min(20,n+1)<<"\n\n";outFile<<(f*2+2)*3<<"\n";for(int a=1;a<=ab;a++){for(int b=1;b<=ab;b++){outFile<<(mp[a][b]*2+2)*3<<" ";}outFile<<"\n";}outFile<<"\n";}else{outFile<<n<<"\n\n";}for(int i=1;i<=n&&i<=20;i++){outFile<<(last_f[i]*2+2)*3<<"\n";for(int a=1;a<=ab;a++){for(int b=1;b<=ab;b++){outFile<<(last[a][b][i]*2+2)*3<<" ";}outFile<<"\n";}outFile<<"\n";}outFile<<"\n";for(int i=1;i<=m;i++){outFile<<flag_ach[i]<<" ";}outFile<<"\n";outFile.close();
}
void ach(){start:last_in();bool flag=0;system("cls");cout<<"成就\n\n\n";for(int i=1;i<=m;i++){if(flag_ach[i]==1){if(i==1) cout<<"1.初出茅庐: 完成第一次移动\n\n"; if(i==2) cout<<"2.如日中升: 合成数字512\n\n"; if(i==3) cout<<"3.终极目标: 合成数字2048\n\n"; if(i==4) cout<<"4.闪电战: 游戏在50回合内结束\n\n"; if(i==5) cout<<"5.幸运星: 连续生成3次数字4\n\n"; if(i==6) cout<<"6.持久战: 游戏持续300回合以上\n\n"; if(i==7) cout<<"7.超越极限: 合成数字4096\n\n";if(i==8) cout<<"8.改代码的狗:更改代码数据\n\n";flag=1; }}if(flag==0){cout<<"暂未解锁成就,快去游戏吧\n\n";}cout<<"\n解锁成就提示 ";if(time_au>0) cout<<"yes";else cout<<"no ";cout<<" (按x更改)\n";cout<<"\n\n按其他键返回主界面\n\n";last_out(0);if(in_flag==1){char x;do x=in_i(); while(x==' ');if(x=='x'){if(time_au>0) time_au=-1;else time_au=3;goto start;} }elsewhile(in_i()==' ') continue;
}
void unl(){bool fl=0;for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(mp[i][j]>=512&&flag_ach[2]==0){flag_ach[2]=1;flag_au=2;fl=1;}if(mp[i][j]>=2048&&flag_ach[3]==0){flag_ach[3]=1;flag_au=3;fl=1;}if(mp[i][j]>=4096&&flag_ach[7]==0){flag_ach[7]=1;flag_au=7;fl=1;}}}if(num4>=3&&flag_ach[5]==0){flag_ach[5]=1;flag_au=5;fl=1;}if(H<=50&&ove==0&&flag_ach[4]==0){flag_ach[4]=1;}if(H>=300&&ove==1&&flag_ach[6]==0){flag_ach[6]=1;flag_au=6;fl=1;}if(ab!=4&&flag_ach[8]==0){flag_ach[8]=1;flag_au=8;fl=1;} if(fl==1){time_start=time(0);}
}
void day(){system("cls");cout<<"qihangxing制作\n\n\n"; cout<<"2025.3.08 v.1.0.0 完成基本的移动和合成\n\n";cout<<"2025.3.10 v.1.1.0 美化界面,并优化效率\n\n";cout<<"2025.3.11 v.1.2.0 添加倍速,主界面及日志\n\n";cout<<"2025.3.11 v.1.2.5 添加结束,修复已知BUG\n\n";cout<<"2025.3.12 v.1.4.0 添加记录,修复已知BUG\n\n";cout<<"2025.3.13 v.1.4.5 添加操作需知\n\n";cout<<"2025.3.13 v.1.5.0 优化记录功能\n\n";cout<<"2025.3.16 v.1.5.5 更改部分名称,修复已知BUG\n\n";cout<<"2025.3.16 v.1.6.0 添加成就功能\n\n";cout<<"2025.3.17 v.1.6.5 添加成就提示,优化游戏机制\n\n";cout<<"2025.3.20 v.1.7.0 适配 [2048 移动辅助插件] \n\n";cout<<"2025.3.20 v.1.7.5 替换 [建议收集] 为 [插件管理] \n\n";cout<<"2025.3.21 v.1.8.0 修复已知BUG\n\n";cout<<"2025.3.29 v.1.8.5 适配 [2048 输入辅助插件] \n\n";cout<<"2025.3.30 v.1.9.0 美化界面,优化游戏机制\n\n";cout<<"2025.3.31 v.1.9.5 添加3个成就和成就存档功能\n\n";cout<<"2025.4.07 v.2.0.0 修复已知BUG,调整操作需知\n\n";cout<<"\n\n按任意键返回主界面\n\n";while(in_i()==' ') continue;
}
void help(){system("cls");cout<<"操作需知:\n\n";cout<<"1.按 w,a,s,d 移动\n\n";cout<<"2.按 x 调整倍速\n\n";cout<<"3.按 e 结束游戏\n\n";cout<<"\n功能注意:\n\n";cout<<"1.存档的地图大小不同会导致读取错误哦!\n\n";cout<<"2.移动插件按 [ e ] 退出才会退出托管\n\n";cout<<"\n\n按任意键返回主界面\n\n";while(in_i()==' ') continue;
}
void game(){H=0;ove=1;f=0;s=1;s_=1;num4=0;unl();while(1){ma();de();char x; int i=1;if(x!='e'&&x!='x'){while(i<=ab*ab){int a=rand()%ab+1,b=rand()%ab+1;if(mp[a][b]==0){mp[a][b]=4-2*bool(rand()%4);if(mp[a][b]==4) num4+=1;else num4=0;break;}else i++;}}out();Sleep(750);a:if(ma_flag){ifstream inFile("移动插件.txt");inFile>>ma_flag>>game_f;if(game_f==0){s=0; s_=0;inFile>>x;}inFile.close();}else if(in_flag){do x=in_i(); while(x==' ');}else{x=in_i();}if(x=='w'){if(flag_ach[1]==0){flag_ach[1]=1;flag_au=1;time_start=time(0);}for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){int X=i;while(mp[X][j]!=0&&X>1&&(mp[X-1][j]==0||mp[X-1][j]==mp[X][j])){if(mp[X-1][j]==0){mp[X-1][j]=mp[X][j];mp[X][j]=0;}else{f+=mp[X][j]*2;mp[X-1][j]=mp[X][j]*2;mp[X][j]=0;}X--;out();Sleep(int(100*s)); }}}H++;}else if(x=='a'){if(flag_ach[1]==0){flag_ach[1]=1;flag_au=1;time_start=time(0);}for(int j=1;j<=ab;j++){for(int i=1;i<=ab;i++){int Y=j;while(mp[i][Y]!=0&&Y>1&&(mp[i][Y-1]==0||mp[i][Y-1]==mp[i][Y])){if(mp[i][Y-1]==0){mp[i][Y-1]=mp[i][Y];mp[i][Y]=0;}else{f+=mp[i][Y]*2;mp[i][Y-1]=mp[i][Y]*2;mp[i][Y]=0;}Y--;out();Sleep(int(100*s)); }}}H++;}else if(x=='s'){if(flag_ach[1]==0){flag_ach[1]=1;flag_au=1;time_start=time(0);}for(int i=ab;i>=1;i--){for(int j=1;j<=ab;j++){int X=i;while(mp[X][j]!=0&&X<ab&&(mp[X+1][j]==0||mp[X+1][j]==mp[X][j])){if(mp[X+1][j]==0){mp[X+1][j]=mp[X][j];mp[X][j]=0;}else{f+=mp[X][j]*2;mp[X+1][j]=mp[X][j]*2;mp[X][j]=0;}X++;out();Sleep(int(100*s)); }}}H++;}else if(x=='d'){if(flag_ach[1]==0){flag_ach[1]=1;flag_au=1;time_start=time(0);}for(int j=ab;j>=1;j--){for(int i=1;i<=ab;i++){int Y=j;while(mp[i][Y]!=0&&Y<ab&&(mp[i][Y+1]==0||mp[i][Y+1]==mp[i][Y])){if(mp[i][Y+1]==0){mp[i][Y+1]=mp[i][Y];mp[i][Y]=0;}else{f+=mp[i][Y]*2;mp[i][Y+1]=mp[i][Y]*2;mp[i][Y]=0;}Y++;out();Sleep(int(100*s)); }}}H++;}else if(x=='x'){cout<<"\n倍速调节\n\n";cin>>s_;if(s_==0){s=0;}else{s=1/s_;}}else if(x=='e'){cout<<"确定退出本局游戏 (y/n)\n\n";char y;cin>>y;if(y=='y'){out();break;}} else{cout<<"重新输入";Sleep(500); out();goto a;}if(over()==0){ove=0;out();unl();break;}unl();}unl();ma();last_out(1);cout<<"本局游戏共"<<f<<"分\n\n";cout<<"\n\n按任意键返回主界面\n\n";while(in_i()==' ') continue;
}
void co(){de();bool flag_co=0;system("cls");if(ma_flag==1){if(flag_co==0){cout<<"已连接插件:\n\n";flag_co=1;}cout<<"2048 移动辅助插件\n\n";}if(in_flag==1){if(flag_co==0){cout<<"已连接插件:\n\n";flag_co=1;}cout<<"2048 输入辅助插件\n\n";}if(flag_co==0){cout<<"暂未连接到插件\n\n";} cout<<"\n\n按任意键返回主界面\n\n";while(in_i()==' ') continue;
}
int main(){ass_co();while(1){system("cls"); de();ass();home();if(in=='1'){game();}else if(in=='2'){last_in();last_in_out();}else if(in=='3'){help();}else if(in=='4'){ach(); }else if(in=='5'){co();}else if(in=='6'){day();}}return 0;
}
⭐移动辅助插件 v.1.3.0 代码
点击查看代码
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<fstream>
using namespace std;
const int ab=4,qz=1;
long long mp[ab+1][ab+1];
bool mp_f[ab+1][ab+1],game=0;
char game_f='0';
void ass(){system("title 2048 移动辅助插件 v.1.3.0");ofstream outfile("地图.txt");outfile<<"1\n";for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){outfile<<"0 ";}outfile<<"\n";}outfile.close();
}
void ass_pl(){ofstream outfile("移动插件.txt");outfile<<"1 1\n";outfile.close();
}
void mp_in(){ifstream inFile("地图.txt");inFile>>game;for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){inFile>>mp[i][j];mp_f[i][j];}}inFile.close();
}
void mp_out(){int fw=0,fa=0,fs=0,fd=0,fw_=0,fa_=0,fs_=0,fd_=0;mp_in();for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(i>1&&mp[i-1][j]==mp[i][j]){fw_-=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fw_-=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fw_-=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fw_-=mp[i][j]*qz;}}}for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){int X=i;while(mp[X][j]!=0&&X>1&&(mp[X-1][j]==0||mp[X-1][j]==mp[X][j])){if(mp[X-1][j]==0){mp[X-1][j]=mp[X][j];mp[X][j]=0;}else{fw+=mp[X][j]*2;fw_+=mp[X][j]*2;mp[X-1][j]=mp[X][j]*2;mp[X][j]=0;}X--;mp_f[X][j]=1;mp_f[X+1][j]=1;} }}for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(mp_f[i][j]){if(i>1&&mp[i-1][j]==mp[i][j]){fw_+=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fw_+=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fw_+=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fw_+=mp[i][j]*qz;}}}}mp_in();for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(i>1&&mp[i-1][j]==mp[i][j]){fa_-=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fa_-=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fa_-=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fa_-=mp[i][j]*qz;}}}for(int j=1;j<=ab;j++){for(int i=1;i<=ab;i++){int Y=j;while(mp[i][Y]!=0&&Y>1&&(mp[i][Y-1]==0||mp[i][Y-1]==mp[i][Y])){if(mp[i][Y-1]==0){mp[i][Y-1]=mp[i][Y];mp[i][Y]=0;}else{fa+=mp[i][Y]*2;fa_+=mp[i][Y]*2;mp[i][Y-1]=mp[i][Y]*2;mp[i][Y]=0;}Y--;mp_f[i][Y]=1;mp_f[i][Y+1]=0;}}}for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(mp_f[i][j]){if(i>1&&mp[i-1][j]==mp[i][j]){fa_+=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fa_+=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fa_+=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fa_+=mp[i][j]*qz;}}}}mp_in();for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(i>1&&mp[i-1][j]==mp[i][j]){fs_-=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fs_-=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fs_-=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fs_-=mp[i][j]*qz;}}}for(int i=ab;i>=1;i--){for(int j=1;j<=ab;j++){int X=i;while(mp[X][j]!=0&&X<ab&&(mp[X+1][j]==0||mp[X+1][j]==mp[X][j])){if(mp[X+1][j]==0){mp[X+1][j]=mp[X][j];mp[X][j]=0;}else{fs+=mp[X][j]*2;fs_+=mp[X][j]*2;mp[X+1][j]=mp[X][j]*2;mp[X][j]=0;}X++; mp_f[X][j]=1;mp_f[X-1][j]=1;}}}for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(mp_f[i][j]){if(i>1&&mp[i-1][j]==mp[i][j]){fs_+=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fs_+=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fs_+=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fs_+=mp[i][j]*qz;}}}}mp_in();for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(i>1&&mp[i-1][j]==mp[i][j]){fd_-=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fd_-=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fd_-=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fd_-=mp[i][j]*qz;}}}for(int j=ab;j>=1;j--){for(int i=1;i<=ab;i++){int Y=j;while(mp[i][Y]!=0&&Y<ab&&(mp[i][Y+1]==0||mp[i][Y+1]==mp[i][Y])){if(mp[i][Y+1]==0){mp[i][Y+1]=mp[i][Y];mp[i][Y]=0;}else{fd+=mp[i][Y]*2;fd_+=mp[i][Y]*2;mp[i][Y+1]=mp[i][Y]*2;mp[i][Y]=0;}Y++; mp_f[i][Y]=1;mp_f[i][Y-1]=0;}}}for(int i=1;i<=ab;i++){for(int j=1;j<=ab;j++){if(mp_f[i][j]){if(i>1&&mp[i-1][j]==mp[i][j]){fd_+=mp[i][j]*qz;}else if(j>1&&mp[i][j-1]==mp[i][j]){fd_+=mp[i][j]*qz;}else if(i<ab&&mp[i+1][j]==mp[i][j]){fd_+=mp[i][j]*qz;}else if(j<ab&&mp[i][j+1]==mp[i][j]){fd_+=mp[i][j]*qz;}}}}int ma=max(max(fw+fw_,fa+fa_),max(fs+fs_,fd+fd_));cout<<"建议: ";ofstream outfile("移动插件.txt");outfile<<"1 ";if(game_f!='0') outfile<<"1 ";else outfile<<"0 ";if(ma==fw+fw_){cout<<"w ";outfile<<"w ";}if(ma==fa+fa_){cout<<"a ";outfile<<"a ";}if(ma==fs+fs_){cout<<"s ";outfile<<"s ";}if(ma==fd+fd_){cout<<"d ";outfile<<"d ";}cout<<"\n详细:\n\n";cout<<"w 当下: "<<fw<<" \t发展:"<<fw_<<" \t综合:"<<fw+fw_<<"\n";cout<<"a 当下: "<<fa<<" \t发展:"<<fa_<<" \t综合:"<<fa+fa_<<"\n";cout<<"s 当下: "<<fs<<" \t发展:"<<fs_<<" \t综合:"<<fs+fs_<<"\n";cout<<"d 当下: "<<fd<<" \t发展:"<<fd_<<" \t综合:"<<fd+fd_<<"\n";
}
void day(){system("cls");cout<<"qihangxing制作\n\n\n"; cout<<"2025.3.18 v.1.0.0 完成基本的算法推荐\n\n";cout<<"2025.3.19 v.1.1.0 美化界面并优化算法\n\n";cout<<"2025.3.20 v.1.2.0 添加设置\n\n";cout<<"2025.3.21 v.1.3.0 修复已知BUG\n\n";cout<<"按任意键返回主界面\n\n";getch();
}
void co(){system("cls");ofstream outfile("移动插件.txt");outfile<<"1 ";outfile.close();cout<<"已发送请求\n\n按任意键返回主界面\n\n";getch();
}
void pl(){system("cls");while(game){mp_out();Sleep(100);system("cls");}
}
void sz(){start:system("cls");cout<<"设置\n\n托管模式: ";if(game==1) cout<<"yes";else cout<<"no ";cout<<" (按x更改)\n\n按其他键返回主界面\n\n";char x=getch();if(x=='x'){if(game==1) game=0;else game=1;goto start;}
}
void exi(){ofstream outfile("移动插件.txt");outfile<<"0 ";outfile.close();
}
int main(){while(1){system("cls");ass();cout<<"欢迎使用2048 移动辅助插件 v.1.3.0\n\n";cout<<"1.连接主程 2.插件设置\n\n";cout<<"3.启动插件 4.更新日志\n\n";char in=getch();if(in=='1'){co();}else if(in=='2'){sz();}else if(in=='3'){pl();} else if(in=='4'){day();}else if(in=='e'){exi();break;}}return 0;
}
⭐输入辅助插件 v.1.0.0 代码
点击查看代码
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<fstream>
#include<string>
using namespace std;
string dx[5]={"","main","maco"};
int t=1,s=2;
char in=' ';
string _dx=dx[t];
void ass(){system("title 2048 输入辅助插件 v.1.0.0");ofstream outfile("输入插件.txt");outfile<<"1 ";outfile.close();
}
void out(){system("cls");cout<<_dx;if(in!=' '&&in!='-')cout<<" << "<<in<<"\n\n";in=getch();if(in=='-'){if(t+1>s)t=1;elset+=1;_dx=dx[t];}else{ofstream outfile("输入插件.txt");outfile<<"1 "<<_dx<<" "<<in<<" 1";outfile.close();}
}
int main(){ass();while(1){out();} return 0;
}
2048 C++ 游戏程序介绍及相关代码