Смекни!
smekni.com

Создание мини-игры "Магический квадрат" (стр. 3 из 3)

N2: TMenuItem; //Пункт подменю "Правила игры"

procedure FormActivate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCanResize(Sender: TObject; var NewWidth,

NewHeight: Integer; var Resize: Boolean);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Bitmap:TBitmap; //фоноваякартинка

implementation

uses dialog_mag, dialog_pravila;

var

x,y:integer; //х - начальноечисло, скоторогозаполняемтаблицу,

//у - номер способа очистки клеток

z:boolean; //Индикатор правильности заполнения пользователем пустых клеток

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject); //Процедурарисованияфонаформы

begin

Bitmap:=TBitmap.Create; //Создание объекта-битового образа

Bitmap.LoadFromFile('ris.bmp'); //Загрузка битового изображения из файла

Canvas.StretchDraw(Rect(0, 0, Form1.clientWidth, Form1.clientHeight),Bitmap);

//Рисование и заполнение формы рисунком Bitmap

end;

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, //Процедура,

NewHeight: Integer; var Resize: Boolean); //запрещающая изменение размеров формы

begin

Resize:=false;

end;

procedure TForm1.FormActivate(Sender: TObject); //Активизацияформы

begin

Caption:='Магический квадрат'; //Установить заголовок формы "Магический квадрат"

Button2.Show; //Показать кнопку "Начать"

Button1.Hide; //Спрятать кнопку "Проверить"

end;

procedure TForm1.Button2Click(Sender: TObject); //Обработканажатиякнопки "Начать"

procedure zapolnenie(x,y:integer);//Процедуразаполнения

begin

MEd1.ReadOnly:=false; //Очищаемполяввода

MEd2.ReadOnly:=false;

MEd3.ReadOnly:=false;

MEd4.ReadOnly:=false;

MEd5.ReadOnly:=false;

MEd6.ReadOnly:=false;

MEd7.ReadOnly:=false;

MEd8.ReadOnly:=false;

MEd9.ReadOnly:=false;

MEd2.Text:=IntToStr(x); //Заполняем поля ввода числами,

MEd9.Text:=IntToStr(x+1); //которые преобразовываем

MEd4.Text:=IntToStr(x+2); //к строковому представлению

MEd7.Text:=IntToStr(x+3);

MEd5.Text:=IntToStr(x+4);

MEd3.Text:=IntToStr(x+5);

MEd6.Text:=IntToStr(x+6);

MEd1.Text:=IntToStr(x+7);

MEd8.Text:=IntToStr(x+8);

Case y of //Выбираем способ удаления значений некоторых клеток

0:begin

MEd4.Text:=''; MEd4.SetFocus; //Удаляемчислоизполя

MEd5.Text:=''; MEd5.SetFocus; //и передаем ему фокус ввода

MEd8.Text:=''; MEd8.SetFocus;

MEd9.Text:=''; MEd9.SetFocus;

MEd1.ReadOnly:=true; //Запрещаем ввод чисел и изменение остальных полей

MEd2.ReadOnly:=true;

MEd3.ReadOnly:=true;

MEd6.ReadOnly:=true;

MEd7.ReadOnly:=true;

end;

1:begin

MEd2.Text:=''; MEd2.SetFocus;

MEd5.Text:=''; MEd5.SetFocus;

MEd6.Text:=''; MEd6.SetFocus;

MEd8.Text:=''; MEd8.SetFocus;

MEd1.ReadOnly:=true;

MEd3.ReadOnly:=true;

MEd4.ReadOnly:=true;

MEd7.ReadOnly:=true;

MEd9.ReadOnly:=true;

end;

2:begin

MEd1.Text:=''; MEd1.SetFocus;

MEd2.Text:=''; MEd2.SetFocus;

MEd4.Text:=''; MEd4.SetFocus;

MEd6.Text:=''; MEd6.SetFocus;

MEd9.Text:=''; MEd9.SetFocus;

MEd3.ReadOnly:=true;

MEd5.ReadOnly:=true;

MEd7.ReadOnly:=true;

MEd8.ReadOnly:=true;

end;

3:begin

MEd3.Text:=''; MEd3.SetFocus;

MEd4.Text:=''; MEd4.SetFocus;

MEd6.Text:=''; MEd6.SetFocus;

MEd7.Text:=''; MEd7.SetFocus;

MEd8.Text:=''; MEd8.SetFocus;

MEd1.ReadOnly:=true;

MEd2.ReadOnly:=true;

MEd5.ReadOnly:=true;

MEd9.ReadOnly:=true;

end;

end;

Lb1.Caption:='Заполни пустые клетки магического квадрата';

//Появление соответствующей надписи в метке

Button1.Show; //Показать кнопку "Проверить"

Button2.Hide; //Спрятать кнопку "Начать"

end;

BEGIN

if z then //Проверка правильности вввода недостающих чисел

zapolnenie(x,y) //Заполнение "Попробуй еще раз" старыми значениями х и у

else //Заполняем в первый раз и при каждом правильном решении

begin

y:=random(4); //Выбираем случайным образом способ удаления значений полей

x:=Random(100); //Выбираем число, которым начинаем заполнение полей

zapolnenie(x,y); //заполняем квадрат

end;

end;

procedure TForm1.Button1Click(Sender: TObject); //Обработканажатиякнопки "Проверить"

vars1,s2,s3,s4,s5,s6,s7,s8:integer; //Суммы в строках, столбцах, диагоналях

begin

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

//инаходимсоответствующиесуммы

s1:=StrToInt(Trim(MEd1.Text))+ StrToInt(Trim(MEd2.Text))+ StrToInt(Trim(MEd3.Text));

s2:=StrToInt(Trim(MEd4.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd6.Text));

s3:=StrToInt(Trim(MEd7.Text))+ StrToInt(Trim(MEd8.Text))+ StrToInt(Trim(MEd9.Text));

s4:=StrToInt(Trim(MEd1.Text))+ StrToInt(Trim(MEd4.Text))+ StrToInt(Trim(MEd7.Text));

s5:=StrToInt(Trim(MEd2.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd8.Text));

s6:=StrToInt(Trim(MEd3.Text))+ StrToInt(Trim(MEd6.Text))+ StrToInt(Trim(MEd9.Text));

s7:=StrToInt(Trim(MEd3.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd7.Text));

s8:=StrToInt(Trim(MEd1.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd9.Text));

If (s1=s2) and (s2=s3) and (s3=s4) and (s4=s5) and (s5=s6) and (s6=s7) and (s7=s8)

then //Если все суммы равны

begin Lb1.Caption:='Молодец! Все верно!' ; //Выводим в метке

//соответствующую надпись

z:=false; //z определяет, что заполнение следующих значений квадрата

//нужно начать с новой генерации начального значения х и способа удаления у

Button2.Show; //Показать кнопку "Начать"

Button1.Hide; //Спрятать кнопку "Проверить"

end

else //Если хоть одна сумма отлична от других

begin

Lb1.Caption:='Попробуй еще раз'; //Выводим в метке соответствующую надпись

z:=true; //z определяет, что заполнение квадрата

//нужно произвести старыми значениями х и у

Button2.Show; //Показать кнопку "Начать"

Button1.Hide; //Спрятать кнопку "Проверить"

end;

Except //Если преобразовать в числовое представление значения полей

// не удалось (какое-то поле осталось не заполнено)

MessageBeep(mb_Ok); //Звуковой сигнал

ShowMessage('Не все клетки заполнены!'); //Вывод окна сообщения

Exit; //Выход из процедуры

end;

end;

procedure TForm1.N1Click(Sender: TObject); //Выборменю"Магический квадрат"

begin

OKBottomDlg.Show; //Показ диалогового окна "Магический квадрат"

end;

procedure TForm1.N2Click(Sender: TObject); //Выборменю"Правила игры"

begin

OKBottomDlg1.Show; //Показ диалогового окна "Правила игры"

end;

end.


Листинг модуля вызова диалогового окна «Магический квадрат»

unit dialog_mag;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, Grids;

type

TOKBottomDlg = class(TForm)

OKBtn: TButton; //Кнопка "ОК"

Bevel1: TBevel; //Кромка

Memo1: TMemo; //Текстовоеполе

StringGrid1: TStringGrid; //Текстоваятаблица

procedure OKBtnClick(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

OKBottomDlg: TOKBottomDlg;

Bitmap1:TBitmap; //фоноваякартинка

StringGrid1:TStringGrid;

implementation

{$R *.dfm}

procedure TOKBottomDlg.FormPaint(Sender: TObject);//Процедурарисованияфонаформы

procedure zapoln;

begin

StringGrid1.Cells[0,0]:='8'; //Заполнениетаблицычислами

StringGrid1.Cells[0,1]:='1';

StringGrid1.Cells[0,2]:='6';

StringGrid1.Cells[1,0]:='3';

StringGrid1.Cells[1,1]:='5';

StringGrid1.Cells[1,2]:='7';

StringGrid1.Cells[2,0]:='4';

StringGrid1.Cells[2,1]:='9';

StringGrid1.Cells[2,2]:='2';

end;

BEGIN

Bitmap1:=TBitmap.Create; //создание объекта-битового образа

Bitmap1.LoadFromFile('fon.bmp'); //Загрузка битового изображения из файла

Canvas.StretchDraw(Rect(0, 0, OKBottomDlg.clientWidth, OKBottomDlg.clientHeight),Bitmap1);

//Рисование и заполнение формы рисунком Bitmap

zapoln; //Вызов процедуры заполнения таблицы числами

end;

procedure TOKBottomDlg.OKBtnClick(Sender: TObject);

begin

OKBottomDlg.Close; //Закрытиеокнапощелчкукнопки "OK"

end;

end.


Листинг модуля вызова диалогового окна «Правила игры»

unit dialog_pravila;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

type

TOKBottomDlg1 = class(TForm)

OKBtn: TButton; //Кнопка "ОК"

Bevel1: TBevel; //Кромка

Memo1: TMemo; //Текстовоеполе

procedure OKBtnClick(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

OKBottomDlg1: TOKBottomDlg1;

Bitmap2:TBitmap; //фоноваякартинка

implementation

{$R *.dfm}

procedure TOKBottomDlg1.FormPaint(Sender: TObject);//Процедурарисованияфонаформы

begin

Bitmap2:=TBitmap.Create; //создание объекта-битового образа

//Загрузка битового изображения из файла

Bitmap2.LoadFromFile('fon.bmp');

Canvas.StretchDraw(Rect(0, 0, OKBottomDlg1.clientWidth, OKBottomDlg1.clientHeight),Bitmap2);

//Рисование и заполнение формы рисунком Bitmap

end;

procedure TOKBottomDlg1.OKBtnClick(Sender: TObject);

begin

OKBottomDlg1.Close; //Закрытиеокнапощелчкукнопки "OK"

end;

end.