[gbrainy] More analogies & analogies fixes



commit b49219c733a1a50994806f6221a15d5f9190563d
Author: Jordi Mas <jmas softcatala org>
Date:   Wed Sep 9 20:37:57 2009 +0200

    More analogies & analogies fixes

 data/verbal_analogies.xml                          |   90 ++++++++++++++++++++
 src/VerbalAnalogies/Analogies.cs                   |   19 ++---
 src/VerbalAnalogies/AnalogiesFactory.cs            |   24 +++++-
 src/VerbalAnalogies/AnalogiesMultipleOptions.cs    |    6 +-
 src/VerbalAnalogies/AnalogiesPairOfWordsCompare.cs |   12 ++-
 src/VerbalAnalogies/AnalogiesPairOfWordsOptions.cs |    6 +-
 src/VerbalAnalogies/AnalogiesQuestionAnswer.cs     |    6 +-
 src/VerbalAnalogies/Analogy.cs                     |    2 +-
 8 files changed, 142 insertions(+), 23 deletions(-)
---
diff --git a/data/verbal_analogies.xml b/data/verbal_analogies.xml
index 6351e9b..edb4afd 100644
--- a/data/verbal_analogies.xml
+++ b/data/verbal_analogies.xml
@@ -86,4 +86,94 @@
 		<_question type = "PairOfWordsCompare">toy / play | tool</_question>
 		<_answer correct ="yes">work</_answer>
 	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">fish / submarine | bird</_question>
+		<_answer correct ="yes">airplane</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">tears / eyes | sweat</_question>
+		<_answer correct ="yes">body</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">toy / play | tool</_question>
+		<_answer correct ="yes">work</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">dish / break | balloon</_question>
+		<_answer correct ="yes">burst</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">bridge / over | tunnel</_question>
+		<_answer correct ="yes">in</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">toy / play | tool</_question>
+		<_answer correct ="yes">work</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">error / correct | damage</_question>
+		<_answer correct ="yes">repair | fix</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">orange / fruit | spinach</_question>
+		<_answer correct ="yes">vegetable</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">hands / grab | teeth</_question>
+		<_answer correct ="yes">bite</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">puzzle / solve | game</_question>
+		<_answer correct ="yes">wins</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">store / sign | bottle</_question>
+		<_answer correct ="yes">label</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">eyebrow / eye | mustache</_question>
+		<_answer correct ="yes">lip</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">ice / slippery | glue</_question>
+		<_answer correct ="yes">sticky</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">button / push | key</_question>
+		<_answer correct ="yes">turns</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">whirlpool / water | tornado</_question>
+		<_answer correct ="yes">wind</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">fox / den | bird</_question>
+		<_answer correct ="yes">nest</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">dog / tame | wolf</_question>
+		<_answer correct ="yes">wild</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">train / whistle | ambulance</_question>
+		<_answer correct ="yes">siren</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">sugar / sweet | vinegar</_question>
+		<_answer correct ="yes">sour</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">tennis / sport | ballet</_question>
+		<_answer correct ="yes">dance</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">slurp / tongue | snort</_question>
+		<_answer correct ="yes">nose</_answer>
+	</analogy>
+	<analogy>
+		<_question type = "PairOfWordsCompare">elbow / knee | wrist</_question>
+		<_answer correct ="yes">ankle</_answer>
+	</analogy>
 </analogies>
+
+
diff --git a/src/VerbalAnalogies/Analogies.cs b/src/VerbalAnalogies/Analogies.cs
index 80d0a6d..d488789 100644
--- a/src/VerbalAnalogies/Analogies.cs
+++ b/src/VerbalAnalogies/Analogies.cs
@@ -32,6 +32,9 @@ public abstract class Analogies : Game
 
 	public override string Question {
 		get {
+			if (current == null)
+				return string.Empty;
+
 			return current.question;
 		}
 	}
@@ -55,7 +58,7 @@ public abstract class Analogies : Game
 				string [] items;
 				string str = string.Empty;
 	
-				items = right_answer.Split ('|');
+				items = right_answer.Split (AnalogiesFactory.Separator);
 
 				for (int i = 0 ; i < items.Length; i++)
 				{
@@ -96,19 +99,14 @@ public abstract class Analogies : Game
 		get;
 	}
 
-	public override void Initialize ()
-	{
-		current = GetNext ();
-
-		if (current == null)
-			return;
-	}
-
 	public Analogy GetNext ()
 	{
 		int idx;
 		Analogy analogy;
 
+		if (List.Count == 0)
+			return null;
+
 		if (Indices == null || CurrentIndex + 1 >= List.Count) {
 			Indices = new ArrayListIndicesRandom (List.Count);
 			Indices.Initialize ();
@@ -162,8 +160,7 @@ public abstract class Analogies : Game
 
 	public override bool CheckAnswer (string answer)
 	{
-		string [] items = right_answer.Split ('|');
-		Console.WriteLine ("answer is null {0}", answer == null);
+		string [] items = right_answer.Split (AnalogiesFactory.Separator);
 
 		foreach (string ans in items)
 		{
diff --git a/src/VerbalAnalogies/AnalogiesFactory.cs b/src/VerbalAnalogies/AnalogiesFactory.cs
index 1015ad1..61c5dcc 100644
--- a/src/VerbalAnalogies/AnalogiesFactory.cs
+++ b/src/VerbalAnalogies/AnalogiesFactory.cs
@@ -30,6 +30,8 @@ static public class AnalogiesFactory
 {
 	static Dictionary <int, Analogy> [] analogies_arrays;
 	static bool read = false;
+	
+	public const char Separator = '|';
 
 	static AnalogiesFactory ()
 	{
@@ -142,9 +144,27 @@ static public class AnalogiesFactory
 			Console.WriteLine (Catalog.GetString ("Read a total of {0} verbal analogies"), cnt);
 		}
 
-		catch (Exception)
+		catch (Exception e)
+		{
+			Console.WriteLine ("Error loading {0}. Exception {1}", Defines.DATA_DIR + Defines.VERBAL_ANALOGIES, e.Message);
+		}
+
+		finally
+		{
+			CheckEmpty ();
+		}
+	}
+
+	static void CheckEmpty ()
+	{
+		Analogy empty = new Analogy ();
+		empty.question = Catalog.GetString ("There are no verbal analogies available.");
+
+		for (int i = 0; i < (int) Analogy.Type.Last; i++)
 		{
-			Console.WriteLine ("Error loading {0}", Defines.DATA_DIR + Defines.VERBAL_ANALOGIES);
+			if (analogies_arrays[i].Count == 0)
+				analogies_arrays[i].Add (0, empty);
 		}
 	}
+
 }
diff --git a/src/VerbalAnalogies/AnalogiesMultipleOptions.cs b/src/VerbalAnalogies/AnalogiesMultipleOptions.cs
index 86adb9b..76dcf58 100644
--- a/src/VerbalAnalogies/AnalogiesMultipleOptions.cs
+++ b/src/VerbalAnalogies/AnalogiesMultipleOptions.cs
@@ -43,6 +43,10 @@ public class AnalogiesMultipleOptions : Analogies
 	public override string Question {
 		get {
 			string str = string.Empty;
+
+			if (current.answers == null)
+				return current.question;
+
 			for (int n = 0; n < current.answers.Length; n++)
 			{
 				str+= GetPossibleAnswer (n);
@@ -82,7 +86,7 @@ public class AnalogiesMultipleOptions : Analogies
 
 		current = GetNext ();
 
-		if (current == null)
+		if (current == null || current.answers == null)
 			return;
 
 		right_answer = GetPossibleAnswer (current.right);
diff --git a/src/VerbalAnalogies/AnalogiesPairOfWordsCompare.cs b/src/VerbalAnalogies/AnalogiesPairOfWordsCompare.cs
index 3f84793..6ceeccd 100644
--- a/src/VerbalAnalogies/AnalogiesPairOfWordsCompare.cs
+++ b/src/VerbalAnalogies/AnalogiesPairOfWordsCompare.cs
@@ -58,6 +58,9 @@ public class AnalogiesPairOfWordsCompare : Analogies
 
 	public override string Question {
 		get {
+			if (current.answers == null)
+				return current.question;
+
 			return String.Format (Catalog.GetString (
 				"Given the pair of words below, which word has the closest relationship to '{0}'?"),
 				sample);
@@ -72,12 +75,12 @@ public class AnalogiesPairOfWordsCompare : Analogies
 
 		current = GetNext ();
 
-		if (current == null)
+		if (current == null || current.answers == null)
 			return;
 
 		string [] items;
 
-		items = current.question.Split ('|');
+		items = current.question.Split (AnalogiesFactory.Separator);
 
 		if (items.Length == 2)
 			sample = items [1].Trim ();
@@ -85,7 +88,6 @@ public class AnalogiesPairOfWordsCompare : Analogies
 			sample = string.Empty;
 
 		samples = items [0].Trim ();
-
 		right_answer = current.answers [current.right];
 		Console.WriteLine ("Name:" + Name + " " + current.ToString ());
 	}
@@ -100,7 +102,7 @@ public class AnalogiesPairOfWordsCompare : Analogies
 			return;
 
 		gr.SetPangoLargeFontSize ();
-		gr.MoveTo (0.2, y + 0.25);
-		gr.ShowPangoText (String.Format (Catalog.GetString ("Pair of words: {0}"), samples));
+		gr.DrawTextCentered (0.5, y + 0.25,
+			String.Format (Catalog.GetString ("Pair of words: {0}"), samples));
 	}
 }
diff --git a/src/VerbalAnalogies/AnalogiesPairOfWordsOptions.cs b/src/VerbalAnalogies/AnalogiesPairOfWordsOptions.cs
index 338204d..d1952b7 100644
--- a/src/VerbalAnalogies/AnalogiesPairOfWordsOptions.cs
+++ b/src/VerbalAnalogies/AnalogiesPairOfWordsOptions.cs
@@ -57,6 +57,10 @@ public class AnalogiesPairOfWordsOptions : Analogies
 	public override string Question {
 		get {
 			string str = string.Empty;
+
+			if (current.answers == null)
+				return current.question;
+
 			for (int n = 0; n < current.answers.Length; n++)
 			{
 				str+= GetPossibleAnswer (n);
@@ -83,7 +87,7 @@ public class AnalogiesPairOfWordsOptions : Analogies
 
 		current = GetNext ();
 
-		if (current == null)
+		if (current == null || current.answers == null)
 			return;
 
 		right_answer = GetPossibleAnswer (current.right);
diff --git a/src/VerbalAnalogies/AnalogiesQuestionAnswer.cs b/src/VerbalAnalogies/AnalogiesQuestionAnswer.cs
index 632dbee..ff17d0b 100644
--- a/src/VerbalAnalogies/AnalogiesQuestionAnswer.cs
+++ b/src/VerbalAnalogies/AnalogiesQuestionAnswer.cs
@@ -55,7 +55,7 @@ public class AnalogiesQuestionAnswer : Analogies
 	public override void Initialize ()
 	{
 		if (analogies == null) {
-			analogies = AnalogiesFactory. Get (Analogy.Type.QuestionAnswer);
+			analogies = AnalogiesFactory.Get (Analogy.Type.QuestionAnswer);
 		}
 
 		current = GetNext ();
@@ -63,7 +63,9 @@ public class AnalogiesQuestionAnswer : Analogies
 		if (current == null)
 			return;
 
-		right_answer = current.answers [current.right];
+		if (current.answers != null) 
+			right_answer = current.answers [current.right];
+
 		Console.WriteLine ("Name:" + Name + " " + current.ToString ());
 	}
 }
diff --git a/src/VerbalAnalogies/Analogy.cs b/src/VerbalAnalogies/Analogy.cs
index 217edb4..b8edea8 100644
--- a/src/VerbalAnalogies/Analogy.cs
+++ b/src/VerbalAnalogies/Analogy.cs
@@ -46,7 +46,7 @@ public class Analogy
 
 	public bool MultipleAnswers {
 		get {
-			string [] items = answers[right].Split ('|');
+			string [] items = answers[right].Split (Analogies Factory.Separator);
 
 			return items.Length > 1;
 		}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]