Компьютерная игра "пятнашки"

Понятие алгоритма, свойства, история его исследования. Метод генерации случайных чисел. Концепция (теория) экспертных систем. Нерешаемая комбинация, предложенная Ноем Чепменом. Сущность и цель игры "пятнашки". Моделирование эвристических алгоритмов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 08.04.2014
Размер файла 339,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

СОДЕРЖАНИЕ

Техническое задание на разработку ПС

1. Теоретическая часть

1.1 Сведения об алгоритмах

1.2 Сведения об игре «пятнашки»

2. Функциональное описание

Заключение

Список использованных источников

Приложение А

Приложение Б

Техническое задание на разработку ПС

Разработать программу, позволяющую реализовать на компьютере игру «пятнашки».

1. Теоретическая часть

1.1 Сведения об алгоритмах

Алгоримтм, от имени учёного аль-Хорезми (перс. ???????? [al-Khwarazmi]) -- точный набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное время. В старой трактовке вместо слова «порядок» использовалось слово «последовательность», но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок». Это связано с тем, что работа каких-то инструкций алгоритма может быть зависима от других инструкций или результатов их работы. Таким образом, некоторые инструкции должны выполняться строго после завершения работы инструкций, от которых они зависят. Независимые инструкции или инструкции, ставшие независимыми из-за завершения работы инструкций, от которых они зависят, могут выполняться в произвольном порядке, параллельно или одновременно, если это позволяют используемые процессор и операционная система.

Ранее часто писали «алгорифм», сейчас такое написание используется редко, но, тем не менее, имеет место (например, Нормальный алгорифм Маркова).

Часто в качестве исполнителя выступает некоторый механизм (компьютер, токарный станок, швейная машина), но понятие алгоритма необязательно относится к компьютерным программам, так, например, чётко описанный рецепт приготовления блюда также является алгоритмом, в таком случае исполнителем является человек.

Понятие алгоритма относится к первоначальным, основным, базисным понятиям математики. Вычислительные процессы алгоритмического характера (арифметические действия над целыми числами, нахождение наибольшего общего делителя двух чисел и т. д.) известны человечеству с глубокой древности. Однако, в явном виде понятие алгоритма сформировалось лишь в начале XX века.

Частичная формализация понятия алгоритма началась с попыток решения проблемы разрешения (нем. Entscheidungsproblem), которую сформулировал Давид Гильберт в 1928 году. Следующие этапы формализации были необходимы для определения эффективных вычислений или «эффективного метода»; среди таких формализаций -- рекурсивные функции Геделя -- Эрбрана -- Клини 1930, 1934 и 1935 гг., ?-исчисление Алонзо Чёрча 1936 г., «Формулировка 1» Эмиля Поста 1936 года и машина Тьюринга. В методологии алгоритм является базисным понятием и получает качественно новое понятие как оптимальности по мере приближения к прогнозируемому абсолюту. В современном мире алгоритм в формализованном выражении составляет основу образования на примерах, по подобию. На основе сходства алгоритмов различных сфер деятельности была сформирована концепция (теория) экспертных систем.

Неформальное определение

Каждый алгоритм предполагает существование начальных (входящих) данных и в результате работы приводит к получению определенного результата. Работа каждого алгоритма происходит путем выполнения последовательности некоторых элементарных действий. Эти действия называют шагами, а процесс их выполнения называют алгоритмическим процессом. Таким образом проявляется свойство дискретности алгоритма. Важным свойством алгоритмов является массовость, или возможность применения к различным входным данным. То есть, каждый алгоритм призван решать класс однотипных задач. Необходимым условием, которому удовлетворяет алгоритм, является детерминированность, или определенность. Это означает, что выполнение команд алгоритма происходит по единому образцу и приводит к одинаковому результату для одинаковых входных данных. Входные данные алгоритма могут быть ограничены набором допустимых входных данных. Применение алгоритма к недопустимым входным данным может приводить к тому, что алгоритм никогда не остановится или попадет в тупиковое состояние (зависание), из которого не сможет выйти.

Формальное определение

Разнообразные теоретические проблемы математики и ускорение развития физики и техники поставили на повестку дня точное определение понятия алгоритма. Первые попытки уточнения понятия алгоритма и его исследования осуществляли в первой половине XX века Алан Тьюринг, Эмиль Пост, Жак Эрбран, Курт Гедель, Андрей Марков, Алонзо Чёрч. Было разработано несколько определений понятия алгоритма, но впоследствии было выяснено, что все они определяют одно и то же понятие (см. Тезис Чёрча -- Тьюринга).

Формальные свойства алгоритмов

Различные определения алгоритма в явной или неявной форме содержат следующий ряд общих требований:

Дискретность -- алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых шагов. При этом для выполнения каждого шага алгоритма требуется конечный отрезок времени, то есть преобразование исходных данных в результат осуществляется во времени дискретно.

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

Понятность -- алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд.

Завершаемость (конечность) -- при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. С другой стороны, вероятностный алгоритм может и никогда не выдать результат, но вероятность этого равна 0.

Массовость (универсальность) - алгоритм должен быть применим к разным наборам исходных данных.

Результативность -- завершение алгоритма определёнными результатами.

Алгоритм содержит ошибки, если приводит к получению неправильных результатов либо не даёт результатов вовсе.

Алгоритм не содержит ошибок, если он даёт правильные результаты для любых допустимых исходных данных.

Наличие исходных данных и некоторого результата

Алгоритм -- это точно определённая инструкция, последовательно применяя которую к исходным данным, можно получить решение задачи. Для каждого алгоритма есть некоторое множество объектов, допустимых в качестве исходных данных. Например, в алгоритме деления вещественных чисел делимое может быть любым, а делитель не может быть равен нулю. Алгоритм служит, как правило, для решения не одной конкретной задачи, а некоторого класса задач. Так, алгоритм сложения применим к любой паре натуральных чисел. В этом выражается его свойство массовости, то есть возможности применять многократно один и тот же алгоритм для любой задачи одного класса. Для разработки алгоритмов и программ используется алгоритмизация -- процесс систематического составления алгоритмов для решения поставленных прикладных задач. Алгоритмизация считается обязательным этапом в процессе разработки программ и решении задач на ЭВМ. Именно для прикладных алгоритмов и программ принципиально важны детерминированность, результативность и массовость, а также правильность результатов решения поставленных задач. Алгоритм -- это понятное и точное предписание, исполнительно совершить последовательность действий, направленных на достижение цели.

1.2 Сведения об игре «пятнашки»

Пятнамшки -- популярная головоломка, придуманная в 1878 году Ноем Чепмэном. Представляет собой набор одинаковых квадратных костяшек с нанесёнными числами, заключённых в квадратную коробку. Длина стороны коробки в четыре раза больше длины стороны костяшек для набора из 15 элементов, соответственно в коробке остаётся незаполненным одно квадратное поле. Цель игры -- перемещая костяшки по коробке добиться упорядочивания их по номерам, желательно сделав как можно меньше перемещений.

Суть самой игры заключается в следующем:

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

В общем виде данное табло можно представить в виде таблицы 1:

Таблица 1 - Образец

2

8

6

1

3

4

9

5

12

11

14

15

7

10

13

Игрок должен перемещать по одной клетки с цифрой на пустое место.

- Так происходит до тех пор, пока пользователь не выстроит последовательную комбинацию цифр (Таблица 2), и лишь после этого игрок считается победителем.

Таблица 2 - Правильное заполнение табло

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Математическое описание.

Пятнашки представляют собой классическую задачу для моделирования эвристических алгоритмов. Обычно задачу решают через количество перемещений и поиск манхеттенского расстояния между каждой костяшкой и её позицией в собранной головоломке. Для решения используются алгоритмы наподобие алгоритма A*.

Нерешаемая комбинация, предложенная Ноем Чепменом - рисунок 1.

Рисунок - 1

Можно показать, что ровно половину из всех возможных 1 307 674 368 000 (=15!) начальных положений пятнашек невозможно привести к собранному виду: пусть квадратик с числом i расположен до (если считать слева направо и сверху вниз) k квадратиков с числами меньшими i. Будем считать ni = k, то есть если после костяшки с i-м числом нет чисел, меньших i, то k = 0. Также введем число e -- номер ряда пустой клетки (считая с 1).

Если сумма

является нечётной, то решения головоломки не существует.

Для обобщённых пятнашек (с бомльшим, чем 15, количеством костяшек) задача поиска кратчайшего решения является NP-полной.

Если допустить поворот коробки на 90 градусов, при котором изображения цифр окажутся лежащими на боку, то можно перевести неразрешимые комбинации в разрешимые (и наоборот). Таким образом, если вместо цифр на костяшки нанести точки и не фиксировать положение коробки, то неразрешимых комбинаций вообще не окажется.

2. Функциональное описание

В курсовой работе используются основные возможности языка в работе со структурами, файлами, графикой.

В данной игре предполагалось создание:

1) интуитивно понятного интерфейса;

2) скромного, но графически точного табло, где осуществляется перемещение цифр;

3) удобного для пользователя управления.

алгоритм комбинация игра число

Заключение

В ходе выполнения курсового проекта разработана программа, реализующая игру «пятнашки».

Внешний вид окна программы представлен в приложении А, исходный текст программы представлен в приложении Б.

Список использованных источников

1. «Delphi. Программирование на языке высокого уровня» Фаронов В.В., СПб.: Питер, 2011 - 640с.: ил. [Текст]

2. «Библия Delphi - 2-е издание» Фленов М., С.-Пб, БХВ-Петербург, 2008г. [Текст]

Приложение А

Основное окно программы на рисунке 2. Окно с окончанием игры на рисунке 3.

Рисунок 2 - основное окно

Рисунок 3 - победа

Приложение Б

Листинг программы:

unit main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus, XPMan, ExtCtrls;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

tmr1: TTimer;

lbl1: TLabel;

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure tmr1Timer(Sender: TObject);

private

procedure ButClicked(Sender: TObject);

procedure CreatFishkas();

procedure KillOldFihkas();

function position(const x, y: integer): integer;

procedure victopia();

{ Private declarations }

public

{ Public declarations }

end;

type Tfish = TButton; // указываем тип фишек

const

W = 80; // ширина фишки

D = 10; // растояние между фишками

L = D + W; // растояние между "х" у фишек

NXM = 3; // размер поля 4х4

N = 1; M = 9; // размерность массива фишек

POLET = 10; POLEL = 10; //начальные позиции поля фишек на форме

prefix = 'Fishka';

var

Form1: TForm1;

btn: array[N..M] of Tfish;

sorseAr: array[N..M] of boolean;

zeroX, zeroY: integer;

XYmatrix: array[1..M, 1..2] of integer;

timtemp:TDateTime;

implementation

{$R *.dfm}

//размер формы

procedure FormSize;

begin

Form1.Width := (POLEL * 2) + (L * NXM);

Form1.Height := (L * NXM) + POLET + 90;

Form1.Lbl1.Left:=Round(Form1.Width/2)-35;

Form1.Lbl1.Top:=Form1.Height-90;

end;

procedure TForm1.FormCreate(Sender: TObject);

var i, ty, lx: integer;

begin

timtemp:=time;

randomize; i := 0;

// заполняем массив координатами на которые будут случайным образом ставиться

// фишки при начале новой игры

ty := POLET; lx := POLEL;

for i := N to M do begin

XYmatrix[i, 1] := lx;

XYmatrix[i, 2] := ty;

lx := lx + L;

if i mod NXM = 0 then begin

ty := ty + L;

lx := POLEL;

end;

end;

FormSize();

end;

procedure TForm1.FormShow(Sender: TObject);

begin

CreatFishkas();

end;

// клик по пункту меню - "новая игра"

procedure TForm1.N1Click(Sender: TObject);

begin

KillOldFihkas();

FormSize();

CreatFishkas();

timtemp:=time;

end;

{ сбрасывает все элементы массива в true,

массив отвечает за неповторяющиеся порядковые номера фишек

которые выбираются случайным образом

нужно при иницилизации новой игры}

function dump(): boolean;

var i: integer;

begin

i := 0;

for i := N to M do

sorseAr[i] := true; ;

end;

//алгоритм выборки неповторяющихся значений случайным образом

function choose(): integer;

var i: integer;

begin

i := 0;

result := random(M) + 1;

while sorseAr[result] = false do

result := random(M) + 1;

sorseAr[result] := false;

end;

procedure TForm1.CreatFishkas;

// НОВАЯ ИГРА, создание игрового поля

var

i, ty, lx, ch: integer;

begin

randomize;

dump();

// But.Enabled:=false; BitBtn1.Enabled:=true; BitBtn2.Enabled:=true;

ty := POLET; lx := POLEL;

for i := N to M do begin

btn[i] := Tfish.Create(Self);

btn[i].Width := W;

btn[i].Height := W;

btn[i].Font.Size := 34;

btn[i].Font.Name := 'Garamond Premr Pro';

btn[i].Font.Style := [fsBold];

ch := choose(); // получаем случайным образом число 1-16, числа не повторяются

btn[i].Left := XYmatrix[ch, 1]; // получаем координату Х

btn[i].Top := XYmatrix[ch, 2]; // получаем координату У

btn[i].Tag := ch; // в Tag - текущее положение фишки

btn[i].Name := prefix + inttostr(i);

if i <> M then begin

btn[i].Caption := inttostr(i);

btn[i].OnClick := ButClicked;

end else begin // пустая кнопка

btn[i].Caption := '';

zeroX := btn[i].Left; zeroY := btn[i].Top;

end;

btn[i].Parent := Self;

end;

end;

// определяет позицию на которой стоит фишка в данный момент по ее координатам

function TForm1.position(const x, y: integer): integer;

var i: integer;

begin

i := 0;

result := -32;

for i := N to M do begin

if ((XYmatrix[i, 1] = x) and (XYmatrix[i, 2] = y)) then begin

result := i; break;

end;

end;

end;

// перемещение фишки на новую позицию

procedure TForm1.ButClicked(Sender: TObject);

var X, Y, ps: integer;

begin

X := Tfish(Sender).left; Y := Tfish(Sender).Top;

if ((X = zeroX + L) and (Y = zeroY)) or

((X = zeroX - L) and (Y =

zeroY)) or

((X = zeroX) and (Y = zeroY + L)) or

((X = zeroX) and (Y = zeroY - L)) then begin

Tfish(Sender).Left := zeroX;

Tfish(Sender).Top := zeroY;

Tfish(FindComponent(prefix + inttostr(M))).left := X;

Tfish(FindComponent(prefix + inttostr(M))).top := Y;

ps := position(zeroX, zeroY);

if ps <> -32 then

Tfish(Sender).Tag := ps else

ShowMessage('Ошибка в логике программы, координаты');

zeroX := X; zeroY := Y;

victopia(); // проверка - ПОБЕДА или играем дальше

end;

end;

// проверка - ПОБЕДА или играем дальше...

procedure TForm1.victopia;

var i: integer; b: boolean;

begin

b := true; i := 0;

for i := N to M - 1 do

begin

if strtoint(Tfish(FindComponent(prefix + inttostr(i))).Caption) <>

Tfish(FindComponent(prefix + inttostr(i))).Tag then

begin

b := false; break;

end;

end;

if b then ShowMessage('ПОБЕДА! ТаДаМ))) Ваше время:'+TimeToStr(Time-timtemp));

end;

procedure TForm1.KillOldFihkas;

// уничтожаем кнопки-фишки, нужно перед началом новой игры

var i: integer;

begin

for i := N to M do

FreeAndNil(btn[i]);

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Application.Terminate();

end;

procedure TForm1.tmr1Timer(Sender: TObject);

begin

form1.Refresh;

lbl1.Caption:=TimeToStr(Time-timtemp);

end;

end.

Размещено на Allbest.ur


Подобные документы

  • История развития Visual Basic, его преимущества и недостатки. Игра "Пятнашки" как классическая задача для моделирования эвристических алгоритмов. Разновидности и вариации игры. Разработка проекта в Visual Basic, который представляет собой игру "Пятнашки".

    курсовая работа [5,7 M], добавлен 15.05.2014

  • "Пятнашки" на первый взгляд простая игра, но для ее реализации необходимо обратится ко всем разделам программирования в среде Турбо Паскаль. Назначение и область применения. Описание алгоритма программы. Программное и аппаратное обеспечение программы.

    курсовая работа [308,0 K], добавлен 04.07.2008

  • Игра "Пятнашки": исходные данные, условия задачи и цели ее решения. Основные приемы программирования и типы данных, используемые при решении аналогичных задач. Для разработки программы использовался язык С и среда программирования Borland C++ Builder.

    курсовая работа [674,1 K], добавлен 03.07.2011

  • Основные подходы при создании Windows приложений. Изучение навыков работы с 2D графикой в Windows приложениях. Методы генерации псевдослучайных чисел. Разработка игры "Сапер" с расположением мин на основе нескольких методов генерации случайных чисел.

    курсовая работа [63,2 K], добавлен 18.02.2009

  • Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.

    курсовая работа [172,4 K], добавлен 23.05.2012

  • Общая характеристика и функциональные особенности, основные требования к интерфейсу разрабатываемого программного продукта. Описание алгоритмов, таблица идентификаторов, организация интерфейса пользователя, инструментальные средства реализации проекта.

    курсовая работа [587,7 K], добавлен 12.01.2014

  • Характеристика вероятностного алгоритма и особенности его использования. Принцип работы и назначение генератора случайных чисел, сущность псевдослучайных чисел. Рассмотрение и реализация метода середины квадрата, разработка алгоритма и его кодирование.

    курсовая работа [50,3 K], добавлен 18.09.2009

  • Проектирование датчика случайных чисел, пригодного для моделирования случайной последовательности с заданным законом распределения. Методы моделирования. Разработка алгоритма и программы датчика. Исследование свойств выработанной им последовательности.

    лабораторная работа [124,2 K], добавлен 15.06.2010

  • Создание программы "компьютерная игра "баскетбол", с упрощенным изображением баскетбольного щита и игрока, с возможностью изменять положение игрока, направление броска и его силу. Построение алгоритма, описание процедур и функций, таблица идентификаторов.

    дипломная работа [72,7 K], добавлен 29.11.2011

  • Особенности разработки компьютерной игры, в которой проводится чемпионат по волейболу. Список переменных и типов данных. Разработка текстового и графического алгоритма. Разбор основных этапов игры на примере. Основные положения руководства пользователя.

    курсовая работа [976,9 K], добавлен 09.06.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.