WieBenIk : Functionaliteit uitgebreid

In de Google-market maakte Chantal de opmerking dat WieBenIk te moeilijk is. Zij had het geinstalleerd, gespeeld, maar niet geraden dat ze “Google” was. Tja. Ik heb het zelf met 3 anderen 1,5 uur lang gespeeld. We hebben veel gelachen en eigenlijk vonden we het niet echt te moeilijk. Je moet wel je medespelers op het juiste moment een hintje geven … Juist daar dacht ik aan een stukje automatisering.

Dit weekend ben ik dus aan de slag gegaan met het maken van 3 hints per woord. Ook de code moest daarvoor een beetje worden aangepast. Op het moment dat we een woord uit de database halen, kunnen we ook meteen de hints erbij laden. De database heeft er dus 3 kolommen bijgekregen, die ik uitlees. De resultaten plaats ik in een String Array, zodat het later makkelijk is om de variabelen te vullen met de verschillende hints.

De DBHelper heeft dus een nieuwe methode gekregen :

	public String[] getRecord(long rowId) {
		SQLiteDatabase db = getReadableDatabase();

		Cursor c = db.query(TABLE_NAME, new String[] { WORD, "HINT1", "HINT2",
				"HINT3" }, _ID + "= " + rowId, null, null, null, null, null);
		if (c != null) {
			c.moveToFirst();
		}
		db.close();
		String[] result;
		result = new String[4];
		result[0] = c.getString(0);
		result[1] = c.getString(1);
		result[2] = c.getString(2);
		result[3] = c.getString(3);

		return result;

	}

Zoals je kunt zien, vul ik eerst een cursor met de juiste rij. Daarna vul ik het Array (String[]) met de verschillende waardes. Het is nu mogelijk geworden om de hints uit te lezen op het moment dat ze nodig zijn. Eerst laat ik een dialoog zien, waarin duidelijk gemaakt wordt dat er een hint beschikbaar is :

	private void ShowHintDialog(final int hintNumber) {
		PlaySound(R.raw.notify_bite);
		myVibrator.vibrate(250);
		AlertDialog.Builder screenDialog = new AlertDialog.Builder(this);
		screenDialog.setTitle("Hint " + hintNumber + " Beschikbaar");

		TextView hintText = new TextView(this);
		hintText.setText("\n\n  DRUK OP \"TOON\" OM DE HINT TE ZIEN  \n\n");
		LayoutParams textOutLayoutParams = new LayoutParams(
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		hintText.setLayoutParams(textOutLayoutParams);

		LinearLayout dialogLayout = new LinearLayout(this);
		dialogLayout.setOrientation(LinearLayout.HORIZONTAL);
		dialogLayout.addView(hintText);
		screenDialog.setView(dialogLayout);

		screenDialog.setPositiveButton("Toon Hint",
				new DialogInterface.OnClickListener() {
					// do something when the button is clicked
					public void onClick(DialogInterface arg0, int arg1) {
						ShowHint(hintNumber);
					}
				});

		screenDialog.setNeutralButton("Overslaan",
				new DialogInterface.OnClickListener() {
					// do something when the button is clicked
					public void onClick(DialogInterface arg0, int arg1) {
						Log.d("DIALOG", "Cancel");
					}
				});
		screenDialog.show();
	}

Deze methode wordt dus aangeroepen vanuit de CountdownTimer. Een boolean zorgt ervoor dat de dialog maar één keer wordt weergegeven :

				if (millisUntilFinished / 1000 < 100 && !showHint2) {
					showHint2 = true;
					ShowHintDialog(2);
				}

 

Vervolgens wordt met deze methode de hint daadwerkelijk getoond :

	private void ShowHint(int hintNumber) {

		AlertDialog.Builder screenDialog = new AlertDialog.Builder(this);
		screenDialog.setTitle("HINT");

		TextView hintText = new TextView(this);

		String t = hintMap.get(hintNumber);
		hintText.setText(t);

		LayoutParams textOutLayoutParams = new LayoutParams(
				LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
		hintText.setLayoutParams(textOutLayoutParams);
		hintText.setPadding(10, 10, 10, 10);

		LinearLayout dialogLayout = new LinearLayout(this);
		dialogLayout.addView(hintText);
		screenDialog.setView(dialogLayout);

		screenDialog.setPositiveButton("OK",
				new DialogInterface.OnClickListener() {
					// do something when the button is clicked
					public void onClick(DialogInterface arg0, int arg1) {

					}
				});

		screenDialog.show();
	}

Je ziet dat ik een Map gebruik. Dat heb ik gedaan om het hintnumber in de methode variabel te kunnen houden. Eclipse gaf hier waarschuwingen over. HintNumber zou final moeten zijn, maar dan kon ik de inhoud weer niet veranderen.. Ik snap het nog niet helemaal, maar door een Map te gebruiken, kon ik dit probleem omzeilen. Dus :

public Map hintMap;

public void getRndRecord() {

Random rnd = new Random();
// TODO OUT FOR TESTING int rndrecord = rnd.nextInt(myDBHelper.getMaxRecord());
int rndrecord = rnd.nextInt(100);
String[] record = myDBHelper.getRecord(rndrecord);
objectToGuess = "--- " + record[0];
hintMap = new HashMap();
hintMap.put(1, "\n--- " + record[1] + " ---\n");
hintMap.put(2, "\n--- " + record[2] + " ---\n");
hintMap.put(3, "\n--- " + record[3] + " ---\n");
}

Je ziet dat ik in deze code de Randomizer even op 100 heb gezet. Dat heb ik gedaan, omdat pas 100 van de 600 woorden ook daadwerkelijk 3 hints hebben. Dat is nog het meeste werk, de hints verzinnen. Maar wel lachen, gieren, brullen 😉

You can leave a response, or trackback from your own site.

Leave a Reply