📄 mainform.cs
字号:
this.Closing += new System.ComponentModel.CancelEventHandler(this.MainForm_Closing);
this.ResumeLayout(false);
}
#endregion
public static void Main()
{
try
{
splash sp=new splash();
Application.Run(sp);
sp.Dispose();
Application.Run(new MainForm());
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
protected override void OnResize(EventArgs e)
{
base.OnResize (e);
if(gridControl!=null)
{
gridControl.Location=new Point(8,8);
gridControl.Size=new Size(ClientSize.Width-16, ClientSize.Height-32);
}
}
private void autoGenerateItem_Click(object sender, System.EventArgs e)
{
gridControl.generatingPuzzle=false;
doneButton.Visible=false;
ProblemGenerator problemGenerator=new ProblemGenerator(this);
if(!problemGenerator.GenerateProblem())
return;
gridControl.LoadData(problemGenerator.completeGrid,problemGenerator.problemGrid);
changeMenuState(true);
showsolutionItem.Enabled=true;
gridControl.Enabled=true;
}
private void autoFillItem_Click(object sender, System.EventArgs e)
{
for(int row=0;row<Constants.nbOfCells;row++)
{
for(int col=0;col<Constants.nbOfCells;col++)
{
int Count=this.gridControl.cellGrid[row,col].cellData.candidateNb.Count;
this.gridControl.cellGrid[row,col].CheckedNbs.Clear();
for(int i=0;i<Count;i++)
{
this.gridControl.cellGrid[row,col].CheckedNbs.Add(
this.gridControl.cellGrid[row,col].cellData.candidateNb[i]);
}
this.gridControl.RedrawCell(this.gridControl.cellGrid[row,col]);
}
}
}
private void autoUpdateItem_Click(object sender, System.EventArgs e)
{
gridControl.autoUpdate=!gridControl.autoUpdate;
if(gridControl.autoUpdate)
{
this.autoUpdateItem.Checked=true;
this.simultaneousItem.Checked=true;
this.gridControl.simultaneousCheck=true;
}
else
this.autoUpdateItem.Checked=false;
}
private void removeAllItem_Click(object sender, System.EventArgs e)
{
for(int row=0;row<Constants.nbOfCells;row++)
{
for(int col=0;col<Constants.nbOfCells;col++)
{
this.gridControl.cellGrid[row,col].CheckedNbs.Clear();
this.gridControl.RedrawCell(this.gridControl.cellGrid[row,col]);
}
}
}
private void simultaneousItem_Click(object sender, System.EventArgs e)
{
this.gridControl.simultaneousCheck=!gridControl.simultaneousCheck;
if(gridControl.simultaneousCheck)
simultaneousItem.Checked=true;
else
simultaneousItem.Checked=false;
}
private void showsolutionItem_Click(object sender, System.EventArgs e)
{
for(int row=0;row<Constants.nbOfCells;row++)
{
for(int col=0;col<Constants.nbOfCells;col++)
{
gridControl.cellGrid[row,col].cellData.problemNb=
gridControl.cellGrid[row,col].cellData.originalNb;
gridControl.RedrawCell(gridControl.cellGrid[row,col]);
}
}
}
private void clearSolutionItem_Click(object sender, System.EventArgs e)
{
for(int row=0;row<Constants.nbOfCells;row++)
{
for(int col=0;col<Constants.nbOfCells;col++)
{
if(!gridControl.cellGrid[row,col].cellData.readOnly)
{
gridControl.cellGrid[row,col].cellData.problemNb=Constants.NoNumber;
gridControl.cellGrid[row,col].CheckedNbs.Clear();
this.gridControl.RedrawCell(this.gridControl.cellGrid[row,col]);
}
}
}
for(int row=0;row<Constants.nbOfCells;row++)
{
for(int col=0;col<Constants.nbOfCells;col++)
{
gridControl.searchCandidates(row,col);
}
}
}
private void eraseItem_Click(object sender, System.EventArgs e)
{
for(int row=0;row<Constants.nbOfCells;row++)
{
for(int col=0;col<Constants.nbOfCells;col++)
{
gridControl.cellGrid[row,col].cellData.problemNb=
gridControl.cellGrid[row,col].cellData.originalNb=Constants.NoNumber;
gridControl.cellGrid[row,col].cellData.candidateNb.Clear();
gridControl.cellGrid[row,col].CheckedNbs.Clear();
gridControl.Enabled=false;
this.gridControl.RedrawCell(this.gridControl.cellGrid[row,col]);
}
}
changeMenuState(false);
}
private void EndGame(object sender,EventArgs e)
{
int row,col;
if(!gridControl.varify(out row,out col))
{
MessageBox.Show("Wrong solution. Entry at " +row+" ," +col+" needs a check","ERROR");
}
else
{
MessageBox.Show("Congratulations!" ,"Success");
}
}
private void saveImageItem_Click(object sender, System.EventArgs e)
{
saveFileDialog.DefaultExt=".jpeg";
saveFileDialog.Filter="JPEG Files(*.jpeg)| *.jpeg|Bitmap Files(*.bmp)|*.bmp";
saveFileDialog.ShowDialog();
if(saveFileDialog.FileName!="")
gridControl.bufferBitmap.Save(saveFileDialog.FileName);
}
private void saveItem_Click(object sender, System.EventArgs e)
{
saveFileDialog.DefaultExt=".sdk";
saveFileDialog.Filter="Sudoku Files(*.sdk)| *.sdk";
saveFileDialog.ShowDialog();
if(saveFileDialog.FileName!="")
gridControl.SaveGameToFile(Path.GetFileNameWithoutExtension(saveFileDialog.FileName)+".sdk");
}
private void loadItem_Click(object sender, System.EventArgs e)
{
OpenFileDialog ofd=new OpenFileDialog();
ofd.Filter="Sudoku Files(*.sdk)| *.sdk";
ofd.DefaultExt=".sdk";
ofd.ShowDialog();
if(ofd.FileName!="")
gridControl.LoadGameFromFile(ofd.FileName);
changeMenuState(true);
}
private void exitItem_Click(object sender, System.EventArgs e)
{
try
{
DialogResult dr=MessageBox.Show("退出","真的要退出吗?",MessageBoxButtons.YesNo);
if(dr==DialogResult.Yes)
Application.Exit();
else
e=EventArgs.Empty;
}
catch
{
MessageBox.Show("Some error has occured to the application"
+",Retry or close the program and start again","Error");
}
}
private void manuallyGenearteItem_Click(object sender, System.EventArgs e)
{
eraseItem.PerformClick();
gridControl.generatingPuzzle=true;
MessageBox.Show("Select Problem numbers by clicking, Press DONE when 'Done' ","Maually generate new problem");
doneButton.Visible=true;
gridControl.Enabled=true;
changeMenuState(false);
}
private void doneButton_Click(object sender, System.EventArgs e)
{
int row,col;
if(!gridControl.varify(out row,out col))
{
MessageBox.Show("Wrong statement. Entry at " +row+" ," +col+" needs a check","ERROR");
return;
}
int [,] completeGrid,problemGrid;
completeGrid=new int [Constants.nbOfCells,Constants.nbOfCells];
problemGrid=new int [Constants.nbOfCells,Constants.nbOfCells];
//see if problem is solvable or not
for(row=0;row<Constants.nbOfCells;row++)
{
for(col=0;col<Constants.nbOfCells;col++)
{
problemGrid[row,col]=gridControl.cellGrid[row,col].cellData.problemNb;
}
}
if(!ProblemGenerator.hasSolution(problemGrid,ref completeGrid,true))
{
DialogResult dr=MessageBox .Show("This problem is not solvable by the algorithm implemented"+
"\nDo you still want to play ? Click YES to start playing and NO to reconfigure the problem staement ","Sorry",
MessageBoxButtons.YesNo);
if(dr==DialogResult.No)
{
completeGrid=problemGrid=null;
return;
}
else
{
gridControl.LoadData(completeGrid,problemGrid);
changeMenuState(true);
gridControl.generatingPuzzle=false;
doneButton.Visible=false;
showsolutionItem.Enabled=false;
return;
}
}
gridControl.LoadData(completeGrid,problemGrid);
MessageBox.Show("You can start playing or view the solution","Done");
changeMenuState(true);
gridControl.generatingPuzzle=false;
doneButton.Visible=false;
}
private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
try
{
DialogResult dr=MessageBox.Show("Exit?","Exit?",MessageBoxButtons.YesNo);
if(dr==DialogResult.Yes)
Application.Exit();
else
e.Cancel=true;
}
catch
{
MessageBox.Show("Some error has occured to the application"
+",Retry or close the program and start again","Error");
}
}
private void aboutItem_Click(object sender, System.EventArgs e)
{
String s=" \t\t? Abhishek Agrawal "
+"\n\tB.Tech IIIyr Computer Science And Technology"
+"\n\t Indian Institute of Technology , Roorkee ";
String s1="For any queries or feedback please mail me at amiable.abhi@rediffmail.com";
MessageBox.Show(s+"\n\n"+s1,"About" );
}
private void helpItem_Click(object sender, System.EventArgs e)
{
}
private void showNextItem_Click(object sender, System.EventArgs e)
{
gridControl.showNext();
}
private void changeMenuState(bool Enable)
{
saveItem.Enabled=Enable;
toolsItem.Enabled=Enable;
}
private void newItem_Click(object sender, EventArgs e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -