рефераты рефераты
Главная страница > Курсовая работа: Система координат канви  
Курсовая работа: Система координат канви
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Система координат канви

void  fastcall TForml: : ForroPaint (TObject *Sender)

{AnsiString ms = "Borland C++Builder";

TRect aRect;

int x,y; // точка, від якої буде виведений текст

// верхню половину вікна фарбуємо білим

aRect = Rect(0,0,ClientWidth,ClientHeight/2);

Canvas->Brush->Color = clWhite; Canvas->FillRect(aRect);

// нижню половину вікна фарбуємо блакитним

aRect = Rect(0,ClientHeight/2,ClientWidth,ClientHeight);

Canvas->Brush->Color = clSkyBlue;

Canvas->FillRect(aRect);

Canvas->Font->Name = "Times New Roman";

Canvas->Font->Size = 24;

// Canvas->Font->Style = TFontStyles() <<fsBold<< fsltalic;

// текст розмістимо в центрі вікна

х = (ClientWidth - Canvas->TextWidth(ms))/2;

у = ClientHeight/2 - Canvas->TextHeight(ms)/2;

Canvas->Brush->Style = bsClear; // область виведення тексту

// не закрашувати

Canvas->Font->Color = clBlack; Canvas->TextOutA(x,y,ms); // вивести текст }

1.2  Вивід зображень за допомогою пікселів

Малювати на канві можна різними способами. Перший варіант — малювання по пикселам. Для цього використовується властивість канви Pixels. Цією властивістю є двовимірний масив Canvas->Pixels[intX][int Y], який відповідає за кольори канви. Наприклад, Canvas->PixeIs[10][20] відповідає кольору пиксела, 10-го зліва і 20-го зверху. З масивом пикселов можна звертатися як з будь-якою властивістю: змінювати колір, задаючи пикселу нове значення, або визначати його колір по значенню, що зберігається в нім. Наприклад, Canvas->PixeIs[10][20]= clBlack — це завдання пикселу чорного кольору.

Давайте спробуємо намалювати графік деякої функції F(X) наканве компоненту Imagel, якщо відомий діапазон її зміни Ymax і Ymin і діапазон зміни аргументу Xmin і Хтах. Це можна зробити такою процедурою:

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

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

for (РХ = 0: РХ <= Imagel->Width; Рх++)

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

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: РХ <- Imagel->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.3  Збереження конфігурації в файлах 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|, |і ін. Кожен з них записує значення відповідного типу. Оголошення всіх цих методів дуже схожі. Наприклад:

void|   fastcall| WriteString| (const| AnsiString| Section|

const| AnsiString| Ident|, const| AnsiString| Value|);

void|   fastcall| Writelnteger| (const| AnsiString| Section|

const| AnsiString| Ident|, int| Value|);

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

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

AnsiString|  fastcall| ReadString| (const| AnsiString| Section|

const| AnsiString| Ident|, const| AnsiString| Default|);

int| fastcall| 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 <vcl.h>

#pragma hdrstop

#include "UBilliard.h"

#include <math.h>

#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:

int Width, Height, Left, Right, Top, Bottom;

TList* Ball;

TList* Lose;

TCue Cue;

void Draw();};

float GetAngToXY( pBall b ;float hitX, hitY){

float dx, dy, d;

dx = b->x - hitX;

dy = b->y - hitY;

d = sqrt(dx*dx+dy*dy);

if(dy>0)

Result = arccos(dx/d);

else Result = -arccos(dx/d); }

void TBall::outFrom(pBall:b){

{ AB,

aa, bb,

V1, V2,

aPrXx, aPrXy,

aPrYx, aPrYy,

aPrX, aPrY,

bPrXx, bPrXy,

bPrYx, bPrYy,

bPrX, bPrY,

alfaA, betaA, gammaA,

Extended alfaB, betaB, gammaB;

if(b == NULL ) exit;

AB = sqrt(sqr(x-b->x)+sqr(y-b->y));

V1 = sqrt(dx*dx+dy*dy);

Страницы: 1, 2, 3, 4, 5

рефераты
Новости