好吧,请允许我详述我的困境.
我正在用Java制作一个控制台游戏.它不会非常简单,但我也不希望它真正先进.我只是想用我学到的基础知识来测试我的技能.我已经开了几次,但经常遇到同样的"问题".
这不是一个问题,只是我能做得更好的事情.解释它的最好方法是只显示一些示例代码.
这是我的主课.我们称之为"Main.java".
package com.mattkx4.cgamedev.main;
public class Main {
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
好的,现在让我们在Main.java中创建一个新方法.我们将此方法称为"开始".我们的主类现在看起来像这样:
package com.mattkx4.cgamedev.main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
}
public static void start() {
System.out.println("This is the start.");
Scanner s = new Scanner(System.in);
System.out.println("Enter \"NEXT\" to continue.");
String in = s.nextLine();
if(in.equalsIgnoreCase("NEXT")) {
}else{
System.out.println("Please input \"NEXT\".");
start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们将添加两个方法.我们称之为"中间"和"结束".我们完成的课程现在看起来像这样:
package com.mattkx4.cgamedev.main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
start();
}
public static void start() {
System.out.println("This is the start.");
Scanner s = new Scanner(System.in);
System.out.println("Enter \"NEXT\" to continue.");
String in = s.nextLine();
if(in.equalsIgnoreCase("NEXT")) {
middle();
s.close();
System.exit(0);
}else{
System.out.println("Please input \"NEXT\".");
start();
}
}
public static void middle() {
System.out.println("This is the middle.");
System.out.println("Let's move on to the end.");
end();
}
public static void end() {
System.out.println("This is the end.\nFinishing up, and heading back to the start() method to close program.");
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里写的是一个非常低效的程序.编写代码的效率低下.必须有另一种方法来执行此程序,而不是调用其他方法内部的方法来移动程序.
我的问题摘要:上面的代码是编写控制台游戏最有效的方法吗?
提前致谢!如果您有任何问题,我将很乐意回答.-马修
你的问题有很多种答案.我只列举一些基本的东西.
您的设计是线性的,完全刚性.不易伸缩.像这样的大多数应用程序,而不是链接任何方法等,以某种方式存储状态.这通常是通过以下方式实现的enum.了解基于状态的编程如何工作非常重要.所以你可能有类似的东西:
public enum GameState {
LOAD, START, STOP, BEGIN, MIDDLE, END, GAME_OVER // ... and so on
}
Run Code Online (Sandbox Code Playgroud)你正在使用一堆static方法.这肯定不是你想要做的.它完全放弃任何面向对象.如果你正在创造一个游戏世界,理想情况下,你将拥有一个世界上每个不同对象的类,它们将被安排在逻辑层次结构中,extends相互之间或implements不同的接口.
您将需要学习并发性.如果游戏具有任何复杂性,那么您的用户输入几乎必然与游戏渲染异步.在非常,非常至少,你可能至少需要摆动创建GUI.
因此,只需使用这三个非常基本的注释,您将需要研究面向对象,多态,并发以及可用的所有各种数据结构.坦率地说,您的示例具有Java 101项目的复杂性.(我不是说那是卑鄙的.)如果你打算制作一款真正的游戏,那么在你取得真正的进展之前,你需要更多的基础知识.
你的思维很重要,你编程的目标很大,这很好.但是把这个大梦想打破成可管理的大块.它会让你越走越快,也会让你灰心丧气.
祝你好运!
作为旁注,如果您开始编写一些简单的游戏(甚至像基于控制台的Hangman或Tic-Tac-Toe这样简单的游戏),请参阅Code Review Beta.我们非常乐意为您提供详细的代码审查,并帮助您成为一名资深程序员!这是一个很好的社区,有很多非常有建设性的批评.我在那里帮助过那些人(使用Java)并且在学习Python时获得了很多帮助.
| 归档时间: |
|
| 查看次数: |
3059 次 |
| 最近记录: |