Казанский (Приволжский) федеральный университет
Институт Вычислительной математики и информационных технологий
Кафедра экономической кибернетики
КУРСОВОЙ ПРОЕКТ
по курсу «Программирование»
Студент: Пономарёва А.А.
№ 912 БИ.
Руководитель: Андрианова А.А.
Казань – 2012.
Содержание
1.Постановка задачи.
2.Демонстрация пользователю.
3.Описание алгоритма.
4.Текст программы.
1.Постановка задачи.
Курсовой проект посвящен написанию игры «Пятнашки». Цель программы – обеспечить возможность игры в «Пятнашки». Данная программа является, компьютерной версии знаменитой игры «пятнашки». Это логически не сложная и достаточно простая в управлении и использовании программа. Применения данной программы возможны везде, ведь в любой работе нужен отдых, а данная простенькая игра поможет расслабиться и отвлечься от повседневных дел.
Суть самой игры заключается в следующем:Игрок на экране видит табло, которое разбито на 16 клеток. В пятнадцати из них расположены неповторяющиеся цифры, в случайном порядке от 1 до 15 и одна пустая.В общем виде данное табло можно представить в виде таблицы 1:
Таблица 1 – Образец табло.
5 |
7 |
3 |
8 |
15 |
1 |
13 |
2 |
14 |
10 |
6 |
4 |
|
9 |
11 |
12 |
Игрок должен перемещать по одной клетки с цифрой на пустое место.
Так происходит до тех пор, пока пользователь не выстроит последовательную комбинацию цифр (Таблица 2), и лишь после этого игрок считается победителем.
Таблица 2 – Правильное заполнение табло.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
2.Демонстрация пользователю.
После запуска программы, перед вами появляется окно, в котором даны в разбросанном порядке числа, ваша задача собрать числа од 1 до 15,это вы сможете сделать с помощью клавиш вверх, вниз, в лево, в право. В случае, если вам это удается ,на экран выводится сообщение «Вы выиграли»!
3.Описание алгоритма.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace пятнашки
{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } int fixi = 3, fixj = 3; //Переменные количества
bool f = true;//флажок проверяющий, раставлены ли числа по порядку от 1 до 15. Rectangle zam = new Rectangle(300, 300, 100, 100);//четырехугольник, необходимый для замены сдвигаемых цифр Bitmap image = new Bitmap("1.jpg");//загрузка картинки Rectangle[] rec = { new Rectangle(0,0,100,100), new Rectangle(0,100,100,100), new Rectangle(0,200,100,100), new Rectangle(0,300,100,100), new Rectangle(100,0,100,100), new Rectangle(100,100,100,100), new Rectangle(100,200,100,100), new Rectangle(100,300,100,100), new Rectangle(200,0,100,100), new Rectangle(200,100,100,100), new Rectangle(200,200,100,100), new Rectangle(200,300,100,100), new Rectangle(300,0,100,100), new Rectangle(300,100,100,100), new Rectangle(300,200,100,100), new Rectangle(300,300,100,100)}; //делает рамки для квадратов Rectangle[,] copy = {{new Rectangle(0,0,100,100), new Rectangle(0,100,100,100), new Rectangle(0,200,100,100), new Rectangle(0,300,100,100)}, { new Rectangle(100,0,100,100), new Rectangle(100,100,100,100), new Rectangle(100,200,100,100), new Rectangle(100,300,100,100)}, { new Rectangle(200,0,100,100), new Rectangle(200,100,100,100), new Rectangle(200,200,100,100), new Rectangle(200,300,100,100)}, { new Rectangle(300,0,100,100), new Rectangle(300,100,100,100), new Rectangle(300,200,100,100), new Rectangle(300,300,100,100)}};//делит картинку на квадратики Rectangle[,] print ={{new Rectangle(200,300,100,100), new Rectangle(200,0,100,100), new Rectangle(100,300,100,100), new Rectangle(300,0,100,100)}, { new Rectangle(100,0,100,100), new Rectangle(300,200,100,100), new Rectangle(200,200,100,100), new Rectangle(200,100,100,100)}, { new Rectangle(100,100,100,100), new Rectangle(0,100,100,100), new Rectangle(0,200,100,100), new Rectangle(100,200,100,100)}, { new Rectangle(0,0,100,100), new Rectangle(300,100,100,100), new Rectangle(0,300,100,100), new Rectangle(300, 300, 100, 100) } };//распечатка квадратов в рандомном порядке // Готовый для победы нажать вниз!!! //Rectangle[,] print = {{new Rectangle(0,0,100,100), new Rectangle(0,100,100,100), new Rectangle(0,200,100,100), new Rectangle(0,300,100,100)}, // { new Rectangle(100,0,100,100), new Rectangle(100,100,100,100), new Rectangle(100,200,100,100), new Rectangle(100,300,100,100)}, // { new Rectangle(200,0,100,100), new Rectangle(200,100,100,100), new Rectangle(200,200,100,100), new Rectangle(200,300,100,100)}, // { new Rectangle(300,0,100,100), new Rectangle(300,100,100,100), new Rectangle(300,300,100,100),new Rectangle(300,200,100,100)}}; private void Form1_Paint(object sender, PaintEventArgs e) { for (int a = 0; a < 4; a++)//функция рисования for (int b = 0; b < 4; b++) e.Graphics.DrawImage(image, copy[a, b], print[a, b], GraphicsUnit.Pixel);//рисуем квадрат e.Graphics.DrawRectangles(Pens.Black, rec);//рисуем рамку черную f = true;//проверяем массив встал ли он в правильном порядке for (int a = 0; a < 4; a++) { for (int b = 0; b < 4; b++) if (copy[a, b] != print[a, b])//соответствуем ли собранным { f = false; break; }если не соответствует то мы двигаемся дальше if (f == false) break; } if(f)MessageBox.Show("Вы выйграли"); } private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Left && fixi+1!=4)//если нажата левая стрелка,и fix i не равно 4,меняем местами с пустым { zam = print[fixi, fixj];//замена print[fixi, fixj] = print[fixi + 1, fixj]; print[fixi + 1, fixj] = zam; fixi += 1; Refresh();//перерисовываем } if (e.KeyCode == Keys.Right && fixi - 1 != -1) )//если нажата правая стрелка,и fix i не равно 4,меняем местами с пустым { zam = print[fixi, fixj]; print[fixi, fixj] = print[fixi - 1, fixj]; print[fixi - 1, fixj] = zam; fixi -= 1; Refresh(); } if (e.KeyCode == Keys.Up && fixj+1 != 4) если нажата стрелка вверх,и fix i не равно 4,меняем местами с пустым { zam = print[fixi, fixj]; print[fixi, fixj] = print[fixi, fixj+1]; print[fixi, fixj+1] = zam; fixj += 1; Refresh(); } if (e.KeyCode == Keys.Down && fixj-1 != -1) если нажата стрелка вниз,и fix i не равно 4,меняем местами с пустым { zam = print[fixi, fixj]; print[fixi, fixj] = print[fixi, fixj-1]; print[fixi, fixj-1] = zam; fixj -= 1; Refresh(); } } }