C++纯字符串操作:小游戏2048的实现

目标: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 <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值