2048 游戏中滑块上下左右滑动相加的逻辑实现
来源:互联网 发布:landsat8数据打开 编辑:程序博客网 时间:2024/05/18 03:47
1. 添加一个数组
我们需要借助数组,来实现这个逻辑功能。在HelloWorldScene.h中添加一个数组声明:
//创建一个卡片二位数组
CardSprite* cardArr[4][4];
2. 把数字添加到数组中
还记得我们在创建卡片函数createCardSprite函数中得到的卡片card吗?现在,我们就把这个卡片加入到数组中:
//把卡片加入到数组中
cardArr[i][j] = card;
3. 添加具体的逻辑
(1)向左滑动函数的逻辑代码:
bool HelloWorld::doLeft(){
bool isdo = false;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
for (int x1 = x + 1; x1 < 4; x1++) {
if (cardArr[x1][y]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber());
cardArr[x1][y]->setNumber(0);
x--;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x1][y]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
如果右边的数等于左边的数,那么左边的数乘以2,然后把右边的数设置为0,也就变为了空。
另外三个方向滑动的逻辑代码,也类似。
(2)向右滑动函数的逻辑代码:
bool HelloWorld::doRight(){
bool isdo = false;
for (int y = 0; y < 4; y++) {
for (int x = 3; x >= 0; x--) {
for (int x1 = x - 1; x1 >= 0; x1--) {
if (cardArr[x1][y]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber());
cardArr[x1][y]->setNumber(0);
x++;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x1][y]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
(3)向下滑动函数的逻辑代码:
bool HelloWorld::doDown(){
bool isdo = false;
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
for (int y1 = y + 1; y1 < 4; y1++) {
if (cardArr[x][y1]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());
cardArr[x][y1]->setNumber(0);
y--;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x][y1]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
(4)向上滑动函数的逻辑代码:
bool HelloWorld::doUp(){
bool isdo = false;
for (int x = 0; x < 4; x++) {
for (int y = 3; y >= 0; y--) {
for (int y1 = y - 1; y1 >= 0; y1--) {
if (cardArr[x][y1]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());
cardArr[x][y1]->setNumber(0);
y++;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x][y1]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
我们需要借助数组,来实现这个逻辑功能。在HelloWorldScene.h中添加一个数组声明:
//创建一个卡片二位数组
CardSprite* cardArr[4][4];
2. 把数字添加到数组中
还记得我们在创建卡片函数createCardSprite函数中得到的卡片card吗?现在,我们就把这个卡片加入到数组中:
//把卡片加入到数组中
cardArr[i][j] = card;
3. 添加具体的逻辑
(1)向左滑动函数的逻辑代码:
bool HelloWorld::doLeft(){
bool isdo = false;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
for (int x1 = x + 1; x1 < 4; x1++) {
if (cardArr[x1][y]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber());
cardArr[x1][y]->setNumber(0);
x--;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x1][y]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
如果右边的数等于左边的数,那么左边的数乘以2,然后把右边的数设置为0,也就变为了空。
另外三个方向滑动的逻辑代码,也类似。
(2)向右滑动函数的逻辑代码:
bool HelloWorld::doRight(){
bool isdo = false;
for (int y = 0; y < 4; y++) {
for (int x = 3; x >= 0; x--) {
for (int x1 = x - 1; x1 >= 0; x1--) {
if (cardArr[x1][y]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber());
cardArr[x1][y]->setNumber(0);
x++;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x1][y]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
(3)向下滑动函数的逻辑代码:
bool HelloWorld::doDown(){
bool isdo = false;
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
for (int y1 = y + 1; y1 < 4; y1++) {
if (cardArr[x][y1]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());
cardArr[x][y1]->setNumber(0);
y--;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x][y1]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
(4)向上滑动函数的逻辑代码:
bool HelloWorld::doUp(){
bool isdo = false;
for (int x = 0; x < 4; x++) {
for (int y = 3; y >= 0; y--) {
for (int y1 = y - 1; y1 >= 0; y1--) {
if (cardArr[x][y1]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());
cardArr[x][y1]->setNumber(0);
y++;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x][y1]->setNumber(0);
isdo = true;
}
break;
}
}
}
}
return isdo;
}
0 0
- 2048 游戏中滑块上下左右滑动相加的逻辑实现
- 【2048强势来袭】第四期:游戏滑动上下左右相加的逻辑
- Scroll实现上下左右滑动
- 移动的上下左右滑动
- Android中实现上下左右都可滑动的ScrollView
- 用Activity的onTouchEvent方法实现监听手指上下左右滑动
- Android中实现上下左右都可滑动的ScrollView
- 用Activity的onTouchEvent方法实现监听手指上下左右滑动
- 用Activity的onTouchEvent方法实现监听手指上下左右滑动
- Android中实现上下左右都可滑动的ScrollView
- Android中实现上下左右都可滑动的ScrollView
- 用Activity的onTouchEvent方法实现监听手指上下左右滑动
- 用Activity的onTouchEvent方法实现监听手指上下左右滑动
- 用Activity的onTouchEvent方法实现监听手指上下左右滑动
- Android中实现上下左右都可滑动的ScrollView
- 用Activity的onTouchEvent方法实现监听手指上下左右滑动
- Activity的onTouchEvent方法实现监听手指上下左右滑动
- actiivity的上下左右滑动动画
- Writing GNU Emacs Extensions ch3 要点
- 代码缺陷静态分析工具FindBugs插件安装使用图解
- Vert.x安装指南
- BZOJ 1015: [JSOI2008]星球大战starwar
- 如何永久性开启adb 的root权限
- 2048 游戏中滑块上下左右滑动相加的逻辑实现
- 黑马程序员—Java中的JDK1.5新特性之注解
- Spring @Transactional工作原理
- 省市区三级联动菜单(附数据库)
- linux 常用命令
- Getting data from a dispatch source
- Exchange Server 2007升级到Exchange Server 2013概览
- android layout布局属性
- 伺服驱动器上UVW电机动力线相序接错