Программная реализация игры «Пятнашки»

Автор работы: Пользователь скрыл имя, 05 Апреля 2014 в 15:23, курсовая работа

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

Алгори́тм, от имени учёного аль-Хорезми (перс. خوارزمی‎ [al-Khwārazmī]) — точный набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное время. В старой трактовке вместо слова «порядок» использовалось слово «последовательность», но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок». Это связано с тем, что работа каких-то инструкций алгоритма может быть зависима от других инструкций или результатов их работы.

Содержание

Техническое задание на разработку ПС………………………………………...3
1 Теоретическая часть…………………………………………………………….4
1.1 Сведения об алгоритмах……………………………………………….4
1.2 Сведения об игре «пятнашки»………………………………………..8
2 Функциональное описание……………………………………………………11
Заключение………………………………………………………………………12
Список использованных источников…………………………………………..13
Приложение А …………………………………………………………………..14
Приложение Б …………………………………………………………………...15
Приложение В ………………………………………………………………...…16

Вложенные файлы: 1 файл

1.docx

— 193.91 Кб (Скачать файл)

Если сумма

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

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

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

 

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

 

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

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

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

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

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

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

 

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

  1. «Delphi. Программирование на языке высокого уровня» Фаронов В.В., СПб.: Питер, 2011 – 640с.: ил. [Текст]
  2. http://ru.wikipedia.org/wiki/Алгоритм [Электронный ресурс]
  3. http://ru.wikipedia.org/wiki/Пятнашки [Электронный ресурс]
  4. «Библия Delphi - 2-е издание» Фленов М., С.-Пб, БХВ-Петербург, 2008г.  [Текст]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ А

Блок-схема реализации программы на рисунке 2.


ПРИЛОЖЕНИЕ Б

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

 


 

 

 

 

 

 

 

 

 

Рисунок 3 – основное окно    Рисунок 4 – победа

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ В

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

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.

 


 



Информация о работе Программная реализация игры «Пятнашки»