java - 如何将游戏升级到下一个级别
问题描述
对于我的项目,我正在设计一个具有三个级别的游戏,每个级别都设置为一个数组。完成每个级别后,游戏应自动进入下一个级别。我目前让它从第 1 级升级到第 2 级,但在完成第 2 级后,它只是再次重新加载第 2 级。我的老师说我应该使用一个变量来确定我当前的级别,并随着我进入下一个级别而增加它,我正在这样做,所以我不确定为什么游戏会卡在第 2 级。他提到我应该正在使用静态变量,但我不明白这与我目前正在做的事情有何不同。
{
private char[][] level1 = {
{'#', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', ' '},
{'#', ' ', '|', '#', ' ', ' ', ' ', ' ', ' ', ' '},
{'#', ' ', ' ', '#', '#', '#', ' ', ' ', ' ', ' '},
{'#', ' ', '@', ' ', ' ', '#', ' ', ' ', ' ', ' '},
{'#', ' ', ' ', '$', ' ', '#', ' ', ' ', ' ', ' '},
{'#', ' ', ' ', '#', '#', '#', ' ', ' ', ' ', ' '},
{'#', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', ' '}
};
private char[][] level2 = {
{'#', '#', '#', '#', '#', ' ', ' ', ' ', ' '},
{'#', '@', ' ', ' ', '#', ' ', ' ', ' ', ' '},
{'#', ' ', '$', '$', '#', ' ', '#', '#', '#'},
{'#', ' ', '$', ' ', '#', ' ', '#', '|', '#'},
{'#', '#', '#', ' ', '#', '#', '#', '|', '#'},
{' ', '#', '#', ' ', ' ', ' ', ' ', '|', '#'},
{' ', '#', ' ', ' ', ' ', '#', ' ', ' ', '#'},
{' ', '#', ' ', ' ', ' ', '#', '#', '#', '#'},
{' ', '#', '#', '#', '#', '#', ' ', ' ', ' '},
};
private char[][] level3 = {
{'#', '#', '#', '#', '#', '#', ' '},
{'#', ' ', ' ', ' ', ' ', '#', ' '},
{'#', ' ', '#', '@', ' ', '#', ' '},
{'#', ' ', '$', '*', ' ', '#', ' '},
{'#', ' ', '|', '*', ' ', '#', ' '},
{'#', ' ', ' ', ' ', ' ', '#', ' '},
{'#', '#', '#', '#', '#', '#', ' '},
};
public void act() {
\\game code here
if (testLevelComplete() == true) {
levelComplete();
}
}
public void levelComplete()
{
int currentLevel = 0;
currentLevel = currentLevel + 1;
showWarning("Level Complete! Current level is " + currentLevel);
if (currentLevel == 1) {
loadLevel(level1);
} else {
if (currentLevel == 2) {
loadLevel(level2);
} else {
if (currentLevel == 3) {
loadLevel(level3);
} else {
if (currentLevel > 3) {
showWarning("Level Complete! No more levels.");
}}}}
}
}```
解决方案
与大多数主流编程语言一样,变量在 Java中是作用域的。通常花括号{
开始或结束一个范围。
public void levelComplete()
{
int currentLevel = 0; // starts living here
// ... your code ...
} // `currentLevel` dies here and is gone
所以每次你打电话levelComplete
,你从零开始。
由于关卡是游戏状态的一部分,因此您应该将其上移以成为游戏对象的属性。只要您的对象存在,这些属性就会存在,例如:
public class Game {
// Lives as long as the containing Game object does
private int level = 0;
public void levelComplete() // shouldn't this rather be private?
{
this.level++;
}
}
推荐阅读
- javascript - 如果选中“桌面站点”,则强制缩小移动浏览器/页面
- wso2 - 在 WSO2 Integration Studio / Micro Integrator 上关闭 SSL 验证
- acumatica - 发票和备忘录屏幕 Acumatica 中的电子邮件发票/备忘录操作
- rest - Improve start/destination matching for HERE FLEET Route API
- angular - 离子没有得到 API 的响应
- reactjs - React:render() 与 ReactDOM.render() 的比较
- reactjs - React Firebase Auth 初始化问题 - 没有创建 Firebase App '[DEFAULT]'
- python - 在不使用 re-Python 的情况下删除列表中除空格外的特殊字符
- django - 无法在 django 中保存标签
- android - Parcelable 在 kotlin 中无法正常工作