CC10A03 Clase Auxiliar Viernes 14 de Mayo 2004
Arreglos e Interfaces
P1.-
El juego de los 13 fósforos consiste en dejar sobre una mesa 13 fósforos, uno al lado del otro. Dos jugadores van alternadamente sacando 1, 2 o 3 fósforos, hasta que sólo quede 1. Quien tiene que sacar el último fósforo en su turno pierde el juego.Se le pide que implemente el juego de los 13 fósforos en un frame. Guíese por la siguiente figura:
Notas:
P2.
La siguiente tabla define los métodos ofrecidos por la clase Vector que permite realizar operaciones con vectores multi-dimensionales:
Ejemplo |
Significado |
encabezamiento |
new Vector(a,n) |
crea vector <a0, a1, ,an-1> |
Vector(int[] x, int n) |
a.valor(i) |
Entrega valor de la componente de índice i |
int valor(int i) |
a.suma(b) |
Suma vectorial: <a0+b0, a1+b1, ,an-1+bn-1> |
Vector suma(Vector x) |
a.producto(b) |
Producto vectorial: <a0b0, a1b1, ,an-1bn-1> |
Vector producto(Vector x) |
a.productoPunto(b) |
Producto escalara 0b0 + a1b1 + + an-1bn-1 |
Int productoPunto(Vector x) |
Class Vector{
// representación
protected final int N = 100; // dimensión máxima
protected int[] v = new int [N] // valores components
protected int n; // dimensión del vector (Nş componentes)
}
Solución:
P1.- import java.awt.*;
import java.awt.event.*;
// Los dos "import" son los que nos permiten manejar Interfaces graficas en Java
public class Juego13 extends Frame implements ActionListener {
Label titulo; //titulo / señala quien ganó
Button[] botones; //arreglo de botones correspondientes apalitos
Button listo; //señala fin del turno del jugador
int palitosQueQuedan = 13; //al principio quedan todos los palitos
public Juego13() {
titulo = new Label("Juego de los 13 fósforos");
botones = new Button[13];
for (int i = 0; i < 13; i++)
botones[i] = new Button("|");
//aquí si inicializan los palitos, Botones con el texto "|"
listo = new Button("Ok!");
Panel p = new Panel();
p.setLayout(new FlowLayout());
//ordena los elementos de p de izquierda a derecha
for (int i = 0; i < 13; i++)
p.add(botones[i]); //agrega los botones
this.setLayout(new BorderLayout()); //layout del Frame completo
add(titulo, BorderLayout.NORTH); //titulo arriba
add(p, BorderLayout.CENTER); //panel al centro
add(listo, BorderLayout.SOUTH); //boton "listo" abajo
this.pack();
this.show();
//instrucciones que sirven para desplegar el Frame en pantalla
//Agrego ActionListeners
for (int i = 0; i < 13; i++)
botones[i].addActionListener(this);
listo.addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
//CASO 1: Turno del Computador (Apretaron botón "Listo")
if (ae.getSource() == listo) {
/*
* Hay 3 casos :
*-queda un palito --> el computador perdió
*-quedan 4,3,o 2 --> sacando 3,2,o 1 palitos, el computador ganó
*- otro --> saco algunos palitos al azar
*/
if (palitosQueQuedan == 1) {
titulo.setText("GANAS TU!");
}
if (palitosQueQuedan <= 4) {
for (int i=0; palitosQueQuedan>1; i++) {
if (botones[i].getLabel().equals("|")) {
botones[i].setLabel("");
botones[i].setEnabled(false);
//ya no se puede apretar el boton
palitosQueQuedan--;
}
}
titulo.setText("GANA EL PC!");
}
else {
int azar=(int)Math.random()*3+1; //1,2,3
for (int i=0; azar>0; i++) {
if (botones[i].getLabel().equals("|")) {
botones[i].setLabel("");
botones[i].setEnabled(false);
palitosQueQuedan--;
azar--;
}//if
}//for
}//else
}//if (ae.getSource()==listo)
//CASO 2: TURNO DEL JUGADOR
else {
/* Hay 2 casos :
* - queda un palito --> perdió el jugador
* - quedan mas --> el jugador saca palitos
* (confiamos en que saca a lo más 3)
*/
//Jugada persona
if (palitosQueQuedan==1) {
titulo.setText("GANA EL PC");
}
for (int i = 0; i < 13; i++) {
if (ae.getSource() == botones[i]) {
botones[i].setLabel("");
botones[i].setEnabled(false);
palitosQueQuedan--;
}
}
}
}
public static void main(String args[]){
Juego13 j=new Juego13();
}
}
P2.-
class Vector{
// variables de instancia
protected final int N = 100;
protected int[] v = new int[N];
protected int n;
// constructor
public Vector(int[]x, int n){
for (int i=0; i<n; ++i)
this.v[i] = x[i];
this.n = n;
}
public int valor(int i){
return this.v[i]; //accesamos al i-esimo elemento
}
public Vector producto(Vector x){
int []aux = new int[n];
for (int i=0; i<n; ++i)
aux[i] = this.v[i] * x.v[i]; //devolvemos un arreglo con cada componente como el
return new Vector(aux,n); //producto de las componentes de ambos vectores
}
public int productoPunto(Vector x){
int suma = 0;
Vector aux = this.producto(x); //el mismo vector multiplicado con si mismo
for (int i=0; i < n; ++i)
suma+= aux.valor(i); //la suma de los valores
return suma;
}
}