2048

本文介绍了一个简单的2048游戏实现方案,通过C++编程语言,详细讲解了游戏的初始化、移动策略及胜负判断等功能。玩家可以通过键盘方向键或WASD控制游戏进行。
#define _CRT_SECURE_NO_DEPRECATE 
#define _CRT_NONSTDC_NO_DEPRECATE
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
int const  N = 4;
int a[N][N] = { 0 };
class Game {
public:
	int sum();
	void chessboard();
	void up();
	void down();
	void right();
	void left();
	bool judge();
};
//建棋盘
void Game::chessboard() {
	system("CLS");
	int x = 0, y = 0, n = 0;
	srand((unsigned int)time(NULL));
	//初始值,在表格中生成随机数2,4
		x = rand() % N;
		y = rand() % N;
		if (a[x][y] != 0) {
			for (int i = x; i < N; ++i) {
				for (int j = y; j < N; ) {
					if (a[i][j] != 0)
						++j;
					else {
						x = rand() % N;
						y = rand() % N;
						n = rand() % 2;
						a[i][j] = 2 * n;
					}
				}
			}
		}
		else {
			x = rand() % N;
			y = rand() % N;
			n = rand() % 2;
			a[x][y] = 2 * n;
		}
	cout << "  *****2048小游戏*****" << endl;
	cout << "  -----------------------" << endl;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cout << " | " << a[i][j];
		}
		cout << " |";
		cout << endl;
		cout << "  -----------------------" << endl;
	}
	cout << "   请用大写或小写的" << endl;
	cout << "   wasd或者箭头操作:" << endl;
}
bool Game::judge() {
	int win = 1;
	int going = 0;
	int defeat = -1;
	//如果找到2048,那么游戏结束
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			if (a[i][j] == 2048) {
				return 1;
				break;
			}
		}
	}
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			if (a[i][j] == a[i][j + 1])
				return 0;
			break;
		}
	}
	for (int j = 0; j < N; j++) {
		for (int i = 0; i < N; i++) {
			if (a[i][j] == a[i + 1][j])
				return 0;
			break;
		}
	}
}
void Game::up() {
	for (int x = 1; x < N; ++x) {
		for (int y = x; y >= 1; --y) {
			for (int z = 0; z < N; ++z) {
				if (a[y - 1][z] == 0) {
					a[y - 1][z] = a[y][z];
					a[y][z] = 0;
				}
				else
					if (a[y - 1][z] == a[y][z]) {
						a[y - 1][z] += a[y - 1][z];
						a[y][z] = 0;
					}
			}
		}

	}
}
void Game::down() {
	for (int x =N-2; x >= 0; --x) {
		for (int y = x; y <N-1; ++y) {
			for (int z = 0; z < N; ++z) {
				if (a[y + 1][z] == 0) {
					a[y + 1][z] = a[y][z];
					a[y][z] = 0;
				}
				else if (a[y + 1][z] == a[y][z]) {
					a[y + 1][z] += a[y + 1][z];
					a[y][z] = 0;
				}
			}
		}
	}
}
void Game::left() {
	for (int x = 1; x <N; ++x) {
		for (int y = x; y >= 1; --y) {
			for (int z = 0; z < N; ++z) {
				if (a[z][y - 1] == 0) {
					a[z][y - 1] = a[z][y];
					a[z][y] = 0;
				}
				else
					if (a[z][y - 1] == a[z][y]) {
						a[z][y - 1] += a[z][y - 1];
						a[z][y] = 0;
					}
			}
		}
	}
}
void Game::right() {
	for (int x = N-2; x >= 0; --x) {
		for (int y = x; y <= N-2; ++y) {
			for (int z = 0; z < N; ++z) {
				if (a[z][y + 1] == 0) {
					a[z][y + 1] = a[z][y];
					a[z][y] = 0;
				}
				else
					if (a[z][y + 1] == a[z][y]) {
						a[z][y + 1] += a[z][y + 1];
						a[z][y] = 0;
					}
			}
		}
	}
}
//把方格里的数字求和,用于求出所得的分数
int Game::sum() {
	int d = 0;
	for (int n = 0; n < N; n++) {
		for (int s = 0; s < N; s++) {
			d += a[n][s];
		}
	}
	return d;
}
int main() {
	Game a;
	while (1) {
		Game a;
		a.chessboard();
		char ch = _getch();
		if (ch == 72 || ch == 'w' || ch == 'W') {
			a.up();
		}
		else if (ch == 'a' || ch == 'A' || ch == 75) {
			a.left();
		}
		else if (ch == 's ' || ch == 'S' || ch == 80) {
			a.down();
		}
		else if (ch == 'd' || ch == 'D' || ch == 77) {
			a.right();
		}
		int j = a.judge();
		if (j == 1) {
			cout << "你赢了!" << endl;
			break;
		}
		else if (j == -1) {
			cout << "你输了!" << endl;
			break;
		}
		else if(j==0){
			a.chessboard();
			a.judge();
		}
		a.sum();
		cout << "你的得分为:" << a.sum() - 4 << "分" << endl;
	}
	return 0;
}#define _CRT_SECURE_NO_DEPRECATE 
#define _CRT_NONSTDC_NO_DEPRECATE
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
int const  N = 4;
int a[N][N] = { 0 };
class Game {
public:
	int sum();
	void chessboard();
	void up();
	void down();
	void right();
	void left();
	bool judge();
};
//建棋盘
void Game::chessboard() {
	system("CLS");
	int x = 0, y = 0, n = 0;
	srand((unsigned int)time(NULL));
	//初始值,在表格中生成随机数2,4
		x = rand() % N;
		y = rand() % N;
		if (a[x][y] != 0) {
			for (int i = x; i < N; ++i) {
				for (int j = y; j < N; ) {
					if (a[i][j] != 0)
						++j;
					else {
						x = rand() % N;
						y = rand() % N;
						n = rand() % 2;
						a[i][j] = 2 * n;
					}
				}
			}
		}
		else {
			x = rand() % N;
			y = rand() % N;
			n = rand() % 2;
			a[x][y] = 2 * n;
		}
	cout << "  *****2048小游戏*****" << endl;
	cout << "  -----------------------" << endl;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cout << " | " << a[i][j];
		}
		cout << " |";
		cout << endl;
		cout << "  -----------------------" << endl;
	}
	cout << "   请用大写或小写的" << endl;
	cout << "   wasd或者箭头操作:" << endl;
}
bool Game::judge() {
	int win = 1;
	int going = 0;
	int defeat = -1;
	//如果找到2048,那么游戏结束
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			if (a[i][j] == 2048) {
				return 1;
				break;
			}
		}
	}
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			if (a[i][j] == a[i][j + 1])
				return 0;
			break;
		}
	}
	for (int j = 0; j < N; j++) {
		for (int i = 0; i < N; i++) {
			if (a[i][j] == a[i + 1][j])
				return 0;
			break;
		}
	}
}
void Game::up() {
	for (int x = 1; x < N; ++x) {
		for (int y = x; y >= 1; --y) {
			for (int z = 0; z < N; ++z) {
				if (a[y - 1][z] == 0) {
					a[y - 1][z] = a[y][z];
					a[y][z] = 0;
				}
				else
					if (a[y - 1][z] == a[y][z]) {
						a[y - 1][z] += a[y - 1][z];
						a[y][z] = 0;
					}
			}
		}

	}
}
void Game::down() {
	for (int x =N-2; x >= 0; --x) {
		for (int y = x; y <N-1; ++y) {
			for (int z = 0; z < N; ++z) {
				if (a[y + 1][z] == 0) {
					a[y + 1][z] = a[y][z];
					a[y][z] = 0;
				}
				else if (a[y + 1][z] == a[y][z]) {
					a[y + 1][z] += a[y + 1][z];
					a[y][z] = 0;
				}
			}
		}
	}
}
void Game::left() {
	for (int x = 1; x <N; ++x) {
		for (int y = x; y >= 1; --y) {
			for (int z = 0; z < N; ++z) {
				if (a[z][y - 1] == 0) {
					a[z][y - 1] = a[z][y];
					a[z][y] = 0;
				}
				else
					if (a[z][y - 1] == a[z][y]) {
						a[z][y - 1] += a[z][y - 1];
						a[z][y] = 0;
					}
			}
		}
	}
}
void Game::right() {
	for (int x = N-2; x >= 0; --x) {
		for (int y = x; y <= N-2; ++y) {
			for (int z = 0; z < N; ++z) {
				if (a[z][y + 1] == 0) {
					a[z][y + 1] = a[z][y];
					a[z][y] = 0;
				}
				else
					if (a[z][y + 1] == a[z][y]) {
						a[z][y + 1] += a[z][y + 1];
						a[z][y] = 0;
					}
			}
		}
	}
}
//把方格里的数字求和,用于求出所得的分数
int Game::sum() {
	int d = 0;
	for (int n = 0; n < N; n++) {
		for (int s = 0; s < N; s++) {
			d += a[n][s];
		}
	}
	return d;
}
int main() {
	Game a;
	while (1) {
		Game a;
		a.chessboard();
		char ch = _getch();
		if (ch == 72 || ch == 'w' || ch == 'W') {
			a.up();
		}
		else if (ch == 'a' || ch == 'A' || ch == 75) {
			a.left();
		}
		else if (ch == 's ' || ch == 'S' || ch == 80) {
			a.down();
		}
		else if (ch == 'd' || ch == 'D' || ch == 77) {
			a.right();
		}
		int j = a.judge();
		if (j == 1) {
			cout << "你赢了!" << endl;
			break;
		}
		else if (j == -1) {
			cout << "你输了!" << endl;
			break;
		}
		else if(j==0){
			a.chessboard();
			a.judge();
		}
		a.sum();
		cout << "你的得分为:" << a.sum() - 4 << "分" << endl;
	}
	return 0;
}
内容概要:本文围绕基于支持向量机的电力短期负荷预测方法展开基于支持向量机的电力短期负荷预测方法研究——最小二乘支持向量机、标准粒子群算法支持向量机与改进粒子群算法支持向量机的对比分析(Matlab代码实现)研究,重点对比分析了三种方法:最小二乘支持向量机(LSSVM)、标准粒子群算法优化的支持向量机(PSO-SVM)以及改进粒子群算法优化的支持向量机(IPSO-SVM)。文章详细介绍了各模型的构建过程与优化机制,并通过Matlab代码实现对电力负荷数据进行预测,评估不同方法在预测精度、收敛速度和稳定性方面的性能差异。研究旨在为电力系统调度提供高精度的短期负荷预测方案,提升电网运行效率与可靠性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的科研人员、电气工程及相关专业的研究生或高年级本科生;对机器学习在能源领域应用感兴趣的技术人员。; 使用场景及目标:①应用于电力系统短期负荷预测的实际建模与仿真;②比较不同优化算法对支持向量机预测性能的影响;③为相关课题研究提供可复现的代码参考和技术路线支持。; 阅读建议:建议读者结合文中提供的Matlab代码,深入理解每种支持向量机模型的参数设置与优化流程,动手实践以掌握算法细节,并可通过更换数据集进一步验证模型泛化能力。
【源码免费下载链接】:https://renmaiwang.cn/s/qaiji 18、MapReduce的计数器与通过MapReduce读取_写入数据库示例网址: input files to process”表示处理的总输入文件数量,“number of splits”指示文件被分割成多少个块进行处理,“Running job”显示作业的状态等。自定义计数器则是开发者根据实际需求创建的,用于跟踪特定任务的特定指标。开发者可以在Mapper或Reducer类中增加自定义计数器,然后在代码中增加计数器的值。这样,当作业完成后,可以通过查看计数器的值来分析程序的行为和性能。接下来,我们将讨论如何通过MapReduce与数据库交互,尤其是MySQL数据库。在大数据场景下,有时需要将MapReduce处理的结果存储到关系型数据库中,或者从数据库中读取数据进行处理。Hadoop提供了JDBC(Java Database Connectivity)接口,使得MapReduce作业能够与数据库进行连接和操作。要实现MapReduce读取数据库,首先需要在Mapper类中加载数据库驱动并建立连接。然后,可以在map()方法中使用SQL查询获取所需数据。在Reduce阶段,可以对数据进行进一步处理和聚合,最后将结果写入到数据库中。对于写入数据库,通常在Reducer类的reduce()方法或cleanup()方法中进行,将处理后的数据转换为适合数据库存储的格式,然后通过JDBC API执行插入、更新或删除等操作。需要注意的是,由于MapReduce作业可能涉及大量的数据写入,因此需要考虑数据库的并发处理能力和性能优化策略。总结一下,MapReduce的计数器提供了强大的监控和调试能力,而通过MapReduce与数据库的交互则扩展了大数据处理的应用场景。开发者可以根据需求利用计数器来优化作业
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值