Курсовая работа: Создание мини-игры "Магический квадрат"
3. Культин Н.Б. Основы
программирования в Delphi 7 – СПб.:
БХВ-Петербург, 2003.
4. Постников М.М. «Магические квадраты» - М.: Наука,
1964.
5. Фаронов В.В. Delphi. Программирование на языке высокого
уровня: Учебник для вузов – СПб.: Питер, 2008. -640 с.
Приложение
Листинг программы создания главного окна
unit mag2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
Buttons, StdCtrls, Mask, ExtCtrls, Menus;
type
TForm1 =
class(TForm)
Panel1: TPanel; //Панель,
на которой размещены кнопки
Lb1: TLabel; //Метка, для
вывода комментариев к программе
MEd1: TMaskEdit; //Поля с
маской ввода - для заполнения квадрата
MEd2:
TMaskEdit;
MEd3:
TMaskEdit;
MEd4:
TMaskEdit;
MEd5:
TMaskEdit;
MEd6:
TMaskEdit;
MEd7:
TMaskEdit;
MEd8:
TMaskEdit;
MEd9:
TMaskEdit;
Button1:
TButton; //Кнопка "Проверить"
BitBtn1:
TBitBtn; //Кнопка "Close"
Button2:
TButton; //Кнопка "Начать"
MainMenu1:
TMainMenu; //Главное меню формы
Help1:
TMenuItem; //Один пункт меню "Help"
N1: TMenuItem; //Пункт
подменю "Магический квадрат"
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); //Обработка нажатия кнопки "Проверить"
var s1,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;
Страницы: 1, 2, 3, 4 |