En el avance anterior especificamos bien cual era el diseño del cruce, consta de 3 calles, NORTE, SUR, OESTE, cada calle en doble sentido. También especificamos por medio de una tabla utilizando el sistema binario, también cual sería la dinámica de los automóviles y como se comportarían los semáforos. Al final, por medio de una tabla especificamos los roles de cada uno, tomando en cuenta que algunas actividades nos podríamos turnar para realizarlas. En este segundo avance mostramos una parte de lo que llevamos, de lo que consideramos más importante.
(Prototipo de la imagen)

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ventana extends JFrame{
private static final long serialVersionUID = 1L;
String semaforos[]={"Imagenes//rojo.jpg","Imagenes//verde.jpg"};
int i=0,j=0,k=0,q=0;
// int sem1,sem2, total1=10,total2=10,sale1,sale2;
// boolean x=false;
JLabel fondo = new JLabel();
int tiempo = 1000;
int vida = 1000;
int totalvida;
int d,a,m,c;
int t,y,u,o;
int carros11=10,carros12=1,carros21=3,carros22=4;
int llegada11,llegada12,llegada21,llegada22;
int sale=1;
int sema11,sema12,sema21,sema22;
//carros tardaran 2 segundos en salir
Timer iniciovida = new Timer(vida , new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
totalvida+=vida;
}
});
Timer semaforo11 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
d+=vida;
if(i==0)
{
if(d>=6000)
{
llegada11=Semaforo.aleatorio(2,3);
carros11+=llegada11;
System.out.println("carros11:" +carros11);
d=0;
}
}
if(carros11>=10)
{
t+=vida;
repaint();
if(carros11>0)
{
if(t>=2000 )
{
carros11-=1;
System.out.print("sale11\n");
t=0;
}
}
}
}
}
)
;
Timer semaforo12 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(j==0)
{
a+=vida;;
if(a>=3000)
{
llegada12=Semaforo.aleatorio(1, 4);
carros12+=llegada12;
System.out.println("carros12:"+carros12);
a=0;
}
}
if(carros12>=10)
{
y+=vida;;
repaint();
if(carros12>0)
{
if(y>=2000 )
{
carros12-=1;
System.out.print("sale12\n");
y=0;
}
}
}
}
}
)
;
Timer semaforo21 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(k==0)
{
m+=vida;
if(m>=3000)
{
llegada21=Semaforo.aleatorio(2, 4);
carros21+=llegada21;
System.out.println("carros21:"+carros21);
m=0;
}
}
if(carros21>=10)
{
u+=vida;
repaint();
if(carros21>0)
{
if(u>=2000)
{
carros21-=1;
System.out.print("sale21\n");
u=0;
}
}
}
}
}
)
;
Timer semaforo22 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(q==0)
{
c+=vida;;
if(c>=3000)
{
llegada22=Semaforo.aleatorio(2, 4);
carros22+=llegada22;
System.out.println("carros22:"+carros22);
c=0;
}
}
if(carros22>10)
{
o+=vida;;
repaint();
if(carros22>0)
{
if(o>=2000)
{
carros22-=1;
System.out.print("sale22\n");
o=0;
}
}
q=0;
k=0;
j=0;
i=1; }
}
}
)
;
public void paint(Graphics g){
super.paint(g);
add (fondo);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[i])).getImage(),300,200,50,50,this);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[j])).getImage(),600,200,50,50,this);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[q])).getImage(),300,470,50,50,this);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[k])).getImage(),600,470,50,50,this);
/*
if (x == true)
{
System.out.print("\n\n");
System.out.print("\nCarros en el semaforo1: " + total1);
sem1 = Semaforo.aleatorio(0,10);
System.out.print("\nCarros que entra semaforo1: "+sem1);
total1+=sem1;
System.out.print("\nTotal de carros en semaforo1 :"+total1);
sale1= Semaforo.aleatorio(1, 10);
System.out.print("\nCarros que salen: "+sale1);
total1-=sale1;
if(total1<total2)
{
//x= false;
}
}
else if (x ==true)
{
System.out.print("\n\n");
System.out.print("\nCarros en el semaforo2: "+total2);
sem2 = Semaforo.aleatorio(0,10);
total2+=sem2;
System.out.print("\nCarros que entra semaforo 2: "+sem2);
System.out.print("\nTotal de Carros en semaforo: "+total2);
sale2= Semaforo.aleatorio(1,10);
System.out.print("\nCarros que salen: "+sale2);
total2-=sale2;
if(total2<total1)
{
// x=true;
}
}
*/
}
public ventana()
{
this.setSize(960,720);
this.setTitle("Semaforo");
this.setVisible(true);
//se cierre
setDefaultCloseOperation(EXIT_ON_CLOSE);
fondo.setIcon(new ImageIcon(getClass().getResource("Imagenes//fondo.jpg")));
add (fondo);
semaforo11.start();
semaforo12.start();
semaforo21.start();
semaforo22.start();
iniciovida.start();
//empiece a correr el programa
}
}
- Desarrollo (Parte 3)
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ventana extends JFrame{
private static final long serialVersionUID = 1L;
String semaforos[]={"Imagenes//rojo.jpg","Imagenes//verde.jpg"};
String movimiento[]={"Imagenes//carroizq.png","Imagenes//carroder.png","Imagenes//carroup.png","Imagenes//carroabajo.png"};
int i=0,j=0,k=0,q=0,w,l;
JLabel fondo = new JLabel();
int tiempo = 1000;
int maximo=10;
int vida = 1000;
int totalvida;
int ence1=1,ence2,ence3,ence4;
int d,a,m,c;
int t,y,u,o;
int carros11=9,carros12=1,carros21=3,carros22=4;
int llegada11,llegada12,llegada21,llegada22;
Timer iniciovida = new Timer(vida , new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
totalvida+=vida;
}
});
Timer apertura = new Timer(vida , new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
if(carros11>=maximo)
{
i=1;
j=0;
ence1=1;
q=0;
k=0;
}
else if(carros12>=maximo)
{
j=1;ence2=1;
k=0;
i=0;
q=0;
}
else if(carros21>=maximo)
{
k=1;
j=0;
q=0;ence3=1;
i=0;
}
else if(carros22>=maximo)
{
q=1;
i=0;
k=0;ence4=1;
j=0;
}
}
});
Timer semaforo11 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
d+=vida;
if(i==0)
{ence1=0;
if(d>=6000)
{
llegada11=Semaforo.aleatorio(2,3);
carros11+=llegada11;
System.out.println("carros11:" +carros11);
d=0;
}
}
if(i==1)
{
ence1=1;
do
{
repaint();
if(carros11>0)
{
carros11-=1;
System.out.print("sale11\n");
w=350;
for(l=0;l>=720;l++)
{
repaint();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}while(carros11>1);
}ence1=0;
}
}
)
;
Timer semaforo12 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(j==0)
{ence2=0;
a+=vida;;
if(a>=3000)
{
llegada12=Semaforo.aleatorio(1, 4);
carros12+=llegada12;
System.out.println("carros12:"+carros12);
a=0;
}
}
if(j==1)
{
do
{
if(carros12>0)
{
carros12-=1;
System.out.print("sale12\n");
ence2=1;
repaint();
y=0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}while(carros12>1);
}ence2=0;
}
}
)
;
Timer semaforo21 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(k==0)
{ence3=0;
m+=vida;
if(m>=3000)
{
llegada21=Semaforo.aleatorio(2, 4);
carros21+=llegada21;
System.out.println("carros21:"+carros21);
m=0;
}
}
if(k==1)
{
do
{
if(carros21>0)
{
carros21-=1;
System.out.print("sale21\n");
ence3=1;
repaint();
u=0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}while(carros21>1);
}ence3=0;
}
}
)
;
Timer semaforo22 = new Timer(vida, new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(q==0)
{ence4=0;
c+=vida;;
if(c>=3000)
{
llegada22=Semaforo.aleatorio(2, 4);
carros22+=llegada22;
System.out.println("carros22:"+carros22);
c=0;
}
}
if(q==1)
{
do{
if(carros22>0)
{
carros22-=1;
System.out.print("sale22\n");
ence4=1;
repaint();
o=0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}while(carros22>1);
}ence4=0;
}
}
)
;
public void paint(Graphics g)
{
super.paint(g);
add (fondo);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence1])).getImage(),300,200,50,50,this);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence2])).getImage(),600,200,50,50,this);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence3])).getImage(),300,470,50,50,this);
g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence4])).getImage(),600,470,50,50,this);
g.drawImage(new ImageIcon(getClass().getResource(movimiento[0])).getImage(),0,300,100,70,this);
g.drawImage(new ImageIcon(getClass().getResource(movimiento[1])).getImage(),860,390,100,70,this);
g.drawImage(new ImageIcon(getClass().getResource(movimiento[3])).getImage(),500,30,70,100,this);
g.drawImage(new ImageIcon(getClass().getResource(movimiento[2])).getImage(),400,600,70,100,this);
}
public ventana()
{
this.setSize(960,720);
this.setTitle("Semaforo");
this.setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
fondo.setIcon(new ImageIcon(getClass().getResource("Imagenes//fondo.jpg")));
this.add (fondo);
this.setVisible(true);
semaforo11.start();
semaforo12.start();
semaforo21.start();
semaforo22.start();
apertura.start();
iniciovida.start();
}
}
- Conclusión
Una de las enseñanzas como experiencia que nos deja ésta práctica es que no debemos enfocarnos tanto en la interfaz ya que lo principal es la lógica y el funcionamiento en el caso del semáforo. Los principales problemas a la hora de realizar esta práctica no fueron solamente sobre lo que viene siendo la lógica del funcionamiento de los semáforos si no también, la correcta creación de la interfaz del programa.
Entre las cosas con las que estuvimos batallando fue la manera de alternar los semáforos ya que no lográbamos encontrar bien la lógica funcional del sistema para poder coordinarlo como la implementacion de un crucero real.
Con esto llegamos a la conclusión que debemos adentrarnos mas al estudio de la programación en el lenguaje java al igual que aprender mas sobre los que viene siendo los Threads (hilos).
- Referencias
- Libro "Java para Estudiantes" ------> Autor: Douglas Bell
- Disco Interactivo en Videos ------> Desconocido
- "Java a fondo" ------> Autor: Osiris LMS