Está en la página 1de 10

ESCUELA SUPERIOR POLITECNICA DEL LITORAL

FACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACION

PROGRAMACION ORIENTADA A OBJETOS


EXAMEN FINAL I TERMINO 2007

Nombre:

Paralelo:

1. (60 puntos) Implemente el Juego Tres en Raya en AWT o SWING:

El jugador que inicia (jugador 1) inicia con X el segundo jugador (jugador 2) sigue con la O, alternndose la colocacin de letras en un tablero cuadriculado de tres filas por tres columnas (9 celdas 9 botones). Gana aquel jugador que pueda llenar una fila o columna o alguna de las diagonales con su letra. Cada vez que se encuentra un ganador (Jugador 1, Jugador 2, o Desconocido), se guarda en archivos o base de datos, quien gano y cuantos pasos di el ganador hasta completar la fila, columna o diagonal (en el caso de ser desconocido, el numero de pasos es 0). El botn Reiniciar el Juego permite jugar nuevamente. El botn Ver Resultados abre una segunda ventana que contiene un TextArea con la informacin de los resultados de juegos anteriores, almacenados bien en archivos o bases de datos. No olvide implementar el cerrar de la ventana. Ud. puede hacer uso de las siguientes clases para su implementacin: Para archivos Para bases de datos FileReader, FileWriter DriverManager DataInputStream, FileInputStream Connnection, PreparedStatement DataOutputStream, FileOutputStream ResultSet Para las ventanas Frame, JFrame Label, JLabel Button, JButton, TextArea, JTextArea

import java.io.*; import java.awt.*; import java.awt.event.*;

class TresEnRaya{ public int turno; public static final int EQUIS = 1; public static final int CERO = 2; private int matriz[][] = new int[3][3]; public TresEnRaya(){ turno = EQUIS;

for(int i = 0; i < 3; i++) for(int j = 0; j < 3; j++) matriz[i][j] = 0; } public String getValor(Coordenada c){ if(matriz[c.i][c.j] == 0) return "*"; if(matriz[c.i][c.j] == EQUIS) return "X"; return "O"; } public String getTurno(){ if(turno == EQUIS) return "Jugador 1"; return "Jugador 2"; } public boolean esTresEnRaya(){ return (esFila() || esColumna() || esDiagonal()); } public void switchTurno(){ if(turno == EQUIS) turno = CERO; else if(turno == CERO) turno = EQUIS; } public void aplastar(Coordenada c){ if(matriz[c.i][c.j]==0) matriz[c.i][c.j] = turno; } private boolean esFila(){ return esFila(0) || esFila(1) || esFila(2); } private boolean esColumna(){ return esColumna(0) || esColumna(1) || esColumna(2); } private boolean esFila(int i){

return matriz[i][0]!=0 matriz[i][1] == matriz[i][2]; }

&&

matriz[i][0]

==

matriz[i][1]

&&

private boolean esColumna(int j){ return matriz[0][j]!=0 matriz[1][j] == matriz[2][j]; } private boolean esDiagonal(){ return (matriz[0][0] != 0 && matriz[0][0] == matriz[1][1] && matriz[1][1] == matriz[2][2]) || (matriz [0][2]!=0 && matriz[0][2] == matriz[1][1] && matriz[1][1] == matriz[2][0]); } } && matriz[0][j] == matriz[1][j] &&

class VentanaResultado extends Frame{ private TextArea t = new TextArea(10,100); public VentanaResultado(){ add(t, BorderLayout.CENTER); mostrarResultados(); } private void mostrarResultados(){ try{ String s= "", cadena; File inputFile = new File("juego.txt"); BufferedReader FileReader(inputFile)); in = new BufferedReader(new

while ((cadena = in.readLine()) != null) { s = s + cadena + "\n"; } t.setText(s); } catch(IOException e){ }

} }

class Tablero extends Panel implements ActionListener{ TresEnRaya T; Panel p1 = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); Button B[][] = new Button[3][3]; Button b1, b2; Label l = new Label(" public Tablero(){ T = new TresEnRaya(); p1.setLayout(new GridLayout(3,3)); this.setLayout(new BorderLayout()); this.add(p1, BorderLayout.NORTH); this.add(p2, BorderLayout.CENTER); this.add(p3, BorderLayout.SOUTH); crearControles(); aniadirListenerBotones(); } private void aniadirListenerBotones(){ for(int i = 0;i < 3; i++){ for(int j = 0; j < 3; j++){ B[i][j].addActionListener(this); } } b1.addActionListener(this); b2.addActionListener(this); ");

} private void crearControles(){

int i, j; for(i = 0;i < 3; i++){ for(j = 0; j < 3; j++){ B[i][j] = new Button(""); p1.add(B[i][j]); } } b1 = new Button("Reiniciar el juego"); b2 =new Button("Ver Resultados"); p2.add(l); p3.add(b1); p3.add(b2); actualizar(); } private void actualizar(){ for(int i = 0;i < 3; i++){ for(int j = 0; j < 3; j++){ B[i][j].setLabel(T.getValor(new Coordenada(i,j))); } } } public void actionPerformed(ActionEvent e){ Button b = (Button)e.getSource(); if(b == b1) { T = new TresEnRaya(); actualizar(); l.setText(" } else if(b == b2){ VentanaResultado v = new VentanaResultado(); v.setSize(300,300); v.setVisible(true); ");

} else{ marcarBoton(b); if(T.esTresEnRaya()) { cambiarEtiqueta(T.getTurno()); guardarResultados(); T = new TresEnRaya(); actualizar(); } else T.switchTurno(); } } private void guardarResultados(){ try{ File outputFile = new File("juego.txt"); FileWriter out = new FileWriter(outputFile,true); out.write("Ganador " + T.getTurno() + "\n"); out.close(); }catch (IOException e){ System.out.println("error"); } } void cambiarEtiqueta(String s){ l.setText("Ganador " + s); } void marcarBoton(Button b){ Coordenada c = buscarBoton(b); T.aplastar(c); b.setLabel(T.getValor(c)); System.out.println(c.i + "," + c.j + " turno " + T.turno ); } " + T.getValor(c) + "

Coordenada buscarBoton(Button b){ for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ if(b == B[i][j]) { Coordenada c = new Coordenada(i,j); return c; } } } return null; } }

2. (40 puntos) Seleccione la opcin valida y/o responda.


2.1 Qu pasara si trata de correr y compilar el siguiente cdigo Java? (4 puntos) interface A{ public void innerMeth(); } class B implements A{ public void innerMeth(int memVar){ System.out.println(memVar); } } public class Test { A a; int memVar = 1; void aMethod(){ a = new B(); } public static void main(String[] args){ Test t = new Test(); t.a.innerMeth(); } }

a) b) c) d)

Error de compilacin. Se lanza la excepcin NoSuchMethodException en tiempo de ejecucin. Compila, corre e imprime 1 Se lanza una excepcin NullPointerException en tiempo de ejecucin.

2.2 Se tiene la siguiente porcin de cdigo HTML de la pgina TestEjercicio.html: (5 puntos) <APPLET CODE="Ejercicio.class" WIDTH=750 HEIGHT=100> <PARAM NAME=param1 VALUE=Ejercicio de Applets> </APPLET> Y el siguiente cdigo del applet Ejercicio.java: import import import import java.awt.Graphics; java.awt.Font; java.awt.Color; java.applet.*;

public class Ejercicio extends Applet { Font f = new Font("TimesRoman", Font.BOLD+Font.ITALIC, 24); String param1, param2; public void init() { param1 = getParameter("param1"); param2 = getParameter("param2"); if (param2 == null) param2=""; } public void paint(Graphics screen) { screen.setFont(f); screen.setColor(Color.red); screen.drawString(param1, 5, 50); screen.drawString(param2, 5, 100); } } Si se intenta compilar este applet y luego abrir la pgina HTML, qu resultado obtendr? a) Se produce un error al tratar de compilar el applet. b) Se muestra en la pgina HTML: Ejercicio de Applets c) Se produce la excepcin NullPointerException y no se podr cargar el applet. d) El applet es cargado en la pgina HTML, pero no muestra nada.

2.3

Dado el siguiente programa:


import java.io.*;

(9 puntos)

class MyException extends Exception{ int value; MyException(int val){ value = val; } public int getValue(){ return(value); } } class TestClass{ public static void foo(int x) throws MyException,IOException{ if(x < 0){ System.out.println("X too low"); throw(new MyException(x)); } if(x > 100){ System.out.println("X too high"); throw(new IOException("Mike")); } System.out.println("X OK"); } public static void main(String[] args){ try{ // convert first argument to foo(x); int x = Integer.parseInt(args[0]); System.out.println("Mike"); } catch(NumberFormatException e){ System.out.println("Bad Number"); } catch(IOException e){ System.out.println("Rusty"); } catch(MyException e){ System.out.println("Dimitri"); System.out.println(e.getValue()); } } }

Qu imprime el programa cuando es invocado de la siguiente forma:

java TestClass 2
X OK Mike

java TestClass 200


X too high Rusty

java TestClass -200


X too low Dimitri -200

2.4

Dado el siguiente programa:

(18 puntos)

class MyFrame extends JFrame{ public MyFrame(){ setTitle("WidgetTest"); setSize(300,300); // size in pixels setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class MyPanel extends JPanel{ Color current = Color.red; JButton button = new JButton("Button"); class ButtonHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ current = Color.green; System.out.println("Mike"); repaint(); } } class MouseHandler extends MouseAdapter{ public void mouseClicked(MouseEvent ev){ if(ev.getX() <= 100) System.out.println("Rusty"); if(ev.getY() >= 100) current = Color.blue; System.out.println("Dimitri"); repaint(); } } MyPanel(){ button.addActionListener(new ButtonHandler()); addMouseListener(new MouseHandler()); add(button); System.out.println("Alan"); } public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g.setColor(current); g2.fill(new Rectangle2D.Float(0,100,100,100)); } } public class WidgetTest{ public static void main(String[] args){ MyFrame myframe = new MyFrame(); Container contentpane = myframe.getContentPane(); contentpane.add(new MyPanel()); myframe.show(); } }

1. Cul de las siguientes DEBE ser una clase interna? (En otras palabras, cul de las siguientes no trabajar si su implementacin es movida fuera de la clase MyPanel) (3 puntos) a) ButtonHandler b) MouseHandler c) Ambas ButtonHandler y MouseHandler d) Ni ButtonHandler ni MouseHandler 2. Qu es Color.red ? (3 puntos)

a) b) c) d)

una variable esttica pblica una instancia pblica de una variable un mtodo pblico esttico un mtodo pblico de instancia

3. Qu es paintComponent (en MyPanel)? (3 puntos) a) una clase interna b) un mtodo esttico pblico c) un manejador de eventos (listener) d) un mtodo pblico de instancia 4. Qu imprime el programa cuando se da click con el ratn en el rectngulo lleno creado en paintComponent? (3 puntos) Rusty Dimitri 5. De qu color se pinta el rectngulo lleno del programa una vez que se da click con el ratn dentro del rea del rectngulo? (3 puntos) Azul 6. Si la lnea button.addActionListener(new ButtonHandler()); se borra del programa y el programa es recompilado. Qu se imprimir cuando se d click en el botn? (3 puntos) Nada

2.5

El resultado de compilar y ejecutar el siguiente cdigo es: (4 puntos)


class Greebo implements Runnable { public void run (String message) { System.out.println("Examen del Segundo Parcial"); } } class GreeboTest { public static void main (String args[]) { Greebo g = new Greebo(); Thread t = new Thread(g); t.start(); } }

a) b) c) d) e)

Sale un error de compilacin, puesto que no existe la interfase Runnable Compila y ejecuta, se muestra: Examen del Segundo parcial Compila, pero al ejecutar no muestra nada en pantalla. Sale un error de compilacin, puesto que GreeboTest, debe ser declarada abstracta. Ninguna de las anteriores