目标:1.实现地图打印、自动调整大小
2.实现随机生成
3.实现数字移动、合成
4.实现重来功能
解决方案(分段方便讲解,全代码见末尾):
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>
#include<cstdlib>
using namespace std;
头文件,没什么好说的
int numbers[10][10]={0},key;
bool fail=false,stop=false;
numbers:数字数组
key:存储按下按键
fail,stop:判断游戏结束
void HideCursor(){
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void Debug(){
for(int i = 1;i <= 4;i ++){
for(int j = 1;j <= 4;j ++)
cout<<numbers[i][j]<<" ";
cout<<endl;
}
}
HideCursor:隐藏光标,增强游戏体验
Debug:调试:输出数组所有数据
void init(){
for(int i = 1;i <= 4;i ++)
for(int j = 1;j <= 4;j ++)
numbers[i][j] = 0;
}
int random(){
int tmp=rand()%5;
while(tmp == 0)
tmp = rand()%5;
return tmp;
}
void Generate(){
int x=random(),y=random();
while(numbers[x][y] != 0){
x=random();
y=random();
}
numbers[x][y] = 2;
}
init:数组初始化
random:随机返回一个1~5间的整数
Generate:随机在数组一零处生成一“2”
void CelingPrint(){
for(int i = 0;i < 29;i ++)
printf("%c",celing[i]);
}
void WallPrint(){
for(int i = 0;i < 29;i ++)
printf("%c",wall[i]);
}
int GetNumberLength(int n){
int cnt=0;
while(n>0){
n/=10;
cnt++;
}
return cnt;
}
void NumberPrint(int x,int y){
printf(" %d",numbers[x][y]);
for(int i = 0;i < 5-GetNumberLength(numbers[x][y]);i ++)
printf(" ");
}
void NumberFloorPrint(int x){
printf("|");
for(int i = 1;i <= 4;i ++){
if(numbers[x][i] == 0)
printf(" |");
else{
NumberPrint(x,i);
printf("|");
}
}
}
void OneFloor(int floor){
WallPrint();
cout<<endl;
NumberFloorPrint(floor);
cout<<endl;
WallPrint();
cout<<endl;
CelingPrint();
}
void MapPrint(){
printf(" 2048控制台版 作者:clzmgl\n");
CelingPrint();
cout<<endl;
for(int i = 1;i <