Java控制台游戏开发| 方法

Mat*_*kx4 3 java

好吧,请允许我详述我的困境.

我正在用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)

我在这里写的是一个非常低效的程序.编写代码的效率低下.必须有另一种方法来执行此程序,而不是调用其他方法内部的方法来移动程序.

我的问题摘要:上面的代码是编写控制台游戏最有效的方法吗?

提前致谢!如果您有任何问题,我将很乐意回答.-马修

ast*_*eri 5

你的问题有很多种答案.我只列举一些基本的东西.

  1. 您的设计是线性的,完全刚性.不易伸缩.像这样的大多数应用程序,而不是链接任何方法等,以某种方式存储状态.这通常是通过以下方式实现的enum.了解基于状态的编程如何工作非常重要.所以你可能有类似的东西:

    public enum GameState {
        LOAD, START, STOP, BEGIN, MIDDLE, END, GAME_OVER // ... and so on
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你正在使用一堆static方法.这肯定不是你想要做的.它完全放弃任何面向对象.如果你正在创造一个游戏世界,理想情况下,你将拥有一个世界上每个不同对象的类,它们将被安排在逻辑层次结构中,extends相互之间或implements不同的接口.

  3. 您将需要学习并发性.如果游戏具有任何复杂性,那么您的用户输入几乎必然与游戏渲染异步.在非常,非常至少,你可能至少需要摆动创建GUI.

因此,只需使用这三个非常基本的注释,您将需要研究面向对象,多态,并发以及可用的所有各种数据结构.坦率地说,您的示例具有Java 101项目的复杂性.(我不是说那是卑鄙的.)如果你打算制作一款真正的游戏,那么在你取得真正的进展之前,你需要更多的基础知识.

你的思维很重要,你编程的目标很大,这很好.但是把这个大梦想打破成可管理的大块.它会让你越走越快,也会让你灰心丧气.

祝你好运!


作为旁注,如果您开始编写一些简单的游戏(甚至像基于控制台的Hangman或Tic-Tac-Toe这样简单的游戏),请参阅Code Review Beta.我们非常乐意为您提供详细的代码审查,并帮助您成为一名资深程序员!这是一个很好的社区,有很多非常有建设性的批评.我在那里帮助过那些人(使用Java)并且在学习Python时获得了很多帮助.