Semáforo Dúvida

9 respostas
L

Galera,

alguém ja fez algum exercicio de semáforo,algo do tipo?

caso alguém ja fez queria tirar umas dúvidas.

9 Respostas

ViniGodoy

Acho que todo mundo que já estudou ciência da computação fez.

By the way… isso é assunto de Java Avançado, não básico.

L

ok vini!

vou postar cada passo que eu fiz,só fiz mas não testei nd ainda!

aqui o temporizador.class

public class Temporizador
{
  public void esperar(int paramInt)
  {
    try
    {
      Thread.sleep(paramInt * 1000);
    }
    catch (Exception localException)
    {
    }
  }
}

Aqui class.Lampada

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JFrame;

public class Lampada
{
  private boolean aceso;
  private Color cor;
  private int raio = 20;
  private int posicaoX;
  private int posicaoY;
  private static Lampada.Janela janela = null;

  public Lampada() {
    this.aceso = false;
    this.cor = Color.green;
    if (janela == null) {
      janela = new Lampada.Janela();
    }
    janela.adicionarLampada(this);
  }

  public void posicionar(int paramInt1, int paramInt2) {
    this.posicaoX = paramInt1;
    this.posicaoY = paramInt2;
    janela.repaint();
  }

  public void acenderVerde() {
    acender(0);
  }

  public void acenderAmarelo() {
    acender(1);
  }

  public void acenderVermelho() {
    acender(2);
  }

  public void apagar() {
    this.aceso = false;
    janela.repaint();
  }

  private void acender(int paramInt) {
    this.aceso = true;
    switch (paramInt)
    {
    case 0:
      this.cor = Color.green;
      break;
    case 1:
      this.cor = Color.yellow;
      break;
    default:
      this.cor = Color.red;
    }
    janela.repaint();
  }

  private class Janela extends JFrame
  {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int posicaoX = 0; private int posicaoY = 0; private int largura = 800; private int altura = 600;

    private ArrayList lampadas = new ArrayList<Lampada>();

    Janela() {
      setDefaultCloseOperation(3);
      setBounds(this.posicaoX, this.posicaoY, this.largura, this.altura);

      setVisible(true);
    }

    public void adicionarLampada(Lampada paramLampada) {
      this.lampadas.add(paramLampada);
    }

    public void paint(Graphics paramGraphics) {
      Dimension localDimension = getSize();

      paramGraphics.setColor(Color.white);
      paramGraphics.fillRect(0, 0, localDimension.width, localDimension.height);

      Iterator localIterator = this.lampadas.iterator();

      while (localIterator.hasNext())
      {
        Lampada localLampada = (Lampada)localIterator.next();
        int i = localLampada.posicaoX;
        int j = localLampada.posicaoY;
        int k = localLampada.raio * 2;
        int l = localLampada.raio * 2;
        int i1 = i + 2;
        int i2 = j + 2;
        int i3 = k - 4;
        int i4 = l - 4;
        if (localLampada.aceso) {
          paramGraphics.setColor(localLampada.cor);
          paramGraphics.fillOval(i1, i2, i3, i4);
        }
        else {
          paramGraphics.setColor(Color.black);
          paramGraphics.fillOval(i1, i2, i3, i4);
        }
        paramGraphics.setColor(Color.black);
        paramGraphics.drawRect(i, j, k, l);
      }
    }
  }

public static boolean access$300(Lampada localLampada) {

	return false;
}

public static Color access$400(Lampada localLampada) {
	
	
	return null;
}

public static int access$000(Lampada localLampada) {
	
	return 0;
}

public static int access$100(Lampada localLampada) {
	
	return 0;
}

public static int access$200(Lampada localLampada) {
	
	return 0;
}
}

Aqui class main

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;

class Janela extends JFrame
{
  /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

private int posicaoX = 0; private int posicaoY = 0; private int largura = 800; private int altura = 600;

  private ArrayList lampadas = new ArrayList();

  Janela(Lampada paramLampada) {
    setDefaultCloseOperation(3);
    setBounds(this.posicaoX, this.posicaoY, this.largura, this.altura);

    setVisible(true);
  }

  public void adicionarLampada(Lampada paramLampada) {
    this.lampadas.add(paramLampada);
  }

  public void paint(Graphics paramGraphics) {
    Dimension localDimension = getSize();

    paramGraphics.setColor(Color.white);
    paramGraphics.fillRect(0, 0, localDimension.width, localDimension.height);

    Iterator localIterator = this.lampadas.iterator();

    while (localIterator.hasNext())
    {
      Lampada localLampada = (Lampada)localIterator.next();
      int i = Lampada.access$000(localLampada);
      int j = Lampada.access$100(localLampada);
      int k = Lampada.access$200(localLampada) * 2;
      int l = Lampada.access$200(localLampada) * 2;
      int i1 = i + 2;
      int i2 = j + 2;
      int i3 = k - 4;
      int i4 = l - 4;
      if (Lampada.access$300(localLampada)) {
        paramGraphics.setColor(Lampada.access$400(localLampada));
        paramGraphics.fillOval(i1, i2, i3, i4);
      }
      else {
        paramGraphics.setColor(Color.black);
        paramGraphics.fillOval(i1, i2, i3, i4);
      }
      paramGraphics.setColor(Color.black);
      paramGraphics.drawRect(i, j, k, l);
    }
  }
}
L

alguem?opniões bem vindas!

esmiralha

essa foi muito boa mesmo!! :lol: :lol: :lol:

L

han!!

ViniGodoy

Faltou as dúvidas. E, se por semáforo você quer dizer desenhar um semáforo, e não os semáforos de Threads, talvez o fórum para essa dúvida seja o de interface gráfica.

L

bom vini as duvidas são da seguinte maneira

1 -Suponha que cada bloco de 3 lâmpadas seja um semáforo. Desta forma, temos dois semáforos.
e que estes são os semáforos de um cruzamento. Assim, quando um semáforo estiver vermelho, o outro deverá estar verde, e vice-e-versa.

2 - ai Teria que fazer um loopinfinito, de forma que cada semáforo fique 5 segundos na cor verde (enquanto o outro fica na cor vermelha).
Quando um sinal for passar da cor verde para a cor vermelha, ele deverá permanecer 2 segundos na cor amarela. Durante este período, o outro lado ainda permanece na cor vermelha e só deve mudar para verde quando o primeiro sinal se tornar vermelho.

seria mais ou - isso!

quanto ao meu codigo se esta atendendo isso!

AnDrOiDe

cara vc conseguiu resolver seu problema?

L

não brother ainda não resolvi não!

Criado 9 de junho de 2011
Ultima resposta 15 de jun. de 2011
Respostas 9
Participantes 4