c/c++语言开发共享C++实现消消乐游戏

本文实例为大家分享了c++实现消消乐游戏的具体代码,供大家参考,具体内容如下问题描述给定一个矩阵, 判断移动哪一个格子,可以实现消除。(定义连续三个即可消除)据说是华为的笔试题。分析先写一个函数,判断

c/c++开发分享C++实现消消乐游戏实例为大家分享了c++实现消消乐游戏的具体代码,供大家参考,具体内容如下

问题描述

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

据说是华为的笔试题。

分析

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

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

重点是:

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

代码

//  //  main.cpp  //  huawei  //  //  created by stevewong on 11/10/2016.  //  copyright © 2016 stevewong. all rights reserved.  //    #include <iostream>  #include <string>  #include <vector>  #include <ctime>  //#include <cstdlib>  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 << endl;      }  }    // 检查以(i,j)为中心的点, 看是否可以消除  bool check(int map[][len], int i, int j)// 保证i、j不越界,  {      if (          (i-1>=0 && i+1<len && map[i-1][j]==map[i][j]&&map[i][j]==map[i+1][j])          || (j-1>=0 && j+1<len && map[i][j-1]==map[i][j]&&map[i][j]==map[i][j+1])          || (i-2>=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++开发分享C++实现消消乐游戏的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

需要了解更多c/c++开发分享C++实现消消乐游戏,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1247922.html

(0)
上一篇 2022年9月27日
下一篇 2022年9月27日

精彩推荐