c#消消乐

您所在的位置:网站首页 麻将消消乐小游戏 c#消消乐

c#消消乐

2023-12-23 17:42| 来源: 网络整理| 查看: 265

转载文章出处:http://my.oschina.net/ybusad/blog/153533

为了快速开发选用了C#作为实现语言。本文的示例代码将以C#给出。 

首先分析游戏,消除界面是一个7*7固定的棋盘,有有限种基本棋子(蓝,紫,红,白,咖啡,绿,橘黄),还有一些特殊功能棋子暂不考虑,下面是一张游戏截图:

连成三个通常有几种情况可以考虑,大家在玩的时候应该能体会到,下面的6个图(注意颜色区分)是以3*2为分析单元的所有情况,对于2*3其实同理,只不过要转换一下。

O↑O O   O O O↓OOO↓

 

OO↑↑OOO    OO  ↓OO

下面有两个图是1*4的所有情况(4*1同理): 

OO←O O→OO

在消除的时候通常就是按照上述规律进行的,所以我们只要对棋盘数据进行分割,然后对应上面几种情况,判断固定位置是否是相同的棋子,那么就可以直接知道应该交换哪两个位置了。 

不同棋子可以用1234..这样简单表示,棋盘数据是一个7*7的二维数组,假设上图是这样一个二维数组:

new int[7, 7] { {4,0,0,4,1,5,3}, {1,2,1,0,1,0,5}, {5,4,6,2,0,4,3}, {2,4,6,5,1,3,5}, {1,5,3,1,0,0,5}, {6,5,3,2,2,1,2}, {1,0,5,2,0,2,2} };

下面对数据进行2*3、1*4划分,由于划分之后要进行判断并返回所在棋盘数组的位置,因此需要定义一个含有位置字段和数据段的一个数据结构 ,位置是通过x、y坐标来定位,也就是数组下标:

/// /// 定义棋子坐标(从0开始) /// public struct point{ public int m_x; public int m_y; public point(int x, int y) { m_x = x; m_y = y; } };

为了能够简单初始化,所以给了一个构造函数来初始化成员。

/// /// 每个棋子都记录一个位置 /// private struct ele { public point m_pIndex; public int m_data; };

下面的函数将棋盘数据转化为含有位置信息的新数组,通过成员refData进行存储:

/// /// 将原始数据进行转化 /// private void ConvertData() { refData = new ele[7, 7]; for (int i = 0; i < 7; ++i) { for (int j = 0; j < 7; ++j) { refData[i, j].m_data = chessData[i, j]; refData[i, j].m_pIndex = new point(i, j); } } }

最重要的就是分析单元的提取,在进行提取之前,我们首先需要定义几个标志位:

//行列计次 int s_x = 0; int s_y = 0; //遍历标识 bool is_2x3 = true; bool is_3x2 = false; bool is_1x4 = false; bool is_4x1 = false; bool m_bFinished = false;

s_x,s_y 是用于定位棋子的变量,因为取3*2和2*3的时候需要紧挨着取,保证不能漏掉。

下面4个bool变量标志当前正在取哪种类型的区域。

/// /// 返回下一个分析单元 /// /// private ele[,] GetNextSection() { ele[,] sec = null; //纵向(2*3)遍历 if (s_x


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3