Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将状态添加到游戏中?_Java_Awt_State - Fatal编程技术网

Java 如何将状态添加到游戏中?

Java 如何将状态添加到游戏中?,java,awt,state,Java,Awt,State,在我当前的游戏中,应该有不同的状态,例如,当我在游戏主菜单中时,状态将变为“主菜单”,如果我在游戏(游戏)中,状态将变为“游戏” 现在它只是开始游戏,而不是主菜单。所以我的问题是,我如何才能添加它,使它以应有的方式工作 编辑:我当然希望游戏在主菜单状态下开始,以防不清楚:),然后按“播放”开始游戏,“退出”退出或“选项”等等 编辑2:第一个代码具有非工作状态功能。底部的代码有一个Statefunction可以工作。为什么我不能让它为第一个代码工作 代码: 打包游戏。窗口; 导入java.awt.

在我当前的游戏中,应该有不同的状态,例如,当我在游戏主菜单中时,状态将变为“主菜单”,如果我在游戏(游戏)中,状态将变为“游戏”

现在它只是开始游戏,而不是主菜单。所以我的问题是,我如何才能添加它,使它以应有的方式工作

编辑:我当然希望游戏在主菜单状态下开始,以防不清楚:),然后按“播放”开始游戏,“退出”退出或“选项”等等

编辑2:第一个代码具有非工作状态功能。底部的代码有一个Statefunction可以工作。为什么我不能让它为第一个代码工作

代码:

打包游戏。窗口;
导入java.awt.Canvas;
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.image.BufferStrategy;
导入java.awt.image.buffereImage;
导入java.util.Random;
导入Game.Framework.AudioPlayer;
导入Game.Framework.KeyInput;
导入Game.Framework.ObjectId;
导入Game.Framework.Texture;
导入Game.Interfaces.main菜单;
导入Game.Objects.Block;
导入Game.Objects.Player;
公共类游戏扩展画布实现可运行{
私有静态最终长serialVersionUID=-32588900033988871268L;
私有布尔运行=false;
私有线程;
公共静态int宽度、高度;
//缓冲“级别”和“背景”
私有缓冲区映像级别=null,背景=null;
处理者;
摄像机;
静态纹理纹理;
Random rand=新的Random();
公共枚举状态{
主菜单,
游戏
};
公共静态游戏状态=STATE.main菜单;
公共void init(){
宽度=getWidth();
高度=getHeight();
AudioPlayer.load();
AudioPlayer.getMusic(“music”).loop();
tex=新纹理();
BufferedImageLoader=新的BufferedImageLoader();
Level=loader.loadImage(“/Level.png”);//加载图像“Level”
Background=loader.loadImage(“/Background.png”);//加载图像“Background”
handler=新的handler();
cam=新摄像头(0,0);
LoadImageLevel(级别);
this.addKeyListener(新的KeyInput(handler,null));
}
公共同步的void start(){
如果(正在运行)
返回;
运行=真;
线程=新线程(此);
thread.start();
}
//循环游戏
公开募捐{
init();
this.requestFocus();
long lastTime=System.nanoTime();
双amountOfTicks=60.0;
双ns=1000000000/个;
双增量=0;
长定时器=System.currentTimeMillis();
int=0;
int帧=0;
(跑步时){
long now=System.nanoTime();
增量+=(现在-上次)/ns;
上次=现在;
而(增量>=1){
勾选();
更新++;
三角洲--;
}
render();
frames++;
if(System.currentTimeMillis()-计时器>1000){
定时器+=1000;
System.out.println(“FPS:+frames+”-勾号:+updates);
帧=0;
更新=0;
}
}
}
私人空白勾号(){
if(Game.gameState==STATE.Game){
handler.tick();
}else if(Game.gameState==STATE.main菜单){
//main menu.tick();
}
对于(int i=0;i>16)和0xff;
绿色整数=(像素>>8)&0xff;
蓝色整数=(像素)&0xff;
if(红色==255&&绿色==255&&蓝色==255)handler.addObject(新块(xx*32,yy*32,0,ObjectId.Block));
if(红色==0&&绿色==255&&蓝色==0)handler.addObject(新块(xx*32,yy*32,1,ObjectId.Block));
if(红色==0&&绿色==38&&蓝色==255)handler.addObject(新播放器(xx*32,yy*32,handler,ObjectId.Player));
}
}
}
公共静态纹理getInstance(){
返回tex;
}
}
主菜单:

package Game.Interfaces;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import Game.Framework.AudioPlayer;
import Game.Window.Game;
import Game.Window.Game.STATE;
import Game.Window.Handler;

public class MainMenu extends MouseAdapter{

    private Game game;
    private Handler handler;

    public MainMenu(Game game, Handler handler){
        this.game = game;
        this.handler = handler;
    }

    public void mousePressed(MouseEvent e){
        int mx = e.getX();
        int my = e.getY();

        if(Game.gameState == STATE.MainMenu){
            if(mouseOver(mx, my, 10, 10, 50, 50)){
                AudioPlayer.getSound("menu_sound").play();
                Game.gameState = STATE.Game;
                return;
            }
        }
    }
    public void mouseReleased(MouseEvent e){
    }
    private boolean mouseOver(int mx, int my, int x, int y, int WIDTH, int HEIGHT){
        if(mx > x && mx < x + WIDTH){
            if(my > y && my < y + HEIGHT){
                return true;
            }else return false;
        }else return false;
    }
    public void tick(){
    }
    public void render(Graphics g){
        if(Game.gameState == STATE.MainMenu){
            Font fnt1 = new Font("Arial", 1, 50);

            g.setFont(fnt1);
            g.setColor(Color.WHITE);
            g.drawRect(10, 10, 100, 100);
            g.drawString("Main Menu", 10, 10);
        }
    }
}
打包游戏。界面;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入Game.Framework.AudioPlayer;
导入Game.Window.Game;
导入Game.Window.Game.STATE;
导入Game.Window.Handler;
公共类主菜单扩展了MouseAdapter{
私人游戏;
私人经办人;
公共主菜单(游戏、处理程序){
这个游戏=游戏;
this.handler=h
package Game.Interfaces;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import Game.Framework.AudioPlayer;
import Game.Window.Game;
import Game.Window.Game.STATE;
import Game.Window.Handler;

public class MainMenu extends MouseAdapter{

    private Game game;
    private Handler handler;

    public MainMenu(Game game, Handler handler){
        this.game = game;
        this.handler = handler;
    }

    public void mousePressed(MouseEvent e){
        int mx = e.getX();
        int my = e.getY();

        if(Game.gameState == STATE.MainMenu){
            if(mouseOver(mx, my, 10, 10, 50, 50)){
                AudioPlayer.getSound("menu_sound").play();
                Game.gameState = STATE.Game;
                return;
            }
        }
    }
    public void mouseReleased(MouseEvent e){
    }
    private boolean mouseOver(int mx, int my, int x, int y, int WIDTH, int HEIGHT){
        if(mx > x && mx < x + WIDTH){
            if(my > y && my < y + HEIGHT){
                return true;
            }else return false;
        }else return false;
    }
    public void tick(){
    }
    public void render(Graphics g){
        if(Game.gameState == STATE.MainMenu){
            Font fnt1 = new Font("Arial", 1, 50);

            g.setFont(fnt1);
            g.setColor(Color.WHITE);
            g.drawRect(10, 10, 100, 100);
            g.drawString("Main Menu", 10, 10);
        }
    }
}
package Game;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.util.Random;

public class Game extends Canvas implements Runnable{

    private static final long serialVersionUID = 7364682855700581664L;

    public static final int WIDTH = 800, HEIGHT = WIDTH / 12 * 9;

    private Thread thread;
    private boolean running = false;

    public static boolean paused = false;
    public int diff = 0; 

    // 0 = EASY
    // 1 = NORMAL
    // 2 = HARD

    private Random r;
    private Handler handler;
    private HUD hud;
    private Spawner spawner;
    private Menu menu;

    public enum STATE {
        Menu,
        Options,
        Game,
        Select,
        Lose
    };

    public static STATE gameState = STATE.Menu;

    public Game(){
        hud = new HUD();
        handler = new Handler();
        menu = new Menu(this, handler, hud);
        this.addKeyListener(new KeyInput(handler, this));
        this.addMouseListener(menu);

        AudioPlayer.load();
        AudioPlayer.getMusic("music").loop();

        new Window(WIDTH, HEIGHT, "Test Game", this);

        spawner = new Spawner(handler, hud, this);
        r = new Random();

        if(gameState == STATE.Game){
            handler.addObject(new Player(WIDTH/2-32, HEIGHT/2-32, ID.Player, handler));
            handler.addObject(new BasicEnemy(r.nextInt(Game.WIDTH - 50), r.nextInt(Game.HEIGHT - 50), ID.BasicEnemy, handler));
        }
    }

    public synchronized void start(){
        thread = new Thread(this);
        thread.start();
        running = true;
    }

    public synchronized void stop(){
        try{
            thread.join();
            running = false;
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public void run(){
        this.requestFocus();
        long lastTime = System.nanoTime();
        double amountOfTicks = 60.0;
        double ns = 1000000000 / amountOfTicks;
        double delta = 0;
        long timer = System.currentTimeMillis();
        int frames = 0;
        while(running){
            long now = System.nanoTime();
            delta += (now - lastTime) / ns;
            lastTime = now;
            while(delta >= 1){
                tick();
                delta--;
            }
            if(running)
                render();
            frames++;

            if(System.currentTimeMillis() - timer > 1000){
                timer += 1000;
                System.out.println("FPS: " + frames);
                frames = 0;
            }
        }
        stop();
    }

    private void tick(){
        if(gameState == STATE.Game){
            if(!paused){
                hud.tick();
                spawner.tick();
                handler.tick();

                if(HUD.PlayerHealth < 1){
                    HUD.PlayerHealth = 100;
                    //hud.setLevel(1);
                    //hud.setScore(0);
                    gameState = STATE.Lose;
                    handler.clearEnemies();
                }
            }

        }else if(gameState == STATE.Menu  || gameState == STATE.Lose || gameState == STATE.Select){
            menu.tick();
            handler.tick();
        }
    }

    private void render(){
        BufferStrategy bs = this.getBufferStrategy();
        if(bs == null){
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();

        g.setColor(Color.BLACK);
        g.fillRect(0, 0, WIDTH, HEIGHT);

        handler.render(g);

        if(paused){
            g.setColor(Color.RED);
            g.drawString("PAUSED", 370, 260);
        }

        if(gameState == STATE.Game){
            hud.render(g);
        }else if(gameState == STATE.Menu || gameState == STATE.Options  || gameState == STATE.Lose || gameState == STATE.Select){
            menu.render(g);
    }

        g.dispose();
        bs.show();
    }

    public static float clamp(float var, float min, float max){
        if(var >= max)
            return var = max;
        else if(var <= min)
            return var = min;
        else
            return var;
    }

    public static void main(String args[]){
        new Game();
    }
}