Требования к программно-аппаратным ресурсам
Требования к компьютеру и программному обеспечению помещены в таблице 3.1.1.
Таблица 3.1.1 – Требования к аппаратно-программным ресурсам персонального компьютера
Дополнительных средств (принтер, сканер, дополнительные дисководы и т.д.) не требуется. Для функционирования данного приложения на компьютере должна быть установлена ОС Windows 95 и выше. Программа написана на языке программирования C#.
Описание интерфейса для пользователя
При запуске программы появляется окно приложения, как показано на рисунке 3.2.1. Рисунок 3.2.1 – Приложение «Судоку» Слева расположено меню, на котором находятся cложность игры, новая игра, показать ответ, загрузить и сохранить игру, помощь и выход. При нажатии на «Новая игра» приложение генерирует новое поле «Судоку» размером 9x9 (рисунок 3.2.2). Рисунок 3.2.2 – Игровое приложение «Судоку», новая игра Кнопка «Сохранить игру» сохранит вашу данную позицию в игре. (рисунок 3.2.3).
Рисунок 3.2.3 – Игровое приложение «Судоку», сохранить игру
Кнопка «Загрузить игру» загрузит вам ту карту, которую вы сохранили до операции загрузить (рисунок 3.2.4).
Рисунок 3.2.4 – Игровое приложение «Судоку», загрузить игру Кнопка «Показать ответ» покажет вам на данный момент все элементы в игре, показ будет длится не более 5 секунд (рисунок 3.2.5).
Рисунок 3.2.5 – Игровое приложение «Судоку», показать ответ При нажатии кнопки «Помощь» появится окно, с подсказкой как играть в игру cудоку и информация об авторе программы. (Рисунок 3.2.6)
Рисунок 3.2.6 – Игровое приложение «Судоку», помощь в игру cудоку
Выпадающий список сложности игры судоку (Рисунок 3.2.7), уровней: − «Легкая» - легкие судоку для новичков, которые никогда не решали эту головоломку ну хотят с чего-то начать. − «Средняя» - средней сложности для тех, кому легкий судоку уже не интересен, а сложные еще не под силу. − «Тяжёлая» - что бы решить самые сложные судоку - Вам понадобиться хорошее логическое мышление, сосредоточенность и внимательность. Рисунок 3.2.7 – Игровое приложение «Судоку», выпадающий список сложности.
При нажатии на «Выход» производится выход из программы.
Начинаем проверку с кнопки «Новая игра» (рис.3.2.2 ): − Старое поле удаляется; − Новое игровое поле генерируется; Проверяем кнопку «Сохранение игры»: Сохраняет данное игровое поле «Судоку» (рис.3.2.3 ) и генерируем новою игру(рис.4.1.).
Рисунок 4.1 – Игровое приложение «Судоку», сохранено и с генерирована новая игра При вводе данных в ячейки игрового поля ошибок не обнаружено. Кнопка «Загрузить игру»: Загружает из памяти компьютера сохранённую (рис.4.2).
Рисунок 4.2 – Игровое приложение «Судоку», до и после загрузки игры Далее тестируем кнопку «Показать ответ»: Проверяет игровое поле на открытие всей карты «Судоку» (рисунок.4.3). Рисунок 4.3 – Игровое приложение «Судоку», проверка открытия всей карты Протестируем кнопку «Помощь»: «Помощь» изучаем постановку игры (рисунок.4.4). Рисунок 4.4 – Игровое приложение «Судоку», проверка постановки игры После проверки кнопок «Новая игра», «Показать ответ», «Загрузить игру», «Сохранить игру», «помощь» ошибок не обнаружено.
Программа показала свою функциональность. Взаимодействие программы с пользователем удовлетворительное. Ошибок в организации программы и пропущенных команд, ошибок управления потоком, ошибок передачи и интерпретации данных не обнаружено. Высоких требований к производительности компьютера у программы нет.
Цель курсового проекта достигнута, все задачи выполнены в полном объеме. В ходе написания курсового проекта были изучены и углублены теоретические знания по учебной дисциплине «Основы алгоритмизации и программирования», сформированы навыки работы с научной литературой, научился качественно использовать информацию из интернета, изучены особенности разработки базы данных, а также был создан проект на языке Pascal, представляющая собой графическую оболочку. Приобретены навыки проектирования, разработки и тестирования программных средств. Данное игровое приложение могут использовать пользователи разных возрастов. Дети могут решать «Судоку» в свободное время, что в будущем им поможет на уроках. Так как приложение решить не легко даже для взрослого человека, то и развиваться смогут не только дети. Студенты имеют возможность использовать в перерывах на учёбе или же в автобусе, электричке, метро. Офисные работники в обеденных перерывах могут решать «Судоку». В домашних условиях пользователь сможет играть во время ожидания загрузки фильма, приложений, музыки. В ходе выполнения курсового проекта были полностью реализованы поставленные цели и задачи, а именно: − изучен алгоритм генерации игрового поля «судоку»; − разработано игровое приложение; − протестировано игровое приложение; − описано игровое приложение.
1. Архангельский А.Я. "Программирование в C# 5 – 2-е изд., переработ. и дополн.", "Издательство БИНОМ", 2000г. -1072 с 2. Микрюков, В.Ю. Алгоритмизация и программирование / В.Ю. Микрюков. — Ростов на/Д.: Феникс, 2007. — 304 с. 3. Пестриков, В.М. C # на примерах / В.М. Пестриков, А.Н. Маслобоев. - Петербург: БХВ, 2005. – 497 с. 4. Сорокин, А.В. C#. Разработка баз данных / А.В. Сорокин. — СПб.: Питер, 2005. — 473 с. 5. Фаронов, В.В. C #. Программирование на языке высокого уровня / В.В. Фаронов. — СПб.: Питер, 2003. — 640 с. 6. Фаронов, В.В. Программирование баз данных в С # / В.В. Фаронов. — СПб.: Питер, 2006. — 457 с. 7. Фленов, М. «Библия С#» / М. Фленов. – Петербург: БХВ, 2004. – 880 с. 8. Чиртик, А.А. Программирование в С # / А.А Чиртик. — СПб.: Питер, 2010. — 400 c.
ПРИЛОЖЕНИЕ А
БЛОК-СХЕМА
нет
да
ПРИЛОЖЕНИЕ Б using System; using System.Drawing; using System.Data; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Threading;
namespace Sudoku { /// <summary> /// Summary description for SudokuMainForm. /// </summary> public class SudokuMainForm: System.Windows.Forms.Form { private System.Windows.Forms.Button btnNewGame; private System.Windows.Forms.Button btnAnswer; private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.DataGridTableStyle dataGridTableStyle1; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn1; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn2; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn3; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn4; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn5; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn6; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn7; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn8; private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn9; private System.Windows.Forms.ComboBox cboGameLevel; private System.Windows.Forms.Label label1; private System.Windows.Forms.Timer timer1; private System.Windows.Forms.Button btnLoad; private System.Windows.Forms.Button btnSave; private Button button1; private Button button2; private Label lblStatus; private System.ComponentModel.IContainer components;
public SudokuMainForm() { // // Required for Windows Form Designer support // InitializeComponent();
cboGameLevel.SelectedIndex=0; InitialiseDataGrid("numberset"); // Create new Game with Simple Level. NewGame(0);
}
/// <summary> /// Handler method for data validations. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CurrentSet_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e) {
try {
lblStatus.Text=""; int rowPos = dataGrid1.CurrentCell.RowNumber; string currentNumber = e.ProposedValue as string;
int number =Int32.Parse(currentNumber); if((number < 1)||(number >9)) { string errorMessage="Number should be between 1 and 9"; e.Row.SetColumnError(e.Column,errorMessage); } else { int col =e.Column.Ordinal; bool answerChanged = _newGame.CheckForAnswerChange(rowPos,col,number);
if(answerChanged) { lblStatus.Text="You can't change the answer"; e.ProposedValue = e.Row[e.Column];
}else if(_newGame.CheckForDuplicate(rowPos,col,number)){ e.Row.SetColumnError(e.Column,"Number is Duplicate"); e.Row.AcceptChanges();
}else { // Check before clearing that if there are more than one errors DataColumn[] columns= e.Row.GetColumnsInError(); if(columns.Length ==1) { if(e.Column.Ordinal == columns[0].Ordinal) { e.Row.ClearErrors();
} } else { foreach(DataColumn column in columns) { if (e.Column.Ordinal == column.Ordinal) { e.Row.SetColumnError(e.Column,""); } } }
bool answerComplete= IsSolutionComplete(); if(answerComplete) { lblStatus.Text= "Great!!! You have done it"; } }
} } catch(Exception) {
e.Row.SetColumnError(e.Column,"Enter valid Number between 1 & 9");
} }
/// <summary> /// Method:IsSolutionComplete /// Checks whether all spots are filled correctly. /// </summary> /// <returns></returns> private bool IsSolutionComplete() {
foreach(DataRow row in _currentSet.Tables["numberset"].Rows) {
foreach(DataColumn currentColumn in _currentSet.Tables["numberset"].Columns) {
string currentValue= row[currentColumn] as string; if(currentValue =="") return false; int currentNumber = Int32.Parse(currentValue);
if(currentNumber ==0) { return false; }
} } return true; }
/// <summary> /// Method:NewGame /// Populates datagrid with new game. /// </summary> /// <param name="index"></param> private void NewGame(int index) { GameLevel [] levels = {GameLevel.SIMPLE,GameLevel.MEDIUM,GameLevel.COMPLEX};
if(index >-1) { _newGame.GenerateGame(levels[index]); dataGrid1.Visible=false; _currentSet =_newGame.GameSet; _currentSet.Tables["numberset"].DefaultView.AllowNew =false; if(_currentSet!=null) { _currentSet.Tables["numberset"].ColumnChanging += new DataColumnChangeEventHandler(this.CurrentSet_ColumnChanging);
} dataGrid1.DataSource=_currentSet.Tables["numberset"];
dataGrid1.Visible=true;
}
} static void Main() { Application.Run(new SudokuMainForm()); }
/// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { if(disposing) { if(components!= null) { components.Dispose(); } } base.Dispose(disposing); }
#region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SudokuMainForm)); this.label1 = new System.Windows.Forms.Label(); this.cboGameLevel = new System.Windows.Forms.ComboBox(); this.btnAnswer = new System.Windows.Forms.Button(); this.btnNewGame = new System.Windows.Forms.Button(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); this.dataGridTableStyle1 = new System.Windows.Forms.DataGridTableStyle(); this.dataGridTextBoxColumn1 = new System.Windows.Forms.DataGridTextBoxColumn(); this.dataGridTextBoxColumn2 = new System.Windows.Forms.DataGridTextBoxColumn();
this.dataGridTextBoxColumn3 = new System.Windows.Forms.DataGridTextBoxColumn(); this.dataGridTextBoxColumn4 = new System.Windows.Forms.DataGridTextBoxColumn(); this.dataGridTextBoxColumn5 = new System.Windows.Forms.DataGridTextBoxColumn(); this.dataGridTextBoxColumn6 = new System.Windows.Forms.DataGridTextBoxColumn(); this.dataGridTextBoxColumn7 = new System.Windows.Forms.DataGridTextBoxColumn(); this.dataGridTextBoxColumn8 = new System.Windows.Forms.DataGridTextBoxColumn(); this.dataGridTextBoxColumn9 = new System.Windows.Forms.DataGridTextBoxColumn(); this.lblStatus = new System.Windows.Forms.Label(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.btnLoad = new System.Windows.Forms.Button(); this.btnSave = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); this.SuspendLayout(); // // label1 // this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.label1.Image = ((System.Drawing.Image)(resources.GetObject("label1.Image"))); this.label1.Location = new System.Drawing.Point(-3, 21); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(70, 16); this.label1.TabIndex = 4; this.label1.Text = "Сложность:"; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.label1.Click += new System.EventHandler(this.label1_Click); // // cboGameLevel // this.cboGameLevel.BackColor = System.Drawing.SystemColors.Menu; this.cboGameLevel.Cursor = System.Windows.Forms.Cursors.Hand; this.cboGameLevel.Items.AddRange(new object[] { "Легкая", "Средняя", "Сложная"}); this.cboGameLevel.Location = new System.Drawing.Point(73, 18); this.cboGameLevel.Name = "cboGameLevel"; this.cboGameLevel.Size = new System.Drawing.Size(112, 24); this.cboGameLevel.TabIndex = 3; this.cboGameLevel.Text = "Легкая"; // // btnAnswer // this.btnAnswer.Location = new System.Drawing.Point(60, 82); this.btnAnswer.Name = "btnAnswer"; this.btnAnswer.Size = new System.Drawing.Size(125, 28); this.btnAnswer.TabIndex = 2; this.btnAnswer.Text = "Показать ответ "; this.btnAnswer.Click += new System.EventHandler(this.btnAnswer_Click); // // btnNewGame // this.btnNewGame.BackColor = System.Drawing.SystemColors.AppWorkspace; this.btnNewGame.Location = new System.Drawing.Point(60, 48); this.btnNewGame.Name = "btnNewGame"; this.btnNewGame.Size = new System.Drawing.Size(125, 28); this.btnNewGame.TabIndex = 0; this.btnNewGame.Text = "Новая игра"; this.btnNewGame.UseVisualStyleBackColor = false; this.btnNewGame.Click += new System.EventHandler(this.btnNewGame_Click); // // dataGrid1 // this.dataGrid1.BackgroundColor = System.Drawing.SystemColors.Control; this.dataGrid1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.dataGrid1.CaptionVisible = false; this.dataGrid1.ColumnHeadersVisible = false; this.dataGrid1.DataMember = ""; this.dataGrid1.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.dataGrid1.ForeColor = System.Drawing.SystemColors.ScrollBar; this.dataGrid1.GridLineColor = System.Drawing.SystemColors.ActiveCaption; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(191, 3); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.PreferredColumnWidth = 50; this.dataGrid1.PreferredRowHeight = 50; this.dataGrid1.RowHeadersVisible = false; this.dataGrid1.RowHeaderWidth = 50; this.dataGrid1.Size = new System.Drawing.Size(388, 326); this.dataGrid1.TabIndex = 0; this.dataGrid1.TableStyles.AddRange(new System.Windows.Forms.DataGridTableStyle[] { this.dataGridTableStyle1}); this.dataGrid1.Navigate += new System.Windows.Forms.NavigateEventHandler(this.dataGrid1_Navigate); this.dataGrid1.Paint += new System.Windows.Forms.PaintEventHandler(this.DataGrid1_Paint); // // dataGridTableStyle1 // this.dataGridTableStyle1.AlternatingBackColor = System.Drawing.Color.LightGray; this.dataGridTableStyle1.ColumnHeadersVisible = false; this.dataGridTableStyle1.DataGrid = this.dataGrid1; this.dataGridTableStyle1.GridColumnStyles.AddRange(new System.Windows.Forms.DataGridColumnStyle[] { this.dataGridTextBoxColumn1, this.dataGridTextBoxColumn2, this.dataGridTextBoxColumn3, this.dataGridTextBoxColumn4, this.dataGridTextBoxColumn5, this.dataGridTextBoxColumn6, this.dataGridTextBoxColumn7, this.dataGridTextBoxColumn8, this.dataGridTextBoxColumn9}); this.dataGridTableStyle1.GridLineColor = System.Drawing.SystemColors.ActiveCaption; this.dataGridTableStyle1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGridTableStyle1.PreferredColumnWidth = 30; this.dataGridTableStyle1.PreferredRowHeight = 30; this.dataGridTableStyle1.RowHeadersVisible = false; // // dataGridTextBoxColumn1 // this.dataGridTextBoxColumn1.Format = ""; this.dataGridTextBoxColumn1.FormatInfo = null; this.dataGridTextBoxColumn1.MappingName = "col0"; this.dataGridTextBoxColumn1.Width = 50; // // dataGridTextBoxColumn2 // this.dataGridTextBoxColumn2.Format = ""; this.dataGridTextBoxColumn2.FormatInfo = null; this.dataGridTextBoxColumn2.MappingName = "col1"; this.dataGridTextBoxColumn2.Width = 50; // // dataGridTextBoxColumn3 // this.dataGridTextBoxColumn3.Format = ""; this.dataGridTextBoxColumn3.FormatInfo = null; this.dataGridTextBoxColumn3.MappingName = "col2"; this.dataGridTextBoxColumn3.Width = 50; // // dataGridTextBoxColumn4 // this.dataGridTextBoxColumn4.Format = ""; this.dataGridTextBoxColumn4.FormatInfo = null; this.dataGridTextBoxColumn4.MappingName = "col3"; this.dataGridTextBoxColumn4.Width = 50; // // dataGridTextBoxColumn5 // this.dataGridTextBoxColumn5.Format = ""; this.dataGridTextBoxColumn5.FormatInfo = null; this.dataGridTextBoxColumn5.MappingName = "col4"; this.dataGridTextBoxColumn5.Width = 50; // // dataGridTextBoxColumn6 // this.dataGridTextBoxColumn6.Format = ""; this.dataGridTextBoxColumn6.FormatInfo = null; this.dataGridTextBoxColumn6.MappingName = "col5"; this.dataGridTextBoxColumn6.Width = 50; // // dataGridTextBoxColumn7 // this.dataGridTextBoxColumn7.Format = ""; this.dataGridTextBoxColumn7.FormatInfo = null; this.dataGridTextBoxColumn7.MappingName = "col6"; this.dataGridTextBoxColumn7.Width = 50; // // dataGridTextBoxColumn8 // this.dataGridTextBoxColumn8.Format = ""; this.dataGridTextBoxColumn8.FormatInfo = null; this.dataGridTextBoxColumn8.MappingName = "col7"; this.dataGridTextBoxColumn8.Width = 50; // // dataGridTextBoxColumn9 // this.dataGridTextBoxColumn9.Format = ""; this.dataGridTextBoxColumn9.FormatInfo = null; this.dataGridTextBoxColumn9.MappingName = "col8"; this.dataGridTextBoxColumn9.Width = 50; // // lblStatus // this.lblStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.lblStatus.BackColor = System.Drawing.SystemColors.WindowFrame; this.lblStatus.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.lblStatus.Font = new System.Drawing.Font("Times New Roman", 19.8F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.lblStatus.ForeColor = System.Drawing.SystemColors.GradientActiveCaption; this.lblStatus.Location = new System.Drawing.Point(10, 325); this.lblStatus.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); this.lblStatus.Name = "lblStatus"; this.lblStatus.Size = new System.Drawing.Size(587, 195); this.lblStatus.TabIndex = 1; this.lblStatus.Text = "Процесс"; this.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.lblStatus.Click += new System.EventHandler(this.lblStatus_Click); // // timer1 // this.timer1.Interval = 3000; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // btnLoad // this.btnLoad.Location = new System.Drawing.Point(60, 116); this.btnLoad.Name = "btnLoad"; this.btnLoad.Size = new System.Drawing.Size(125, 28); this.btnLoad.TabIndex = 5; this.btnLoad.Text = "Загрузить игру"; this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click); // // btnSave // this.btnSave.Location = new System.Drawing.Point(60, 150); this.btnSave.Name = "btnSave"; this.btnSave.Size = new System.Drawing.Size(125, 28); this.btnSave.TabIndex = 6; this.btnSave.Text = "Сохранить игру"; this.btnSave.Click += new System.EventHandler(this.btnSave_Click); // // button1 // this.button1.Location = new System.Drawing.Point(60, 219); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(125, 26); this.button1.TabIndex = 7; this.button1.Text = "Выход"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Location = new System.Drawing.Point(60, 184); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(125, 29); this.button2.TabIndex = 8; this.button2.Text = "Помощь"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // // SudokuMainForm // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); this.ClientSize = new System.Drawing.Size(582, 553); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Controls.Add(this.btnSave); this.Controls.Add(this.btnLoad); this.Controls.Add(this.lblStatus); this.Controls.Add(this.dataGrid1); this.Controls.Add(this.btnNewGame); this.Controls.Add(this.btnAnswer); this.Controls.Add(this.label1); this.Controls.Add(this.cboGameLevel); this.Cursor = System.Windows.Forms.Cursors.Arrow; this.KeyPreview = true; this.Name = "SudokuMainForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "Игра Судоку"; this.TransparencyKey = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(128))))); this.Load += new System.EventHandler(this.SudokuMainForm_Load); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); this.ResumeLayout(false);
} #endregion
/// <summary> /// Handler to create new game. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnNewGame_Click(object sender, System.EventArgs e) {
lblStatus.Text="Начало новой игры";
int index = cboGameLevel.SelectedIndex; NewGame(index);
}
private void InitialiseDataGrid(string mappingTable) { // Initialise Custom Table and Custom columnStyle for DataGrid
DataGridTableStyle tableStyle= new DataGridTableStyle(); tableStyle.PreferredColumnWidth=PREFERRED_COLUMN_WIDTH;
tableStyle.PreferredRowHeight=PREFERRED_ROW_HEIGHT; tableStyle.BackColor=Color.Lavender; tableStyle.AlternatingBackColor=Color.Ivory; tableStyle.ColumnHeadersVisible=false; tableStyle.RowHeadersVisible=false; tableStyle.GridLineColor=Color.Blue; tableStyle.MappingName=mappingTable;
tableStyle.ForeColor= Color.Black; for(int i=0;i<9;i++) { DataGridSpinnerColumn columnID = new DataGridSpinnerColumn(); columnID.MappingName="col"+i.ToString().TrimEnd(); columnID.HeaderText=columnID.MappingName; columnID.SpinnerWidth=SPINNER_BUTTON_WIDTH; columnID.ScrollMaximum=MAX_ROWS; columnID.Game =_newGame; columnID.ScrollMinimum=1; columnID.ScrollSmallChange=1; columnID.TextBox.TextAlign= HorizontalAlignment.Right;
tableStyle.GridColumnStyles.Add(columnID); //
} dataGrid1.PreferredColumnWidth=PREFERRED_COLUMN_WIDTH; dataGrid1.PreferredRowHeight=PREFERRED_ROW_HEIGHT; dataGrid1.Size = new Size(PREFERRED_COLUMN_WIDTH*MAX_COLS,PREFERRED_ROW_HEIGHT*MAX_ROWS); dataGrid1.TableStyles.Add(tableStyle);
} Sudoku _newGame = new Sudoku();
/// <summary> /// Handler showing the answer. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAnswer_Click(object sender, System.EventArgs e) { _showAnswer = false; ShowAnswer(); timer1.Enabled = true; { lblStatus.Text = "Вот так выглядит карта"; }
}
/// <summary> /// Method:ShowAnswer /// </summary> private void ShowAnswer() {
DataSet tempSet= new DataSet(); dataGrid1.Visible=false; _currentSet.Tables["answerset"].DefaultView.AllowNew =false;
dataGrid1.DataSource= _currentSet.Tables["answerset"]; dataGrid1.TableStyles.Clear(); InitialiseDataGrid("answerset");
dataGrid1.Visible=true;
}
/// <summary> /// Method:ShowProblem /// </summary> private void ShowProblem() { dataGrid1.Visible=false; dataGrid1.DataSource=_currentSet.Tables["numberset"]; dataGrid1.TableStyles.Clear(); InitialiseDataGrid("numberset");
dataGrid1.Visible=true;
}
DataSet _currentSet;
/// <summary> /// Timer Handler /// </summary /// <param name="sender"></param> /// <param name="e"></param>
private void timer1_Tick(object sender, System.EventArgs e) { if(_showAnswer) { ShowAnswer(); _showAnswer=false;
} else { ShowProblem(); _showAnswer=true; timer1.Enabled=false;
} }
private bool _showAnswer=true;
/// <summary> /// DataGrid Paint overriden to paint border /// </summary> /// <param name="sender"></param> /// <param name="e"></param>
private void DataGrid1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {
// Override this handler to do custom painting. Point currentPoint = new Point(0,0); Size size = new Size(PREFERRED_COLUMN_WIDTH*3,PREFERRED_ROW_HEIGHT*3); Pen myPen = new Pen(Color.Red,3);
for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { currentPoint.X = i*PREFERRED_ROW_HEIGHT*3; currentPoint.Y = j*PREFERRED_ROW_HEIGHT*3; Rectangle rect = new Rectangle(currentPoint,size); e.Graphics.DrawRectangle(myPen,rect);
} }
}
#region constants private const int PREFERRED_COLUMN_WIDTH=30; private const int PREFERRED_ROW_HEIGHT=30; private const int SPINNER_BUTTON_WIDTH=30;
private const int MAX_ROWS=9; private const int MAX_COLS=9; #endregion constants
/// <summary> /// Method:Initialise Game /// Purpose:This is called once we load game from file to initiliase /// _newGame attributes. /// </summary> /// <param name="ds"></param> /// <returns></returns> private bool InitialiseGame(DataSet ds) { bool initSuccess = _newGame.InitiliseExistingGame(ds);
if(initSuccess) { dataGrid1.Visible=false; _currentSet =ds; _currentSet.Tables["numberset"].DefaultView.AllowNew =false; if(_currentSet!=null) { _currentSet.Tables["numberset"].ColumnChanging += new DataColumnChangeEventHandler(this.CurrentSet_ColumnChanging);
} dataGrid1.DataSource=_currentSet.Tables["numberset"]; dataGrid1.TableStyles.Clear(); InitialiseDataGrid("numberset");
dataGrid1.Visible=true; } return initSuccess;
}
/// <summary> /// Hanlder to Load Game from file /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnLoad_Click(object sender, System.EventArgs e) { string fileName= "game.xml"; string path = AppDomain.CurrentDomain.BaseDirectory; string file = path+fileName; DataSet tempSet = new DataSet(); try { tempSet.ReadXml(file); bool initSuccess = InitialiseGame(tempSet); if(initSuccess) { lblStatus.Text = "Игра загружена успешно!"; } else { lblStatus.Text = "Не удалось инициализировать игру"; } } catch(Exception ex) { lblStatus.Text = "Ошибка при загрузке файла xml"; Console.WriteLine(ex.Message); } }
/// <summary> /// Hanlder to save game. /// </summary> /// <param name="sender"></param> /// <param name="e"></param>
private void btnSave_Click(object sender, System.EventArgs e) { string fileName= "game.xml"; string path = AppDomain.CurrentDomain.BaseDirectory; string file = path+fileName;
try { _currentSet.WriteXml(file); lblStatus.Text = "Игра успешно сохранена!";
} catch(Exception ex) { lblStatus.Text = "Ошибка при сохранении xml-файла"; Console.WriteLine(ex.Message); } }
private void label1_Click(object sender, EventArgs e) {
}
private void SudokuMainForm_Load(object sender, EventArgs e) {
}
private void dataGrid1_Navigate(object sender, NavigateEventArgs ne) {
}
private void lblStatus_Click(object sender, EventArgs e) {
}
private void button1_Click(object sender, EventArgs e) { this.Close(); }
private void button2_Click(object sender, System.EventArgs e) { DialogResult result = MessageBox.Show("От вас требуется заполнить свободные клетки цифрами от 1 до 9 так, чтобы в каждой строке, в каждом столбце и в каждом малом квадрате 3×3 каждая цифра встречалась бы только один раз. Сложность судоку зависит от количества изначально заполненных клеток и от методов, которые нужно применять для её решения.\n \n Об авторе:\n\nИгровое приложение Судоку\nРазработал Киман Е.А.\nУчащийся группы 31 СПО\nНовопольский ГАЭК", "Помощь", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|