Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Створеня гри «П’ятнашки»

Предмет: 
Тип роботи: 
Індивідуальне завдання
К-сть сторінок: 
35
Мова: 
Українська
Оцінка: 

16;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;
  hour, min, sec, go, level, id: integer;
  time:string;
implementation
uses Unit2, Unit4, Unit3, Unit5, Unit6, Unit7, Unit8, Unit9, Unit10,
  Unit11, Unit12;{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i, ty, lx: integer;
begin
hour:=0;min:=0;sec:=0;go:=0;time:='';id:=0;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;end;
procedure TForm1.FormShow(Sender: TObject);
begin CreatFishkas();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();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 := 26;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;
    //Счетчик ходов Begin
    go:=go+1;
    Edit4.Text:=inttostr(go);
    if go=level Then
     Begin
{KillOldFihkas();CreatFishkas();}Timer1.Enabled:=False;Form9.ShowModal;End;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 //победа
Begin
time:=IntToStr(hour)+':'+IntToStr(min)+':'+IntToStr(sec);Timer1.Enabled:=False;Form10.Label1.Caption:=Name_Igrok+Form10.Label1.Caption;Form10.Label2.Caption:='За'+time+'времени';Form10.Label9.Caption:='И за '+inttostr(go)+' ходов';Form10.Show;
Begin Form11.ADOQuery1.Recordset.MoveLast;id:=Form11.ADOQuery1.Recordset.Fields[0].Value;Form11.ADOQuery1.InsertRecord([IntToStr(id+1),Name_Igrok,IntToStr(go),time, Label3.Caption]);End;End;end;
procedure TForm1.KillOldFihkas;
var i: integer;
begin for i := N to M do FreeAndNil(btn[i]);end;
procedure TForm1.F21Click(Sender: TObject);
begin KillOldFihkas();CreatFishkas();Timer1.Enabled:=False;hour:=0;min:=0;sec:=0;go:=0;BitBtn1.Visible:=True;BitBtn3.Visible:=False;Edit1.Text:='00';Edit2.Text:='00';Edit3.Text:='00';Edit4.Text:='0000';Label13.Visible:=True;Label3.Caption:='Возраст';Label12.Caption:='Не указан';Label14.Caption:='';Image1.Visible:=True;Image2.Visible:=False;Image3.Visible:=False;Form2.Edit1.Text:='';Form2.RadioButton1.Checked:=False;Form2.RadioButton2.Checked:=False;Form2.ComboBox1.Text:='Укажите ваш возраст';Form2.ComboBox2.Text:='не указано';Form2.BitBtn1.Enabled:=False;Form2.ComboBox2.Enabled:=False;Form2.ShowModal;end;
procedure TForm1.F101Click(Sender: TObject);
begin Form11.Show;end;
procedure TForm1.N3Click(Sender: TObject);
begin KillOldFihkas();CreatFishkas();Timer1.Enabled:=False;hour:=0;min:=0;sec:=0;go:=0;BitBtn1.Visible:=False;Edit1.Text:='00';Edit2.Text:='00';Edit3.Text:='00';Edit4.Text:='00000';Form12.ShowModal;end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin  Timer1.Enabled:=False;  Form4.ShowModal;end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin sec:=sec+1; if sec>=60 thenbegin sec:=0; min:=min+1 end; if min>=60 then begin min:=0;hour:=hour+1 end;Edit1.Text:=IntToStr(hour);Edit2.Text:=IntToStr(min);Edit3.Text:=IntToStr(sec);end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin Form2.Close; Form3.Close; Form4.Close;end;
procedure TForm1.N5Click(Sender: TObject);
begin Form5.Show;end;
procedure TForm1.N6Click(Sender: TObject);
begin Form6.Show;end;
procedure TForm1.N4Click(Sender: TObject);
begin Form7.Show;end;
procedure TForm1.N7Click(Sender: TObject);
begin Timer1.Enabled:=False; Form8.ShowModal;end;
procedureTForm1.BitBtn3Click(Sender:TObject);begin KillOldFihkas();CreatFishkas();hour:=0;min:=0;sec:=0;go:=0;Timer1.Enabled:=True;BitBtn1.Visible:=True;BitBtn3.Visible:=False;end;procedureTForm1.Button1Click(Sender:TObject);begintime:=IntToStr(hour)+':'+IntToStr(min)+':'+IntToStr(sec);Timer1.Enabled:=False;Form10.Label1.Caption:=Name_Igrok+Form10.Label1.Caption;Form10.Label2.Caption:='За'+time+'времени';Form10.Label9.Caption:='Иза'+inttostr(go)+'ходов';Form10.Show;Begin Form11.ADOQuery1.Recordset.MoveLast;id:=Form11.ADOQuery1.Recordset.Fields[0].Value;Form11.ADOQuery1.InsertRecord([IntToStr(id+1),Name_Igrok,IntToStr(go),time,Label3.Caption]);End;end;procedure TForm1.N8Click(Sender: TObject);beginApplication.Terminate();end;end.
 
Додаток Б
Лістинг модуля Unit2
unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons, XPMAN;
type
TForm2 = class(TForm)Label1: TLabel;Label2: TLabel;Label3: TLabel;Label4: TLabel;BitBtn1: TBitBtn;Image1: TImage;Edit1: TEdit;RadioButton1: TRadioButton;RadioButton2: TRadioButton;Label5: TLabel;Label6: TLabel;Label7: TLabel;ComboBox1: TComboBox;Label8: TLabel;ComboBox2: TComboBox;procedure BitBtn1Click(Sender: TObject);procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
Form2: TForm2;Name_Igrok:String; implementation
uses Unit1, Unit3, Unit4, Unit10, Unit11, Unit12, Unit5, Unit6, Unit7, Unit8, Unit9;{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
begin Begin if Edit1.Text='' Then Edit1.Text:='Аноним';Name_Igrok:=Edit1.Text;Form1.Label2.Caption:=Name_Igrok; End;if RadioButton1.Checked=True then Begin Form1.Image2.Visible:=True;Form1.Image1.Visible:=False;Form1.Image3.Visible:=False;End;if RadioButton2.Checked=True then Begin Form1.Image3.Visible:=True; Form1.Image1.Visible:=False;Form1.Image2.Visible:=False;End;Form3.Timer1.Enabled:=True;Form3.ShowModal;end;procedure TForm2.ComboBox1Change(Sender: TObject);
var Spisok:byte;
begin
ComboBox2.Enabled:=True; Spisok:=ComboBox1.ItemIndex;
case Spisok of 
0:begin Form1.Label3.Caption:='1Год';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
...
16:begin Form1.Label3.Caption:='17лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
17:begin Form1.Label3.Caption:='18лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False; end;
18:begin Form1.Label3.Caption:='19лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
19:begin Form1.Label3.Caption:='20лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
...
99:begin Form1.Label3.Caption:='99лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end else
Begin Form1.Label3.Caption:='100лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;end;end;
procedure TForm2.ComboBox2Change(Sender: TObject);
 Var Levelof:byte;
begin
 BitBtn1.Enabled:=True;
 Levelof:=ComboBox2.ItemIndex;
 case Levelof of
  0:begin Form1.Label12.Caption:='Легкий';  Form1.Label14.Caption:='1000 ходов';      Form1.Label12.Font.Color:=clGreen;level:=1000;end;
1:begin Form1.Label12.Caption:='Нормальный';Form1.Label14.Caption:='500 ходов';Form1.Label12.Font.Color:=clBlue;level:=500;  end;2:begin Form1.Label12.Caption:='Тяжелый';Form1.Label14.Caption:='150 ходов';Form1.Label12.Font.Color:=clOlive;level:=150;end elsebeginForm1.Label12.Caption:='Нереальний';Form1.Label14.Caption:='1ход';Form1.Label12.Font.Color:=clOlive;level:=1;end;end;end;end.
 
Додаток В
Лістинг модуля Unit3
unit Unit3;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, XPMAN, ComCtrls, ExtCtrls, jpeg;
type
  TForm3 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    ProgressBar1: TProgressBar;
    procedure Timer1Timer(Sender: TObject);
  private
{ Private declarations } public { Public declarations } end;
var
Form3: TForm3;i:integer;
implementation
uses Unit1, Unit2, Unit4, Unit10, Unit11, Unit12, Unit5, Unit6, Unit7,
  Unit8, Unit9;
{$R *.dfm}
procedure TForm3.Timer1Timer(Sender: TObject);
begin
  i:=i+1; ProgressBar1.Position:=i;
  if i=100 then begin Timer1.Enabled:=False; i:=0;
   Form1.Show; Form2.Visible:=False; Form3.Close;
   Form1.Timer1.Enabled:=True;
  end;end;end.
 
Фото Капча