Проект гри "Тетрис"
Розробка програми "Тетрис", яка виконує створення та переміщення фігур, видалення повних рядів та нарахування балів. Вимоги до умов експлуатації ігрової програми, вхідні та вихідні дані. Проектування діаграми класів та діаграми станів ігрового додатку.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 27.05.2019 |
Размер файла | 515,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru//
Размещено на http://www.allbest.ru//
АНОТАЦІЯ
У даній курсовій роботі розглядається проект гри “Тетрис”.
Робота виконана на26 сторінках, містить 3 рисунка. Робота має 1 програму, з текстом програми та результатами.
Робота виконана українською мовою.
ABSTRACT
In this term paper, the project of the game "Tetris" is considered.
The work is executed on 26 pages, contains 3 pictures. The work has 1 program, with the text of the program and the results.
Work is executed in the Ukrainian language.
ВСТУП
Інтерес до фігур доміно, триміно, тетраміно і пентаміно в СРСР виник завдяки книзі С. В. Голомба «Поліміно» (видавництво «Мир», 1975). Зокрема, пентаміно було настільки популярне, що в «Науці і житті» починаючи з 1960-х років був постійний розділ, присвячений складанню фігурок з набору пентаміно, а пластмасові набори пентаміно іноді продавалися в магазинах.
«Тетріс» був вперше написаний співробітником Обчислювального центру Академії наук СРСР Олексієм Пажитновим у червні 1984 року. На той час Пажитнов займався проблемами штучного інтелекту і розпізнавання мови. Перша версія гри з'явилася для комп'ютера Електроніка-60; передбачалося, вона стане вдосконаленою варіацією його улюбленої класичної гри Pentomino Puzzle.
У першому варіанті гри, написаної Пажитновим, можна змінювати положення фігур шляхом повороту їх на 90 градусів щодо їх геометричного центру. Однак на той час потужність комп'ютерів не дозволяла запустити таку програму. Тоді розробник вирішив спростити завдання, забравши у кожної з фігур пентаміно по одному квадратику, зменшивши їх кількість до чотирьох -- тетраміно. Так з'явилася перша версія тетрісу для мікрокомп'ютера Електроніка-60.
Пізніше Вадим Герасимов переписав цю гру для IBM PC. Після чого ця гра набула великої популярності.
Після появи тетрісу кілька найбільших на той час компаній з розробки системного забезпечення, комп'ютерних та ігрових застосунків -- Spectrum Holobyte і Mirrorsoft, Bullet-Proof Software і Atari Games, Famicom і його американський аналог Nintendo Entertainment System -- почали тривалу боротьбу за придбання прав на випуск всіх варіацій і консольних версій тетрісу.
У 1988 році за підтримки Генка Роджерса Пажитнов організував компанію з розробки ігрового програмного забезпечення AnimaTek, а 1991 року було створено компанію Tetris.
АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ
Метою даної курсової роботи є розробка гри „Тетрис”. Вона відноситься до аркадних ігор, яка не потребує багато часу, але з інтенсивним та вдумливим ігровим процесом.Для цієї мети не підходять ігри типу стратегій, бо для них потрібно багато часу, а для 5-10 хвилинного відпочинку цілком підійде саме «Тетрис».У стандартній поставці операційних систем даної гри немає, тому виникла необхідність у її створенні.
До ігор такого типу пред`являються такі вимоги: використання простих засобів управління; зручний графічний інтерфейс; поступове ускладнення гри при неправильних рішеннях. Під час виконання програма повинна виконуватися коректно і не приводити до збоїв.
Аналіз продуктів
Blockout- тривимірний варіант гри Тетріс, створений в 1989 році компанією California Dreams, її програмістами Олександром Усташевскім (Aleksander Ustaszewski) і Мирославом Заблоцьким (Mirosіaw Zabіocki).
Quadrapassel- Це класичний Тетріс в стакан 14х20. Складність гри (швидкість падіння фігур) зростає поступово з кількістю прибраних ліній.
ПОСТАНОВКА ЗАДАЧІ
Розробити програму “Тетрис”, яка виконує створення та переміщення фігур, видалення повних рядів та нарахування балів. Зміст гри полягає у збиранні повних рядів фігур. При збиранні повного ряда він видаляеться, а гравцю нараховуються бали. Закінчення гри - повне заповнення хоча б одного стовпця ігрового поля.Програма починається з зображення пустого ігрового поля та падіння першої фігури. Напрямком фігури та її оріентацією можна керувати за допомогою клавіш-стрілок.
ДІАГРАМА КЛАСІВ
Tetris -головний об'єкт.
Controller - об'єкт котрий відповідає за керування грою з клавіатури.
Form - об'єкт що відповідає за створення фігур.
ДІАГРАМА СТАНІВ
ЗАСОБИ РОЗРОБКИ
1) Мова програмування Java-- об'єктно-орієнтована мова програмування, випущена 1995 року компанією «Sun Microsystems» як основний компонент платформи Java.Мова значно запозичила синтаксис із C і C++. Зокрема, взято за основу об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких конфліктних ситуацій, що могли виникнути через помилки програміста та полегшено сам процес розробки об'єктно-орієнтованих програм. Ряд дій, які в С/C++ повинні здійснювати програмісти, доручено віртуальній машині.
2) Cередовище розробки IntelliJIDEA - є інтегрованим середовищем розробки Java (IDE) для розробки комп'ютерного програмного забезпечення. Вона розробляється JetBrains (раніше відомим як IntelliJ), і єяк Apache 2 Ліцензійного Community Edition, і в власноїкомерційної версії. Обидва можна використовувати для комерційного розвитку.
3) JavaFX -- платформа та набір інструментів для створення насичених інтернет-застосунків (англ. Rich Internet Applications, RIA) з можливістю підвантаження медіа та змісту. Вперше продемонстровано Sun Microsystems на Міжнародній конференції Java-розробників JavaOne у травні 2007. JavaFX включає в себе набір утиліт, за допомогою яких веб-розробники та дизайнери можуть швидко створювати та надавати розвинуті інтернет-застосунки для десктопів, мобільних пристроїв, телебачення та інших платформ.
JavaFX складається з JavaFX Script і JavaFX Mobile. Починаючи з випуску JavaFX 2.0 забезпечено можливість створення JavaFX-застосунків, написаних цілком мовою Java. Для розробки застосунків доступний багатий графічний і мультимедійний API, що спрощує створення візуальних програм.
гра програма тетрис
РЕЗУЛЬТАТ РОЗРОБКИ
ВИСНОВОК
В даній роботі був розроблений проект комп'ютерної гри “Тетрис”.
В результаті роботи була створена комп'ютерна гра “Тетрис”.У процесі роботи було розроблено 2 діаграми: діаграма класів та діаграма станів.
Код програми представлено у додатку А.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1) Методичні вказівки до виконання курсових робіт з дисципліни "Мова програмування Java" / Є. Ю. Беркунський. - Миколаїв : НУК, 2015. - 29 c.
2) Бібліотека JavaFX.
ДОДАТОК А
Tetris.java:
package sample;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Tetris extends Application {
public static final int MOVE = 25;
public static final int SIZE = 25;
public static int XMAX = SIZE * 12;
public static int YMAX = SIZE * 24;
public static int[][] MESH = new int[XMAX / SIZE][YMAX / SIZE];
private static Pane group = new Pane();
private static Form object;
private static Scene scene = new Scene(group, XMAX + 150, YMAX);
public static int score = 0;
private static int top = 0;
private static boolean game = true;
private static Form nextObject = Controller.makeRect();
private static int linesAmount = 0;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
for (int[] a : MESH) {
Arrays.fill(a, 0);
}
Line line = new Line(XMAX, 0, XMAX, YMAX);
Text scoretext = new Text("Score: ");
scoretext.setStyle("-fx-font: 20 arial;");
scoretext.setY(50);
scoretext.setX(XMAX + 5);
Text level = new Text("Lines: ");
level.setStyle("-fx-font: 20 arial;");
level.setY(100);
level.setX(XMAX + 5);
level.setFill(Color.BLACK);
group.getChildren().addAll(scoretext, line, level);
Form a = nextObject;
group.getChildren().addAll(a.a, a.b, a.c, a.d);
moveOnKeyPress(a);
object = a;
nextObject = Controller.makeRect();
stage.setScene(scene);
stage.setTitle("TETRIS");
stage.show();
Timer fall = new Timer();
TimerTask task = new TimerTask() {
public void run() {
Platform.runLater(() -> {
if (object.a.getY() == 0 || object.b.getY() == 0 || object.c.getY() == 0
|| object.d.getY() == 0)
top++;
else
top = 0;
if (top == 2) {
Text over = new Text("GAME OVER");
over.setFill(Color.RED);
over.setStyle("-fx-font: 70 arial;");
over.setY(250);
over.setX(10);
group.getChildren().add(over);
game = false;
}
if (top == 15) {
System.exit(0);
}
if (game) {
MoveDown(object);
scoretext.setText("Score: " + Integer.toString(score));
level.setText("Lines: " + Integer.toString(linesAmount));
}
});
}
};
fall.schedule(task, 0, 300);
}
private void moveOnKeyPress(Form form) {
scene.setOnKeyPressed(event -> {
switch (event.getCode()) {
case RIGHT:
Controller.MoveRight(form);
break;
case DOWN:
MoveDown(form);
score++;
break;
case LEFT:
Controller.MoveLeft(form);
break;
case UP:
Turn(form);
break;
}
});
}
private void Turn(Form form) {...}
private void RemoveRows(Pane pane) {
ArrayList<Node> rects = new ArrayList<>();
ArrayList<Integer> lines = new ArrayList<>();
ArrayList<Node> newrects = new ArrayList<>();
int full = 0;
for (int i = 0; i < MESH[0].length; i++) {
for (int[] aMESH : MESH) {
if (aMESH[i] == 1)
full++;
}
if (full == MESH.length)
lines.add(i + lines.size());
full = 0;
}
if (lines.size() > 0)
do {
for (Node node : pane.getChildren()) {
if (node instanceof Rectangle)
rects.add(node);
}
score += 50;
linesAmount++;
for (Node node : rects) {
Rectangle a = (Rectangle) node;
if (a.getY() == lines.get(0) * SIZE) {
MESH[(int) a.getX() / SIZE][(int) a.getY() / SIZE] = 0;
pane.getChildren().remove(node);
} else
newrects.add(node);
}
for (Node node : newrects) {
Rectangle a = (Rectangle) node;
if (a.getY() < lines.get(0) * SIZE) {
MESH[(int) a.getX() / SIZE][(int) a.getY() / SIZE] = 0;
a.setY(a.getY() + SIZE);
}
}
lines.remove(0);
rects.clear();
newrects.clear();
for (Node node : pane.getChildren()) {
if (node instanceof Rectangle)
rects.add(node);
}
for (Node node : rects) {
Rectangle a = (Rectangle) node;
try {
MESH[(int) a.getX() / SIZE][(int) a.getY() / SIZE] = 1;
} catch (ArrayIndexOutOfBoundsException ignored) {
}
}
rects.clear();
} while (lines.size() > 0);
}
private void MoveDown(Rectangle rect) {
if (rect.getY() + MOVE < YMAX)
rect.setY(rect.getY() + MOVE);
}
private void MoveRight(Rectangle rect) {
if (rect.getX() + MOVE <= XMAX - SIZE)
rect.setX(rect.getX() + MOVE);
}
private void MoveLeft(Rectangle rect) {
if (rect.getX() - MOVE >= 0)
rect.setX(rect.getX() - MOVE);
}
private void MoveUp(Rectangle rect) {
if (rect.getY() - MOVE > 0)
rect.setY(rect.getY() - MOVE);
}
private void MoveDown(Form form) {
if (form.a.getY() == YMAX - SIZE || form.b.getY() == YMAX - SIZE || form.c.getY() == YMAX - SIZE
|| form.d.getY() == YMAX - SIZE || moveA(form) || moveB(form) || moveC(form) || moveD(form)) {
MESH[(int) form.a.getX() / SIZE][(int) form.a.getY() / SIZE] = 1;
MESH[(int) form.b.getX() / SIZE][(int) form.b.getY() / SIZE] = 1;
MESH[(int) form.c.getX() / SIZE][(int) form.c.getY() / SIZE] = 1;
MESH[(int) form.d.getX() / SIZE][(int) form.d.getY() / SIZE] = 1;
RemoveRows(group);
Form a = nextObject;
nextObject = Controller.makeRect();
object = a;
group.getChildren().addAll(a.a, a.b, a.c, a.d);
moveOnKeyPress(a);
}
if (form.a.getY() + MOVE < YMAX && form.b.getY() + MOVE < YMAX && form.c.getY() + MOVE < YMAX
&& form.d.getY() + MOVE < YMAX) {
int moveA = MESH[(int) form.a.getX() / SIZE][((int) form.a.getY() / SIZE) + 1];
int moveB = MESH[(int) form.b.getX() / SIZE][((int) form.b.getY() / SIZE) + 1];
int moveC = MESH[(int) form.c.getX() / SIZE][((int) form.c.getY() / SIZE) + 1];
int moveD = MESH[(int) form.d.getX() / SIZE][((int) form.d.getY() / SIZE) + 1];
if (moveA == 0 && moveA == moveB && moveB == moveC && moveC == moveD) {
form.a.setY(form.a.getY() + MOVE);
form.b.setY(form.b.getY() + MOVE);
form.c.setY(form.c.getY() + MOVE);
form.d.setY(form.d.getY() + MOVE);
}
}
}
private boolean moveA(Form form) {
return (MESH[(int) form.a.getX() / SIZE][((int) form.a.getY() / SIZE) + 1] == 1);
}
private boolean moveB(Form form) {
return (MESH[(int) form.b.getX() / SIZE][((int) form.b.getY() / SIZE) + 1] == 1);
}
private boolean moveC(Form form) {
return (MESH[(int) form.c.getX() / SIZE][((int) form.c.getY() / SIZE) + 1] == 1);
}
private boolean moveD(Form form) {
return (MESH[(int) form.d.getX() / SIZE][((int) form.d.getY() / SIZE) + 1] == 1);
}
private boolean cB(Rectangle rect, int x, int y) {
boolean xb = false;
boolean yb = false;
if (x >= 0)
xb = rect.getX() + x * MOVE <= XMAX - SIZE;
if (x < 0)
xb = rect.getX() + x * MOVE >= 0;
if (y >= 0)
yb = rect.getY() - y * MOVE > 0;
if (y < 0)
yb = rect.getY() + y * MOVE < YMAX;
return xb && yb && MESH[((int) rect.getX() / SIZE) + x][((int) rect.getY() / SIZE) - y] == 0;
}
}
Controller.java:
package sample;
import javafx.scene.shape.Rectangle;
public class Controller {
public static final int MOVE = Tetris.MOVE;
public static final int SIZE = Tetris.SIZE;
public static int XMAX = Tetris.XMAX;
public static int YMAX = Tetris.YMAX;
public static int[][] MESH = Tetris.MESH;
public static void MoveRight(Form form) {
if (form.a.getX() + MOVE <= XMAX - SIZE && form.b.getX() + MOVE <= XMAX - SIZE
&& form.c.getX() + MOVE <= XMAX - SIZE && form.d.getX() + MOVE <= XMAX - SIZE) {
int movea = MESH[((int) form.a.getX() / SIZE) + 1][((int) form.a.getY() / SIZE)];
int moveb = MESH[((int) form.b.getX() / SIZE) + 1][((int) form.b.getY() / SIZE)];
int movec = MESH[((int) form.c.getX() / SIZE) + 1][((int) form.c.getY() / SIZE)];
int moved = MESH[((int) form.d.getX() / SIZE) + 1][((int) form.d.getY() / SIZE)];
if (movea == 0 && movea == moveb && moveb == movec && movec == moved) {
form.a.setX(form.a.getX() + MOVE);
form.b.setX(form.b.getX() + MOVE);
form.c.setX(form.c.getX() + MOVE);
form.d.setX(form.d.getX() + MOVE);
}
}
}
public static void MoveLeft(Form form) {
if (form.a.getX() - MOVE >= 0 && form.b.getX() - MOVE >= 0 && form.c.getX() - MOVE >= 0
&& form.d.getX() - MOVE >= 0) {
int movea = MESH[((int) form.a.getX() / SIZE) - 1][((int) form.a.getY() / SIZE)];
int moveb = MESH[((int) form.b.getX() / SIZE) - 1][((int) form.b.getY() / SIZE)];
int movec = MESH[((int) form.c.getX() / SIZE) - 1][((int) form.c.getY() / SIZE)];
int moved = MESH[((int) form.d.getX() / SIZE) - 1][((int) form.d.getY() / SIZE)];
if (movea == 0 && movea == moveb && moveb == movec && movec == moved) {
form.a.setX(form.a.getX() - MOVE);
form.b.setX(form.b.getX() - MOVE);
form.c.setX(form.c.getX() - MOVE);
form.d.setX(form.d.getX() - MOVE);
}
}
}
public static Form makeRect() {
int block = (int) (Math.random() * 100);
String name;
Rectangle a = new Rectangle(SIZE-1, SIZE-1), b = new Rectangle(SIZE-1, SIZE-1), c = new Rectangle(SIZE-1, SIZE-1),
d = new Rectangle(SIZE-1, SIZE-1);
if (block < 15) {
a.setX(XMAX / 2 - SIZE);
b.setX(XMAX / 2 - SIZE);
b.setY(SIZE);
c.setX(XMAX / 2);
c.setY(SIZE);
d.setX(XMAX / 2 + SIZE);
d.setY(SIZE);
name = "j";
} else if (block < 30) {
a.setX(XMAX / 2 + SIZE);
b.setX(XMAX / 2 - SIZE);
b.setY(SIZE);
c.setX(XMAX / 2);
c.setY(SIZE);
d.setX(XMAX / 2 + SIZE);
d.setY(SIZE);
name = "l";
} else if (block < 45) {
a.setX(XMAX / 2 - SIZE);
b.setX(XMAX / 2);
c.setX(XMAX / 2 - SIZE);
c.setY(SIZE);
d.setX(XMAX / 2);
d.setY(SIZE);
name = "o";
} else if (block < 60) {
a.setX(XMAX / 2 + SIZE);
b.setX(XMAX / 2);
c.setX(XMAX / 2);
c.setY(SIZE);
d.setX(XMAX / 2 - SIZE);
d.setY(SIZE);
name = "s";
} else if (block < 75) {
a.setX(XMAX / 2 - SIZE);
b.setX(XMAX / 2);
c.setX(XMAX / 2);
c.setY(SIZE);
d.setX(XMAX / 2 + SIZE);
name = "t";
} else if (block < 90) {
a.setX(XMAX / 2 + SIZE);
b.setX(XMAX / 2);
c.setX(XMAX / 2 + SIZE);
c.setY(SIZE);
d.setX(XMAX / 2 + SIZE + SIZE);
d.setY(SIZE);
name = "z";
} else {
a.setX(XMAX / 2 - SIZE - SIZE);
b.setX(XMAX / 2 - SIZE);
c.setX(XMAX / 2);
d.setX(XMAX / 2 + SIZE);
name = "i";
}
return new Form(a, b, c, d, name);
}
}
Form.java:
package sample;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
public class Form {
Rectangle a;
Rectangle b;
Rectangle c;
Rectangle d;
Color color;
private String name;
public int form = 1;
public Form(Rectangle a, Rectangle b, Rectangle c, Rectangle d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public Form(Rectangle a, Rectangle b, Rectangle c, Rectangle d, String name) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.name = name;
switch (name) {
case "j":
color = Color.PURPLE;
break;
case "l":
color = Color.SEAGREEN;
break;
case "o":
color = Color.STEELBLUE;
break;
case "s":
color = Color.THISTLE;
break;
case "t":
color = Color.MAROON;
break;
case "z":
color = Color.NAVY;
break;
case "i":
color = Color.MEDIUMSPRINGGREEN;
break;
}
this.a.setFill(color);
this.b.setFill(color);
this.c.setFill(color);
this.d.setFill(color);
}
public String getName() {
return name;
}
public void changeForm() {
if (form != 4) {
form++;
} else {
form = 1;
}
}
}
Вимоги до умов експлуатації:
Ігрова програма «Тетрис» призначена для роботи одного користувача на одному комп'ютері, який повинен володіти мінімальними навичками роботи на ПК і з стандартними додатками Windows.
Вхідними даними є:
- Коди клавіш управління.
Вхідні дані заносяться в ігрову програму «Тетрис» вручну при натисканні клавіш стрілок (вгору, вліво, вниз, вправо) користувачем з клавіатури.
Вихідними даними є:
- Інформація, що виводиться на екран у вигляді графічного інтерфейсу.
Вихідні дані ігрової програми «Тетрис» виводяться на екран автоматично.
Размещено на Allbest.ru
Подобные документы
Створення програми "EvolAnim" для моделювання еволюції і розвитку живих організмів. Опис логічної структури. Умови існування об’єктів даних класів. Виклик і завантаження програми. Вимоги до складу й параметрів технічних засобів. Вхідні та вихідні дані.
курсовая работа [437,5 K], добавлен 29.04.2014Розробка ігрового додатку за технологією IDE Visual Studio та WPF. Опис вхідної та вихідної інформації. Назва та призначення модулів програми. Основні поля класу, необхідні для ігрової логіки. Блок-схема алгоритму гри. Інструкція з експлуатації системи.
курсовая работа [1,3 M], добавлен 02.06.2015Характеристика і функції телефонних довідників. Визначення об'єктів і класів і залежностей (зв'язків) між ними. Побудова діаграми ієрархії класів. Реалізація програми в середовищі Borland Delphi. Її інтерфейс і демонстрація можливостей. Тестовий приклад.
курсовая работа [349,3 K], добавлен 25.01.2016Створення програми, яка здатна перетворювати двовимірні зображення у об’ємні. Проект для побудови ландшафтів, отримання фотографій об’єктів під іншим кутом огляду, досліджень поверхонь зрізів матеріалів. Опис алгоритму програми. Вхідні та вихідні дані.
курсовая работа [548,3 K], добавлен 09.06.2010Призначення програмного продукту та вимоги до її функціональних можливостей, вхідних та вихідних даних. Інструкція оператора для роботи з програмою. Діаграми класів, прецедентів та станів. Введення даних в документ Excel і Word. Запис та зчитування з Xml.
курсовая работа [6,8 M], добавлен 25.04.2015Проектування інтерфейсу програми. Вимоги до продукту. Вхідні дані на розробку автоматизованої системи. Вибір середовища програмування. Розробка структури бази даних. Функціональна та логічна структура програми. Розробка структури таблиць бази даних.
курсовая работа [43,1 K], добавлен 30.06.2015Поняття та класифікація комп’ютерних ігор. Відтворення гри "Морський бій" у вигляді комп’ютерної програми. Компоненти програмного середовища Delphi, що були використані під час її створення. Алгоритм реалізації ігрового процесу та скріншоти з програми.
дипломная работа [418,2 K], добавлен 12.07.2013Історія розробки систем управління базами даних. Принципи проектування баз даних. Розробка проекту "клієнт-серверного" додатку, який гарантує дотримання обмежень цілісності, виконує оновлення даних, виконує запити і повертає результати клієнту.
курсовая работа [1,8 M], добавлен 22.04.2023Теоретичні і правові основи нарахування заробітної плати. Організаційно-економічна характеристика підприємства СФГ "Злагода". Проектування та використання інформаційної системи. Вимоги до системи. Порівняння програми по нарахуванню заробітної плати з 1С.
дипломная работа [317,3 K], добавлен 29.03.2009Аналіз технологій розробки систем моніторингу і управління та різноманітності мов програмування. Створення проекту структури Інтернет-магазину, розробка бази даних, UML-діаграми та алгоритму виконання функцій додатку. Результати тестування програми.
дипломная работа [1,6 M], добавлен 08.06.2015