Foros del Web » Programación para mayores de 30 ;) » Java »

Problema pintado Applet

Estas en el tema de Problema pintado Applet en el foro de Java en Foros del Web. Hola amigos, estoy intentando crear mi primer applet. He visto ya algunos ejemplos, y conozco Java por lo que mas o menos entiendo su funcionamiento. ...
  #1 (permalink)  
Antiguo 14/05/2005, 05:44
 
Fecha de Ingreso: octubre-2004
Mensajes: 168
Antigüedad: 20 años, 1 mes
Puntos: 0
Problema pintado Applet

Hola amigos, estoy intentando crear mi primer applet. He visto ya algunos ejemplos, y conozco Java por lo que mas o menos entiendo su funcionamiento. El tema es que con lo que sé creo que el applet que he creado debería funcionar, pero a la hora del pintado o repitando las imagenes no se actualizan bien, o no las coloca a su debido tiempo, exactamente no sé cual es el verdadero problema. Aquí os dejo el código para ver si me pueden echar una mano:

[Codigo Java]

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.util.Random;


/* Aquí tenemos las constantes */

interface Constantes{

final int MAXTABLERO=8;
final int MAXROBOTS=2;
final int MAXPIEDRAS=1;
final int MAXTIEMPOENTRE=10;
final int MAXTIEMPOROBOT=5;

final int posicionX[]={0,80,160,240,320,400,480,560,640,720};
final int posicionY[]={0,60,120,180,240,300,360,420,480,540};

}


class Robot extends Thread implements Constantes, Runnable{

private int[] posicion; /* Posición en el tablero */
private Monitor m;
private int[] movimiento; /* Movimiento a realizar */
private boolean piedra; /* Si hay piedra */
private Random r;
Thread t;

public Robot(Monitor monitor){
m=monitor;
r=new Random();
posicion=new int[2];
movimiento=new int[2];

movimiento[0]=0;
movimiento[1]=1;

piedra=false;

t=new Thread(this);

}

public void comienza(){
t.start();
}

public void run(){
/* Los robots entran en el espacio para ellos y cada cierto tiempo
* intentan moverse */
posicion=m.entrar();
while(true){
try{ sleep(1000*MAXTIEMPOROBOT); }
catch(Exception e){}

piedra=m.andar(posicion,movimiento,piedra);

}
}

}


class Monitor implements Constantes{

private String[][] mapa;
private int x;
private int y;
private Random r;
private Robots robots;

public Monitor(int _x,int _y, Robots robots){
this.robots=robots;
int numPiedras;
int numCortado;

x=_x+2; /* Porque luego añadimos bordes */
y=_y+2;
mapa=new String[x][y];
r=new Random();

numPiedras=1+Math.abs(r.nextInt()%MAXPIEDRAS);
numCortado=1+Math.abs(r.nextInt()%(((x-2)*(y-2)-numPiedras-MAXROBOTS)/4));

for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
mapa[i][j]=" ";
}
}

/* Ponemos las barreras */
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
if(i==0 || i==x-1) mapa[i][j]="#";
if(j==0 || j==y-1) mapa[i][j]="#";
}
}

/* Ponemos las piedras */

for(int i=0;i<numPiedras;i++){
int a=0;
int b=0;
while(!mapa[a][b].equals(" ")){
a=Math.abs(r.nextInt()%x);
b=Math.abs(r.nextInt()%y);
}
mapa[a][b]=".";
}

/* Ponemos las paredes */

for(int i=0;i<numCortado;i++){
int a=0;
int b=0;
while(!mapa[a][b].equals(" ")){
a=Math.abs(r.nextInt()%x);
b=Math.abs(r.nextInt()%y);
}
mapa[a][b]="#";
}

}


public String[][] getMapa(){ return mapa; }

/* Buscamos un sitio donde puedan entrar */
public synchronized int[] entrar(){
int[] dev=new int[2];
int i=0;
int j=0;
while(!mapa[i][j].equals(" ")){
i=Math.abs(r.nextInt()%x);
j=Math.abs(r.nextInt()%y);
dev[0]=i;
dev[1]=j;
}
mapa[i][j]="R";
//robots.repaint();
return dev;
}

/* Determinamos si puede moverse a una posición dada */
public boolean puedeMoverse(int[] p){
if((mapa[p[0]+1][p[1]].equals("R") || mapa[p[0]+1][p[1]].equals("#")) &&
(mapa[p[0]-1][p[1]].equals("R") || mapa[p[0]-1][p[1]].equals("#")) &&
(mapa[p[0]][p[1]+1].equals("R") || mapa[p[0]][p[1]+1].equals("#")) &&
(mapa[p[0]][p[1]-1].equals("R") || mapa[p[0]][p[1]-1].equals("#")))
return false;
else return true;

}

/* Intentará andar */
public synchronized boolean andar(int[] posicion, int[] movimiento, boolean piedra){
boolean p=piedra;
boolean terminado=false;
boolean vaciar=true;

while(!terminado){

if(!puedeMoverse(posicion)) try{wait();}catch(Exception e){}

if(mapa[posicion[0]+movimiento[0]][posicion[1]+movimiento[1]].equals(" ")){
if(vaciar) mapa[posicion[0]][posicion[1]]=" ";
posicion[0]+=movimiento[0];
posicion[1]+=movimiento[1];
mapa[posicion[0]][posicion[1]]="R";
vaciar=true;
terminado=true;
}
else if(mapa[posicion[0]+movimiento[0]][posicion[1]+movimiento[1]].equals("#")){
if(piedra){
p=false;
mapa[posicion[0]][posicion[1]]=".";
vaciar=false;
}
girar(movimiento);
terminado=false;
}
else if(mapa[posicion[0]+movimiento[0]][posicion[1]+movimiento[1]].equals("R")){
try{wait();}catch(Exception e){}
girar(movimiento);
terminado=false;
}
else if(mapa[posicion[0]+movimiento[0]][posicion[1]+movimiento[1]].equals(".")){
if(vaciar) mapa[posicion[0]][posicion[1]]=" ";
posicion[0]+=movimiento[0];
posicion[1]+=movimiento[1];
mapa[posicion[0]][posicion[1]]="R";
terminado=true;
p=true;
vaciar=true;
}

//robots.repaint();
}
notifyAll();

return p;
}

/* Siempre giran a la derecha */
private void girar(int[] m){

if(m[0]==1){
m[0]=0;
m[1]=-1;
}
else{
if(m[0]==-1){
m[0]=0;
m[1]=1;
}
else{
if(m[1]==1){
m[1]=0;
m[0]=1;
}
else{
if(m[1]==-1){
m[1]=0;
m[0]=-1;
}
}
}
}

}

}


public class Robots extends Applet implements Constantes, Runnable{

private Robot [] robots;
Image [] img= new Image[4] ;
//private Button startButton;
private String [][] aux= new String[MAXTABLERO][MAXTABLERO];
private Monitor m;
Thread t;

public void init() {


t= new Thread(this);
t.start();
m=new Monitor(MAXTABLERO,MAXTABLERO,this);

robots=new Robot[MAXROBOTS];


/*setBackground(Color.black);
Button startButton = new Button("COMENZAR");
add(startButton);
startButton.addActionListener(this);*/

IniciarImagenes();

for(int i=0;i<robots.length;i++){
robots[i]=new Robot(m);
}

for(int i=0;i<robots.length;i++){
robots[i].comienza();
}

}


public void IniciarImagenes() {

img[0] = getImage(getDocumentBase(), "Robot.jpg");

img[1] = getImage(getDocumentBase(), "Muro.jpg");

img[2] = getImage(getDocumentBase(), "Piedra.jpg");

img[3] = getImage(getDocumentBase(), "Vacio.jpg");

}


/* Este metodo pinta todo */
public void paint(Graphics g) {
aux=m.getMapa();
for(int i=0;i<MAXTABLERO+2; i++){
for(int j=0; j<MAXTABLERO+2; j++){
if(aux[i][j]=="R") g.drawImage(img[0],posicionX[i],posicionY[j],80,60,this);
else if(aux[i][j]=="#") g.drawImage(img[1],posicionX[j],posicionY[i],80,60,this);
else if(aux[i][j]==".") g.drawImage(img[2],posicionX[j],posicionY[i],80,60,this);
else if(aux[i][j]==" ") g.drawImage(img[3],posicionX[j],posicionY[i],80,60,this);
}
}
}

public void run(){
while(true){
try{
repaint();
Thread.sleep(900);
}catch(Exception e){}
}
}


/* Metodo que se ejecuta al pulsar el boton
public void actionPerformed(ActionEvent e){
empezar();
}


Simulacion
public void empezar(){

for(int i=0;i<robots.length;i++){
robots[i].comienza();
}

}*/

//public void update(){}

}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:10.