Está en la página 1de 10

import java.awt.event.

*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import javax.swing.JFrame;
import javax.media.opengl.*;
import javax.media.opengl.glu.GLU;
public class proy12 implements GLEventListener, MouseListener, KeyListener {
private final int TAMANIO = 512;
private ByteBuffer bufferByteObjSelec = ByteBuffer.allocateDirect(TAMANIO * 4);
private boolean elegido = false;
private int Xelegido, Yelegido;
public void init(GLAutoDrawable drawable) {
GL gl = drawable.getGL(); // Inicializa la variable GL
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); }
public void display(GLAutoDrawable drawable ) {
GL gl = drawable.getGL(); // inicializa la variable GL
if (elegido) {
// crea GLU
GLU glu = new GLU(); // Necesita GLU
int[] puertaDeVision = new int[4];
// Obtiene los atributos de la ventana, coordenada x, y, ancho y alto
gl.glGetIntegerv(GL.GL_VIEWPORT, puertaDeVision, 0);
// Selecciona el renderizado en el modo por seleccin.
gl.glSelectBuffer(TAMANIO, getBuffer(bufferByteObjSelec)); // Selecciona un buffer de nombres de
objetos.
gl.glRenderMode(GL.GL_SELECT); // Define el renderizado en el modo seleccin.
// Inicializa la pila de nombres.
gl.glInitNames(); // Crea la pila de nombres.
gl.glPushName(0); // Inserta un nombre.
gl.glMatrixMode(GL.GL_PROJECTION); // Define la k de proyeccion.
// Guarda la k de vista original.
gl.glPushMatrix();
gl.glLoadIdentity();
// El mtodo gluPickMatrix() restringe el rea donde openGL desplegar los objetos.
// Define una regin seleccionada de 5x5 pixeles cerca de la posicin del cursor
glu.gluPickMatrix((double) Xelegido,
(double) (puertaDeVision[3] - Yelegido), 5.0, 5.0, puertaDeVision, 0);
glu.gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
dibujaObjetos(gl, GL.GL_SELECT);
// Restaura la k de vista.
gl.glPopMatrix();
gl.glFlush();
// Retorna al renderizado en el modo normal
int hits = gl.glRenderMode(GL.GL_RENDER);
int[] bufferIntObjSelec = new int[TAMANIO];
getBuffer(bufferByteObjSelec).get(bufferIntObjSelec);
// Procesa los hits del renderizado en el modo seleccin
int [][] A = new int[8][8];
A=procesaHits(gl,hits, bufferIntObjSelec,b,b1,m,t,q);
q++;
elegido = false;
}
else
{
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
dibujaObjetos(gl, GL.GL_RENDER);
gl.glFlush(); // asegura que se ejecuta las anteriores instrucciones
}
}
public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
GL gl = drawable.getGL(); // Inicializa la variable GL
GLU glu = new GLU(); // Inicializa la variable GL
gl.glViewport(0, 0, w, h); // define tamao
gl.glMatrixMode(GL.GL_PROJECTION); // utiliza k de proyeccion
gl.glLoadIdentity(); // inicializa k de proyeccon
glu.gluOrtho2D(-1.1f, 1.1f, -1.1f, 1.1f); // proyeccin en paralelo
gl.glMatrixMode(GL.GL_MODELVIEW); // Almacena y combina las Transformaciones Geomtricas.
gl.glLoadIdentity(); // inicializa k de vista de modelo

}
public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {}
public void mousePressed(MouseEvent e) {
GLJPanel lienzo = (GLJPanel) e.getComponent();
Xelegido = e.getX();
Yelegido = e.getY();
elegido = true;
// Actualmente el proceso de pick es realizado en display() porque
// las llamadas OpenGL tiene que ser realizados en los metodos
// GLEventListener.
lienzo.display();
}
public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0) {}
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == 27)
System.exit(0);
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
//para poner los cusadrados iniciales
public static void dibujaObjetos(GL gl, int modo) {
gl.glColor3f(0.7f, 0.7f, 0.7f);
if (modo == GL.GL_SELECT)
gl.glLoadName(1);
gl.glRectf(-0.4f, 1f, -1f,0.4f); //1
if (modo == GL.GL_SELECT)
gl.glLoadName(2);
gl.glRectf(0.3f, 1f, -0.3f,0.4f); //2
if (modo == GL.GL_SELECT)
gl.glLoadName(3);
gl.glRectf(1f, 1f, 0.4f,0.4f); //3
if (modo == GL.GL_SELECT)
gl.glLoadName(4);
gl.glRectf(-0.4f, 0.3f, -1f, -0.3f); //4
if (modo == GL.GL_SELECT)
gl.glLoadName(5);
gl.glRectf(-0.3f, 0.3f, 0.3f,-0.3f); //5
if (modo == GL.GL_SELECT)
gl.glLoadName(6);
gl.glRectf(1f, 0.3f, 0.4f, -0.3f); //6
if (modo == GL.GL_SELECT)
gl.glLoadName(7);
gl.glRectf(-1f, -0.4f, -0.4f, -1f); //7
if (modo == GL.GL_SELECT)
gl.glLoadName(8);
gl.glRectf(-0.3f, -0.4f, 0.3f,-1f); //8
if (modo == GL.GL_SELECT)
gl.glLoadName(9);
gl.glRectf(1f, -0.4f, 0.4f, -1f); //9
}
// Ingresa un buffer de bytes y retorna un buffer de enteros.
private IntBuffer getBuffer(ByteBuffer buf) {
buf.order(ByteOrder.nativeOrder());
return buf.asIntBuffer();
}
// Procesa el arreglo que contiene la informacin del rea seleccionada.
public void cpu (GL gl, int x){
gl.glColor3f (1, 0f, 0f);
if (x== 1){
dibujaCirculo(gl, -0.7f, 0.7f, 0.2f);
gl.glFlush();
}
if (x == 2){
dibujaCirculo(gl, 0f, 0.7f, 0.2f);
gl.glFlush();
}
if (x == 3){
dibujaCirculo(gl, 0.7f, 0.7f, 0.2f);
gl.glFlush();

}
if (x == 4){
dibujaCirculo(gl, -0.7f, 0f, 0.2f);
gl.glFlush();
}
if (x == 5){
dibujaCirculo(gl, 0f, 0f, 0.2f);
gl.glFlush();
}
if (x == 6){
dibujaCirculo(gl, 0.7f, 0f, 0.2f);
gl.glFlush();
}
if (x == 7){
dibujaCirculo(gl, -0.7f,- 0.7f, 0.2f);
gl.glFlush();
}
if (x == 8){
dibujaCirculo(gl, 0f, -0.7f, 0.2f);
gl.glFlush();
}
if (x == 9){
dibujaCirculo(gl, 0.7f, -0.7f, 0.2f);
gl.glFlush();
}
}
public void dibujaCirculo(GL gl, float xc, float yc, float r){
int MAXGRADO = 180;
gl.glBegin(GL.GL_POLYGON);
for (int contador = 0; contador <= 180; contador++) {
float theta = (float)(contador * 2 * Math.PI)/MAXGRADO;
gl.glVertex2f(xc + (float)Math.sin(theta) * r, yc + (float)Math.cos(theta) * r);
}
gl.glEnd();
}
private int[][] procesaHits(GL gl,int hits, int[] buffer,int b[][],int b1[][],int m[],int t[],int q)
{
int cantNombres;
int indiceBuf = 0;
for (int i = 0; i < hits; i++)/* por cada hit */{
cantNombres = buffer[indiceBuf];
indiceBuf += 3;
for (int j = 0; j < cantNombres; j++) { /* por cada nombre */
if (buffer[indiceBuf] == 1 && m[buffer[indiceBuf]-1]!=1){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.4f, 1f, -1f,0.4f);
b[1][1]=1;
mostrar(3,3,b);
}
if (buffer[indiceBuf] == 2 && m[buffer[indiceBuf]-1]!=2){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(0.3f, 1f, -0.3f,0.4f);
b[1][2]=1;
mostrar(3,3,b);
}
if (buffer[indiceBuf] == 3 && m[buffer[indiceBuf]-1]!=3){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(1f, 1f, 0.4f,0.4f);
b[1][3]=1;
mostrar(3,3,b);
}
if (buffer[indiceBuf] ==4 && m[buffer[indiceBuf]-1]!=4){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.4f, 0.3f, -1f, -0.3f);
b[2][1]=1;

mostrar(3,3,b);
}
if (buffer[indiceBuf] == 5 && m[buffer[indiceBuf]-1]!=5){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.3f, 0.3f, 0.3f,-0.3f);
b[2][2]=1;
mostrar(3,3,b);
}
if (buffer[indiceBuf] == 6&& m[buffer[indiceBuf]-1]!=6 ){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(1f, 0.3f, 0.4f, -0.3f);
b[2][3]=1;
mostrar(3,3,b);
}
if (buffer[indiceBuf] == 7&& m[buffer[indiceBuf]-1]!=7 ){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-1f, -0.4f, -0.4f, -1f);
b[3][1]=1;
mostrar(3,3,b);
}
if (buffer[indiceBuf] == 8 && m[buffer[indiceBuf]-1]!=8){
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.3f, -0.4f, 0.3f,-1f);
b[3][2]=1;
mostrar(3,3,b);
}
if (buffer[indiceBuf] ==9 && m[buffer[indiceBuf]-1]!=9) {
m[buffer[indiceBuf]-1]=buffer[indiceBuf];
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(1f, -0.4f, 0.4f, -1f);
b[3][3]=1;
mostrar(3,3,b);
}
int x=t[buffer[indiceBuf]]=buffer[indiceBuf];
System.out.println("vector t="+t[buffer[indiceBuf]]+"x=="+x);
indiceBuf++;
System.out.println("======="+q);
mostrarvec(t,q);
//int rand = (int)((Math.random()* 10));
//System.out.println("random="+rand);
if(q==1)
{
int pa=7;//random
while(pa==x)
{ //random
pa=2;
}
cpu (gl,pa);
t[pa]=pa;
if(pa==1){
b[1][1]=2;
}
if(pa==2){
b[1][2]=2;
}
if(pa==3){
b[1][3]=2;
}
if(pa==4){
b[2][1]=2;
}
if(pa==5){
b[2][2]=2;
}
if(pa==6){
b[2][3]=2;

}
if(pa==7){
b[3][1]=2;
}
if(pa==8){
b[3][2]=2;
}
if(pa==9){
b[3][3]=2;
}
}
if(q==2){
System.out.println("q="+q);
if(b[1][1]==1 && b[2][1]==1){
b[3][1]=2;
cpu(gl,7);
mostrar(3,3,b);
}
if(b[1][2]==1 && b[2][2]==1){
b[3][2]=2;
cpu(gl,8);
mostrar(3,3,b);
}
if(b[1][3]==1 && b[2][3]==1){
b[3][2]=2;
cpu(gl,9);
mostrar(3,3,b);
}
if(b[2][1]==1 && b[3][1]==1){
b[1][1]=2;
cpu(gl,1);
mostrar(3,3,b);
}
if(b[2][2]==1 && b[3][2]==1){
b[1][2]=2;
cpu(gl,2);
mostrar(3,3,b);
}
if(b[2][3]==1 && b[2][3]==1){
b[1][3]=2;
cpu(gl,3);
mostrar(3,3,b);
}
if(b[1][2]==1 && b[1][3]==1){
b[1][1]=2;
cpu(gl,1);
mostrar(3,3,b);
}
if(b[2][2]==1 && b[2][3]==1){
b[2][1]=2;
cpu(gl,4);
mostrar(3,3,b);
}
if(b[3][2]==1 && b[3][3]==1){
b[3][1]=2;
cpu(gl,7);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[1][2]==1){
b[1][3]=2;
cpu(gl,3);
mostrar(3,3,b);
}
if(b[2][1]==1 && b[2][2]==1){
b[2][3]=2;
cpu(gl,6);
mostrar(3,3,b);
}
if(b[3][1]==1 && b[3][2]==1){
b[3][3]=2;

cpu(gl,9);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[1][3]==1){
b[1][2]=2;
cpu(gl,2);
mostrar(3,3,b);
}
if(b[2][1]==1 && b[2][3]==1){
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[3][1]==1 && b[3][3]==1){
b[3][2]=2;
cpu(gl,8);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[3][1]==1){
b[2][1]=2;
cpu(gl,4);
mostrar(3,3,b);
}
if(b[1][2]==1 && b[3][2]==1){
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[1][3]==1 && b[3][3]==1){
b[2][3]=2;
cpu(gl,6);
mostrar(3,3,b);
}
if((b[1][1]==1 && b[3][3]==1)||(b[1][3]==1 && b[3][1]==1)){
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[2][2]==1 && b[3][1]==1){
b[1][3]=2;
cpu(gl,3);
mostrar(3,3,b);
}
if(b[2][2]==1 && b[3][3]==1){
b[1][1]=2;
cpu(gl,1);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[2][2]==1){
b[3][3]=2;
cpu(gl,9);
mostrar(3,3,b);
}
if(b[1][3]==1 && b[2][2]==1){
b[3][1]=2;
cpu(gl,7);
mostrar(3,3,b);
}
}
if(q==3){
if(b[2][1]==1 && b[3][1]==1){
//random puede elegir entre posicion 2,3,5,9
b[1][2]=2;
cpu(gl,2);
mostrar(3,3,b);
}
if(b[2][2]==1 && b[3][2]==1){
//random puede elegir entre posicion 1,3
b[1][1]=2;
cpu(gl,1);

mostrar(3,3,b);
}
if(b[2][3]==1 && b[3][3]==1){
//random puede elegir entre posicion 1,2,5,7
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[2][1]==1){
//random puede elegir entre posicion 3,5,8,9
b[1][3]=2;
cpu(gl,3);
mostrar(3,3,b);
}
if(b[1][2]==1 && b[2][2]==1){
//random puede elegir entre posicion 7,9
b[3][1]=2;
cpu(gl,7);
mostrar(3,3,b);
}
if(b[1][3]==1 && b[2][3]==1){
//random puede elegir entre posicion 1,5,7,8
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[1][2]==1){
//random puede elegir entre posicion 5,6,7,9
b[1][2]=2;
cpu(gl,2);
mostrar(3,3,b);
}
if(b[2][1]==1 && b[2][2]==1){
//random puede elegir entre posicion 3,9
b[1][3]=2;
cpu(gl,3);
mostrar(3,3,b);
}
if(b[3][1]==1 && b[3][2]==1){
//random puede elegir entre posicion 1,3,5,6
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[1][3]==1){
//random puede elegir entre posicion 5,8
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[2][1]==1 && b[2][3]==1){
//random puede elegir entre posicion 1,2,3,7,8,9
b[1][3]=2;
cpu(gl,3);
mostrar(3,3,b);
}
if(b[3][1]==1 && b[3][3]==1){
//random puede elegir entre posicion 2,5
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[3][1]==1){
//random puede elegir entre posicion 5,6
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[1][2]==1 && b[3][2]==1){
//random puede elegir entre posicion 1,3,4,6,7,9

b[1][1]=2;
cpu(gl,1);
mostrar(3,3,b);
}
if(b[1][3]==1 && b[3][3]==1){
//random puede elegir entre posicion 4,5
b[2][2]=2;
cpu(gl,5);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[3][3]==1){
//random puede elegir entre posicion 2,3,4,6,7,8
b[1][2]=2;
cpu(gl,2);
mostrar(3,3,b);
}
if(b[1][3]==1 && b[3][1]==1){
//random puede elegir entre posicion 1,2,4,6,8,9
b[1][1]=2;
cpu(gl,1);
mostrar(3,3,b);
}
if(b[2][2]==1 && b[3][3]==1){
//random puede elegir entre posicion 2,3,4,7
b[1][2]=2;
cpu(gl,2);
mostrar(3,3,b);
}
if(b[2][2]==1 && b[3][1]==1){
//random puede elegir entre posicion 1,2,6,9
b[1][1]=2;
cpu(gl,1);
mostrar(3,3,b);
}
if(b[1][1]==1 && b[2][2]==1){
//random puede elegir entre posicion 3,6,7,8
b[1][2]=2;
cpu(gl,2);
mostrar(3,3,b);
}
if(b[1][3]==1 && b[2][2]==1){
//random puede elegir entre posicion 1,4,8,9
b[3][2]=2;
cpu(gl,8);
mostrar(3,3,b);
}
}
}
}
return b;
}
int q=1;
int [] t = new int[30];
int [] m = new int[30];
int [][] b = new int[30][30];
int [][] b1 = new int[30][30];
public int[][] ganar(GL gl,int a,int z,int m[][]){
m[a][z]=1;
if(m[1][1]==1 && m[1][2]==1 && m[1][3]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][1]==1 && m[2][1]==1 && m[3][1]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[3][3]==1 && m[2][3]==1 &&m [1][3]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[3][3]==1 && m[3][2]==1 &&m [3][1]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);

gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}


if(m[2][1]==1 && m[2][2]==1 &&m [2][3]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][2]==1 && m[2][2]==1 &&m [3][2]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][1]==1 && m[2][2]==1 &&m [3][3]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][3]==1 && m[2][2]==1 &&m [3][1]==1){System.out.println("GANA AZUL");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
return m;
}
public int[][] ganar2(GL gl,int a,int z,int m[][]){
m[a][z]=1;
if(m[1][1]==1 && m[1][2]==1 && m[1][3]==1){System.out.println("GANA ROSA");
gl.glColor3f(1.0f, 0.2f, 0.6f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][1]==1 && m[2][1]==1 && m[3][1]==1){System.out.println("GANA ROSA");
gl.glColor3f(1.0f, 0.2f, 0.6f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[3][3]==1 && m[2][3]==1 &&m [1][3]==1){System.out.println("GANA ROSA");
gl.glColor3f(1.0f, 0.2f, 0.6f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[3][3]==1 && m[3][2]==1 &&m [3][1]==1){System.out.println("GANA ROSA");
gl.glColor3f(0.2f, 0.3f, 1.0f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[2][1]==1 && m[2][2]==1 &&m [2][3]==1){System.out.println("GANA ROSA");
gl.glColor3f(1.0f, 0.2f, 0.6f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][2]==1 && m[2][2]==1 &&m [3][2]==1){System.out.println("GANA ROSA");
gl.glColor3f(1.0f, 0.2f, 0.6f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][1]==1 && m[2][2]==1 &&m [3][3]==1){System.out.println("GANA ROSA");
gl.glColor3f(1.0f, 0.2f, 0.6f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
if(m[1][3]==1 && m[2][2]==1 &&m [3][1]==1){System.out.println("GANA ROSA");
gl.glColor3f(1.0f, 0.2f, 0.6f);
gl.glRectf(-0.5f, 0.5f, 0.5f, -0.5f);}
return m;
}
public void mostrar(int a,int b,int [][]f){
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
System.out.print(" M=> \t "+f[i][j]);
}
System.out.println("");
}
}
public void mostrarvec(int m[],int p){
for(int j=1;j<=9;j++){
System.out.print("v> "+m[j]+" ||");
}
System.out.println("");
}
public int cont(int m[]){
int c=0;
for(int j=0;j<9;j++){
if(m[j]!=0){
c++;
}
}
return c;
}
public static void main(String[] args) {
// Primero se crea el objeto JFrame
JFrame miMarco = new JFrame("PROYECTO");

// Se le otorga un tamao a la ventana.


miMarco.setSize(512, 512);
// Se ubica la ventana al centro de la pantalla
miMarco.setLocationRelativeTo(null);
// Nos aseguramos que al cerrar la ventana el programa finalice.
miMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Se crea el objeto GLJPanel
GLJPanel miLienzo = new GLJPanel(new GLCapabilities());
// Se crea una instancia de la Clase
proy12 miPanel = new proy12();
// Indicamos que miLienzo detecte los eventos de openGL de la Clase
miLienzo.addGLEventListener(miPanel);
// Indicamos que miLienzo detecte los eventos de ratn de la Clase
miLienzo.addMouseListener((MouseListener) miPanel);
// Indicamos que miLienzo detecte los eventos de teclado de la Clase
miLienzo.addKeyListener((KeyListener) miPanel);
// Aadimos miLienzo al Componente de miMarco
miMarco.getContentPane().add(miLienzo);
// Hacemos visible el elemento de mayor nivel
miMarco.setVisible(true);
// Se solicita que la ventana de miLienzo est activa
// (para que detecte eventos del ratn y teclado)
miLienzo.requestFocusInWindow();
}
}