/*
* This file is part of DroidClic
*
* DroidClic is copyright 2012 by
* Marc Alier Forment,
* Maria Jos� Casany Guerrero,
* Enric Mayol
*
* UPC Students involved in this project:
*
* Previous version and legacy code:
* ---------------------------------
* PUJOL BENET, MIRIAM
*
*
* Project management
* ------------------
* ALMA SERRANO, ALBERT
* CLAVER ARGUDO, MARIA
* JIMENEZ TARRES, VICTOR
* CORCHADO MERINO, JUAN CARLOS
* JUAN JANE, ANDREU
* MENES ROUCO, MARTIN
* ORTEGA GOMEZ, CRISTIAN
* PURCET SOTO, SERGI
* RAMOS GONZALEZ, RICARDO
* SOLE MORERA, DANIEL
*
*
* Research & support
* --------------------
* ALBALATE FERNANDEZ, AIDA
* CABRE JUAN, ALBERT
* CANDON ARENAS, HECTOR
* ELBAILE SERRA, ABEL
* GONZALEZ DE PABLO, BORJA
* IGLESIAS LOPEZ, OSCAR
* MARTINEZ LOPEZ, SERGIO
* PEREZ PLANAS, ORIAC
* SANCHEZ MARCOS, IVAN
* TORNE GOZALBO, ORIOL
*
*
* Development
* -----------
* Lead developers
* ALBALATE FERNANDEZ, AIDA
* COSTA MANSILLA, GERARD
* GONZALEZ DE PABLO, BORJA
* Developers:
* ALEMANY FONT, ALBERT
* ALVAREZ JUSTE, XAVIER
* ALVAREZ MORALES, FERRAN
* BARRERO MARTINEZ, LINDSAY
* BENITEZ VALLS, ALBERT
* BERRUEZO MARTINEZ, DAVID
* BRAMON DEVANT, MARC
* BRIGUELLI DA SILVA, LUIS FERNANDO
* CABRE JUAN, ALBERT
* CANDON ARENAS, HECTOR
* CAPEL CATALAN, VICTOR
* CLAVER ARGUDO, MARIA
* DE PAULA DE PUIG GUIXE, FRANCESC
* DIEZ RUIZ, ALBERT
* ELBAILE SERRA, ABEL
* FARRE GONZALEZ, PAU
* GARCIA GARCIA, XAVIER
* HURTADO OBIOLS, CRISTINA
* MARTINEZ DIAZ, ARTURO
* MARTINEZ LOPEZ, SERGIO
* MENES ROUCO, MARTIN
* MONTSERRAT GARCIA, EDUARD
* ORTIZ GRIMAU, XAVIER
* OSORIO ALVAREZ, DAVID
* PASCUAL VAZQUEZ, PABLO
* PEDRAZA GUTIERREZ, M. MERCEDES
* PEREZ PLANAS, ORIAC
* RODRIGUEZ TORRES, MIREIA
* SANCHEZ MARCOS, IVAN
* SEGARRA RODA, EDUARD
* SELLES FEITO, MANEL
* SOLER PASCUAL, GERARD
* SUBIRATS SALVANS, JOAN
*
*
* Design & usability
* --------------------
* Lead designer:
* LEGORBURU CLADERA, I�IGO
* Designers:
* OTAL RODRIGUEZ, DANIEL
* PASCUAL VAZQUEZ, PABLO
* SEGARRA RODA, EDUARD
* SOLER PASCUAL, GERARD
* SUBIRATS SALVANS, JOAN
* VIDAL PASTALLE, MARIA
*
*
* Testing, evaluation & audit
* ---------------------------
* Lead tester:
* NAVARRO JIMENEZ, GERMAN
* ALEMANY FONT, ALBERT
* Testers:
* ALVAREZ MORALES, FERRAN
* BENITEZ VALLS, ALBERT
* CAPEL CATALAN, VICTOR
* MONTSERRAT GARCIA, EDUARD
* ORTIZ GRIMAU, XAVIER
* SANCHEZ CORREDOR, MONTSERRAT
*
*
* Documentation, communication & broadcast
* ----------------------------------------
* Lead documentator:
* ALVAREZ JUSTE, XAVIER
* SANCHEZ CORREDOR, MONTSERRAT
* Documentators:
* BARRERO MARTINEZ, LINDSAY
* GARCIA GARCIA, XAVIER
* NAVARRO JIMENEZ, GERMAN
* OSORIO ALVAREZ, DAVID
* TORNE GOZALBO, ORIOL
*
*
* DroidClic is copyright 2012 by
* Universitat Politecnica de Catalunya http://www.upc.edu
* Contact info:
* Marc Alier Forment granludo @ gmail.com or marc.alier @ upc.edu
*
* DroiClic is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Droidlic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DroidClic. If not, see <http://www.gnu.org/licenses/>.
*
* DroidClic is based on the Software JClic by Francesc Busquets
* http://clic.xtec.cat/es/jclic/
*
*/
package pfc.Activitats;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Vector;
import pfc.Descompressor.Descompressor;
import pfc.Jclic.Jclic;
import pfc.Jclic.R;
import pfc.Parser.Parser;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class CrossWord extends Activity {
private static final int MENU_ANT = 0;
private static final int MENU_SEG = 1;
private static final int MENU_SOLUCIO = 2;
private static final int MENU_AJUDA = 3;
private static final int MENU_INICI = 4;
private static final int MENU_SORTIR = 5;
private TextView posAgafada = null;
private int newWidth;
private int newHeight;
private int width;
private int height;
private Vector<BitmapDrawable> vecDraw;
private String textu;
private ArrayList rowsus;
private CountDownTimer timer;
int contadorTemps = 0;
int targets = 0;
private ProgressBar tiempo;
private ArrayList horizontal;
private ArrayList vertical;
private int aciertos;
private int intentos;
static String[] TAULA;
static String[] TAULA2;
static Boolean[] TAULATRUE;
GridView gridView;
private Constants CO = Constants.getInstance();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.crossword);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
aciertos = 0;
intentos = 0;
gridView = (GridView) findViewById(R.id.gridView1);
Button b1 = (Button) findViewById(R.id.menu);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openOptionsMenu();
}
});
agafarDades();
try {
reiniciarMenu();
if (CO.imatge != null) {
if (CO.exemple) {
InputStream in = this.getAssets().open(CO.imatge);
File dst = new File("/sdcard/tmp/jclic/imatge.jpg");
dst.createNewFile();
OutputStream out = new FileOutputStream(dst);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
// posarImatges(dst.getAbsolutePath());
} else {
if (Descompressor.descompressor(CO.imatge, CO.path)) {
posarImatges("/sdcard/tmp/jclic/" + CO.imatge);
}
}
}
// setOnClickListener();
} catch (Exception e) {
Log.d("Error", "catch Identify " + e);
}
}
private void agafarDades() {
int maxTime = Parser.getActivitats().elementAt(CO.activitatActual)
.getTempsMax();
// maxTime = 20;
tiempo = (ProgressBar) findViewById(R.id.progressTime);
tiempo.setMax(maxTime);
tiempo.setProgress(0);
if (maxTime != 0) {
timer = new CountDownTimer(maxTime * 1000, 1000) {
@Override
public void onFinish() {
contadorTemps++;
/*
* tiempo.setText(Integer .toString(maxTime -
* contadorTemps));
*/
tiempo.setProgress(contadorTemps);
// setMissatges();
}
@Override
public void onTick(long arg0) {
contadorTemps++;
/*
* tiempo.setText(Integer .toString(maxTime -
* contadorTemps));
*/
tiempo.setProgress(contadorTemps);
// setMissatges();
}
}.start();
}
gridView.setBackgroundColor(Color.GRAY);
String titol = "";
if (Parser.getActivitats().elementAt(CO.activitatActual).getName() != null) {
rowsus = Parser.getActivitats().elementAt(CO.activitatActual)
.getCrossword();
horizontal = Parser.getActivitats().elementAt(CO.activitatActual)
.getHoritzontals();
vertical = Parser.getActivitats().elementAt(CO.activitatActual)
.getVertical();
gridView.setNumColumns(((String) rowsus.get(0)).length());
gridView.getLayoutParams().width = ((String) rowsus.get(0))
.length() * 70;
// gridView.getLayoutParams().height = rowsus.size() * 80;
titol = Parser.getActivitats().elementAt(CO.activitatActual)
.getName();
} else
CO.name.setText("Activitat JClic");
int numElems = ((String) rowsus.get(0)).length() * rowsus.size();
TAULA = new String[numElems];
TAULA2 = new String[numElems];
TAULATRUE = new Boolean[numElems];
for (int i = 0; i < numElems; ++i)
TAULATRUE[i] = false;
int pos = 0;
for (int i = 0; i < rowsus.size(); ++i) {
for (int j = 0; j < ((String) rowsus.get(i)).length(); ++j) {
TAULA[pos] = String.valueOf(((String) rowsus.get(i)).charAt(j));
TAULA2[j * rowsus.size() + i] = String.valueOf(((String) rowsus
.get(i)).charAt(j));
++pos;
}
}
TextView etHor = (TextView) findViewById(R.id.desc_hor);
TextView etVer = (TextView) findViewById(R.id.desc_ver);
String hor = "HORIZONTALES: " + '\n';
String ver = "VERTICALES: " + '\n';
for (int i = 0; i < horizontal.size(); ++i) {
if (((String) (horizontal.get(i))).equals(" "))
hor += "{FOTO}" + '\n';
else
hor += (String) horizontal.get(i) + '\n';
}
for (int i = 0; i < vertical.size(); ++i) {
if (((String) (vertical.get(i))).equals(" "))
ver += "{FOTO}" + '\n';
else
ver += (String) vertical.get(i) + '\n';
}
etHor.setText(hor);
etVer.setText(ver);
gridView.setAdapter(new CrossWordAdapter(this, TAULA));
TextView tv = (TextView) findViewById(R.id.titulo);
tv.setText(titol);
}
public void Corregir(View view) {
int lletres = 0;
for (int i = 0; i < TAULA.length; ++i) {
int idItem = (int) gridView.getAdapter().getItemId(i);
View vv = gridView.getChildAt(i);
EditText ett = (EditText) vv.findViewById((int) idItem);
if (!TAULA[i].equals("*")) {
++lletres;
if (ett.getText().toString().length() > 0) {
if ((ett.getText().toString().equals(TAULA[i]))
&& TAULATRUE[i] == false) {
++aciertos;
TAULATRUE[i] = true;
++intentos;
}
if (TAULATRUE[i] == false)
++intentos;
}
}
}
if (lletres == aciertos && aciertos > 0) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.jclic_aqua);
builder.setMessage("Has completado con exito el crucigrama!")
.setCancelable(false)
.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// CrossWord.this.finish();
}
});
AlertDialog alert = builder.create();
alert.show();
}
TextView tvaciertos = (TextView) findViewById(R.id.editAciertos);
tvaciertos.setText(String.valueOf(aciertos));
TextView tvintentos = (TextView) findViewById(R.id.editIntentos);
tvintentos.setText(String.valueOf(intentos));
}
public void clicked(View v) {
}
public void clickItem(int position) {
if (!TAULA[position].equals("*")) {
int numAst = 0;
Boolean astTrobat = true;
for (int i = 0; i <= position; ++i) {
if (TAULA[i].equals("*")) {
if (astTrobat == false)
++numAst;
astTrobat = true;
} else
astTrobat = false;
}
}
if (!TAULA2[position].equals("*")) {
int numAst = 0;
Boolean astTrobat = true;
for (int i = 0; i <= position; ++i) {
if (TAULA2[i].equals("*")) {
if (astTrobat == false)
++numAst;
astTrobat = true;
} else
astTrobat = false;
}
}
}
private void posarImatges(String path) {
Bitmap bitmapOrg = BitmapFactory.decodeFile(path);
int widthImage = bitmapOrg.getWidth();
int heightImage = bitmapOrg.getHeight();
newWidth = width * CO.cols;
newHeight = height * CO.rows;
float scaleWidth = ((float) newWidth) / widthImage;
float scaleHeight = ((float) newHeight) / heightImage;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, widthImage,
heightImage, matrix, true);
int x = 0, y = 0;
Bitmap btmp = null;
BitmapDrawable btmdrw = null;
int rowActual = 0;
int colActual = -1;
int colAnt = 0;
vecDraw = new Vector<BitmapDrawable>();
for (int i = 0; i < CO.vecCaselles.size(); i++) {
if (CO.vecCaselles.elementAt(i) != null) {
colAnt = colActual;
if (colActual == CO.cols - 1)
colActual = 0;
else
colActual++;
if (colAnt == CO.cols - 1)
rowActual++;
if (CO.cols == 1)
x = CO.cols - 1;
else
x = (newWidth / CO.cols) * (colActual);
if (CO.rows == 1)
y = CO.rows - 1;
else
y = (newHeight / CO.rows) * (rowActual);
btmp = Bitmap.createBitmap(resizedBitmap, x, y, newWidth
/ CO.cols, newHeight / CO.rows);
btmdrw = new BitmapDrawable(btmp);
// CO.vecCaselles.elementAt(i).setBackgroundDrawable(btmdrw);
vecDraw.add(btmdrw);
} else
vecDraw.add(null);
}
for (int i = 0; i < CO.vecCaselles.size(); i++) {
if (CO.vecCaselles.elementAt(i) != null) {
String text = (String) CO.vecCaselles.elementAt(i).getText();
int index = CO.sortida.indexOf(text);
CO.vecCaselles.elementAt(i).setBackgroundDrawable(
vecDraw.elementAt(index));
}
}
}
private void reiniciarMenu() {
if (CO.menu != null) {
CO.menu.clear();
CO.menu.add(0, MENU_ANT, 0, R.string.menu_ant);
CO.menu.add(0, MENU_SEG, 0, R.string.menu_seg);
CO.menu.add(0, MENU_SOLUCIO, 0, R.string.menu_solucio);
CO.menu.add(0, MENU_AJUDA, 0, R.string.menu_ajuda);
CO.menu.add(0, MENU_INICI, 0, R.string.menu_inici);
CO.menu.add(0, MENU_SORTIR, 0, R.string.menu_sortir);
CO.menu.getItem(MENU_ANT).setIcon(android.R.drawable.ic_media_rew);
CO.menu.getItem(MENU_SEG).setIcon(android.R.drawable.ic_media_ff);
CO.menu.getItem(MENU_SOLUCIO).setIcon(
android.R.drawable.btn_star_big_off);
CO.menu.getItem(MENU_AJUDA)
.setIcon(android.R.drawable.ic_menu_help);
CO.menu.getItem(MENU_INICI).setIcon(
android.R.drawable.ic_menu_revert);
CO.menu.getItem(MENU_SORTIR).setIcon(
android.R.drawable.ic_menu_close_clear_cancel);
// Configuracio del menu per mostrarSolucio
if (CO.mostrarSolucio)
CO.menu.getItem(MENU_SOLUCIO).setEnabled(true);
else
CO.menu.getItem(MENU_SOLUCIO).setEnabled(false);
CO.menu.getItem(MENU_SOLUCIO).setTitle(R.string.menu_solucio);
// Configuracio del menu per ant i seguent
CO.menu.getItem(MENU_SEG).setEnabled(true);
CO.menu.getItem(MENU_ANT).setEnabled(true);
if (CO.activitatActual < 1) {
// estem a la primera activitat, pel que no podem habilitar
// l'anterior
CO.menu.getItem(MENU_ANT).setEnabled(false);
}
if (CO.activitatActual == Parser.getActivitats().size() - 1) {
// estem a l'ultima activitat, pel que no podem habilitar el
// seguent
CO.menu.getItem(MENU_SEG).setEnabled(false);
}
}
}
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CO.menu = menu;
CO.menu.clear();
CO.menu.add(0, MENU_ANT, 0, R.string.menu_ant);
CO.menu.add(0, MENU_SEG, 0, R.string.menu_seg);
CO.menu.add(0, MENU_SOLUCIO, 0, R.string.menu_solucio);
CO.menu.add(0, MENU_AJUDA, 0, R.string.menu_ajuda);
CO.menu.add(0, MENU_INICI, 0, R.string.menu_inici);
CO.menu.add(0, MENU_SORTIR, 0, R.string.menu_sortir);
CO.menu.getItem(MENU_ANT).setIcon(android.R.drawable.ic_media_rew);
CO.menu.getItem(MENU_SEG).setIcon(android.R.drawable.ic_media_ff);
CO.menu.getItem(MENU_SOLUCIO).setIcon(
android.R.drawable.btn_star_big_off);
CO.menu.getItem(MENU_AJUDA).setIcon(android.R.drawable.ic_menu_help);
CO.menu.getItem(MENU_INICI).setIcon(android.R.drawable.ic_menu_revert);
CO.menu.getItem(MENU_SORTIR).setIcon(
android.R.drawable.ic_menu_close_clear_cancel);
// Configuro els botons d'anterior i seguent
CO.menu.getItem(MENU_SEG).setEnabled(true);
CO.menu.getItem(MENU_ANT).setEnabled(true);
if (CO.activitatActual < 1) {
// estem a la primera activitat, pel que no podem habilitar
// l'anterior
CO.menu.getItem(MENU_ANT).setEnabled(false);
}
if (CO.activitatActual == Parser.getActivitats().size() - 1) {
// estem a l'ultima activitat, pel que no podem habilitar el seguent
CO.menu.getItem(MENU_SEG).setEnabled(false);
}
if (CO.mostrarSolucio)
CO.menu.getItem(MENU_SOLUCIO).setEnabled(true);
else
CO.menu.getItem(MENU_SOLUCIO).setEnabled(false);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ANT:
CO.activitatActual = CO.activitatActual - 2;
Intent iAnt = new Intent(this, Puzzle.class);
startActivity(iAnt);
finish();
return true;
case MENU_SEG:
Intent iSeg = new Intent(this, Puzzle.class);
startActivity(iSeg);
finish();
return true;
case MENU_AJUDA:
Dialog ajuda = new AlertDialog.Builder(CrossWord.this)
.setIcon(R.drawable.jclic_aqua).setTitle("Ajuda")
.setPositiveButton("D'acord", null)
.setMessage("Completa el crucigrama.\n" + "").create();
ajuda.show();
return true;
case MENU_SOLUCIO:
Dialog solucio = new AlertDialog.Builder(CrossWord.this)
.setIcon(R.drawable.jclic_aqua).setTitle("Solucions")
.setPositiveButton("D'acord", null).setMessage("Solucio")
.create();
solucio.show();
return true;
case MENU_SORTIR:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.jclic_aqua);
builder.setMessage("Estas segur de que vols sortir?")
.setCancelable(false)
.setPositiveButton("Si",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
CrossWord.this.finish();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
case MENU_INICI:
Intent i = new Intent(this, Jclic.class);
startActivity(i);
finish();
return true;
}
return false;
}
private void setMissatges() {
if (CO.solucioVisible) {
CO.miss.setText("");
CO.missCorrectes.setText("");
CO.cas1.setText("");
CO.p1 = "<buit>";
CO.p2 = "<buit>";
} else {
if (CO.correcte == CO.casIni) {
// Hem acabat el joc
if (Parser.getActivitats().elementAt(CO.activitatActual)
.getMissatgeFi() != null)
CO.miss.setText(Parser.getActivitats()
.elementAt(CO.activitatActual).getMissatgeFi());
else
CO.miss.setText("Joc finalitzat!");
CO.missCorrectes.setText("Prem aqui per continuar.");
CO.missCorrectes.setBackgroundColor(Color.WHITE);
CO.missCorrectes.setTextColor(Color.BLACK);
// bloquejarJoc(true);
if (CO.menu != null)
CO.menu.getItem(MENU_SOLUCIO).setEnabled(false);
} else {
if (Parser.getActivitats().elementAt(CO.activitatActual)
.getMissatgeIni() != null)
CO.miss.setText(Parser.getActivitats()
.elementAt(CO.activitatActual).getMissatgeIni());
else
CO.miss.setText("Comenca el joc!");
CO.missCorrectes.setText("Correctes = " + CO.correcte
+ ", Incorrectes = " + CO.incorrecte);
}
}
}
}