[JAVA]napraviti krugove random nestati

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Odgovori
Avatar
Nordrew
Postovi: 68
Pridružen/a: 11 tra 2015, 18:06
Spol: M
OS: Ubuntu, elemntary OS

[JAVA]napraviti krugove random nestati

Post Postao/la Nordrew »

Znaci radim igricu onako iz dosade i u igrici se radi da skaces po kamenjima a kamenja nekad budu pokrivene vodom(nestanu) i ako igrac stoji na kamenu kad bude pokriven vodom on padne u vodu i izgubi igru. Ja sam za sad dosao do djela da sam napravio covjeka moze skakati po kamenjima ali sam zapeo na tome da kamenja(krugovi za sad) random nestanu i nakon random sekundi opet se pojave(ali da to sve nebude predugo). Ja sam nesto probavao ali su mi kamenja zbog necega cijelo vrijeme "nevidljiva". Ovo je moj kod:
Moja glavna klasa:

Kod: Označi sve

package com.pitcher654.main;

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

import com.pitcher654.main.Game.STATE;

public class Game extends Canvas implements Runnable{
	
	private static final long serialVersionUID = -7800496711589684767L;
	
	public static final int WIDTH = 640, HEIGHT = WIDTH / 12 * 9;
	
	private Thread thread;
	private boolean running = false;
	private static final int NUM_STONES = 5; //broj kamenja i ostalo
	private boolean[] visible = new boolean[NUM_STONES];
	private long[] changeTimes = new long[NUM_STONES];
	private Random r;
	private Handler handler;
	//private HUD hud;
	private Menu menu;
	
	public enum STATE {
		Menu,
		Help,
		Game
	};
	
	public STATE gameState = STATE.Menu;
	
	public Game() {
		handler = new Handler();
		menu = new Menu(this, handler);
		this.addKeyListener(new KeyInput(handler));
		this.addMouseListener(menu);
		new Window(WIDTH, HEIGHT, "My game", this);
		
		//hud = new HUD();
		r = new Random();
		
		if(gameState == STATE.Game) {
			//handler.addObject(new Player(100, 200, ID.Player));
			for(int i=0; i<NUM_STONES; i++){
			    visible[i] = true; // svaki kamen je na pocetku vidljiv
			    changeTimes[i] = System.currentTimeMillis() + r.nextInt(10000); // svaki kamen ce nestati u manje od 10 sekundi
			}
		}
		
		//handler.addObject(new Player(100, 200, ID.Player));
		//handler.addObject(new BasicEnemy(100, 200, ID.BasicEnemy));
		
	}
	
	public synchronized void start() {
		thread = new Thread(this);
		thread.start();
		running = true;
	}
	
	public synchronized void stop() {
		try {
			thread.join();
			running = false;
		}catch(Exception ex) { ex.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() {
		handler.tick();
		//hud.tick();
		if(gameState == STATE.Game) {
			Random r = new Random();
			long now = System.currentTimeMillis();
			for(int i=0; i<NUM_STONES; i++){
			    if(now < changeTimes[i]){ // ako je vrijeme doslo
			        if(visible[i]) changeTimes[i] = now + r.nextInt(5000); // svaki kamen ce biti nevidljiv do 5 sekundi
			        else changeTimes[i] = now + r.nextInt(10000); //svaki kamen ce opet biti vidljiv do 10 sekundi
			        visible[i] = !visible[i]; // napraviti ga (ne)vidljivog
			   }
			}
		}else if(gameState == STATE.Menu) {
			menu.tick();
		}
	}
	
	private void render() {
		BufferStrategy bs = this.getBufferStrategy();
		if(bs == null) {
			this.createBufferStrategy(3);
			return;
		}
		
		Graphics g = bs.getDrawGraphics();
		
		g.setColor(new Color(87, 124, 212));
		g.fillRect(0, 0, WIDTH, HEIGHT);
		if(gameState == STATE.Game) {
			g.setColor(new Color(209, 155, 29));
			for(int i = 0; i < 5; i++) {
				g.fillOval(80 + (100 * i), 325, 70, 20);
			}
			if(gameState == STATE.Game) {

			    for(int i = 0; i < NUM_STONES; i++) {
			        if(visible[i]) g.setColor(new Color(209, 155, 29));
			        else g.setColor(new Color(107, 155, 170));//promjeniti boju ako je (ne)vidljiv
			        g.fillOval(80 + (100 * i), 325, 70, 20);
			    }
			}	
		}else if(gameState == STATE.Menu || gameState == STATE.Help){
			menu.render(g);
		}
		
		handler.render(g);
		
		if(gameState == STATE.Game) {
		}
		//hud.render(g);
		
		g.dispose();
		bs.show();
	}
	
	public static int clamp(int var, int min, int max) {
		if(var >= max)
			return var = max;
		else if(var <= max)
			return var = min;
		else 
			return var;
	}
	
	public static void main(String[] args) {
		new Game();
	}
}
ako treba jos koja klasa samo recite

Hvala puno na pomoci!

pitcher654
Odgovori