› Foros › PC › Software libre
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;
/**
*
* @author ismaelrodriguezmoreno
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Depuracion");
Tablero t= new Tablero();
System.out.println("Depuracion");
MiCanvas lienzo = new MiCanvas(t);
System.out.println("Depuracion");
Marco m = new Marco(lienzo);
System.out.println("Depuracion");
Movimientos mov = new Movimientos(t,lienzo);
lienzo.setMueve(mov);
mov.reanudar();
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;
/**
*
* @author ismaelrodriguezmoreno
*/
public class Tablero {
String rejilla[] = {"BBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"B............BB............B",
"B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
"BoBBBB.BBBBB.BB.BBBBB.BBBBoB",
"B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
"B..........................B",
"B.BBBB.BB.BBBBBBBB.BB.BBBB.B",
"B.BBBB.BB.BBBBBBBB.BB.BBBB.B",
"B......BB....BB....BB......B",
"BBBBBB.BBBBB BB BBBBB.BBBBBB",
" B.BBBBB BB BBBBB.B ",
" B.BB BB.B ",
" B.BB BB____BB BB.B ",
"BBBBBB.BB B B BB.BBBBBB",
" . B B . ",
"BBBBBB.BB B B BB.BBBBBB",
" B.BB BBBBBBBB BB.B ",
" B.BB BB.B ",
" B.BB BBBBBBBB BB.B ",
"BBBBBB.BB BBBBBBBB BB.BBBBBB",
"B............BB............B",
"B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
"B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
"Bo..BB................BB..oB",
"BBB.BB.BB.BBBBBBBB.BB.BB.BBB",
"BBB.BB.BB.BBBBBBBB.BB.BB.BBB",
"B......BB....BB....BB......B",
"B.BBBBBBBBBB.BB.BBBBBBBBBB.B",
"B.BBBBBBBBBB.BB.BBBBBBBBBB.B",
"B..........................B",
"BBBBBBBBBBBBBBBBBBBBBBBBBBBB"};
static final char BLOQUE = 'B'; // Tipos de celda de Tablero
static final char CASILLA = '.';
static final char CASILLA_VACIA = ' ';
static final char CASILLA_COMIDA = 'o';
static final char PUERTA = '_';
static final char PACMAN = 'X';
private char[][] celdas;
private static final int ANCHO = 28;
private static final int ALTO = 31;
private Pacman pac;
public Tablero(){
System.out.println("Dentro de Tablero");
pac = new Pacman();
System.out.println("Pacman Creado");
String c ;
char carac;
int x=0;
celdas= new char[ALTO][ANCHO];
for(int i=0;i<ALTO;i++){
c=rejilla[i];
for(int j=0;j<ANCHO;j++){
carac=c.charAt(j);
if( carac==BLOQUE)
celdas[i][j]=carac;
if(carac ==CASILLA)
celdas[i][j]=carac;
if(carac ==CASILLA_VACIA)
celdas[i][j]=carac;
if(carac ==CASILLA_COMIDA)
celdas[i][j]=carac;
if(carac ==PUERTA)
celdas[i][j]=carac;
x++;
}
}
celdas[23][13]=PACMAN;
pac.SetDireccion(Pacman.DERECHA);
System.out.println("Fin de tablero");
}
public int Get(int fila,int columna){
return celdas[fila][columna];
}
public void Set(int fila,int columna,char c){
celdas[fila][columna]=c;
}
public int GetFilas(){
return ALTO;
}
public int GetColumnas(){
return ANCHO;
}
public void SetDireccion(int d){
pac.SetDireccion(ALTO);
}
public int PosicionPacman(){
System.out.println("Dentro de posicion Pacman");
Coordenada co = pac.MuevePacman();
Coordenada coord= null;
int dev = 0;
if(celdas[co.GetFila()][co.GetColumna()] == CASILLA ){
celdas[co.GetFila()][co.GetColumna()]= PACMAN;
coord = this.CoordenadaAnterior(co, pac.GetDireccion());
celdas[coord.GetFila()][coord.GetColumna()]= CASILLA_VACIA;
dev=CASILLA;
}
if(celdas[co.GetFila()][co.GetColumna()] == CASILLA_COMIDA){
celdas[co.GetFila()][co.GetColumna()]= PACMAN;
coord = this.CoordenadaAnterior(co, pac.GetDireccion());
celdas[coord.GetFila()][coord.GetColumna()]= CASILLA_VACIA;
dev=CASILLA_COMIDA;
}
if(celdas[co.GetFila()][co.GetColumna()] == CASILLA_VACIA){
celdas[co.GetFila()][co.GetColumna()]= PACMAN;
coord = this.CoordenadaAnterior(co, pac.GetDireccion());
celdas[coord.GetFila()][coord.GetColumna()]= CASILLA_VACIA;
dev=CASILLA_VACIA;
}
if(celdas[co.GetFila()][co.GetColumna()] == BLOQUE){
coord=this.DeterminarPosicion(co,pac.GetDireccion());
celdas[coord.GetFila()][coord.GetColumna()]= PACMAN;
dev=BLOQUE;
}
return dev;
}
private Coordenada DeterminarPosicion(Coordenada cod,int dir){
Coordenada co = null;
if(dir==Pacman.DERECHA){
co = new Coordenada(cod.GetFila(),cod.GetColumna()-1);
}
if(dir==Pacman.IZQUIERDA){
co = new Coordenada(cod.GetFila(),cod.GetColumna()+1);
}
if(dir==Pacman.ARRIBA){
co = new Coordenada(cod.GetFila()-1,cod.GetColumna());
}
if(dir==Pacman.ABAJO){
co = new Coordenada(cod.GetFila()+1,cod.GetColumna());
}
return co;
}
private Coordenada CoordenadaAnterior(Coordenada cod,int dire){
Coordenada co = null;
if(dire == Pacman.ABAJO)
co = new Coordenada(cod.GetFila()+1,cod.GetColumna());
if(dire == Pacman.ARRIBA)
co = new Coordenada(cod.GetFila()-1,cod.GetColumna());
if(dire == Pacman.DERECHA)
co = new Coordenada(cod.GetFila(),cod.GetColumna()+1);
if(dire == Pacman.ABAJO)
co = new Coordenada(cod.GetFila(),cod.GetColumna()-1);
return co;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;
/**
*
* @author ismaelrodriguezmoreno
*/
public class Pacman {
private int n_vidas;
static final int ARRIBA = 2;
static final int ABAJO = 0;
static final int DERECHA = 3;
static final int IZQUIERDA = 1;
private Coordenada coord;
private int direccion;
Pacman(){
n_vidas=3;
coord = new Coordenada(23,13);
}
public void SetDireccion(int d){
direccion=d;
}
public int GetDireccion(){
return direccion;
}
public Coordenada MuevePacman(){
switch(direccion){
case IZQUIERDA:
coord.SetColumna(coord.GetColumna()-1);
break;
case DERECHA:
coord.SetColumna(coord.GetColumna()+1);
break;
case ARRIBA:
coord.SetFila(coord.GetFila()-1);
break;
case ABAJO:
coord.SetFila(coord.GetFila()-1);
break;
default:
break;
}
return coord;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;
import javax.swing.JLabel;
/**
*
* @author ismaelrodriguezmoreno
*/
public class Movimientos implements Runnable {
private Tablero tab;
private Pacman pac;
private MiCanvas cav=null;
private int puntos;
private JLabel labelPuntuacion;
private boolean continuar = true;
private boolean suspendFlag = true;
Movimientos(Tablero t,MiCanvas c){
tab=t;
cav=c;
puntos=0;
Thread hilo= new Thread(this);
System.out.println("va a comenzar el hilo");
hilo.start();
System.out.println("El hilo a terminado?");
}
Movimientos(Tablero t, Pacman p, MiCanvas c,JLabel label){
tab=t;
pac=p;
cav=c;
puntos=0;
labelPuntuacion=label;
Thread hilo= new Thread(this);
hilo.start();
System.out.println("Comienza el hilo");
}
public void run() {
try{
System.out.println("Dentro de run");
while(continuar){
synchronized(this){
while(suspendFlag){
System.out.println("Antes de esperar");
wait();
System.out.println("Esperando");
}
}
Thread.sleep(500);
System.out.println("El hilo a dormido");
int sit = tab.PosicionPacman();
if(cav!=null)
cav.repaint();
/*if(sit == Tablero.CASILLA)
if(sit == Tablero.CASILLA_COMIDA)
if(sit == Tablero.CASILLA_VACIA)*/
}
/*if((sit==Serpiente.CHOCA_BLOQUE)||(sit==Serpiente.CHOCA_SERPIENTE)){
suspender();
inicializaJuego();
canvas.repaint();
labelPuntuacion.setText("Puntuaci�n = "+puntuacion);
reanudar();
}
else if(m==Serpiente.COME_RATON){
puntuacion++;
labelPuntuacion.setText("Puntuaci�n = "+puntuacion);
}
}
}
catch(InterruptedException e){
System.out.println("Hilo Comecocos interrumpido");
}*/
}
catch(InterruptedException e){
System.out.println("Hilo Comecocos interrumpido");
}
}
public synchronized void reanudar(){
suspendFlag = false;
notify();
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
/**
*
* @author ismaelrodriguezmoreno
*/
public class MiCanvas extends JPanel implements KeyListener, MouseListener{
private Tablero tab;
private Movimientos mov;
static final int TAM = 20;
MiCanvas(Tablero t) {
tab = t;
//addMouseListener(this);
//addKeyListener(this);
}
@Override
synchronized public void paintComponent(Graphics g){
Graphics screengc=g;
g.setColor(Color.BLACK);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(Color.WHITE);
dibujarTablero(g);
}
private void dibujarTablero(Graphics g){
int x=0,y=0;
int filas = tab.GetFilas();
int columnas = tab.GetColumnas();
for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
if(tab.Get(i,j) == Tablero.BLOQUE){
g.setColor(Color.BLUE);
g.fillRect(x, y, TAM,TAM);
//g.drawRect(x,y,TAM,TAM);
}
if(tab.Get(i,j) == Tablero.CASILLA){
g.setColor(Color.YELLOW);
g.fillArc(x+(TAM/2)-3, y+(TAM/2)-3, 6, 6, 0,360);
}
if(tab.Get(i,j) == Tablero.CASILLA_COMIDA){
g.setColor(Color.YELLOW);
g.fillArc(x+(TAM/2)-5, y+(TAM/2)-5,10,10, 0,360);
}
if(tab.Get(i,j) == Tablero.PUERTA){
g.setColor(Color.WHITE);
g.drawLine(x, y+TAM, x+TAM, y+TAM);
}
if(tab.Get(i, j)== Tablero.PACMAN){
g.setColor(Color.YELLOW);
g.fillArc(x+(TAM/2)-9, y+(TAM/2)-9, 18, 18, 0, 360);
}
x+=TAM;
}
x=0;
y+=TAM;
}
}
@Override
public boolean isFocusTraversable(){
return true;
}
public void mouseClicked(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
requestFocus();
}
public void mouseExited(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void keyTyped(KeyEvent evt){
}
public void setMueve(Movimientos m){
mov=m;
}
public void keyReleased(KeyEvent evt){
// System.out.println("KeyReleased getKeyCode="+evt.getKeyCode());
// System.out.println("KeyReleased getKeyChar="+evt.getKeyChar());
// System.out.println("KeyReleased getModifiers="+evt.getModifiers());
}
public void keyPressed(KeyEvent evt) {
System.out.println("Se ha producido un evento");
if(evt.getKeyCode()==KeyEvent.VK_UP){
System.out.println("Pulsado ARRIBA");
tab.SetDireccion(Pacman.ARRIBA);
}
else if(evt.getKeyCode()==KeyEvent.VK_DOWN){
System.out.println("Pulsado ABAJO");
tab.SetDireccion(Pacman.ABAJO);
}
else if(evt.getKeyCode()==KeyEvent.VK_LEFT){
System.out.println("Pulsado IZQUIERDA");
tab.SetDireccion(Pacman.IZQUIERDA);
}
else if(evt.getKeyCode()==KeyEvent.VK_RIGHT){
System.out.println("Pulsado DERECHA");
tab.SetDireccion(Pacman.DERECHA);
}
/*else if(evt.getKeyCode()==KeyEvent.VK_SPACE){
if(!mueve.getParado())
mueve.suspender();
else
mueve.reanudar();
}*/
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
*
* @author ismaelrodriguezmoreno
*/
public class Marco extends JFrame {
private MiCanvas lienzo;
private JLabel ptos;
public Marco(MiCanvas c){
/*lienzo = c;
Button boton = new Button("Salir");
boton.setName("Salir");
ptos=new Label("Puntuacion = 0");
setSize(600,700);
setLayout(new BorderLayout());
add("North",ptos);
add("Center",lienzo);
add("South",boton);
setVisible(true);
lienzo.setVisible(true);
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if(event.toString().indexOf("on Salir") != -1) {
System.exit(0);
}
}
}
);*/
lienzo = c;
JButton boton = new JButton("Salir");
boton.setName("Salir");
ptos=new JLabel("Puntuacion = 0");
setSize(600,700);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(ptos,BorderLayout.NORTH);
getContentPane().add(lienzo,BorderLayout.CENTER);
getContentPane().add(boton,BorderLayout.SOUTH);
setVisible(true);
pack();
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if(event.toString().indexOf("on Salir") != -1) {
System.exit(0);
}
}
}
);
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;
/**
*
* @author ismaelrodriguezmoreno
*/
public class Coordenada {
private int fila;
private int columna;
Coordenada(){
fila=0;
columna=0;
}
Coordenada(int f,int c){
fila=f;
columna =c;
}
public void SetFila(int f){
fila=f;
}
public int GetFila(){
return fila;
}
public void SetColumna(int c){
columna=c;
}
public int GetColumna(){
return columna;
}
public void SetCoordenada(int f, int c){
fila=c;
columna=c;
}
public Coordenada GetCoordenada(){
return this;
}
}