Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavier AVERBOUCH committed Dec 24, 2019
2 parents 034f5f1 + e520495 commit 00adea4
Show file tree
Hide file tree
Showing 33 changed files with 633 additions and 169 deletions.
2 changes: 1 addition & 1 deletion Dawg.Resolver.Winform.Test/Form3.cs
Expand Up @@ -12,7 +12,7 @@ public partial class Form3: Form
public Form3()
{
InitializeComponent();
Game = new Game();
Game = new Game(Dictionnaire.NomDicoDawgODS7);
textBox3.Text = Game.Bag.GetBagContent();
var t = Game.Grid[7, 5];
t.SetWord(Game.Player1, "famille", MovementDirection.Across,true);
Expand Down
6 changes: 6 additions & 0 deletions Dawg.Resolver.Winform.Test/FormTile.cs
Expand Up @@ -231,6 +231,10 @@ private void FormTile_Click(object sender, EventArgs e)
TxtInfos = string.Empty;
TxtInfos = $"[{t.Ligne},{t.Col}] => IsAnchor:{t.IsAnchor} IsEmpty :{t.IsEmpty} => {t}";
TxtInfos += Environment.NewLine;
TxtInfos += $"WordIndex={t.WordIndex}";
TxtInfos += Environment.NewLine;
TxtInfos += $"IsPlayedByPlayer1={t.IsPlayedByPlayer1}";
TxtInfos += Environment.NewLine;
TxtInfos += $"LetterMultiplier={t.LetterMultiplier}";
TxtInfos += Environment.NewLine;
TxtInfos += $"WordMultiplier={t.WordMultiplier}";
Expand Down Expand Up @@ -332,5 +336,7 @@ public Letter Letter
public VTile WordLowerTile => Tile.WordLowerTile;

public VTile WordUpperTile => Tile.WordUpperTile;

public int WordIndex { get => Tile.WordIndex; set => Tile.WordIndex = value; }
}
}
117 changes: 87 additions & 30 deletions Dawg.Resolver.Winform.Test/MainForm.Designer.cs

Large diffs are not rendered by default.

133 changes: 85 additions & 48 deletions Dawg.Resolver.Winform.Test/MainForm.cs
Expand Up @@ -24,11 +24,12 @@ public partial class MainForm : Form
public MainForm()
{
InitializeComponent();
NewGame();
NewGame(rbODS7.Checked ? Dictionnaire.NomDicoDawgODS7 : Dictionnaire.NomDicoDawgODS6);
}

private void NewGame()
private void NewGame(string nomDico)
{

DawgResolver.Model.Game.IsTransposed = false;
txtGrid2.Visible = false;
gbBoard.Controls.Clear();
Expand All @@ -37,7 +38,7 @@ private void NewGame()
txtRackP1.Text = txtRackP2.Text = "";
lsbWords.DisplayMember = "DisplayInList";
Cursor.Current = Cursors.WaitCursor;
Game = new Game();
Game = new Game(nomDico);

lsbWords.Items.Clear();
txtBag.Text = Game.Bag.GetBagContent();
Expand Down Expand Up @@ -78,7 +79,7 @@ private void RefreshGridTiles(bool initBoard = true)
{
frmTile = new FormTile(this, Game, tile);
frmTile.Text = tile.Letter?.Char.ToString();
var existingTile = hasHeaderTile ? gbBoard.Controls.Find($"t{frmTile.Ligne}_{frmTile.Col}", false).First() as FormTile : null;
var existingTile = hasHeaderTile ? FindTile(tile) : null;
if (existingTile == null)
gbBoard.Controls.Add(frmTile);
else
Expand All @@ -90,17 +91,28 @@ private void RefreshGridTiles(bool initBoard = true)
}
//CustomGroupBox.ResumeDrawing(gbBoard.Parent);
}
private FormTile FindTile(VTile t)
{
return gbBoard.Controls.Find($"t{t.Ligne}_{t.Col}", false).First() as FormTile;
}

public int PreviewWord(Player p, Word word, bool validateWord = false, bool addMove = true)
{
ClearTilesInPlay(p);
int points = word.SetWord(p, validateWord);
if (validateWord || points > 0)
{
//word.Validate();
if (addMove)
{
word.Index = Game.MoveIndex++;
word.IsPlayedByPlayer1 = p == Game.Player1;
p.Moves.Add(word);
Game.Resolver.PlayedWords.Add(word);
DisplayPlayerWord(word);
}
foreach (var t in word.GetTiles())
{
var frmTile = gbBoard.Controls.Find($"t{t.Ligne}_{t.Col}", false).First() as FormTile;
var frmTile = FindTile(t);
if (frmTile.IsEmpty)
{
frmTile.BeginInvoke((Action)(() =>
Expand All @@ -111,19 +123,26 @@ public int PreviewWord(Player p, Word word, bool validateWord = false, bool addM
}
else
{
frmTile.Tile.IsPlayedByPlayer1 = p == Game.Player1;
frmTile.BeginInvoke((Action)(() =>
if (t.WordIndex == 0)
{
frmTile.BackColor = p == Game.Player1 ? Player1MoveColor : Player2MoveColor;
}));
frmTile.IsPlayedByPlayer1 = p == Game.Player1;
t.WordIndex = word.Index;
frmTile.BeginInvoke((Action)(() =>
{
if (t.IsPlayedByPlayer1.HasValue)
frmTile.BackColor = t.IsPlayedByPlayer1.Value ? Player1MoveColor : Player2MoveColor;
}));
}
}

if (frmTile.IsValidated)
continue;

if (t.FromJoker)
{
frmTile.BorderColor = Color.Gold;
if (frmTile.InvokeRequired) frmTile.BeginInvoke((Action)(() => frmTile.BackColor = Color.Gold));
else frmTile.BackColor = Color.Gold;

if (Game.IsPlayer1)
Game.Player1.Rack.Remove(Game.GameStyle == 'S' ? Game.AlphabetScrabbleAvecJoker[26] : Game.AlphabetWWFAvecJoker[26]);
else
Expand All @@ -144,13 +163,7 @@ public int PreviewWord(Player p, Word word, bool validateWord = false, bool addM
// frmTile.Enabled = false;
//}));
}
if (addMove)
{
word.Index = Game.MoveIndex++;
p.Moves.Add(word);
Game.Resolver.PlayedWords.Add(word);
DisplayPlayerWord(word);
}

if (validateWord)
Game.IsPlayer1 = !Game.IsPlayer1;

Expand All @@ -169,7 +182,7 @@ public int PreviewWord(Player p, Word word, bool validateWord = false, bool addM
for (int col = 0; col < grid.GetLength(1); col++)
{

var formTile = gbBoard.Controls.Find($"t{ligne}_{col}", false).First() as FormTile;
var formTile = FindTile(grid[ligne, col]);
formTile.Tile = grid[ligne, col];
if (formTile.InvokeRequired)
formTile.BeginInvoke((Action)(() =>
Expand All @@ -182,7 +195,8 @@ public int PreviewWord(Player p, Word word, bool validateWord = false, bool addM
formTile.Text = formTile.Tile?.Letter?.Char.ToString();

}

if (grid[ligne, col].IsEmpty)
formTile.BackColor = formTile.GetBackColor(grid[ligne, col]);
}
}
//CustomGroupBox.ResumeDrawing(groupBox1.Parent);
Expand Down Expand Up @@ -213,7 +227,7 @@ private List<VTile> ClearTilesInPlay(Player p)
var ret = Game.Grid.OfType<VTile>().Where(t => !t.IsValidated).ToList();
foreach (var tile in ret)
{
var frmTile = gbBoard.Controls.Find($"t{tile.Ligne}_{tile.Col}", false).First() as FormTile;
var frmTile = FindTile(tile);
frmTile.BeginInvoke((Action)(() =>
{
//frmTile.Text = "";
Expand Down Expand Up @@ -330,20 +344,7 @@ private async Task PlayDemo(int wait = 0)
{
lsbInfos.Items.Insert(0, "Le sac est vide !");
}));
if (Game.IsPlayer1)
{
txtRackP1.BeginInvoke((Action)(() =>
{
txtRackP1.Text = Game.Player1.Rack.String();
}));
}
else
{
txtRackP2.BeginInvoke((Action)(() =>
{
txtRackP2.Text = Game.Player2.Rack.String();
}));
}

lblCurrentRack.BeginInvoke((Action)(() =>
{
lblCurrentRack.Text = $"{(Game.IsPlayer1 ? $"Player 1 :{Game.Player1.Rack.String()}" : $"Player 2 :{Game.Player2.Rack.String()}")}";
Expand Down Expand Up @@ -385,9 +386,22 @@ private async Task PlayDemo(int wait = 0)
if (Game.NoMoreMovesCount < 2)
lsbInfos.Items.Insert(0, $"{(Game.IsPlayer1 ? $"Player 1:{Game.Player1.Rack.String()}" : $"Player 2:{Game.Player2.Rack.String()}")} --> No words found !");
Game.IsPlayer1 = !Game.IsPlayer1;
return;
}

Game.Bag.GetLetters(Game.IsPlayer1 ? Game.Player1 : Game.Player2);
if (Game.IsPlayer1)
{
txtRackP1.BeginInvoke((Action)(() =>
{
txtRackP1.Text = Game.Player1.Rack.String();
}));
}
else
{
txtRackP2.BeginInvoke((Action)(() =>
{
txtRackP2.Text = Game.Player2.Rack.String();
}));
}
}
catch (ArgumentException ex)
{
Expand Down Expand Up @@ -429,7 +443,7 @@ private void btnDemoAll_Click(object sender, EventArgs e)
{

if (!ckKeepExistingBoard.Checked)
NewGame();
NewGame(rbODS7.Checked ? Dictionnaire.NomDicoDawgODS7 : Dictionnaire.NomDicoDawgODS6);
Game.CancelToken = new CancellationTokenSource();
Task.Factory.StartNew(async () =>
{
Expand All @@ -447,7 +461,7 @@ private async Task LoopDemo(CancellationTokenSource cancelToken)
{
return;
}
await PlayDemo(500);
await PlayDemo(1000);
}
if (Game.EndGame)
ShowWinner(true);
Expand Down Expand Up @@ -516,17 +530,15 @@ public void LoadGame()
Game.IsPlayer1 = true;
foreach (var t in Game.Grid)
{
var frmTile = gbBoard.Controls.Find($"t{t.Ligne}_{t.Col}", false).First() as FormTile;
var frmTile = FindTile(t);
if (t.IsValidated)
{
//frmTile.IsValidated = t.IsValidated;
frmTile.BackColor = t.IsPlayedByPlayer1.HasValue && t.IsPlayedByPlayer1.Value ? Player1MoveColor : Player2MoveColor;
//frmTile.Enabled = false;
}
else
{
frmTile.BackColor = frmTile.GetBackColor(t);
//frmTile.Enabled = true;

}
}
var wordsCount = Math.Max(Game.Player1.Moves.Count, Game.Player2.Moves.Count);
Expand All @@ -535,12 +547,12 @@ public void LoadGame()
if (i < Game.Player1.Moves.Count)
{
PreviewWord(Game.Player1, Game.Player1.Moves[i], true, true);
//DisplayPlayerWord(Game.Player1.Moves[i]);

}
if (i < Game.Player2.Moves.Count)
{
PreviewWord(Game.Player2, Game.Player2.Moves[i], true, true);
//DisplayPlayerWord(Game.Player2.Moves[i]);

}
}
RefreshBoard(Game.Grid);
Expand All @@ -549,7 +561,7 @@ public void LoadGame()

private void btnNewGame_Click(object sender, EventArgs e)
{
NewGame();
NewGame(rbODS7.Checked ? Dictionnaire.NomDicoDawgODS7 : Dictionnaire.NomDicoDawgODS6);
}


Expand All @@ -566,7 +578,7 @@ private void lsbWords_SelectedIndexChanged(object sender, EventArgs e)
bool isPlayer1word = Game.Player1.Moves.Contains(word);
foreach (var t in word.GetTiles())
{
var frmTile = gbBoard.Controls.Find($"t{t.Ligne}_{t.Col}", false).First() as FormTile;
var frmTile = FindTile(t);

frmTile.BackColor = isPlayer1word ? Color.LightBlue : Color.LightCoral;
}
Expand All @@ -578,7 +590,7 @@ private void rbSize15_CheckedChanged(object sender, EventArgs e)
Game.BoardSize = 15;
else
Game.BoardSize = 11;
NewGame();
NewGame(rbODS7.Checked ? Dictionnaire.NomDicoDawgODS7 : Dictionnaire.NomDicoDawgODS6);
}

private void ckShowGrid_CheckedChanged(object sender, EventArgs e)
Expand Down Expand Up @@ -664,5 +676,30 @@ private void MainForm_Click(object sender, EventArgs e)
if (Game.CancelToken != null)
Game.CancelToken.Cancel();
}

private void btnUndoLast_Click(object sender, EventArgs e)
{
var allWords = Game.Player1.Moves.Union(Game.Player2.Moves).OrderByDescending(a => a.Index);
var lastWord = allWords.FirstOrDefault();
if (lastWord == null) return;
var tiles = lastWord.GetTiles();
if (lastWord.IsPlayedByPlayer1)
Game.Player1.Moves.Remove(lastWord);
else
Game.Player2.Moves.Remove(lastWord);

foreach (var t in tiles.Where(tt => tt.Letter.Char != Game.EmptyChar))
{
Game.Bag.PutBackLetterInBag(t.Letter);
}
foreach (var tile in tiles.Where(t => t.WordIndex == lastWord.Index))
{

Game.Grid[tile.Ligne, tile.Col] = new Tile(Game, tile.Ligne, tile.Col);
Game.Grid[tile.Ligne, tile.Col].Letter.Char = Game.EmptyChar;
}

RefreshBoard(Game.Grid);
}
}
}
13 changes: 7 additions & 6 deletions Dawg/Dictionnaire.cs
Expand Up @@ -16,7 +16,8 @@ namespace DawgResolver

public class Dictionnaire
{
public const string NomDicoDawg = "dico_dawgODS7.txt";
public static string NomDicoDawgODS7 = "dico_dawgODS7.txt";
public static string NomDicoDawgODS6 = "dico_dawgODS6.txt";

public const string NomDicoReel = "ODS7.txt";

Expand All @@ -36,9 +37,9 @@ public class Dictionnaire
/// </summary>
public List<Noeud> dawg;

public Dictionnaire()
public Dictionnaire(string nomDico)
{
ChargerFichierDAWG();
ChargerFichierDAWG(nomDico);
}

#region Propriétés
Expand Down Expand Up @@ -174,7 +175,7 @@ private void leThread2Etapes()
DAWG = dawg[0];

AnnonceEtape("Ecriture du fichier.");
Noeud.Serialize(dawg, Mots.Count, NomDicoDawg);
Noeud.Serialize(dawg, Mots.Count, NomDicoDawgODS7);
//chrono.Stop();

//==================Ici la construction est finie
Expand Down Expand Up @@ -448,14 +449,14 @@ private void ParcoursDAWG(List<Arc> Arcs, List<string> LesMots)
/// </summary>
/// <param name="FileName">Adresse du fichier compressé</param>
/// <returns>DAWG</returns>
public void ChargerFichierDAWG()
public void ChargerFichierDAWG(string nomdico)
{
TravailEnCours = DawgResolver.TravailEnCours.ChargementFichierDAWG;

//chrono.Restart();
AnnonceEtape("Début du chargement du dictionnaire DAWG.");
var assembly = Assembly.GetExecutingAssembly();
string resourceName = assembly.GetManifestResourceNames().Single(str => str.EndsWith(NomDicoDawg));
string resourceName = assembly.GetManifestResourceNames().Single(str => str.EndsWith(nomdico));
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream, true))
{
Expand Down
2 changes: 1 addition & 1 deletion DawgBuilder/Form1.cs
Expand Up @@ -23,7 +23,7 @@ private void Form1_Load(object sender, EventArgs e)
dico.EtapeAtteinte += dico_EtapeAtteinte;
dico.Progression += dico_Progression;
dico.ChargerDictionnaireAscii(Dictionnaire.NomDicoReel);
grpLectureDAWG.Enabled = File.Exists(Dictionnaire.NomDicoDawg);
grpLectureDAWG.Enabled = File.Exists(Dictionnaire.NomDicoDawgODS7);
grpAjouterMot.Enabled = grpLectureDAWG.Enabled;
}

Expand Down

0 comments on commit 00adea4

Please sign in to comment.