Fixed the bug where some files would not work, and now you can click on the tiles

This commit is contained in:
2022-10-17 09:23:47 +02:00
parent f1df4162a3
commit 24af23a3a2
5 changed files with 111 additions and 18 deletions
+12 -10
View File
@@ -28,21 +28,12 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.nonogramme1 = new NonoGramme.Nonogramme();
this.lsbFiles = new System.Windows.Forms.ListBox(); this.lsbFiles = new System.Windows.Forms.ListBox();
this.btnImportFiles = new System.Windows.Forms.Button(); this.btnImportFiles = new System.Windows.Forms.Button();
this.nonogramme1 = new NonoGramme.Nonogramme();
((System.ComponentModel.ISupportInitialize)(this.nonogramme1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nonogramme1)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// nonogramme1
//
this.nonogramme1.GridSize = new System.Drawing.Size(0, 0);
this.nonogramme1.Location = new System.Drawing.Point(12, 12);
this.nonogramme1.Name = "nonogramme1";
this.nonogramme1.Size = new System.Drawing.Size(400, 400);
this.nonogramme1.TabIndex = 0;
this.nonogramme1.TabStop = false;
//
// lsbFiles // lsbFiles
// //
this.lsbFiles.FormattingEnabled = true; this.lsbFiles.FormattingEnabled = true;
@@ -63,6 +54,17 @@
this.btnImportFiles.UseVisualStyleBackColor = true; this.btnImportFiles.UseVisualStyleBackColor = true;
this.btnImportFiles.Click += new System.EventHandler(this.button1_Click); this.btnImportFiles.Click += new System.EventHandler(this.button1_Click);
// //
// nonogramme1
//
this.nonogramme1.GridSize = new System.Drawing.Size(0, 0);
this.nonogramme1.Location = new System.Drawing.Point(12, 12);
this.nonogramme1.Name = "nonogramme1";
this.nonogramme1.Size = new System.Drawing.Size(400, 400);
this.nonogramme1.TabIndex = 0;
this.nonogramme1.TabStop = false;
this.nonogramme1.Click += new System.EventHandler(this.nonogramme1_Click);
this.nonogramme1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.nonogramme1_MouseDown);
//
// Form1 // Form1
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
+12
View File
@@ -67,6 +67,7 @@ namespace NonoGramme
if (Directory.Exists(selectedFolder)) if (Directory.Exists(selectedFolder))
{ {
lsbFiles.Items.Clear();
string[] nonFiles = Directory.GetFiles(selectedFolder, "*.non"); string[] nonFiles = Directory.GetFiles(selectedFolder, "*.non");
foreach (string file in nonFiles) foreach (string file in nonFiles)
@@ -86,5 +87,16 @@ namespace NonoGramme
RefreshUi(); RefreshUi();
} }
} }
private void nonogramme1_Click(object sender, EventArgs e)
{
//The problem with click is that it is called 2 times because it detects mouse down AND ouse up
}
private void nonogramme1_MouseDown(object sender, MouseEventArgs e)
{
nonogramme1.CursorClick(nonogramme1.PointToClient(MousePosition));
RefreshUi();
}
} }
} }
+58 -7
View File
@@ -12,9 +12,10 @@ namespace NonoGramme
{ {
internal class Grid internal class Grid
{ {
private readonly Color DEFAULT_FULL_COLOR = Color.Black; private readonly Color DEFAULT_FULL_COLOR = Color.Red;
private readonly Color DEFAULT_EMPTY_COLOR = Color.LightGray; private readonly Color DEFAULT_EMPTY_COLOR = Color.LightGray;
private readonly Color DEBUG_UNDISCOVERED_COLOR = Color.DarkOliveGreen; private readonly Color DEFAULT_UNDISCOVERED_COLOR = Color.DarkOliveGreen;
private readonly Color DEFAULT_DISCOVERED_COLOR = Color.Black;
private readonly Color DEFAULT_BORDER_COLOR = Color.Pink; private readonly Color DEFAULT_BORDER_COLOR = Color.Pink;
private readonly Color DEFAULT_ERROR_COLOR = Color.Purple; private readonly Color DEFAULT_ERROR_COLOR = Color.Purple;
@@ -22,21 +23,49 @@ namespace NonoGramme
private Line[] _horizontalLines; private Line[] _horizontalLines;
private Line[] _verticalLines; private Line[] _verticalLines;
private Point _gridOffset;
private Size _drawedBlocSize;
public Size GridSize { get => _gridSize; set => _gridSize = value; } public Size GridSize { get => _gridSize; set => _gridSize = value; }
internal Line[] HorizontalLines { get => _horizontalLines; set => _horizontalLines = value; } public Line[] HorizontalLines { get => _horizontalLines; set => _horizontalLines = value; }
internal Line[] VerticalLines { get => _verticalLines; set => _verticalLines = value; } public Line[] VerticalLines { get => _verticalLines; set => _verticalLines = value; }
public Point GridOffset
{
get { return _gridOffset; }
set { if (value.X >= 0 && value.Y >= 0) { _gridOffset = value; } else { _gridOffset = new Point(-1, -1); }}
}
public Size DrawedBlocSize { get => _drawedBlocSize; set => _drawedBlocSize = value; }
public Grid(Size size) public Grid(Size size)
{ {
GridSize = size; GridSize = size;
HorizontalLines = new Line[size.Height]; HorizontalLines = new Line[size.Height];
VerticalLines = new Line[size.Width]; VerticalLines = new Line[size.Width];
GridOffset = new Point(-1,-1);
Populate(); Populate();
} }
public Grid(string filePath) public Grid(string filePath)
{ {
ImportFromFile(filePath); ImportFromFile(filePath);
} }
public void Click(Point position)
{
//MessageBox.Show(position.ToString());
if (GridOffset != new Point(-1, -1))
{
//The Grid has been Drawned and has a valid offset
if (position.X >= GridOffset.X && position.Y >= GridOffset.Y)
{
//The click is on the grid
Point relativePoint = new Point(position.X-GridOffset.X, position.Y-GridOffset.Y);
Point reducedIndex = new Point(relativePoint.X / DrawedBlocSize.Width,relativePoint.Y / DrawedBlocSize.Height);
//int flatIndex = position.Y * HorizontalLines.Count() + position.X;
HorizontalLines[reducedIndex.Y].Click(reducedIndex.X);
VerticalLines[reducedIndex.X].Click(reducedIndex.Y);
}
}
}
public void ImportFromFile(string filePath) public void ImportFromFile(string filePath)
{ {
//GridSize = size; //GridSize = size;
@@ -91,15 +120,34 @@ namespace NonoGramme
license = matches[0].Groups[1].Value; license = matches[0].Groups[1].Value;
} }
/*
rx = new Regex(@"^height (?<height>[0-9]+)\nwidth (?<width>[0-9]+)", RegexOptions.Multiline | RegexOptions.IgnoreCase); rx = new Regex(@"^height (?<height>[0-9]+)\nwidth (?<width>[0-9]+)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
matches = rx.Matches(fileContent); matches = rx.Matches(fileContent);
if (matches.Count > 0 && matches[0].Groups.Count > 0) if (matches.Count > 0 && matches[0].Groups.Count > 0)
{ {
size =new Size(Convert.ToInt32(matches[0].Groups["width"].Value), Convert.ToInt32(matches[0].Groups["height"].Value)); size =new Size(Convert.ToInt32(matches[0].Groups["width"].Value), Convert.ToInt32(matches[0].Groups["height"].Value));
} }
*/
string TEST = ""; int height = 0;
int width = 0;
rx = new Regex(@"^height (?<height>[0-9]+)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
matches = rx.Matches(fileContent);
if (matches.Count > 0 && matches[0].Groups.Count > 0)
{
height = Convert.ToInt32(matches[0].Groups[1].Value);
}
rx = new Regex(@"^width (?<height>[0-9]+)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
matches = rx.Matches(fileContent);
if (matches.Count > 0 && matches[0].Groups.Count > 0)
{
width = Convert.ToInt32(matches[0].Groups[1].Value);
}
size = new Size(width,height);
//string TEST = "";
rows = new List<int>[size.Height]; rows = new List<int>[size.Height];
rx = new Regex(@"^rows\n(?<row>[0-9,]+\r?\n)+", RegexOptions.Multiline); rx = new Regex(@"^rows\n(?<row>[0-9,]+\r?\n)+", RegexOptions.Multiline);
matches = rx.Matches(fileContent); matches = rx.Matches(fileContent);
@@ -209,6 +257,9 @@ namespace NonoGramme
Size actualSize = new Size(UI.Width - offset.X, UI.Height - offset.Y); Size actualSize = new Size(UI.Width - offset.X, UI.Height - offset.Y);
Size blocSize = new Size(actualSize.Width/GridSize.Width,actualSize.Height/GridSize.Height); Size blocSize = new Size(actualSize.Width/GridSize.Width,actualSize.Height/GridSize.Height);
DrawedBlocSize = blocSize;
GridOffset = offset;
using (Graphics g = Graphics.FromImage(UI)) using (Graphics g = Graphics.FromImage(UI))
{ {
//Drawing the rows Text //Drawing the rows Text
@@ -248,10 +299,10 @@ namespace NonoGramme
g.FillRectangle(new SolidBrush(DEFAULT_EMPTY_COLOR), new Rectangle(position, blocSize)); g.FillRectangle(new SolidBrush(DEFAULT_EMPTY_COLOR), new Rectangle(position, blocSize));
break; break;
case Tile.State.Discovered: case Tile.State.Discovered:
g.FillRectangle(new SolidBrush(DEFAULT_EMPTY_COLOR), new Rectangle(position, blocSize)); g.FillRectangle(new SolidBrush(DEFAULT_DISCOVERED_COLOR), new Rectangle(position, blocSize));
break; break;
case Tile.State.Undiscovered: case Tile.State.Undiscovered:
g.FillRectangle(new SolidBrush(DEBUG_UNDISCOVERED_COLOR), new Rectangle(position, blocSize)); g.FillRectangle(new SolidBrush(DEFAULT_UNDISCOVERED_COLOR), new Rectangle(position, blocSize));
break; break;
default: default:
g.FillRectangle(new SolidBrush(DEFAULT_ERROR_COLOR), new Rectangle(position, blocSize)); g.FillRectangle(new SolidBrush(DEFAULT_ERROR_COLOR), new Rectangle(position, blocSize));
+25 -1
View File
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms;
namespace NonoGramme namespace NonoGramme
{ {
@@ -66,6 +67,29 @@ namespace NonoGramme
Data[index].CurrentState = state; Data[index].CurrentState = state;
RecalculateHints(); RecalculateHints();
} }
public void Click(int index)
{
Tile tile = Data[index];
//MessageBox.Show("Tile pressed :"+tile.CurrentState);
switch (tile.CurrentState)
{
case Tile.State.Empty:
tile.CurrentState = Tile.State.Full;
break;
case Tile.State.Undiscovered:
tile.CurrentState = Tile.State.Discovered;
break;
case Tile.State.Full:
tile.CurrentState = Tile.State.Empty;
break;
case Tile.State.Discovered:
tile.CurrentState = Tile.State.Undiscovered;
break;
default:
//We dont do anything
break;
}
}
public void RecalculateHints() public void RecalculateHints()
{ {
Hints = new List<int>(); Hints = new List<int>();
@@ -100,7 +124,7 @@ namespace NonoGramme
} }
if (currentTile) if (currentTile)
{ {
//if the last tilke is full then we need to add it at the end //if the last tile is full then we need to add it at the end
Hints.Add(counter); Hints.Add(counter);
} }
} }
+4
View File
@@ -34,5 +34,9 @@ namespace NonoGramme
Bitmap bmp = new Bitmap(Width, Height); Bitmap bmp = new Bitmap(Width, Height);
this.Image = GameGrid.Draw(bmp, new Point((Width / 100) * DEFAULT_UI_RATIO, (Height / 100) * DEFAULT_UI_RATIO)); this.Image = GameGrid.Draw(bmp, new Point((Width / 100) * DEFAULT_UI_RATIO, (Height / 100) * DEFAULT_UI_RATIO));
} }
public void CursorClick(Point position)
{
GameGrid.Click(position);
}
} }
} }