【C++趣味程序】之开心消消乐

你们是否同小编一样,闲暇之余总爱拿起手机,打开小游戏玩一玩。本文就是一款火爆的游戏开心消消乐的C++版的制作过程,有兴趣的小伙伴来了解一下吧!

问题描述

给定一个矩阵, 判断移动哪一个格子,可以实现消除。(定义连续三个即可消除)

据说是华为的笔试题。

分析

先写一个函数,判断包含(i, j)的格子是否可能实现消除。

然后就是向右向下交换,然后调用上面写好的函数判断
被交换的两个格子是否实现消除。

重点是:

立即学习“C++免费学习笔记(深入)”;

只需要向右向下交换,因为遍历的时候,后面的交换会重复。前一个判断了向右交换是否消除,后一个遍历就不需要再判断向左交换是否重复了。一定要对被交换的两个格子都判断是否能消除,才能实现全面的判断。

代码

////  main.cpp//  huawei////  Created by SteveWong on 11/10/2016.//  Copyright © 2016 SteveWong. All rights reserved.//#include #include #include #include //#include using namespace std;const int LEN = 8;void pmap(int map[][LEN]){    for (int i = 0; i < LEN; ++i)    {        for (int j = 0; j < LEN; ++j)        {            cout << map[i][j] << " ";        }        cout <=0 && i+1=0 && j+1=0 && map[i-2][j]==map[i-1][j]&&map[i-1][j]==map[i][j])        || (j-2>=0 && map[i][j-2]==map[i][j-1]&&map[i][j-1]==map[i][j])        || (i+2<LEN && map[i+2][j]==map[i+1][j]&&map[i+1][j]==map[i][j])        || (j+2<LEN && map[i][j+2]==map[i][j+1]&&map[i][j+1]==map[i][j])        )    {        return true;    }    return false;}bool swapAndJudge(int m[][LEN], int i, int j)// 保证i、j不越界, 应该对被swap的两个点都做纵向和横向的检查{    int map[LEN][LEN];    for (int ii = 0; ii < LEN; ++ii)    {        for (int jj = 0; jj < LEN; ++jj)        {            map[ii][jj] = m[ii][jj];        }    }    // 原来就可以消除    if (check(map, i, j))    {        printf("no need to swap at (%d, %d)\n", i, j);        return true;    }    // 只需要向下换和向右换    // 向下换    if (i + 1 < LEN)    {        swap(map[i+1][j], map[i][j]);        if (check(map, i, j))        {            printf("# swap and sweap! (%d, %d)\n", i, j);            return true;        }        if (check(map, i+1, j))        {            printf("# swap and sweap! (%d, %d)\n", i+1, j);            return true;        }        swap(map[i+1][j], map[i][j]);// 换回来    }    // 向右换    if (j + 1 < LEN)    {        swap(map[i][j+1], map[i][j]);        if (check(map, i, j))        {            printf("# swap and sweap! (%d, %d)\n", i, j);            return true;        }        if (check(map, i, j+1))        {            printf("# swap and sweap! (%d, %d)\n", i, j+1);            return true;        }        swap(map[i][j+1], map[i][j]);// 换回来    }    return false;}void findMinSwap(int map[][LEN]){    for (int i = 0; i < LEN; ++i)    {        for (int j = 0; j < LEN; ++j)        {            if (swapAndJudge(map, i, j))            {                printf("gotcha! (%d, %d)\n", i, j);            }        }    }}int main(int argc, const char * argv[]) {    // insert code here...//    std::cout << "Hello, World!\n";    srand(unsigned(time(0)));    for (int i = 0; i < LEN; ++i)    {        for (int j = 0; j < LEN; ++j)        {            map[i][j] = rand() % 5;        }    }    cout << "xiaoxiaole!\n";    findMinSwap(map);    pmap(map);    return 0;}

  【推荐课程:C++视频教程】

以上就是【C++趣味程序】之开心消消乐的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1433080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 08:53:32
下一篇 2025年12月17日 08:53:42

相关推荐

发表回复

登录后才能评论
关注微信