Судоку

 

Государственное образовательное учреждение

высшего профессионального образования московской области

Кафедра распределенных информационно-вычислительных систем

Кафедра информационных технологий











Курсовая работа

по программированию на языке высокого уровня

Тема: «Судоку»


Оглавление


Введение

История судоку

Виды судоку

Задание на работу

Описание проекта

Глобальная блок-схема программы

Описание программы

Описание интерфейса

Код подпрограммы на языке C#

Заключение

Список литературы


Введение


Судо?ку (яп. ?? су:доку) - популярная головоломка-пазл с числами. В переводе с японского «су» - «цифра», «доку» - «стоящая отдельно». Иногда судоку называют «магическим квадратом», что, в общем-то, не верно, так как судоку является латинским квадратом 9-го порядка. Судоку активно публикуют газеты и журналы разных стран мира, сборники судоку издаются большими тиражами. Решение судоку - популярный вид досуга.

Игровое поле представляет собой квадрат размером 9x9, разделённый на меньшие квадраты со стороной в 3 клетки. Таким образом, всё игровое поле состоит из 81 клетки. В них, уже в начале игры, стоят некоторые числа (от 1 до 9), так как незаполненное игровое поле не имеет смысла. От количества пустых клеток зависит сложность данной игры.


История судоку


Все знают судоку как японское развлечение, но на самом деле Япония только приложила руку к глобальному распространению этих головоломок, а действительным прообразом судоку можно назвать головоломки, публикуемые с 1892 года во французской газете Le Siècle. Эти «судоку» ещё не приобрели современный вид, но уже предполагали тот же механизм решения.

Далее «судоку» продолжила своё путешествие по миру и вот в 1979 году Говард Ганс из Индианы публикует в «Dell Magazines» головоломку «Number Place» - это можно считать одним из первых выпусков современных судоку. Далее судоку была представлена японской публике японским же издателем Nikoli в своём ежемесячнике «Montly Nikolist» в апреле 1984 года и с этого момента можно начинать отсчёт судоку-мании. В конце 2004 года британская «Times» стала печатать судоку на своих страницах, чем прославила эту головоломку на всю Европу. Сегодня судоку - обязательный компонент многих газет. Среди них много изданий с многомиллионными тиражами, например немецкая газета «Die Zeit», австрийский «Der Standard». Также публикует судоку российская газета «Труд».


Виды судоку


Судоку различаются по уровню сложности в зависимости от размера квадрата - для профессионалов существуют судоку 15х15 и 16х16 клеток. Существуют судоку, в которых указываются не отдельные цифры для каждой клетки, а сумма цифр в той или иной группе клеток: судоку разбивается на несколько прямоугольных блоков разных размеров, а внутри каждого поля указывается сумма цифр, входящих в него.

Ещё одним вариантом головоломки является судоку, у которой внутренние блоки не квадратные, а произвольной формы, но при этом они, как правило, включают те же 9 клеток. Для маленьких любителей головоломок делаются судоку с полями 2х2 клетки, а для любителей судоку со стажем существуют цветные судоку, где нужно расставить цифры в каждом из цветных блоков по отдельности. Существуют также диагональные судоку, в которых нет мини-квадратов, а цифры не должны совпадать в каждой строке, каждом столбце и на двух максимальных диагоналях. Встречаются и комбинации всех этих видов судоку, например, судоку с мини-квадратами и двумя максимальными диагоналями.

Из всего многообразия судоку каждый сможет выбрать головоломку для себя. Судоку - это отличная зарядка для мозгов.


Задание на работу


Целью выполнения курсовой работы является освоение процесса создания программного продукта на Microsoft .NET Framework на языке C# на примере игры «Судоку».

Задачами курсовой работы являются: формирование пользовательского интерфейса, синтезирование алгоритма игры, реализация, выполнение проверки правильности игрового результата.

судоку головоломка программный игра

Описание проекта


Описание программы


Создание игры судоку имеет несколько этапов:

·создание матрицы судоку

·создание игрового поля

·проверка результата

Наиболее интересным этапом программы является создание матрицы судоку. Матрица представляет собой двухмерный массив размерностью 9х9, заполненный числами от 1 до 9, таким образом, чтобы по горизонтали, по вертикали и в квадратах 3х3 числа не повторяются.


Глобальная блок-схема программы


Рис.1 Глобальная блок-схема


Описание интерфейса


При загрузке программы появляется интерфейс (рис. 2), с которого можно перейти к игре или выйти из программы, так же на нем рассказывается правило игры. На игровой форме (рис. 3) имеются кнопки: «Титульный лист», «Проверить результат», « Очистка поля», «Выход» и таймер. При нажатии кнопки «Титульный лист» вызывается форма с данными о программе и её производителе (рис. 4). Кнопка «Проверить результат» нажимается, когда пользователь заполнит полностью все пустые клетки, и после проверки программой ему выдается результат, правильно ли он заполнил поле. «Очистка поля» удаляет все цифры, поставленные пользователем на пустые ячейки. Таймер отсчитывает время, проведенное пользователем в игре. Кнопка «Выход» позволит пользователю по желанию выйти из программы.

Игровое поле представляет собой квадрат, состоящий из 81 клетки, который в свою очередь состоит из 9 квадратов по 9 клеток. С каждым новым запуском игры заполнение ячеек происходит рандомным образом. Для заполнения игрового поля необходимо поставить курсор в нужную ячейку и в появившемся окне выбрать либо число, которое пользователь хочет поставить, либо очистку ячейки (рис.5). Все введенные значения можно изменять в течение игры.


Рис.2 Начальная форма


Рис.3 Основное поле


Рис.4 Титульный лист


Рис.5 Основное окно с дополнительным окном предложения выбора действия


Код подпрограммы на языке C#


Рассмотрим код программы, выполняющий основную задачу, такую как прорисовку самого поля на игровой форме (рис.3), выполнения проверки и вывода данных.


namespace Судоку

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

bool first_start = false;

int second = 0; // для таймера

int minute = 0;

int x_move = -1; //для mousemove

int y_move = -1; // для mousemove

HelpForm helpform;

Random rnd;

char[] chr;

public Field f;

Sudoku sudok;

public int[,] matr = new int[9, 9];

int x = 1; // для наведения мыши

int y = 1;

private void Form1_Load(object sender, EventArgs e)

{

toolStripTextBox1.Enabled = false;

panel1.Hide();

}

private void panel1_MouseMove(object sender, MouseEventArgs e)

{

x_move = e.X;

y_move = e.Y;

}

private void panel1_MouseClick(object sender, MouseEventArgs e)

{

sudok.pointX = e.X / 41;

sudok.pointY = e.Y / 41;

if (f.matrix[sudok.pointY, sudok.pointX] == 0)

{

helpform = new HelpForm(ref f, ref sudok);

helpform.Show();

helpform.Location = new Point(this.Location.X + e.X - helpform.Width / 2, this.Location.Y + e.Y);

f.Visual();

if (helpform != null) f.DrawNumbers(sudok.new_matrix, Color.Black);

f.DrawNumbers(matr, Color.Red);

}

}


private void Form1_Shown(object sender, EventArgs e)

{

chr = new char[9];

string[] s = new string[9];

StreamReader sr = new StreamReader("судоку.txt");

for (int i = 0; i < 9; i++)

{

s[i] = sr.ReadLine(); // считали из файла судоку

for (int k = 0; k < 9; k++)

{

chr[k] = s[i][k];

}

}

sr.Close();

rnd = new Random();

sudok = new Sudoku(s);

panel1.Show();

f = new Field(panel1, 9, 40, 9, 9);

f.Visual();

matr = sudok.Separate(s, 9);

f.DrawNumbers(matr, Color.Red);

timer1.Start();

if(f!=null && helpform!=null)

f.pressed = helpform.rezult;

}

private void timer1_Tick(object sender, EventArgs e)

{

if (helpform != null && helpform.closed)

{

f.DrawNumbers(matr, Color.Red);

f.DrawNumbers(sudok.new_matrix, Color.Black);

}

if (!first_start)

{

f.Visual();

f.DrawNumbers(matr, Color.Red);

first_start = true;

}

second++;

if (second == 6000) { minute++; second = 0; }

if (x_move!=-1 &&y_move!=-1)

{

if (Math.Abs((x - x % 41) - (x_move - x_move % 41)) > 39 || Math.Abs((y - y % 41) - (y_move - y_move % 41)) > 39)

{

f.Redraw_Clear(x / 41, y / 41);

f.Redraw_Busy(x_move / 41, y_move / 41, matr);

x = x_move;

y = y_move;

f.RedrawField();

if (helpform != null)

{

f.DrawNumbers(sudok.new_matrix, Color.Black);

}

f.DrawNumbers(matr, Color.Red);

x_move = -1;

y_move = -1;

}

}

if(second%100==0)

toolStripTextBox1.Text = minute.ToString() + " : " + ((int)second / 100).ToString();

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

Application.Exit(); //кнопка выхода

}

private void toolStripLabel1_Click(object sender, EventArgs e)

{

About ab = new About();

ab.Show();

}

private void toolStripLabel2_Click(object sender, EventArgs e)

{

int i = 0;

int prov;

for (i = 0; i < 9; i++)

{

for (int j = 0; j < 9; j++)

{

prov = 0;

if (sudok.matrix[i, j] == sudok.matrix2[i, j]) prov = 1;

else

{

if (sudok.matrix[i, j] == sudok.new_matrix[i, j]) prov = 1;

}

if (prov == 0)

{ i = 11; MessageBox.Show("Имеются не правильно заполненные ячейки, либо не все ещё заполнены!"); j = 11; }

}

}

if (i != 12) MessageBox.Show("Вы всё правильно заполнили!");

}

private void toolStripButton1_Click(object sender, EventArgs e)

{

sudok.new_matrix = new int[9, 9];

f.Visual();

f.DrawNumbers(matr, Color.Red);

}

}

}

Заключение


Рассмотрены принципы создания игровых интерфейсов, принципы создания игровых приложений на языке C# на примере игры «Судоку». Рассмотрен один из алгоритмов создания матрицы. В программе используются принципы объектно-ориентированного программирования. Также был создан интерфейс, позволяющий посмотреть информацию об авторе, и проверить правильность заполнения игрового поля.

Возможная разработка программы в будущем:

)Создание таблицы рекордов.

2)Добавление выбора уровня сложности.

3)Ограничение времени игры.

4)Разработка дизайна программы.


Список литературы


1.Мельникова О.И. Лекции по программированию на языках высокого уровня.

2.http://ru.wikipedia.org/wiki/Судоку.


Государственное образовательное учреждение высшего профессионального образования московской области Кафедра распределенных информационно-вычислительных си

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ