MFC实现连连看游戏之地图显示分享!

MFC实现连连看游戏前期过程中遇到的一大问题是如何将地图显示出来,最后还是看了其他人的源码才搞定。

首先是地图数组的生成,这个网上找有很多,我用的是随机生成地图的种类,然后将其放在两个连续的位置,最后再进行两两随机交换位置,得到随机地图,具体如下:

  void CGameDlg::InitMap()   {   for (int i = 0; i < MAX_X; i++) // 初始化map数组   {    for (int j = 0; j < MAX_Y; j++)    {     map[i][j] = 0;    }   }     //随机数种子   srand((unsigned int)time(NULL));     for (int i = 1; i < MAX_X - 1; i++)   {    for (int j = 1; j < MAX_Y - 1; j = j+2)    {     int type = rand() % m_typeNum + 1;// 随机产生一个的图片种类编号     map[i][j] = type;     map[i][j+1] = type; // 保证同种图片连续出现两次    }   }   int k = 0;   while (k < 100) // 随机选中两个位置交换100次   {    int x1 = 0, y1 = 0;    int x2 = 0, y2 = 0;    while (x1 == x2 && y1 == y2) // 确保两个位置不同    {     x1 = rand() % (MAX_X - 2) + 1;     y1 = rand() % (MAX_Y - 2) + 1;       x2 = rand() % (MAX_X - 2) + 1;     y2 = rand() % (MAX_Y - 2) + 1;    }    int temp = map[x1][y1];    map[x1][y1] = map[x2][y2];    map[x2][y2] = temp;    k++;   }  }

其中MAX_X和MAX_X是宏定义,需要注意的是地图数组的最外一层不要放图片,后面的消子算法会更加方便。

接下来就是地图的显示了:

  void CGameDlg::ShowMap()  {   int i, j;   CPoint p; // 按钮位置   CString str = _T("");   //清除原有按钮   for (i = 0; i<m_btnGroup.GetSize(); i++)    delete (CLLKButton *)m_btnGroup.GetAt(i);   m_btnGroup.RemoveAll();   //添加新按钮   for (i = 1; i <= MAX_X - 2; i++)    for (j = 1; j <= MAX_Y - 2; j++)    {     p.x = i;     p.y = j;     //arr[j] - 1]++;     //将按钮放入m_btnGroup指针数组中     m_btnGroup.Add(new CLLKButton(map[i][j], p));    }   //显示按钮   for (i = 0; i<(MAX_X - 2)*(MAX_Y - 2); i++)   {    CLLKButton *btn = (CLLKButton *)m_btnGroup.GetAt(i);    if (btn->ID > 0)    {     str.Format(_T("res\%d.png"), btn->ID);       CImage image;     image.Load(str);       btn->Create(str, WS_CHILD | BS_BITMAP | WS_VISIBLE,      CRect(70 + (i % (MAX_Y - 2)) * 50, 70 + (i / (MAX_Y - 2)) * 50,      120 + (i % (MAX_Y - 2)) * 50, 120 + (i / (MAX_Y - 2)) * 50), this,      IDC_BLOCK + i);     btn->SetBitmap(image);     btn->ShowWindow(SW_SHOW);    }   }    }

在生成地图的过程中,我并没有将图片拼接起来,并用掩码消去背景色,这里只是简单的将图片加载到按钮上,不过因为.png的图片能实现透明(.bmp图片是无法实现透明的,会有白色背景),所以也算是实现了透明背景。
还有就是自己重写了一个新的CLLKButton类继承CButton类,就添加了两个属性:

  int ID; // 图片的种类  CPoint p; // 按钮的位置

完整源码已上传至我的GitHub

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解MFC实现连连看游戏之地图显示分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

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

ctvol管理联系方式QQ:251552304

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

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐