flag使用错误出现bug

bug代码

cpp 复制代码
//第一关、第二关第一次进入的时候的标记变量
int flag1 = 1, flag2 = 1;

int main() {

	while (!gameOver) {

		if (level == 1 && flag1 == 1) {
			currentpr = rk[0][0];
			currentpc = rk[0][1];
			newpr = currentpr;
			newpc = currentpc;
			flag1 = 0;
		}
		/*
			出现bug的代码
		*/
		//else if (level == 2 && flag2 == 2) {

		/*
			
		*/
		else if(level == 2 && flag2 == 1){
			currentpr = rk[1][0];
			currentpc = rk[1][1];
			newpr = currentpr;
			newpc = currentpc;
			flag2 = 0;
		}

		system("cls");//清屏
		showMap();
		showMenu();

		if (isSuccess()) {
			if (level == 1) {
				cout << "逃出成功!" << endl;
				cout << "下一关" << endl;
				cout << "是否继续游戏?(Y/N)" << endl;
				cin >> direction;
				if (direction == 'Y') {
					level++;//下一关
					continue;
				}
				else {
					cout << "游戏结束,欢迎下次游玩。" << endl;
					break;
				}
			}
			else if (level == 2) {
				cout << "逃出成功!" << endl;
				break;
			}
		}

		input();
		move();
	}
	return 0;
}

Bug 原因分析

在第二关初始化逻辑中,flag2的判断条件错误,导致第二关的初始坐标未被正确设置,进而无法移动。

具体来看这段代码:

cpp 复制代码
else if (level == 2 && flag2 == 2) {  // 条件错误
    currentpr = rk[1][0];  // 第二关入口坐标(0,2)
    currentpc = rk[1][1];
    newpr = currentpr;
    newpc = currentpc;
    flag2 = 0;
}
  • 全局变量flag2初始值为1(int flag2 = 1;),但判断条件写成了flag2 == 2,导致该分支永远不会执行。
  • 因此进入第二关时,currentpr、currentpc仍保留第一关结束时的坐标(而非第二关入口(0,2)),而该坐标在map2中可能是墙壁(非空格),导致move()函数中始终触发 "回退" 逻辑,表现为无法移动。

Bug 解决方案

修正第二关初始化的flag2判断条件,将flag2 == 2改为flag2 == 1,确保第一次进入第二关时正确初始化坐标。

相关推荐
单片机设计·······几秒前
【dz-1162】汽车前玻璃雨刮器设计
c++·单片机·嵌入式硬件
AI智讯中枢20 分钟前
高性能 C++ 实战 (五):perf+FlameGraph 火焰图生产实战,精准定位 CPU / 缓存 / 锁瓶颈,避坑 + 完整实操案例
linux·c++·性能调优·性能分析·perf·flamegraph·火焰图
繁华的地方不一定留下你的脚印25 分钟前
C++ 算法与 ranges:用 find_if、transform 写清数据处理意图
开发语言·c++·算法
张小姐的猫27 分钟前
【AI大模型接入SDK】 —— 前端页面 & 项目总结与拓展
前端·数据结构·数据库·c++·人工智能·chatgpt
AC赳赳老秦1 小时前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践(基于C++):专栏内容介绍及目录
c++·人工智能·opencv·计算机视觉
码匠许师傅2 小时前
【C++三方组件】Asio 下篇:C++20 协程版 TCP 客户端与服务端
c++·tcp/ip·c++20
一只旭宝2 小时前
【C++复习】四种类型转换 + 常见设计模式 + Redis/MySQL(后端面试复习完整版)
c++·redis·笔记·mysql·设计模式
rhett. li2 小时前
用 AI 写 C++ 桌面 UI:TRAE + nim_duilib 实战指南
c++·人工智能·ui
ShineWinsu2 小时前
对于Redis:Redis特性以及应用场景的解析
linux·c++·redis·缓存·高并发·分布式系统·key-value