Pygame战舰游戏:点击网格外崩溃问题的解决方法
问题解决:点击网格外导致Pygame游戏报错终止
问题原因
你的GRID是10×10的二维列表,索引范围仅为0到9。当点击网格外区域时,计算出的ROW或COLUMN会超出这个范围(比如点击屏幕下方时,ROW会等于10甚至更大),直接访问GRID[ROW][COLUMN]会触发索引越界错误,导致游戏直接终止。
修复代码
修改游戏主循环中处理鼠标点击的逻辑,添加范围判断,仅处理网格内的有效点击:
while PLAYING == True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() if event.type == pygame.MOUSEBUTTONDOWN: POS = pygame.mouse.get_pos() COLUMN = POS[0] // (GRIDWIDTH + MARGIN) ROW = POS[1] // (GRIDHEIGHT + MARGIN) # 仅处理网格范围内的点击 if 0 <= ROW < 10 and 0 <= COLUMN < 10: GRID[ROW][COLUMN] = 1 draw_grid() FPSCLOCK.tick(FPS) pygame.display.update()
额外优化建议
- 可以给网格外的点击添加反馈(比如不执行任何操作,或者在控制台打印提示),让玩家明确知道点击无效
- 后续添加船只随机放置逻辑时,同样需要确保船只位置不会超出网格范围
内容的提问来源于stack exchange,提问作者Luke Dronsfield
相关产品推荐
相关产品推荐

