Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Список используемых источников





1 Архангельский, А.Я. Программирование в Delphi 7 / А.Я. Архангельский. — Москва: Бином-Пресс 2003. — 1152 с.

2 Деникин, А. А. Могут ли видеоигры быть искусством? // Международный журнал исследований культуры. - № 2(11). — М.: Эйдос, 2013, С. 90-96.

3 Культин, Н.Б. Основы программирования в Delphi 7 / Н.Б. Культин. — Петербург: БХВ, 2003. – 608 с.

4 Кэнту, М. Delphi 7 для профессионалов / М. Кэнту. — Санкт-Петербург: 2004. — 1101 с.

5 Пестриков, В.М. Delphi на примерах / В.М. Пестриков, А.Н. Маслобоев. — Петербург: БХВ, 2005. — 497 с.

6 Фленов, М. «Библия Delphi» / М. Фленов. — Петербург: БХВ, 2004. — 880 с.

Изм.
Лист
№ докум.
Подпись
Дата
Лист
 
КПСПО21.12102.081ПЗ
Разраб.
Ковальчук Е.В
Провер.
Платонова Т.Ю
Реценз.
 
Н. Контр.
 
Утверд.
.
    СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
Лит.
Листов
 
НГАЭК, 2016  


ПРИЛОЖЕНИЕ А

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

 


БЛОК - СХЕМА

ход игрока
Совпадение?
начало


нет

 


да

 

Найдены все пары?

 


нет

 

 


да

выигрыш игрока
конец

 

 



ПРИЛОЖЕНИЕ Б

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

 


unit Unit1;

interface

uses

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

Dialogs, ExtCtrls, Menus;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

Timer1: TTimer;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Timer1Timer(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

// объявление нового типа col_row

col_row = record

col: integer;

row: integer;

end;

const

MAX_SIZE = 32; // максимальное кол-во парных картинок

MAX_H = 8; // максимальный размер поля - 8х8

MAX_W = 8;

var

Form1: TForm1;

Pole: array [1..MAX_H,1..MAX_W] of integer;

{ Pole[i,j] < 100 - код картинки, клетка закрыта;

Pole[i,j] > 100 и < 200 - клетка открыта, т.е. игрок видит картинку;

Pole[i,j] > 200 - игрок нашел пару для этой картинки }

 

Pictures: TBitmap; // картинки, загруженные из файла

n: integer; // колво открытых пар картинок

count: integer; // количества открытых в данный момент клеток

open1: col_row; // координаты 1-й открытой клетки

open2: col_row; // координаты 2-й открытой клетки

 

W: integer; // кол-во клеток по горизонтали

H: integer; // кол-во клеток по вертикали

// произведение W и H должно быть кратно 2-м

WK: integer; // ширина клетки

HK: integer; // высота клетки

 

implementation

uses Unit2,Unit3;

{$R *.dfm}

// рисуетклеткуполя

procedure Kletka(col,row: integer);

var

x,y: integer; // левый верхний угол клетки (координаты)

src, dst: Trect; // источник и получатель битового образа

 

begin

// преобразуем координаты клетки

// в координаты на поверхности формы

x:= (col-1)*WK;

y:= (row-1)*HK;

 

if Pole[col,row] > 200 then

// для этой клетки найдена пара

// клетку надо убрать с поля

begin

// установить цвет границы, закраски и текста

Form1.Canvas.Brush.Color:= clBtnFace;

Form1.Canvas.Pen.Color:= clBtnFace;

Form1.Canvas.Font.Color:= clBtnFace;

end;

 

if (Pole[col,row] > 100) and (Pole[col,row] < 200)

then

// клетка открыта - вывести картинку

begin

 

// Pole[col,row] = номер картинки + 100,

// где 100 - признак того, что клетка открыта

// определим положение картинки в Pictures

src:= Bounds((Pole[col,row]-100 -1)*WK,0,WK,HK);

 

// координаты картинки (клетки) на форме

dst:= Bounds(x,y,HK-2,WK-2);

 

// вывестикартинкувклеткуForm1.Canvas.CopyRect(dst,Pictures.Canvas,src);

 

// установить цвет границы и цифры

Form1.Canvas.Pen.Color:= clBlack;

Form1.Canvas.Font.Color:= clBlack;

Form1.Canvas.Brush.Style:= bsClear;

end;

 

if (Pole[col,row] > 0) and (Pole[col,row] < 100) then

// клетка закрыта, рисуем только контур


begin

Form1.Canvas.Brush.Color:= clBtnFace;

Form1.Canvas.Pen.Color:= clBlack;

Form1.Canvas.Font.Color:= clBtnFace;

end;

 

// отрисоватьклетку

Form1.Canvas.Rectangle(x,y,x+WK-2,y+HK-2);

//Form1.Canvas.TextOut(x+15,y+15, IntToStr(Pole[col,row]));

Form1.Canvas.Brush.Color:= clBtnFace;

 

end;

// отрисовываетполе

procedure ShowPole;

var

row,col: integer;

begin

for row:=1 to H do

for col:=1 to W do

Kletka(row,col);

end;

 

// новаяигра

Procedure NewGame;

var

 

k: integer; // кол-вопарныхкартинок

r: integer; // случайноечисло

buf: array[1..MAX_SIZE] of integer;

// в buf[i] записываем, сколько чисел i

// записали в массив Pole

i,j: integer; // индексы массивов

Sender: TObject;

np: integer; // кол-вопарныхкартинок

lol: string;

begin

 

Pictures:= TBitmap.Create;

// загрузитькартинкиизфайла

 

lol:='pictures';

Randomize;

if (Random(9)+1) mod 2 = 0 then

lol:=lol + '1';

 

lol:=lol + '.bmp';

 

Pictures.LoadFromFile(lol);

 

HK:= Pictures.Height-1; // высотакартинки

WK:= HK; // ширинакартинки

 

np:= Round(Pictures.Width / WK);

if np <= 15

then H:= 4

else H:=5;

W:= Round(np*2/H);

 

// установить размера поля

Form1.ClientHeight:= H * HK;

Form1.ClientWidth:= W * WK;

 

Form1.Timer1.Enabled:= False;

Form1.Timer1.Interval:= 200;

 

n:= 0;

k:= Trunc(H*W/2);

 

for i:=1 to k do

buf[i]:= 0;

 

// запишем в массив Pole случайные числа от 1 до 2

// каждое число должно быть записано два раза

for i:=1 to H do

for j:=1 to W do

begin

repeat

r:= random (k) + 1;

until buf[r] < 2;

Pole[i,j]:= r; // кодкартинки

inc(buf[r]);

end;

// здесь поле сгенерировано

n:=0;

ShowPole;

end;

 

// созданиеформы

procedure TForm1.FormCreate(Sender: TObject);

var

np: integer; // кол-во парных картинок

lol: string;

begin

NewGame;

end;

 

procedure TForm1.FormPaint(Sender: TObject);

begin

ShowPole;

end;

 

// щелчоквклетке

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

col_: integer; // номер клетки по горизонтали

row_: integer; //номер клетки по вертикали

 

begin

col_:= Trunc(X/WK) + 1;

row_:= Trunc(Y/HK) + 1;

 

if Pole[col_,row_] > 200 then

// щелчок в на месте одной из двух

// уже найденных парных картинок

exit;

 

// открытых клеток нет

if count = 0 then

begin

count:= 1;

open1.col:= col_;

open1.row:= row_;

 

// клетка помечается как открытая

Pole[open1.col,open1.row]:= Pole[open1.col,open1.row] + 100;

Kletka(open1.col,open1.row);

exit;

end;

 

// открыта одна клетка, надо открыть вторую

if count = 1 then begin

open2.col:= col_;

open2.row:= row_;

 

// если открыта одна клетка и щелчок сделан

// в этой клетке, то ничего не происходит

if (open1.col = open2.col) and (open1.row = open2.row)

then exit

else begin

count:= 2; // теперьоткрытыдвеклетки

Pole[open2.col,open2.row]:=

Pole[open2.col,open2.row] + 100;

Kletka(open2.col,open2.row); // отрисуемвторуюклетку


 

// проверим, открытыекартинкиодинаковые?

if Pole[open1.col,open1.row] = Pole[open2.col,open2.row] then

// открыты две одинаковые картинки

begin

n:= n+1;

Form1.Timer1.Enabled:= True; // запуститьтаймер

// процедур обработки события OnTimer

// "сотрет" две одинаковые картинки

end;

end;

exit;

end;

if count = 2 then

begin

// открыты 2 клетки с разными картинками

// закроем их и откроем новую, в которой

// сделанщелчок

 

// закрытьоткрытыеклетки

Pole[open1.col,open1.row]:= Pole[open1.col,open1.row] - 100;

Pole[open2.col,open2.row]:= Pole[open2.col,open2.row] - 100;

Kletka(open1.col,open1.row);

Kletka(open2.col,open2.row);

 

// запись в open1 номера текущей клетки

open1.col:= col_;

open1.row:= row_;

count:= 1; // счетчик открытых клеток

 

// открыть текущую клетки

Pole[open1.col,open1.row]:= Pole[open1.col,open1.row] + 100;

Kletka(open1.col,open1.row);

end;

end;

 

// обработкасобытиятаймера

procedure TForm1.Timer1Timer(Sender: TObject);

begin

// в массиве Pole клетки помечаются как совпавшие

Pole[open1.col,open1.row]:= Pole[open1.col,open1.row] + 100;

Pole[open2.col,open2.row]:= Pole[open2.col,open2.row] + 100;

count:= 0;

 

// отрисоватьклетки

Kletka(open2.col,open2.row);

Kletka(open1.col,open1.row);

 

// остановкатаймера

Form1.Timer1.Enabled:= False;

 

if n = Trunc(W*H/2)

then // открытывсепары

begin

Form1.Canvas.Font.Name:= 'Times New Roman';

Form1.Canvas.Font.Size:= 13;

Form1.Canvas.Font.Color:= clBlack;

Form1.Canvas.TextOut(70,150,'Поздравляю! Вы нашли все пары!');

Form1.Canvas.Font.Size:= 10;

Form1.Canvas.TextOut(160,200,' Конецигры!');

end;

 

end;

// выбор в меню команды Новая игра

 

procedure TForm1.N1Click(Sender: TObject);

begin

InvalidateRect(0, nil, True);

NewGame;

end;

 

procedure TForm1.N3Click(Sender: TObject);

begin

Form3.Show;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

Form2.Show;

end;

 

end.







Date: 2016-07-22; view: 304; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.055 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию