Розробка комп’ютерної гри 'Баліста'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    694,78 Кб
  • Опубликовано:
    2014-06-28
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка комп’ютерної гри 'Баліста'

УНІВЕРСИТЕТ «КРОК»

Коледж економіки, права та інформаційних технологій

Циклова комісія з комп’ютерних наук







КУРСОВА РОБОТА

з дисципліни „Об’єктно-орієнтоване програмування”

на тему:

“Розробка комп’ютерної гри баліста”












Київ-2013

Вступ

Метою курсової роботи є моделювання пострілу балісти через стіну по мішені. В даному випадку мішенню є інша баліста. Снаряд має летіти по балістичній траєкторії з урахуванням сили тяжіння і можливості стикання зі стіною.

У ході робіт з моделювання стрільби балісти проводиться:

Аналіз балістичної траєкторії з урахуванням ваги снаряду , фізичних сил які діють на снаряд , таких як сила тяжіння , сила поштовху;

Завдання кута нахилу балісти;

Аналіз предметної галузі задачі моделювання пострілу балісти

Баліста була винайдена в 399 до н. е. в місті Сіракузи Архімедом

Баліста (лат. Balistarum від грец. βαλλιστης - «кидати») - антична зброя для метання сферичних кам'яних снарядів. Головний діючий механізм - два важелі з торсіонними пружинами як штовхач, пружини складались з кількох петель скручених канатів.

Стародавні греки називали такі метальні машини палінтонами , тобто той що кидає навісом або «катапелта петроболос» (буквально - камінь проти щита). Найпоширеніша римська назва для такої зброї - баліста.

Стрільба з балісти це складний процес який залежить від багатьох факторів таких як:

Кут нахилу балісти;

Сила тяжіння яка діє на камінь;

Сила поштовху каменя;

Урахування балістичної траєкторії;

Відстань до цілі;

Для розрахунків успішної роботи багатьох машин , механізмів , приладів використовують комп’ютерне моделювання як наприклад в даній курсовій роботі. В ході виконання роботи ми можемо спостерігати що відбувається з снарядом при взаємодії з різними об’єктами.

В даній роботі використане Імітаційне моделювання.

Воно дозволяє:

Перевірити ефективність використання різних варіантів компонувальних рішень для попадання по цілі;

Визначити або уточнити технічні характеристики балісти ;

Визначити найбільш ефективні алгоритми попадання по цілі ;

Визначення необхідних зон попадання снаряду ;

Визначення умови знищення балісти , стіни ;

Визначення умови перемоги гравця ;

Виходячи з принципів побудови візуально об’єктних систем , необхідно провести статичну декомпозицію об’єктів для моделі катапульти.

Основним компонентом візуального розміщення імітаційної моделі є місце (простір) де відбувається гра. Це місце включає в себе динамічні об’єкти такі , як катапульта , снаряд , стіна. Об’єкт катапульта використовується для моделювання механізму який запускає снаряд і водночас виступає мішенню. Об’єкт стіна використовується для моделювання захисного об’єкту для балісти. Об’єкт снаряд використовується для ураження мішені.

Подання динамічних об’єктів :

Обробка динамічних об’єктів імітаційної моделі балісти складається з циклу звернення до набору модулів у певний момент часу або при створенні деяких умов.

Моделювання починається за визначеним сценарієм з використанням заданих користувачем параметрів моделювання.

Моделювання включає в себе:

Імітація завдання кута нахилу балісти ;

Імітація польоту снаряду ;

Імітація знищення балісти при влучанні в неї снаряду ;

Імітація руйнування стіни при влучанні в неї ;

Загалом імітатор використовує підхід моделювання з часовим поділом для обробки всіх процесів. Використовуючи задані параметри моделі у деякі інтервали часу із заданих діапазонів відбувається зміна картинки при попаданні в балісту чи стіну завдяки чому ми можемо впевнитись в тому що ми влучили .

Постановка задачі

Моя мета - розробка програми моделювання стрільби з балісти. Також я маю всі умови і описання ситуацій , які я повинен змоделювати. Так , в своєму проекті я розробив наступні класи:

Клас «Камінь» , в цьому класі описані всі фізичні закони які потрібні для того щоб снаряд летів по балістичній траєкторії, вказується кисть якою малюється наш снаряд , колір ,всі статичні данні такі як маса та діаметр снаряду ,початкові координати.

Клас «Баліста» , в цьому класі описуються такі данні наприклад як те що наші координати використовуються в метрах а не в пікселях.

Основу побудови та дослідження моделей системи створює обєктно - орієнтований підхід. Суть цього підходу заключається в розгляді тяжкої системи як сукупності обєктів , що взаємодіють між собою , на відміну від структурного підходу , що пропонує розглядання окремих дій , що робиться дослідницькою системою. Важливою перевагою обєктно-орієнтованого підходу є можливість зрозумілого і простого представлення обєктів реального світу. Тому потрібно відмітити , що краще в нашому випадку використовувати обєктно-орієнтований підхід.

А тепер ми розглянемо конкретні ситуації , та побачимо як наша модель буде обробляти створені ситуації.

Ми стріляємо з баліти бажаючи щоб снаряд перелтів через стіну, але через неправельні розрахунки при заданні кута ми влучаеємо в стіну . В такому випадку наша программа перевіряє чи влучили ми в стіну за допомогою даної функції: Math.Abs(bal1.x * km - pictureBox3.Left) < 20) && (Math.Abs(bal1.y * km - pictureBox3.Top) < 100 , вона переріряє чи зайшов снаряд в координати стіни і якщо це відбулося стіна руйнується , а якщо ж снаряд не влучає в стіну то він просто летить далі.

Ми стріляємо з баліти і влучаємо в іншу « ворожу » балісту тоді наша програма знову ж використовує таку ж функцію тільки з іншими заданими перевірочними координатами і якщо снаряд влучає в ціль то вона руйнується а якщо ж снаряд не влучає в ціль то він просто летить далі.

Схема поведінки об’єктів класу «Камінь» :

Снаряд летить по балістичній траєкторії та при зіткненні з стіною або ворожою балістою за допомогою функції перевіряє чи влучив він в потрібне місце.

Схема поведінки об’єктів класу «Баліста»:

Катапульта весь час стоїть нерухомо та при влучанні в неї снаряду вона зміною свою картинку.

Структури даних та діаграми класів для розв'язання задачі

З вище сказаного будуємо діаграму класів


Клас «Catapulta»:

Поля :, y-координати по осям х , у ;, p1 -картинки які використовуються для зображення баліст ;- кут нахилу в радіанах ;

f - сила ;

Класи «Ball01 / Ball02»:

Поля :- маса каменя ; r - радіус каменя ; vx , vy - вектор швидкості по осям x , y ; x , y - координати по осям x , y ;

Методи :- функція яка рухає камінь ;- функція яка запам’ятовує вону позицію каменю відносно осей x , y - функція яка відповідає за зображення каменю на формі ;

Схеми взаємодії об’єктів та алгоритми виконання їх методів

Діаграма прецедентів :


Схеми взаємодії об’єктів та алгоритми виконання їх методів

Макроалгоритм





















В даній блок схемі коротко описано роботу всієї програми. Кожен блок містить групу команд які описано у основному коді програми.

Запуск снаряду - це блок в якому ми запускаємо снаряд за допомогою кнопки розташованій на формі.

Політ снаряду - це блок в якому здійснюється політ снаряду з початкових з координат до цілі.

Влучення -це блок в якому перевіряється чи влучили ми в ціль , якщо так то ціль руйнується , а якщо ні то ми повертаємось на початок.

Руйнування - це блок в якому ми бачимо зміну картинки при влучанні в ціль.

Схема моделювання імітації польоту снаряду :


Запуск снаряду - це блок в якому ми запускаємо снаряд за допомогою кнопки розташованій на формі.

х++ ; у++ - це блок в якому змінюються координати снаряду.

Влучення -це блок в якому перевіряється чи влучили ми в ціль , якщо так то ціль руйнується , а якщо ні то ми повертаємось на початок.

Зупинка снаряду - це блок в якому ми бачимо як снаряд зникає при влученні в ціль

Схема моделювання імітації руйнування стіни


Влучення -це блок в якому ми спостерігаємо влучення снаряду в ціль.

Перевірка влучили ми чи ні - це блок в якому функція первіряє влучили ми в ціль чи ні , якщо ми влучили то картинка змінюється , а якщо ні то ми повертаємось на початок.

Руйнування стіни - це блок в якому ми бачимо зміну картинки при влученні снаряду.

Завершення - остаточне завершення руйнування стіни.

Схема моделювання імітації знищення балісти


Влучення - це блок в якому ми спостерігаємо влучення снаряду в ціль.

Перевірка влучили ми чи ні - це блок в якому функція первіряє влучили ми в ціль чи ні , якщо ми влучили то картинка змінюється , а якщо ні то ми повертаємось на початок.

Руйнування стіни - це блок в якому ми бачимо зміну картинки при влученні снаряду.

Завершення - остаточне завершення знищення балісти.

Опис розробленої програми

Програма складається з головної форми Form1.cs , на котрій розташовані повзунки для можливості завдання параметрів моделі, розташовані кнопки для запуску та припинення моделювання, а також для початку нової гри. Також на головній формі відбувається графічне відображення існуючих знищення баліст та стіни.

Так клас «Баліста» був мною розроблений таким чином:

public double x; double y;Image p;Image p1;double a = 45;double f = 10;Catapulta(int x, int y)

{.x = x;.y = y;= Image.FromFile("kkk1.gif");= Image.FromFile("kkk2.gif");

}int x,y-координати по х,у;image p,p1-картинки які використовуються для зображення баліст;

Public double a-кут нахилу в радіанах;double f-сила;

Клас «Камінь»

Конструктор класу «Камінь»Ball01() // Конструктор по умолчанию

{= 0; y = 0; r = 0.3;= 0; vy = 0;

}Ball01( // Конструктор для тела с массой m1,

// радиусом r1, начальным положением x1,y1,

// скоростью vx1, vy1 m1, double r1, double x1, double y1,vx1, double vy1)

)

{= x1; y = y1; r = r1;= vx1; vy = vy1;= m1;

}

Фізичні закони за якими рухається камінь

public void Move(double dt, double fx, double fy)

{ f = Math.Sqrt(fx * fx + fy * fy);

// Скорость движения:v = Math.Sqrt(vx * vx + vy * vy);

if (v < 0.0001) //Полагаем, что тело покоится

{

{

// Рассчитываем приращение скоростиdvx = fx / m * dt;

double dvy = fy / m * dt;

// Изменение положения за время dt:

// Формула равноускоренного прямолинейного движения.+= (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;

// Изменение скорости за время dt: += dvx;+= dvy;

}

}// тело двигалось

{

if (f > 0.0001) // Есть сила тяги

{

// Рассчитываем приращение скоростиdvx = fx / m * dt;

double dvy = fy / m * dt;

// Изменение положения за время dt:

// Формула равнозамедленного прямолинейного движения.+= (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;

// Изменение скорости за время dt: += dvx;+= dvy;

}// Тело движется по инерции

{

// Рассчитываем приращение скоростиdvx = fx / m * dt;

double dvy = fy / m * dt;

// "Обратная скорость" от тренияdv = Math.Sqrt(dvx * dvx + dvy * dvy);(dv >= v) // Остановка неминуема, так как

{ // шарик из за трения обратно не покатится! = 0.0; vy = 0.0; return;

}

// Изменение положения за время dt:

// Формула равнозамедленного прямолинейного движения.+= (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;

// Изменение скорости за время dt:

}

}

}NewPoz(double dt, double fx, double fy,

bool traction_force)

{ // Вспомогательная процедура. Рассчитывает новое положение тела

// с учетом суммарной действующей силы и препятствий:

// Рассчитываем возможное приращение скоростиdvx = fx / m * dt;

double dvy = fy / m * dt;(!traction_force) // Нет силы тяги,

{ // нужно проверить, не случится ли остановка

// из за трения? Для этого вычисляем:

// Модуль скорости в начале интервала dt

double v = Math.Sqrt(vx * vx + vy * vy);

// Модуль приращения скорости к концу интервала dt

double dv = Math.Sqrt(dvx * dvx + dvy * dvy);

if (dv >= v) // Действует только сила трения,

{ // а расчетное приращение больше начальной скорости.

// В природе такое невозможно. = 0.0; vy = 0.0; //Поэтому останавливаем шарик; // и дальше не вычисляем.

}

}

// Изменение положения за время dt:

// Формула равноускоренного прямолинейного движения.dx = (vx + dvx / 2) * dt;

double dy = (vy + dvy / 2) * dt;

// Возможное положение тела в конце интервала dt:+= dx;+= dy;

// Возможная скорость тела к концу интервала dt:

vx += dvx;+= dvy;px, py, b_wall;void Show(Graphics g1, Brush b1).cs.cs винесено окремим пунктом тому що тут всі класи і інтерфейс зв’язані в одне ціле.Form1()

{();= pictureBox1.CreateGraphics(); = new Pen(new SolidBrush(Color.Black));.Width = 3; = new SolidBrush(Color.Black);

В цій частині коду описується говориться про те що ми створюємо новий об’єкт на поверхні форми чорною кистю товщиною 3..Interval = (int)(dt * 400);.Interval = (int)(dt * 400);

Кожен новий камінь малюється з часовим інтервалом 4 рази в секунду.

C1 = new Catapulta(10, 35); = new Catapulta(110, 35);

Координати розміщення наших баліст ..Image = C1.p;.Top = (int)(C1.y * km); pictureBox2.Left = (int)(C1.x * km);.Image = C2.p1;.Top = (int)(C2.y * km); pictureBox3.Left = (int)(C2.x * km);= new Ball01(0.5, 0.2, C1.x, C1.y, 11.0, -10.0);= new Ball02(0.5, 0.2, C2.x, C2.y, 11.0, -10.0);

}

Переведення координат в кілометри та прив’язання стартових координат каменей до координат катапульт.

Таймер 1void timer1_Tick_1(object sender, EventArgs e)

{.Clear(Fon); // .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;.Visible = false;.Visible = true;

зміна картинки якщо ми влучили.

}

Кнопка 1void button1_Click_1(object sender, EventArgs e)

{// Запуск/остановка процесса моделирования.Show(g1, b1);

timer1.Enabled = !timer1.Enabled;

}

Запуск снаряду.

Кнопка 2void button2_Click_1(object sender, EventArgs e)

{// Новый шар

double a= trackBar1.Value;f = 40;

повзунок 1= new Ball01(3, 1, C1.x+3.5, C1.y+1, f*Math.Cos(a/57),-f*Math.Sin(a/57));.Clear(Fon);.Show(g1, b1);b = trackBar2.Value;t = 40;

повзунок 2= new Ball02(3, 1, C2.x + 3.5, C2.y + 1, -t*Math.Cos(b / 57), -t*Math.Sin(b / 57));.Clear(Fon);.Show(g1, b1);.Visible = true;.Visible = false;.Visible = true;.Visible = false;.Visible = true;.Visible = false;

повернення початкових картинок.

Інструкція користувача

Для того щоб почати гру натисніть кнопку «New Game»

комп’ютерна гра постріл моделювання


Для запуску снаряду задайте кут нахилу балісти за допомогою повзунка та натисніть кнопку «Fire/stop fire»


При попаданні в «ворожу» балісту ми бачимо як вона знищується


При влучанні каменю в стіну ми бачимо як вона розсипається


Код програми.csSystem;System.Collections.Generic;System.Linq;System.Text;System.Drawing;Курсач_2

{Catapulta

{double x; double y;Image p;Image p1;double a = 45;double f = 10;Catapulta(int x, int y)

{.x = x;.y = y;= Image.FromFile("kkk1.gif");= Image.FromFile("kkk2.gif");

}

}

}.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Курсач_2

{class Ball01

{= 0; y = 0; r = 0.3;= 0; vy = 0; }Ball01(

double m1, double r1, double x1, double y1,vx1, double vy1)

{= x1; y = y1; r = r1;= vx1; vy = vy1;= m1; }double M { get { return m; } }Rectangle G {

{new Rectangle(

(int)((x - r) * Form1.km),

(int)((y - r) * Form1.km),

(int)((2 * r) * Form1.km),

(int)((2 * r) * Form1.km));

}

}void Move(double dt, double fx, double fy)

{ f = Math.Sqrt(fx * fx + fy * fy);

double v = Math.Sqrt(vx * vx + vy * vy);(v < 0.0001) {

{ dvx = fx / m * dt;dvy = fy / m * dt;

x += (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;+= dvx;+= dvy;

}

}{(f > 0.0001)

{ dvx = fx / m * dt;dvy = fy / m * dt;+= (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;

vx += dvx;+= dvy;

}

{

double dvx = fx / m * dt;dvy = fy / m * dt;

double dv = Math.Sqrt(dvx * dvx + dvy * dvy);

(dv >= v)

{ vx = 0.0; vy = 0.0; return;

}+= (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;

vx += dvx;+= dvy;

}

}

}NewPoz(double dt, double fx, double fytraction_force)

{ dvx = fx / m * dt;dvy = fy / m * dt;(!traction_force)

{ v = Math.Sqrt(vx * vx + vy * vy);

// dv = Math.Sqrt(dvx * dvx + dvy * dvy);

(dv >= v)

{ = 0.0; vy = 0.0; ;

}

}

double dx = (vx + dvx / 2) * dt;dy = (vy + dvy / 2) * dt;

x += dx;+= dy;

+= dvx;+= dvy;px, py, b_wall;void Show(Graphics g1, Brush b1)

{ .FillEllipse(b1, G);

}

}

}.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Курсач_2

{class Ball02

{ public double x, y, r, , vy,;

public Ball02()

{= 0; y = 0; r = 0.3;= 0; vy = 0; }Ball02(

double m1, double r1, double x1, double y1,vx1, double vy1)

{= x1; y = y1; r = r1;= vx1; vy = vy1;= m1; }double M { get { return m; } }Rectangle G {

{new Rectangle(

(int)((x - r) * Form1.km),

(int)((y - r) * Form1.km),

(int)((2 * r) * Form1.km),

(int)((2 * r) * Form1.km));

}

}void Move(double dt, double fx, double fy)

{ f = Math.Sqrt(fx * fx + fy * fy);

double v = Math.Sqrt(vx * vx + vy * vy);(v < 0.0001) {

{ dvx = fx / m * dt;dvy = fy / m * dt;

x += (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;+= dvx;+= dvy;

}

}{(f > 0.0001)

{ dvx = fx / m * dt;dvy = fy / m * dt;+= (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;

vx += dvx;+= dvy;

}

{

double dvx = fx / m * dt;dvy = fy / m * dt;

double dv = Math.Sqrt(dvx * dvx + dvy * dvy);(dv >= v)

{ vx = 0.0; vy = 0.0; return;

}+= (vx + dvx / 2) * dt;+= (vy + dvy / 2) * dt;

}

}

}NewPoz(double dt, double fx, double fytraction_force)

{ dvx = fx / m * dt;dvy = fy / m * dt;

(!traction_force)

{ v = Math.Sqrt(vx * vx + vy * vy);

// dv = Math.Sqrt(dvx * dvx + dvy * dvy);(dv >= v)

{ = 0.0; vy = 0.0; ;

}

}

double dx = (vx + dvx / 2) * dt;dy = (vy + dvy / 2) * dt;

x += dx;+= dy;

vx += dvx;+= dvy;px, py, b_wall;void Show(Graphics g1, Brush b1)

{ .FillEllipse(b1, G);

}

}

}.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Курсач_2

{partial class Form1 : Form

{ static double km = 10;static double dt = 0.1;g1; p1;b1;b2;bal0 = new Ball01(); bal1;         bal01 = new Ball02();bal2;Fon = Color.White; pms0, pms1; C1,C2;Form1()

{();= pictureBox1.CreateGraphics(); = new Pen(new SolidBrush(Color.Black));.Width = 3; = new SolidBrush(Color.Black); = new SolidBrush(Color.Red);.Interval = (int)(dt * 400);.Interval = (int)(dt * 400);

C1 = new Catapulta(10, 35); = new Catapulta(110, 35); .Image = C1.p;.Top = (int)(C1.y * km); pictureBox2.Left = (int)(C1.x * km);.Image = C2.p1;.Top = (int)(C2.y * km); pictureBox3.Left = (int)(C2.x * km);= new Ball01(0.5, 0.2, C1.x, C1.y, 11.0, -10.0);

}void timer1_Tick_1(object sender, EventArgs e)

{.Clear(Fon); // .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))

{.Enabled = !timer1.Enabled;.Visible = false;.Visible = true;

} if((Math.Abs(bal1.x * km - pictureBox6.Left) < 30) && (Math.Abs(bal1.y * km - pictureBox6.Top-90) < 90))

{ timer1.Enabled = !timer1.Enabled;.Visible = false;.Visible = true;

}bal1.Show(g1, b1);

}void button1_Click_1(object sender, EventArgs e)

{ bal1.Show(g1, b1);

timer1.Enabled = !timer1.Enabled;

}void button2_Click_1(object sender, EventArgs e)

{

double a= trackBar1.Value;f = 40;= new Ball01(3, 1, C1.x+3.5, C1.y+1, f*Math.Cos(a/57),-f*Math.Sin(a/57));.Clear(Fon);.Show(g1, b1);b = trackBar2.Value;t = 40;= new Ball02(3, 1, C2.x + 3.5, C2.y + 1, -t*Math.Cos(b / 57), -t*Math.Sin(b / 57));.Clear(Fon);.Show(g1, b1);.Visible = true;.Visible = false;.Visible = true;.Visible = false;.Visible = true;.Visible = false;

}void button3_Click(object sender, EventArgs e)

{.Show(g1, b1);

timer2.Enabled = !timer2.Enabled;

}void timer2_Tick(object sender, EventArgs e)

{

g1.Clear(Fon);.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))

{.Enabled = !timer2.Enabled;.Visible = false;.Visible = true;

}if ((Math.Abs(bal2.x * km - pictureBox6.Left) < 30) && (Math.Abs(bal2.y * km - pictureBox6.Top-90) < 90))

{.Enabled = !timer2.Enabled;.Visible = false;.Visible = true;

}bal2.Show(g1, b1);

}void pictureBox1_Click(object sender, EventArgs e)

{

}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>

Похожие работы на - Розробка комп’ютерної гри 'Баліста'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!