Розробка комп «ютерної гри «Баліста»
Ми стріляємо з баліти бажаючи щоб снаряд перелтів через стіну, але через неправельні розрахунки при заданні кута ми влучаеємо в стіну. В такому випадку наша программа перевіряє чи влучили ми в стіну за допомогою даної функції: Math. Abs (bal1.x * km — pictureBox3. Left) < 20) && (Math.Abs (bal1.y * km — pictureBox3. Top) < 100, вона переріряє чи зайшов снаряд в координати стіни і якщо це… Читати ще >
Розробка комп «ютерної гри «Баліста» (реферат, курсова, диплом, контрольна)
УНІВЕРСИТЕТ «КРОК»
Коледж економіки, права та інформаційних технологій Циклова комісія з комп’ютерних наук КУРСОВА РОБОТА з дисципліни «Об'єктно-орієнтоване програмування»
на тему:
«Розробка комп’ютерної гри баліста»
Київ-2013
Вступ Метою курсової роботи є моделювання пострілу балісти через стіну по мішені. В даному випадку мішенню є інша баліста. Снаряд має летіти по балістичній траєкторії з урахуванням сили тяжіння і можливості стикання зі стіною.
У ході робіт з моделювання стрільби балісти проводиться:
— Аналіз балістичної траєкторії з урахуванням ваги снаряду, фізичних сил які діють на снаряд, таких як сила тяжіння, сила поштовху;
— Завдання кута нахилу балісти;
Аналіз предметної галузі задачі моделювання пострілу балісти Баліста була винайдена в 399 до н. е. в місті Сіракузи Архімедом Баліста (лат. Balistarum від грец. вбллйуфзт — «кидати») — антична зброя для метання сферичних кам’яних снарядів. Головний діючий механізм — два важелі з торсіонними пружинами як штовхач, пружини складались з кількох петель скручених канатів.
Стародавні греки називали такі метальні машини палінтонами, тобто той що кидає навісом або «катапелта петроболос» (буквально — камінь проти щита). Найпоширеніша римська назва для такої зброї — баліста.
Стрільба з балісти це складний процес який залежить від багатьох факторів таких як:
— Кут нахилу балісти;
— Сила тяжіння яка діє на камінь;
— Сила поштовху каменя;
— Урахування балістичної траєкторії;
— Відстань до цілі;
Для розрахунків успішної роботи багатьох машин, механізмів, приладів використовують комп’ютерне моделювання як наприклад в даній курсовій роботі. В ході виконання роботи ми можемо спостерігати що відбувається з снарядом при взаємодії з різними об'єктами.
В даній роботі використане Імітаційне моделювання.
Воно дозволяє:
— Перевірити ефективність використання різних варіантів компонувальних рішень для попадання по цілі;
— Визначити або уточнити технічні характеристики балісти ;
— Визначити найбільш ефективні алгоритми попадання по цілі ;
— Визначення необхідних зон попадання снаряду ;
— Визначення умови знищення балісти, стіни ;
— Визначення умови перемоги гравця ;
Виходячи з принципів побудови візуально об'єктних систем, необхідно провести статичну декомпозицію об'єктів для моделі катапульти.
Основним компонентом візуального розміщення імітаційної моделі є місце (простір) де відбувається гра. Це місце включає в себе динамічні об'єкти такі, як катапульта, снаряд, стіна. Об'єкт катапульта використовується для моделювання механізму який запускає снаряд і водночас виступає мішенню. Об'єкт стіна використовується для моделювання захисного об'єкту для балісти. Об'єкт снаряд використовується для ураження мішені.
Подання динамічних об'єктів :
Обробка динамічних об'єктів імітаційної моделі балісти складається з циклу звернення до набору модулів у певний момент часу або при створенні деяких умов.
Моделювання починається за визначеним сценарієм з використанням заданих користувачем параметрів моделювання.
Моделювання включає в себе:
— Імітація завдання кута нахилу балісти ;
— Імітація польоту снаряду ;
— Імітація знищення балісти при влучанні в неї снаряду ;
— Імітація руйнування стіни при влучанні в неї ;
Загалом імітатор використовує підхід моделювання з часовим поділом для обробки всіх процесів. Використовуючи задані параметри моделі у деякі інтервали часу із заданих діапазонів відбувається зміна картинки при попаданні в балісту чи стіну завдяки чому ми можемо впевнитись в тому що ми влучили .
Постановка задачі
Моя мета — розробка програми моделювання стрільби з балісти. Також я маю всі умови і описання ситуацій, які я повинен змоделювати. Так, в своєму проекті я розробив наступні класи:
Клас «Камінь», в цьому класі описані всі фізичні закони які потрібні для того щоб снаряд летів по балістичній траєкторії, вказується кисть якою малюється наш снаряд, колір, всі статичні данні такі як маса та діаметр снаряду, початкові координати.
Клас «Баліста», в цьому класі описуються такі данні наприклад як те що наші координати використовуються в метрах, а не в пікселях.
Основу побудови та дослідження моделей системи створює обєктно — орієнтований підхід. Суть цього підходу заключається в розгляді тяжкої системи як сукупності обєктів, що взаємодіють між собою, на відміну від структурного підходу, що пропонує розглядання окремих дій, що робиться дослідницькою системою. Важливою перевагою обєктно-орієнтованого підходу є можливість зрозумілого і простого представлення обєктів реального світу. Тому потрібно відмітити, що краще в нашому випадку використовувати обєктно-орієнтований підхід.
А тепер ми розглянемо конкретні ситуації, та побачимо як наша модель буде обробляти створені ситуації.
Ми стріляємо з баліти бажаючи щоб снаряд перелтів через стіну, але через неправельні розрахунки при заданні кута ми влучаеємо в стіну. В такому випадку наша программа перевіряє чи влучили ми в стіну за допомогою даної функції: Math. Abs (bal1.x * km — pictureBox3. Left) < 20) && (Math.Abs (bal1.y * km — pictureBox3. Top) < 100, вона переріряє чи зайшов снаряд в координати стіни і якщо це відбулося стіна руйнується, а якщо ж снаряд не влучає в стіну то він просто летить далі.
Ми стріляємо з баліти і влучаємо в іншу «ворожу «балісту тоді наша програма знову ж використовує таку ж функцію тільки з іншими заданими перевірочними координатами і якщо снаряд влучає в ціль то вона руйнується, а якщо ж снаряд не влучає в ціль то він просто летить далі.
Схема поведінки об'єктів класу «Камінь» :
Снаряд летить по балістичній траєкторії та при зіткненні з стіною або ворожою балістою за допомогою функції перевіряє чи влучив він в потрібне місце.
Схема поведінки об'єктів класу «Баліста»:
Катапульта весь час стоїть нерухомо та при влучанні в неї снаряду вона зміною свою картинку.
Структури даних та діаграми класів для розв’язання задачі
З вище сказаного будуємо діаграму класів Клас «Catapulta»:
Поля :
x, y-координати по осям х, у ;
p, p1 -картинки які використовуються для зображення баліст ;
a — кут нахилу в радіанах ;
f — сила ;
Класи «Ball01 / Ball02»:
Поля :
m — маса каменя; r — радіус каменя; vx, vy — вектор швидкості по осям x, y; x, y — координати по осям x, y ;
Методи :
Move — функція яка рухає камінь ;
NewPoz — функція яка запам’ятовує вону позицію каменю відносно осей x, y
Show — функція яка відповідає за зображення каменю на формі ;
Схеми взаємодії об'єктів та алгоритми виконання їх методів Діаграма прецедентів :
Схеми взаємодії об'єктів та алгоритми виконання їх методів
Макроалгоритм
В даній блок схемі коротко описано роботу всієї програми. Кожен блок містить групу команд які описано у основному коді програми.
Завдання кута нахилу балісти — це блок в якому ми задаємо кут нахилу баліти за допомогою повзунків які розташовані на формі.
Запуск снаряду — це блок в якому ми запускаємо снаряд за допомогою кнопки розташованій на формі.
Політ снаряду — це блок в якому здійснюється політ снаряду з початкових з координат до цілі.
Влученняце блок в якому перевіряється чи влучили ми в ціль, якщо так то ціль руйнується, а якщо ні то ми повертаємось на початок.
Руйнування — це блок в якому ми бачимо зміну картинки при влучанні в ціль.
Схема моделювання імітації польоту снаряду :
Запуск снаряду — це блок в якому ми запускаємо снаряд за допомогою кнопки розташованій на формі.
х++; у++ - це блок в якому змінюються координати снаряду.
Влученняце блок в якому перевіряється чи влучили ми в ціль, якщо так то ціль руйнується, а якщо ні то ми повертаємось на початок.
Зупинка снаряду — це блок в якому ми бачимо як снаряд зникає при влученні в ціль Схема моделювання імітації руйнування стіни
Влученняце блок в якому ми спостерігаємо влучення снаряду в ціль.
Перевірка влучили ми чи ні - це блок в якому функція первіряє влучили ми в ціль чи ні, якщо ми влучили то картинка змінюється, а якщо ні то ми повертаємось на початок.
Руйнування стіни — це блок в якому ми бачимо зміну картинки при влученні снаряду.
Завершення — остаточне завершення руйнування стіни.
Схема моделювання імітації знищення балісти
Влучення — це блок в якому ми спостерігаємо влучення снаряду в ціль.
Перевірка влучили ми чи ні - це блок в якому функція первіряє влучили ми в ціль чи ні, якщо ми влучили то картинка змінюється, а якщо ні то ми повертаємось на початок.
Руйнування стіни — це блок в якому ми бачимо зміну картинки при влученні снаряду.
Завершення — остаточне завершення знищення балісти.
Опис розробленої програми Програма складається з головної форми Form1. cs, на котрій розташовані повзунки для можливості завдання параметрів моделі, розташовані кнопки для запуску та припинення моделювання, а також для початку нової гри. Також на головній формі відбувається графічне відображення існуючих знищення баліст та стіни.
Так клас «Баліста» був мною розроблений таким чином:
public double x;
public double y;
public Image p;
public Image p1;
public double a = 45;
public double f = 10;
public Catapulta (int x, int y)
{
this.x = x;
this.y = y;
p = Image. FromFile («kkk1.gif»);
p1 = Image. FromFile («kkk2.gif»);
}
Public int x, y-координати по х, у;
Public image p, p1-картинки які використовуються для зображення баліст;
Public double a-кут нахилу в радіанах;
Public double f-сила;
Клас «Камінь»
Конструктор класу «Камінь»
public Ball01() // Конструктор по умолчанию
{
x = 0; y = 0; r = 0.3;
vx = 0; vy = 0;
}
public Ball01(// Конструктор для тела с массой m1,
// радиусом r1, начальным положением x1, y1,
// скоростью vx1, vy1
double m1, double r1, double x1, double y1,
double vx1, double vy1)
)
{
x = x1; y = y1; r = r1;
vx = vx1; vy = vy1;
m = m1;
}
Фізичні закони за якими рухається камінь
public void Move (double dt, double fx, double fy)
{
double f = Math. Sqrt (fx * fx + fy * fy);
// Скорость движения:
double v = Math. Sqrt (vx * vx + vy * vy);
if (v < 0.0001) //Полагаем, что тело покоится
{
{
// Рассчитываем приращение скорости
double dvx = fx / m * dt;
double dvy = fy / m * dt;
// Изменение положения за время dt:
// Формула равноускоренного прямолинейного движения.
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
// Изменение скорости за время dt:
vx += dvx;
vy += dvy;
}
}
else // тело двигалось
{
if (f > 0.0001) // Есть сила тяги
{
// Рассчитываем приращение скорости
double dvx = fx / m * dt;
double dvy = fy / m * dt;
// Изменение положения за время dt:
// Формула равнозамедленного прямолинейного движения.
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
// Изменение скорости за время dt:
vx += dvx;
vy += dvy;
}
else // Тело движется по инерции
{
// Рассчитываем приращение скорости
double dvx = fx / m * dt;
double dvy = fy / m * dt;
// «Обратная скорость» от трения
double dv = Math. Sqrt (dvx * dvx + dvy * dvy);
if (dv >= v) // Остановка неминуема, так как
{ // шарик из-за трения обратно не покатится!
vx = 0.0; vy = 0.0; return;
}
// Изменение положения за время dt:
// Формула равнозамедленного прямолинейного движения.
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
// Изменение скорости за время dt:
vx += dvx;
vy += dvy;
}
}
}
void NewPoz (double dt, double fx, double fy,
bool traction_force)
{ // Вспомогательная процедура. Рассчитывает новое положение тела
// с учетом суммарной действующей силы и препятствий:
// Рассчитываем возможное приращение скорости
double dvx = fx / m * dt;
double dvy = fy / m * dt;
if (!traction_force) // Нет силы тяги,
{ // нужно проверить, не случится ли остановка
// из-за трения? Для этого вычисляем:
// Модуль скорости в начале интервала dt
double v = Math. Sqrt (vx * vx + vy * vy);
// Модуль приращения скорости к концу интервала dt
double dv = Math. Sqrt (dvx * dvx + dvy * dvy);
if (dv >= v) // Действует только сила трения,
{ // а расчетное приращение больше начальной скорости.
// В природе такое невозможно.
vx = 0.0; vy = 0.0; //Поэтому останавливаем шарик
return; // и дальше не вычисляем.
}
}
// Изменение положения за время dt:
// Формула равноускоренного прямолинейного движения.
double dx = (vx + dvx / 2) * dt;
double dy = (vy + dvy / 2) * dt;
// Возможное положение тела в конце интервала dt:
x += dx;
y += dy;
// Возможная скорость тела к концу интервала dt:
vx += dvx;
vy += dvy;
double px, py, b_wall;
public void Show (Graphics g1, Brush b1)
Form1.cs
Form1.cs винесено окремим пунктом тому що тут всі класи і інтерфейс зв’язані в одне ціле.
public Form1()
{
InitializeComponent ();
g1 = pictureBox1. CreateGraphics ();
p1 = new Pen (new SolidBrush (Color.Black));
p1.Width = 3;
b1 = new SolidBrush (Color.Black);
В цій частині коду описується говориться про те що ми створюємо новий об'єкт на поверхні форми чорною кистю товщиною 3.
timer1.Interval = (int)(dt * 400);
timer2.Interval = (int)(dt * 400);
Кожен новий камінь малюється з часовим інтервалом 4 рази в секунду.
C1 = new Catapulta (10, 35);
C2 = new Catapulta (110, 35);
Координати розміщення наших баліст .
pictureBox2.Image = C1. p;
pictureBox2.Top = (int)(C1.y * km); pictureBox2. Left = (int)(C1.x * km);
pictureBox3.Image = C2. p1;
pictureBox3.Top = (int)(C2.y * km); pictureBox3. Left = (int)(C2.x * km);
bal1= new Ball01(0.5, 0.2, C1. x, C1. y, 11.0, -10.0);
bal2= new Ball02(0.5, 0.2, C2. x, C2. y, 11.0, -10.0);
}
Переведення координат в кілометри та прив’язання стартових координат каменей до координат катапульт.
Таймер 1
rivate void timer1_Tick1(object sender, EventArgs e)
{
g1.Clear (Fon); //
bal1.Move (Form1.dt, 0, 9.8*bal1.M);
дія сили сила тяжіння на камінь.
if ((Math.Abs (bal1.x * km — pictureBox3. Left) < 20) && (Math.Abs (bal1.y * km — pictureBox3. Top) < 100))
{
Перевірка влучили ми в ціль чи ні.
timer1.Enabled = !timer1.Enabled;
pictureBox3.Visible = false;
pictureBox4.Visible = true;
зміна картинки якщо ми влучили.
}
Кнопка 1
private void button1_Click1(object sender, EventArgs e)
{// Запуск/остановка процесса моделирования
bal1.Show (g1, b1);
timer1.Enabled = !timer1.Enabled;
}
Запуск снаряду.
Кнопка 2
private void button2_Click1(object sender, EventArgs e)
{// Новый шар
double a= trackBar1. Value;
double f = 40;
повзунок 1
bal1 = new Ball01(3, 1, C1. x+3.5, C1. y+1, f*Math.Cos (a/57),-f*Math.Sin (a/57));
g1.Clear (Fon);
bal1.Show (g1, b1);
double b = trackBar2. Value;
double t = 40;
повзунок 2
bal2 = new Ball02(3, 1, C2. x + 3.5, C2. y + 1, -t*Math.Cos (b / 57), -t*Math.Sin (b / 57));
g1.Clear (Fon);
bal2.Show (g1, b1);
pictureBox2.Visible = true;
pictureBox7.Visible = false;
pictureBox3.Visible = true;
pictureBox4.Visible = false;
pictureBox6.Visible = true;
pictureBox8.Visible = false;
повернення початкових картинок.
Інструкція користувача Для того щоб почати гру натисніть кнопку «New Game»
комп’ютерна гра постріл моделювання Для запуску снаряду задайте кут нахилу балісти за допомогою повзунка та натисніть кнопку «Fire/stop fire»
При попаданні в «ворожу» балісту ми бачимо як вона знищується При влучанні каменю в стіну ми бачимо як вона розсипається Код програми
Catapulta.cs
using System;
using System.Collections.Generic;
using System. Linq;
using System. Text;
using System. Drawing;
namespace Курсач2
{
class Catapulta
{
public double x;
public double y;
public Image p;
public Image p1;
public double a = 45;
public double f = 10;
public Catapulta (int x, int y)
{
this.x = x;
this.y = y;
p = Image. FromFile («kkk1.gif»);
p1 = Image. FromFile («kkk2.gif»);
}
}
}
Ball01.cs
using System;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System.Windows.Forms;
namespace Курсач2
{
public class Ball01
{ public double x, y, r,
vx, vy,
m;
public Ball01()
{
x = 0; y = 0; r = 0.3;
vx = 0; vy = 0; }
public Ball01(
double m1, double r1, double x1, double y1,
double vx1, double vy1)
{
x = x1; y = y1; r = r1;
vx = vx1; vy = vy1;
m = m1; }
public double M { get { return m; } }
public Rectangle G {
get
{
return new Rectangle (
(int)((x — r) * Form1. km),
(int)((y — r) * Form1. km),
(int)((2 * r) * Form1. km),
(int)((2 * r) * Form1. km));
}
}
public void Move (double dt, double fx, double fy)
{
double f = Math. Sqrt (fx * fx + fy * fy);
double v = Math. Sqrt (vx * vx + vy * vy);
if (v < 0.0001) {
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
vx += dvx;
vy += dvy;
}
}
else {
if (f > 0.0001)
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
vx += dvx;
vy += dvy;
}
else
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
double dv = Math. Sqrt (dvx * dvx + dvy * dvy);
if (dv >= v)
{ vx = 0.0; vy = 0.0; return;
}
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
vx += dvx;
vy += dvy;
}
}
}
void NewPoz (double dt, double fx, double fy
bool traction_force)
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
if (!traction_force)
{
double v = Math. Sqrt (vx * vx + vy * vy);
double dv = Math. Sqrt (dvx * dvx + dvy * dvy);
if (dv >= v)
{
vx = 0.0; vy = 0.0;
return;
}
}
double dx = (vx + dvx / 2) * dt;
double dy = (vy + dvy / 2) * dt;
x += dx;
y += dy;
vx += dvx;
vy += dvy;
double px, py, b_wall;
public void Show (Graphics g1, Brush b1)
{
g1.FillEllipse (b1, G);
}
}
}
Ball02.cs
using System;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System.Windows.Forms;
namespace Курсач2
{
public class Ball02
{ public double x, y, r,
vx, vy,
m;
public Ball02()
{
x = 0; y = 0; r = 0.3;
vx = 0; vy = 0; }
public Ball02(
double m1, double r1, double x1, double y1,
double vx1, double vy1)
{
x = x1; y = y1; r = r1;
vx = vx1; vy = vy1;
m = m1; }
public double M { get { return m; } }
public Rectangle G {
get
{
return new Rectangle (
(int)((x — r) * Form1. km),
(int)((y — r) * Form1. km),
(int)((2 * r) * Form1. km),
(int)((2 * r) * Form1. km));
}
}
public void Move (double dt, double fx, double fy)
{
double f = Math. Sqrt (fx * fx + fy * fy);
double v = Math. Sqrt (vx * vx + vy * vy);
if (v < 0.0001) {
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
vx += dvx;
vy += dvy;
}
}
else {
if (f > 0.0001)
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
vx += dvx;
vy += dvy;
}
else
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
double dv = Math. Sqrt (dvx * dvx + dvy * dvy);
if (dv >= v)
{ vx = 0.0; vy = 0.0; return;
}
x += (vx + dvx / 2) * dt;
y += (vy + dvy / 2) * dt;
vx += dvx;
vy += dvy;
}
}
}
void NewPoz (double dt, double fx, double fy
bool traction_force)
{
double dvx = fx / m * dt;
double dvy = fy / m * dt;
if (!traction_force)
{
double v = Math. Sqrt (vx * vx + vy * vy);
double dv = Math. Sqrt (dvx * dvx + dvy * dvy);
if (dv >= v)
{
vx = 0.0; vy = 0.0;
return;
}
}
double dx = (vx + dvx / 2) * dt;
double dy = (vy + dvy / 2) * dt;
x += dx;
y += dy;
vx += dvx;
vy += dvy;
double px, py, b_wall;
public void Show (Graphics g1, Brush b1)
{
g1.FillEllipse (b1, G);
}
}
}
Forms1.cs
using System;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System.Windows.Forms;
namespace Курсач2
{
public partial class Form1: Form
{
public static double km = 10;
public static double dt = 0.1;
Graphics g1;
Pen p1;
Brush b1;
Brush b2;
Ball01 bal0 = new Ball01();
Ball01 bal1;
Ball02 bal01 = new Ball02();
Ball02 bal2;
Color Fon = Color. White;
Point pms0, pms1;
Catapulta C1, C2;
public Form1()
{
InitializeComponent ();
g1 = pictureBox1. CreateGraphics ();
p1 = new Pen (new SolidBrush (Color.Black));
p1.Width = 3;
b1 = new SolidBrush (Color.Black);
b2 = new SolidBrush (Color.Red);
timer1.Interval = (int)(dt * 400);
timer2.Interval = (int)(dt * 400);
C1 = new Catapulta (10, 35);
C2 = new Catapulta (110, 35);
pictureBox2.Image = C1. p;
pictureBox2.Top = (int)(C1.y * km); pictureBox2. Left = (int)(C1.x * km);
pictureBox3.Image = C2. p1;
pictureBox3.Top = (int)(C2.y * km); pictureBox3. Left = (int)(C2.x * km);
bal1= new Ball01(0.5, 0.2, C1. x, C1. y, 11.0, -10.0);
}
private void timer1_Tick1(object sender, EventArgs e)
{
g1.Clear (Fon); //
bal1.Move (Form1.dt, 0, 9.8*bal1.M);
if ((Math.Abs (bal1.x * km — pictureBox3. Left) < 20) && (Math.Abs (bal1.y * km — pictureBox3. Top) < 100))
{
timer1.Enabled = !timer1.Enabled;
pictureBox3.Visible = false;
pictureBox4.Visible = true;
}
else if ((Math.Abs (bal1.x * km — pictureBox6. Left) < 30) && (Math.Abs (bal1.y * km — pictureBox6. Top-90) < 90))
{ timer1. Enabled = !timer1.Enabled;
pictureBox6.Visible = false;
pictureBox8.Visible = true;
}
else bal1. Show (g1, b1);
}
private void button1_Click1(object sender, EventArgs e)
{ bal1. Show (g1, b1);
timer1.Enabled = !timer1.Enabled;
}
private void button2_Click1(object sender, EventArgs e)
{
double a= trackBar1. Value;
double f = 40;
bal1 = new Ball01(3, 1, C1. x+3.5, C1. y+1, f*Math.Cos (a/57),-f*Math.Sin (a/57));
g1.Clear (Fon);
bal1.Show (g1, b1);
double b = trackBar2. Value;
double t = 40;
bal2 = new Ball02(3, 1, C2. x + 3.5, C2. y + 1, -t*Math.Cos (b / 57), -t*Math.Sin (b / 57));
g1.Clear (Fon);
bal2.Show (g1, b1);
pictureBox2.Visible = true;
pictureBox7.Visible = false;
pictureBox3.Visible = true;
pictureBox4.Visible = false;
pictureBox6.Visible = true;
pictureBox8.Visible = false;
}
private void button3_Click (object sender, EventArgs e)
{
bal2.Show (g1, b1);
timer2.Enabled = !timer2.Enabled;
}
private void timer2_Tick (object sender, EventArgs e)
{
g1.Clear (Fon);
bal2.Move (Form1.dt, 0, 9.8 * bal2. M);
if ((Math.Abs (bal2.x * km — pictureBox2. Left) < 20)&&(Math.Abs (bal2.y * km — pictureBox2. Top) < 100))
{
timer2.Enabled = !timer2.Enabled;
pictureBox2.Visible = false;
pictureBox7.Visible = true;
}
else if ((Math.Abs (bal2.x * km — pictureBox6. Left) < 30) && (Math.Abs (bal2.y * km — pictureBox6. Top-90) < 90))
{
timer2.Enabled = !timer2.Enabled;
pictureBox6.Visible = false;
pictureBox8.Visible = true;
}
else bal2. Show (g1, b1);
}
private void pictureBox1_Click (object sender, EventArgs e)
{
}
private void Form1_Load (object sender, EventArgs e)
{
}
}
Список використаної літератури Советов Б. Я., Яковлев С. А. Моделирование систем, курсовое проектирование, учебное пособие для вузов. — М.: Высшая школа, 1988.-136 с Справочник логиста — 2008. — К.: ООО «СЭЭМ», 2008. — 144 с.
Фаулер М., Скотт К. UML. Основы. Краткое руководство по унифицированному языку моделирования / Мартин Фаулер и Кендалл Скотт — СПб.: Символ-Плюс, 2002. — 192 с.
) Шилдт, Г. C# 3.0: руководство для начинающих: учебное пособие / Ш. Герберт. — 2-е изд. — М.: ООО «И.Д. Вильямс», 2009. — 688 с.
Microsoft Developer Network
http://msdn.microsoft.com/library/ms123401