如何在老虎机游戏的3x5 2D string vector中检测对角线匹配
老虎机3x5矩阵对角线匹配检测实现
修正后的完整代码
#include <iostream> #include <vector> #include <string> using namespace std; // 打印2D向量(调试用) void print2D_Vector(const vector<vector<string>>& vec) { for (const auto& row : vec) { for (const auto& elem : row) { cout << elem << " "; } cout << endl; } } // 根据匹配符号计算奖金 int getPayout(const string& symbol) { if (symbol == "cherry") return 5; if (symbol == "bell") return 10; if (symbol == "7") return 20; if (symbol == "diamond") return 25; if (symbol == "$") return 30; return 0; } int main() { vector<vector<string>> reels = { {"cherry", "bell", "7", "bell", "diamond"}, {"diamond", "cherry", "7", "bell", "$"}, {"7", "diamond", "cherry", "$", "bell"} }; print2D_Vector(reels); int total_Payout = 0; // 检测左上到右下的对角线匹配 for (int start_col = 0; start_col <= 2; ++start_col) { string first = reels[0][start_col]; string second = reels[1][start_col + 1]; string third = reels[2][start_col + 2]; if (first == second && second == third) { total_Payout += getPayout(first); cout << "匹配到左上到右下对角线:" << first << endl; } } // 检测左下到右上的对角线匹配 for (int start_col = 0; start_col <= 2; ++start_col) { string first = reels[2][start_col]; string second = reels[1][start_col + 1]; string third = reels[0][start_col + 2]; if (first == second && second == third) { total_Payout += getPayout(first); cout << "匹配到左下到右上对角线:" << first << endl; } } cout << "你的总奖金是:" << total_Payout << endl; return 0; }
关键逻辑说明
- 正向对角线遍历:
左上到右下的3条对角线起始列分别为0、1、2,对应元素坐标为(0, col)、(1, col+1)、(2, col+2),循环遍历起始列即可覆盖所有目标对角线。 - 反向对角线遍历:
左下到右上的3条对角线起始列同样是0、1、2,对应元素坐标为(2, col)、(1, col+1)、(0, col+2),逻辑与正向完全对称。 - 奖金计算优化:
将符号与奖金的映射抽为独立函数getPayout,后续新增符号或调整奖金时,只需修改该函数即可,代码维护性更强。 - 匹配判断简化:
先取出三个位置的元素再做相等判断,比嵌套条件更直观,也方便调试时查看每个位置的符号值。
内容的提问来源于stack exchange,提问作者o.ayden76
相关产品推荐
相关产品推荐

