[gnome-games/glchess-vala] Connect engine difficulty settings
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/glchess-vala] Connect engine difficulty settings
- Date: Tue, 11 Jan 2011 17:58:58 +0000 (UTC)
commit fdb771981ab54f39a162790e15fc55dde29b616a
Author: Robert Ancell <robert ancell canonical com>
Date: Mon Jan 10 08:36:38 2011 +1100
Connect engine difficulty settings
glchess/src/ai-profile.vala | 16 ++++++++++++++++
glchess/src/chess-engine-cecp.vala | 6 +++++-
glchess/src/chess-engine-uci.vala | 9 ++++++---
glchess/src/glchess.vala | 23 +++++++++++++++++++----
4 files changed, 46 insertions(+), 8 deletions(-)
---
diff --git a/glchess/src/ai-profile.vala b/glchess/src/ai-profile.vala
index f9ed93b..728ba4c 100644
--- a/glchess/src/ai-profile.vala
+++ b/glchess/src/ai-profile.vala
@@ -29,6 +29,9 @@ public List<AIProfile> load_ai_profiles (string filename)
profile.binary = file.get_value (name, "binary");
if (file.has_key (name, "args"))
profile.args = file.get_value (name, "args");
+ profile.easy_options = load_options (file, name, "easy");
+ profile.normal_options = load_options (file, name, "normal");
+ profile.hard_options = load_options (file, name, "hard");
}
catch (KeyFileError e)
{
@@ -42,6 +45,19 @@ public List<AIProfile> load_ai_profiles (string filename)
return profiles;
}
+private string[] load_options (KeyFile file, string name, string difficulty) throws KeyFileError
+{
+ int count = 0;
+ while (file.has_key (name, "option-%s-%d".printf (difficulty, count)))
+ count++;
+
+ string[] options = new string[count];
+ for (var i = 0; i < count; i++)
+ options[i] = file.get_value (name, "option-%s-%d".printf (difficulty, i));
+
+ return options;
+}
+
public class AIProfile
{
public string name;
diff --git a/glchess/src/chess-engine-cecp.vala b/glchess/src/chess-engine-cecp.vala
index 340ae03..15d30e3 100644
--- a/glchess/src/chess-engine-cecp.vala
+++ b/glchess/src/chess-engine-cecp.vala
@@ -2,15 +2,19 @@ public class ChessEngineCECP : ChessEngine
{
private char[] buffer;
private bool moving = false;
+ private string[] options;
- public ChessEngineCECP ()
+ public ChessEngineCECP (string[] options)
{
+ this.options = options;
starting.connect (start_cb);
}
private void start_cb ()
{
write_line ("xboard");
+ foreach (var o in options)
+ write_line (o);
ready = true;
}
diff --git a/glchess/src/chess-engine-uci.vala b/glchess/src/chess-engine-uci.vala
index 58bc836..ebadcc2 100644
--- a/glchess/src/chess-engine-uci.vala
+++ b/glchess/src/chess-engine-uci.vala
@@ -2,9 +2,11 @@ public class ChessEngineUCI : ChessEngine
{
private char[] buffer;
private string position_command;
+ private string[] options;
- public ChessEngineUCI ()
+ public ChessEngineUCI (string[] options)
{
+ this.options = options;
buffer = new char[0];
position_command = "position startpos";
starting.connect (start_cb);
@@ -66,7 +68,7 @@ public class ChessEngineUCI : ChessEngine
case "uciok":
if (tokens.length != 1)
warning ("Unexpected arguments on uciok: %s", line);
-
+
configure ();
break;
@@ -102,7 +104,8 @@ public class ChessEngineUCI : ChessEngine
private void configure ()
{
- //write_line ("setoption ...");
+ foreach (var o in options)
+ write_line ("setoption %s".printf (o));
write_line ("isready");
}
}
diff --git a/glchess/src/glchess.vala b/glchess/src/glchess.vala
index a061fe4..e34aa72 100644
--- a/glchess/src/glchess.vala
+++ b/glchess/src/glchess.vala
@@ -232,7 +232,7 @@ public class Application
save_as_menu.sensitive = false;
update_history_panel ();
- opponent_engine = get_engine (settings.get_string ("opponent"));
+ opponent_engine = get_engine (settings.get_string ("opponent"), settings.get_string ("difficulty"));
opponent = null;
if (opponent_engine != null)
{
@@ -260,7 +260,7 @@ public class Application
black_time_label.queue_draw ();
}
- private ChessEngine? get_engine (string name)
+ private ChessEngine? get_engine (string name, string difficulty)
{
ChessEngine engine;
AIProfile? profile = null;
@@ -284,10 +284,25 @@ public class Application
profile = ai_profiles.data;
}
+ string[] options;
+ switch (difficulty)
+ {
+ case "easy":
+ options = profile.easy_options;
+ break;
+ default:
+ case "normal":
+ options = profile.normal_options;
+ break;
+ case "hard":
+ options = profile.hard_options;
+ break;
+ }
+
if (profile.protocol == "cecp")
- engine = new ChessEngineCECP ();
+ engine = new ChessEngineCECP (options);
else if (profile.protocol == "uci")
- engine = new ChessEngineUCI ();
+ engine = new ChessEngineUCI (options);
else
{
warning ("Unknown AI protocol %s", profile.protocol);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]