- •Задача 1. Конвертер
- •Задача 2. Фунты-килограммы
- •Задача 3. Сила тока.
- •Задача 4. Сопротивление
- •Задача 5. Кафе
- •Задача 6. Любимый напиток
- •Задача 7. Электроэнергия
- •Задание 8. Осаго
- •Задание 9.Просмотр иллюстраций
- •Задача 10. Калькулятор
- •Задача 11. Калькулятор-2
- •Задача 12.Секундомер
- •Задача 13. Угадай число
- •Задание 14.Угадай число-2
- •Задание 15.Запуск Internet Explorer
- •Задание 16.Конвертор
- •Задание 17.Конвертор 2
- •Задание 18.Погода
- •Задание 19.Средняя температура
- •Задание 20. Простая база данных
- •Задание 21. Редактор текста
- •Задание 22. Приветствие
- •Задача 23. Олимпийский флаг
- •Задание 24. Диаграмма
- •Задача 26. Круговая диаграмма.
- •Задача 27. Просмотр иллюстраций.
- •Задача 28 .Часы
- •Задача 29. Пинг понг.
- •Задача 30. Полет в облаках
- •Задача 31.Баннер
- •Задача 32. Фоновый рисунок
- •Задача 33. Wav
- •Задача 34. Mp3 Player
- •Задача 35.Воспроизведение midi
- •Задача 36.Compact Disk Player (версия 1)
- •Задача 37.Compact Disk Player (версия 2)
- •Задача 38.VideoPlayer
- •Задача 39. Анимация
- •Задача 40. Записная книжка
- •Задача 41 Магазин
- •Задача 42. Ежедневник
- •Задача 43. Сапер
- •Часть 1. Примеры и задачи
- •Часть 1. Примеры и задачи
- •Задача 44 Игра 15
- •Часть 1. Примеры и задачи
- •Задача 45. Игра "Собери картинку" (Puzzle)
- •Задача 46 Игра "Парные картинки"
- •Задача 47. Экзаменатор
- •Задача 48. Экзаменатор-2
- •Задача 49. Календарь
- •Задача 50. Будильник
- •Задача 51. Очистка диска
- •Задача 52.Печать
- •Задачи для самостоятельного решения Задача 1. Скидка
- •Задача 2.Доход по вкладу
- •Задача 3. Таблица умножения
- •Задача 4.Поездка на автомобиле
- •Задача 5.Стоимость разговора
- •Задача 6. Стеклопакет
- •Задача7. Калькулятор
- •Задача 8. Электроэнергия
- •Задача 9. Добрый день
- •Задача 10. Часы
- •Задача 11. Узоры
- •Задача 12. Курс доллара
- •Задача 13. Диаграмма
- •Задача 14. Домашние животные
- •Задача 15. Кораблик
- •Задача 16. Сапер
- •Задача 17 .Экзаменатор
- •Задача 18. База данных "Расходы"
Часть 1. Примеры и задачи
>ы контур флажка был
•НЫЙ
Canvas->MoveTo(p[0].х, p[O].y) Canvas->LineTo(x+4,y+36);
TPoint m[5]; // букваМ
m[0].x=x+8; m[0].y=y+14; m[l].x=x+8; m[l].y=y+8; m[2],x=x+10; m[2].y=y+10; m[3].x=x+12; m[3].y=y+8; m[4].x=x+12; m[4].y=y+14; Canvas->Pen->Color • clWhite; Canvas->Polyline(m,4); Canvas->Pen->Color = clBlack;
// командаглавногоменюНоваяигра void fastcall TMain::NlClick(TObject *Sender)
NewGame(); ShowPole(status);
Игры и другие полезные программы 191
// выбор в меню "?" команды О программе void fastcall TMain::N4qlick(TObject *Sender)
About~>ShowModal();
// выбор в меню "?" команды Справка void fastoall TMain::N3Click(TObject *Sender)
{
/* Отображение справочной информации обеспечивает утилита hh.exe, входящая в состав Windows. Ключ mappid задает отображаемый раздел справочной информации. */ WinExecChh.exe -mapid I saper.chm", SW_RESTORE);
// *** модуль формы О программе*** // Выбор URL-адреса (щелчок в поле компонента Label5) void fastcall TAbout::Label5Click(TObject *Sender)
{
/* наиболее просто передать в функцию ShellExecute строку-константу (URL-адрес) так, как показано ниже ShellExecute (AboutForm->Handle, "open", "http:\\\\www.bhv.ru", NULL, NULL) Лучше URL-адрес брать из поля метки. В функцию ShellExute надо передать указатель (char*) на null terminated строку, но свойство Caption это AnsiString. Преобразование Ansi строки в (char*) строку выполняет метод c_str () */
192 Часть 1. Примеры и задачи
// открыть файл, имя которого находится в поле Labels ShellExecute(About->Handle,"open",Label5->Caption.c_str(), NULL,NULL,SW_RESTORE);
}
// щелчокнакнопке OK void fastcall TAbout::ButtonlClick(TObject *Sender)
{
ModalResult = mrOk;
Задача 44 Игра 15
Всем известна игра "15" (Рис. 52). Вот ее правила. В прямоугольной коробочке находятся 15 фишек, на которых написаны числа от 1 до 15. Размер коробочки — 4x4, таким образом в коробочке есть одна пустая ячейка. В начале игры фишки перемешаны .
Рис 52
Вывод: В этом задании мы создали игру 15.
Листинг
#include "math.hpp" // для доступа к Randomize и RandomRange
//' размер клеток 48x48 #defineWC 48 tdefine НС 48
bytepole[4][4]; // игровое поле byteex,ey; // координаты пустой клетки
fastcall TForml::TForml(TComponent* Owner) : TForm(Owner)
{
Forml->Font->Size = 12;
// началоработыпрограммы void fastcall TForml::FormShow(TObject *Sender) { NewGame();
// новаяигра void fastcall TForml::NewGame()
194
// установить ClientWidth = ClientHeight
размерформы
WC * \4 ;
= HC * 4;
//' исходное (правильное) положение int к = 1; for (int i =
for (int
pole[
Mixer()i
ShowPole();
0; i < 4; i++)
j = 0; j < 4; j++)
i][j] = k++;
// перемешать фишки
// отобразить игровое
Часть 1. Примеры и задачи
фишек
поле
// перемешивает фишки void fastealI TForml::Mixer()
int xl,yl; // пустая клетка int x2,y2; // эту переместить в пустую int d; // направление относительно пустой
Randomize() ;
xl = 3; yl = 3; // см. описание массива stp for ( int i = 0; i < 150; i++) // кол-во перестановок
do { x2 = xl; y2 = yl; /* выберем фишку, примыкающую к пустой клетке, которую переместим в пустую клетку */ d = RandomRange(1,5); switch ( d ) {
Игры и другие полезные программы 795
case I: x2--; break; case 2: х2++; break; case 3: у2—; break; case 4: y2++; break;
} while ( (x2 < 0) | | (x2 >= 4) | | (y2 < 0) | (y2 >=
4)) ;
/* здесь определили фишку, которую надо переместить в пустую клетку */ pole[yl][xl] = Ро1е[у2][х2]; pole[y2][x2] = 16; xl = х2; У1 = У2;
// запомним координаты пустой клетки ex = xl; еу = yl;
}
// отображает на поверхности формы игровое поле void fastcall TForml::ShowPole()
int x,y; // координаты левого верхнего угла клетки
for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++)
x = j * HC; у = i * WC; if <pole[i][j] != 16 ) { Canvas->Brush->Color = clBtnFace; Canvas->Rectangle(x,y, x+WC-1, y+HC-1);
/96 Часть 1. Примеры и задачи
Canvas->TextOutA(x+15,у+10, IntToStr(pole[i][j]));
} else { Canvas->Brush->Color = clBtnHighlight; Canvas->Rectangle(x,y, x+WC-1, y+HC-1);
bool Finish(); // проверяет, правильно ли размещены фишки
// щелчоквклетке void fastcall TForml::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int cx,cy; // координатыклетки
ex = X / WC; cy = Y / HC;
// переместитьвыбраннуюклеткувсоседнююсвободную if ( ( abs(cx - ex) == 1 &&су-еу ==0 ) || ( abs(cy - еу) == 1 &&сх-ех ==0 ) ) { // переместитьфишкуиз (сх,су) в (ех,еу) pole[ey][ex] = pole[су][сх]; pole [су] [сх] = 16,ех = сх; еу = су; ShowPole(); // отрисоватьполе if ( Finish () ) { ShowPole();
Игры и другие полезные программы 197
int r = MessageDlg ("Цель достигнута!\Еще раз?", mtInformation, TMsgDlgButtonsО « mbYes « mbNo, 0); if ( r == mrNo ) Forml->Close(); // завершить работу программы else { NewGame(); ShowPole();
/* проверяет, расположены ли клетки (фрагменты картинки) в нужном порядке */ bool Finish() { bool result; int row, col; int к = 1;
result = true; // пустьфишкивнужномпорядке for (row = 0; row < 4; row++)
{
for (col = 0; col < 4; col++) if ( pole[row][col] == к )
else { result = false; break; } if ( ! result ) break;
198 Часть 1. Примеры и задачи
return (result);
// обработкасобытия Paint void fastcall TForml::FormPaint(TObjesct *Sender)
ShowPole();
