Система координат канви

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

Скачать Бесплатно!
Для того чтобы скачать эту работу.
1. Пожалуйста введите слова с картинки:

2. И нажмите на эту кнопку.
закрыть



Х

X = Xmin + РХ * (Xmax - Xmin) / Imagel->Width;

Y = F(X); //PY - координата пиксела, відповідна координаті Y

PY = imagel->Height - (Y - Ymin)*Imagel->Height/(Ymax-Ymin); //Устанавливается чорний колір вибраного пиксела

Imagel->Canvas->Pixels[PX][PY] = clBlack;}

У цьому коді вводяться змінні X і Y, що є значеннями аргументу і функції, а також змінні РХ і PY, що є координатами пикселов, відповідними X і Y. Сама процедура складається з циклу по всіх значеннях горизонтальної координати пикселов РХ компоненту Imagel. Спочатку вибране значення Рхнересчитиваєтсявсоответствующєєзначенієх. Потім проводиться виклик функції і визначається її значення Y. Це значення перераховується у вертикальну координату пиксела PY. І на закінчення колір пиксела з координатами (РХ, PY) встановлюється чорним.

Спробуйте створити відповідне застосування і подивитися, як воно працює. Хай для простоти ми орієнтуватимемося на функцію sin(X), для якої Xmin=0, Хmax=4pi (2 періоди в радіанах), Ymin=-1, Ymax=l.

Почніть новий проект, помістіть на нього компонент Image і кнопку з написом Намалювати, в обробник події OnClick якою запишіть код, аналогічний приведеному вище, але що конкретизує функцію:

#define Pi 3.14159

float X, Y;// координати функції

int РХ, PY;// координати пикселов

for (РХ = 0: РХ Width; PX++)

{//X - координата, відповідна пикселу з координатою РХ

X = РХ * 4 * Pi / imagel->Width;

Y = sin(X); //PY - координата пиксела, відповідна координаті У

PY = Imagel->Height - (Y+1) * Imagel->Height / 2; //Устанавливается чорний колір вибраного пиксела

Imagel->Canvas->Pixels(PX][PY] = clBlack; }

 

  1. Збереження конфігурації в файлах ini

 

Файли .ini - це текстові файли, призначені для зберігання інформації про настройки різних програм. Інформація у файлі логічно групується в розділи, кожен з яких починається оператором заголовка, поміщеним в квадратні дужки. Наприклад [Desktop]. У рядках, наступних за заголовком, міститься інформація, що відноситься до даного розділу, у формі:

[dBASE Files]

Driver32=C:\WINDOWS\SYSTEM\odbcjt32.dll

Файли .ini, як правило, зберігаються в каталозі Windows, який можна знайти за допомогою функції GetWindowsDirectory.

У C++Builder роботу з файлами .ini найпростіше здійснювати за допомогою створення в програмі обєкту типу TIniFile. Цей тип описаний в модулі inifiles, який треба підключати до програми оператором uses (автоматично це не робиться).

При створенні обєкту типу TlniFile в нього передається імя файлу .ini, з яким він звязується. Файл повинен існувати до створення обєкту.

Для запису значень ключів існує багато методів: WriteString, WriteInteger, WriteFloat, і ін. Кожен з них записує значення відповідного типу. Оголошення всіх цих методів дуже схожі. Наприклад:

voidfastcall WriteString (const AnsiString Section

const AnsiString Ident, const AnsiString Value);

voidfastcall Writelnteger (const AnsiString Section

const AnsiString Ident, int Value);

У всіх оголошеннях Section - розділ файлу, Ident - ключ цього розділу, Value - значення ключа. Якщо відповідний розділ або ключ відсутній у файлі, він автоматично створюється.

Є аналогічні методи читання: ReadString, Readlnteger, ReadFloat, ReadBool і ін. Наприклад:

AnsiStringfastcall ReadString (const AnsiString Section

const AnsiString Ident, const AnsiString Default);

intfastcall Readlnteger (const AnsiString Section

const AnsiString Ident, int Default);

Методи повертають значення ключа розділу Section. Параметр Default визначає значення, що повертається у випадку, якщо у файлі не вказано значення відповідного ключа.

Перевірити наявність значення ключа можна методом ValueExists, в який передаються імена розділу і ключа. Метод DeleteKey видаляє з файлу значення вказаного ключа у вказаному розділі. Перевірити наявність у файлі необхідного розділу можна методом SectionExists. Метод EraseSection видаляє з файлу вказаний розділ разом зі всіма його ключами. Є ще ряд методів, які ви можете подивитися у вбудованій довідці C++Builder.

Подивимося на прикладі, як все це можна використовувати для установки програми, запамятовування її настройоки і для видалення програми.

Зробіть просте тестову програму. Перенесіть на форму три кнопки Button і діалог FontDialog. Перша кнопка (назвіть її BInst і задайте напис Install) імітуватиме установку програми. Точніше, не саму установку, оскільки копіювати файли з загрузочної дискети ми не будемо, а тільки створення файлу .ini у каталозі Windows. Друга кнопка (назвіть її BUnlnst і задайте напис Unlnstall) імітуватиме видалення програми. Тут ми не видалятимемо саму програму з диска, а тільки видалимо з каталога Windows наш файл, а третя кнопка (назвіть її BFont і задайте напис Font) дозволятиме змінювати імя шрифту, використовуваного у формі, і забезпечить запамятовування цього шрифту у файлі .ini, щоб надалі при запуску програми можна було читати цю настройку і задавати її формі.

 

Розділ 2. Практична частина

 

2.1 Код гри

 

#include

#pragma hdrstop

#include "UBilliard.h"

#include

#include "inifiles.hpp"

#pragma package(smart_init)

#pragma resource "*.dfm"

// розмір столу

int const w = 600;

int const h = 300;

class TGameStatus {

protected: char* gsStatus;

public:

void gsBegin(){

gsStatus="qsBegin"; }

void gsGame(){

gsStatus="gsGame"; }

void gsGameOver(){

gsStatus="gsGameOver"; }};

TGameStatus *GameStatus = new TGameStatus;

struct TPlayer{

int balls; };

class TLose{

public:

int x,y;

int ballsInside;

int R;

void Draw();};

class TBall { public:

float x,y, dx,dy;

int R;

bool exists, stopped ;

int col,ID,count;

TList *Items;

void Draw();

void Stop();

bool InLose(int &Number);

void outFrom(TBall b);

TBall CollisedWith();

~TBall();};

class TCue {

public:

bool Visible;

TBall ToBall;

float Angle, energy;

void draw();

void Hit();};

void TCue::Hit(){

TBall *ToBall;

ToBall->dx =-cos(Angle)*energy;

ToBall->dy = -sin(Angle)*energy;

ToBall->stopped = False;

Visible = False;}

class TBilliardTable{

public:

in

s