Юрій Писанка
Переможець- Проєкти 17
- Оцінка -
- Рейтинг 607
Бюджет: 300 UAH Термін: 1 день
Якщо ви маєте на увазі в консольі з символів 1. |__|__| Сформувати табличку без притань реалізую на с++ visual studio 2017. Якщо потрібні Си функції такі як printf або put Також врахую.
Бюджет: 1000 UAH Термін: 1 день
Привітання з програмою на сьогоднішній день. Пишіть в ЛС обговорюватимемо деталі.
Ставки приховані
Ставки поки відсутні
Бюджет: 4000 UAH Термін: 4 дні
Вітаю вас, ЮліяПриймемо зробити Вашу задачу (описану у Вашій прикладеній у обговореннях зображення) в Visual Studio 2019 (на чистому С, без використання С++), описувати програми псевдокодом ( словами), а також малювати з рук блок-схеми,
за 4000 грн протягом 1-2 днів (але кінцевий термін беру на 4 дні - з запасом).Існує й можливість альтернативних (нігрових) способів подяки, але це вже краще за межами Сайту обговорювати.Я є ФОПМ (ЕН, 3 група, без ПДВ).Я приймаю оплату виключно на розрахунковий рахунок ФОП, згідно з виставленим мною рахунками-оферти (можливо оплатити з банківської картки, або в відділенні будь-якого банку).При цьому саму задачу можна провести через Сайт з зазначенням, що оплата здійснюється через Сайт.Це може бути корисно у світлі можливості залишити один на одного відгуки.Я показую результат дистанційно, і після отримання від Вас грошей, я віддаю його вам.Я даю гарантію на мою роботу:
Якщо після отримання результату Ви виявляєте будь-які помилки в тому, що я зробив, або вчитель просить щось виправити, то виправляю безкоштовно (такий ризик включається в вартість і мотивує мене робити все якісно з першого разу).Детальніше про мене і взаємодію зі мною можна у мене на сайті прочитати: http://hj.net.ua/synergies.html
-
Екатерина Б. 21 травня 2021Использование библиотек допускается? Данные для заполнения таблицы сразу подаются в структуре данных или построчно? Можно пример входных и выходных данных увидеть?
-
Julia Olenichenko
21 травня 2021
ни слова не понимаю, я родственник горе-студента)))
У меня есть задание и лекция, отправляю Вам
-
Екатерина Б. 21 травня 2021Это рисование линиями. Но с входными данными не доконца ясно. Их можно попросить ввести пользователе или же сразу при запуске указать. В целом понятно :).
-
Julia Olenichenko
21 травня 2021
при запуске сразу выходит вид таблички с номерками.
К сдаче нужен код,
псевдокод (словесный)
и блок-схума со словами а не текстом из кода (если большая, то можно по функциям) - схему можно от руки, мы потом перерисовываем в спец программе.
-
Julia Olenichenko
21 травня 2021
ЛЕКЦИЯ 8
Тема: а примере проектирования простой консольной формы ввода логина и пароля рассмотрены особенности составных типов данных: структур и перечислений, а так же основные принципы пошагового проектирования интерактивных программ.
"Хорошая структура программы и плохая структукра данных – плохая программа. Хорошая структура данных и плохая структура программного кода – хорошая программа!"
Новые навыки.
Построение экранных форм (в режиме псевдографики).
Определение и использование структур и перечислений для структуризации данных программного продукта.
Пошаговая разработки программного приложения по технологии "сверху вниз".
На предыдущих практических занятиях были определены требования к учебной интерактивной программе определения логина и пароля пользователя, а так же общая архитектура программного проекта, повторяющая структуру программирования системы Arduino: определение главных подпрограмм setup – начальные установки, и loop – основной интерактивный цикл работы программы.
Функционал приложения определяется так.
Программа должна обеспечивать:
- возможность ввода текстового значения "логина" (буквы латинского алфавита, кириллицы и цифры) с отображением вводимого текста на экране и возможностью его редактирования;
- возможность ввода текстового значения "пароля" (буквы латинского алфавита, кириллицы и цифры) с отображением условных символов вместо вводимых символов текста и возможностью его редактирования;
- очистку полей ввода логина и пароля;
- переход "вперед-назад" между полями ввода.
Напомним общую структуру модулей разрабатываемого приложения (проекта):
<!--[if !vml]-->
Здесь модуль codec необходим для поддержки перекодировок ср1251 и ср866 системы Windows.
Начальный код модуля myprograms.c
#include "myprograms.h"
void setup(){
} // setup
void loop(){
} // loop
Общая концепция структуры системы может быть изображена в виде диаграммы деятельности:
<!--[if !vml]-->
Первый шаг разработки. Построение экранной формы.
Подпрограмма, реализующая построение этой формы – setPanel.
Определяем "болванку" данной подпрограммы и включаем ее ф подпрограмму setup.
void setPanel();
void setup(){
setPanel();
} // setup
void setPanel(){
} // setup
Сразу заметим, что строить заданную экранную форму одной подпрограммой в корне неверно!
Почему?
Внимательно рассмотрим эскиз требуемой формы:
<!--[if !vml]-->
Видно, что основной графический элемент формы – прямоугольник: окантока формы, выделение полей ввода, определение поля сброса данных.
Таким образом, подпрограмма построения прямоугольника – необходимый элемент подпрограммы построения формы.
Какие параметры (в данном случае), изменяются при построении конкретных прямоугольников формы? Точка "привязки" (координаты левого верхнего угла прямоугольника), ширина и высота. Напоминаем, что при использовании псевдографики все координаты определяются в "знакоместах" и начальное значение координат – единица!
Теперь можно определить подпрограмму построения прямоугольника:
void ramka( int x, int y, int w, int h, int dubL=0 ){
gotoxy( x, y );
uchar vl, vp, nl, np, gor, vert;
if ( dubL ){
vl=201; vp=187; nl=200; np=188; gor=205; vert=186;
} else {
vl=218; vp=191; nl=192; np=217; gor=196; vert=179;
}
putch( vl );
for ( int i=0; i<( w-1 ); i++ ) putch( gor );
putch( vp );
// niz
gotoxy( x, y+h );
putch( nl );
for ( int i=0; i<( w-1 ); i++ ) putch( gor );
putch( np );
for ( int i=1; i<h; i++ ) {
// levo
gotoxy( x, y+i ); putch( vert );
// pravo
gotoxy( x+w, y+i ); putch( vert );
}
} // ramka
Обратите внимание на еще один параметр – dubL. Он определяет, какой линией будет произведена прорисовка прямоугольника: одинарной или двойной.
Теперь можно, используя для перекодировки текстовых данных подпрограмму cp866cp1251, сформировать подпрограмму построения экранной формы – setPanel:
void setPanel(){
char s[50];
textbackground( BLUE );
textcolor( WHITE );
clrscr();
ramka( 1, 1, PANEL_W, PANEL_H, 1 );
ramka( 10, 3, 19, 5 );
ramka( 10, 9, 19, 5 );
gotoxy( 3, 5 );
puts( cp866cp1251( s, "ЛОГИН" ) );
gotoxy( 3, 11 );
puts( cp866cp1251( s, "ПАРОЛЬ" ) );
ramka( PANEL_W/2-5, 16, 11, 4 );
gotoxy( PANEL_W/2-3, 18 );
puts( cp866cp1251( s, "ОБНОВИТЬ" ) );
} // setPanel
Выделенным шрифтом отмечены выражения, определяющие иные (не "по умолчанию") цвета прорисовки: цвет фона и цвет текста. В данном случае – белый текст по голубому фону.
Использование структур для объединения "связанных" между собой данных. Например – цвет фона и цвет текста.
А что делать, если понадобиться сменить параметры цветовой палитры? Напрашивает решение: добавить два параметра процедуры: цвет фона и цвет текста.
На наш взгляд – это не лучшее решение: эти два параметра "связаны" друг с другом, представляют комбинацию этих величин.
В системе С, как в большинстве других языков программирования, для этих целей служат специальные конструкции: составные типы данных – структуры.
В данном случае определим структуру, позволяющую задать комбинацию параметров: "цвет поля"-"цвет шрифта".
typedef struct Colors_panel {
int textColor, backgroundColor;
} TColors_panel;
Примечание. Структура – это определяемый программистом набор байтов, элементы которого (точнее – их адреса в памяти) могут быть определены с помощью "внутренних" имен этой структуры. Формальное определения структур и приемы работы с ними выучите по предлагаемым учебникам. Здесь мы приводим практику их применения. Отметим, что определение структуры с помощью выражения typedef позволяет более "компактно" в дальнейшем записывать определения, включающие этот тип данных.
Обратите внимание на размер структуры (сумма размеров составляющих ее элементов) и на возможность присваивания значения:
typedef struct panel {
int textColor, backgroundColor;
} Tpanel;
Tpanel p1={10, 20}, p2={40, 50};
int main(){
printf( "size TColors_panel=%d\n", sizeof( Tpanel ) );
printf( "textColor=%d backgroundColor=%d\n",
p1.textColor, p1.backgroundColor );
p1 = p2;
printf( "textColor=%d backgroundColor=%d\n",
p1.textColor, p1.backgroundColor );
return 0;
} // main
<!--[if !vml]-->
Таким образом, мы имеем возможность работать как с отдельными элементами (составляющими) структуры, так со структурой в целом.
Теперь мы можем "предопределить" два вида цветовой гаммы нашего оконного приложения:
typedef struct Colors_panel {
int textColor, backgroundColor;
} TColors_panel;
Начальное присваивание можно реализоват так:
static TColors_panel wbPanel = { WHITE, BLACK };
static TColors_panel wblPanel = { WHITE, BLUE };
или так:
static TColors_panel wbPanel = { .textColor=WHITE, .backgroundColor=BLACK };
static TColors_panel wblPanel = { .textColor=WHITE, .backgroundColor=BLUE };
А новое определение подпрограммы прорисовки экранной формы приолжения буде выглядеть:
void setPanel( TColors_panel cp = wbPanel ){
char s[50];
textbackground( cp.backgroundColor );
textcolor( cp.textColor );
clrscr();
ramka( 1, 1, PANEL_W, PANEL_H, 1 );
ramka( 10, 3, 19, 5 );
ramka( 10, 9, 19, 5 );
gotoxy( 3, 5 );
puts( cp866cp1251( s, "ЛОГИН" ) );
gotoxy( 3, 11 );
puts( cp866cp1251( s, "ПАРОЛЬ" ) );
ramka( PANEL_W/2-5, 16, 11, 4 );
gotoxy( PANEL_W/2-3, 18 );
puts( cp866cp1251( s, "ОБНОВИТЬ" ) );
} // setPanel
Теперь варианты вызова этой полпрограммы:
void setup(){
//setPanel(); // черно-белая панель
setPanel( wblPanel ); // голубая-белая панель
} // setup
Результат обоих вызовов:
<!--[if !vml]--><!--[endif]--> <!--[if !vml]-->
Второй шаг разработки. Построение интерактивного функционала приложения.
Напомним основные элементы функционала:
- ввод и редактирование текстовых данных в поля логина и пароля, причем во втором случае, с заменой изображения вводимых символов на замещающие их условные символы;
- переход по нажатию определенных клавиш между полями ввода;
- возможность очистки полей ввода по требованию пользователя (нажатие клавиши "ВВОД") при нахождении курсора в поле "ОБНОВИТЬ".
Прежде всего отметим, что использование для наших целей (ввод и редактирование текста) стандартных средств С невозможно: ввод продолжается, пока "жмется клава".
Например – ввод логина с помощью gets (fgets) scanf.
void setup(){
setPanel();
//setPanel( wblPanel );
} // setup
void loop(){
uchar s[50];
gotoxy( 12, 5 );
fgets( s, 15, stdin );
gotoxy( 1, PANEL_H+6 );
puts( s );
} // loop
<!--[if !vml]-->
Таким образом, необходимо разработать специальную программу ввода редактирования текста в интерактивном режиме.
Общая структура подпрограммы (интерактивного цикла работы приложения) может быть представлена в виде следующей диаграммы деятельности:
<!--[if !vml]-->
Как мы видели на предыдущих примерах работы с подпрограммами консольного ввода-вывода ряд клавиш при нажатии вырабатываю "двойной" код – функция getch должна вызываться дважды.
Поскольку в нашей программе необходимо будет использовать специальные клавиши управления вводом (перемещения по вводимому тексту, забой символов, переход от заполнения одной формы к другой) всякий раз анализировать непосредственно эти коды неудобно.
В подобных случаях данные (в данном случае – коды клавиш) разбиваются на классы (подклассы), корорым присваиваются числовые индексы и дальнейшая работа производится исходя из индекса соответствующего класса символа и его (символа) кода.
Например: класс "навигации", класс "печатного символа" и т.п.
В С удобно использовать еще один тип данных языка С – перечисления.
Общая форма определения перечислений:
enum [identifier] { enumerator-list };
Примеры.
Вообще перечисления можно представить как задание некоторых поименованных констант.
enum color { black, red, green, yellow, blue, white=7, gray };
enum { OFF, ON } toggle = ON;
enum { OFF, ON, STOP = 0, GO = 1, CLOSED = 0, OPEN = 1 };
Теперь можно определить "классы" кодов клавиш (точнее – условные наименования типов клавиш – команд) и создать функцию, которая будет обрабатывать "нажатие" клавиш, вырабатывая код типа клавиши и, при необходимости , ее значение. ....
Определим типы клавиш (заметте – независимо от количестваа водимых символов на нажатие клавиши!):
M_ESC – закончить работу (27);
M_LEVO – сдвиг влево по тексту вводимой строки (224, 75);
M_PRAVO – сдвиг влево по тексту вводимой строки (224, 77);
M_DELETE – удалить текущий символ (224, 83);
M_BASCSP – удалить предыдущий символ (8);
M_TOP – переход на предыдущее поле (Ctrl-tab – 0, 148);
M_DOWN – переход на следующее поле (tab – 9);
M_CLEAR – нажатие ENTER (13 – для очистки полей ввода );
M_CHAR – печатный символ (ср866: 48-57, 65-122, 128-175, 224-245(239))
enum typeKlavr { M_ESC, M_LEVO, M_PRAVO, M_DELETE, M_BASCSP,
M_TOP, M_DOWN, M_CLEAR, M_CHAR };
Примечание. "Жирным" текстом выделены типы клавиш (команд), необходимых для "полноценного" редактирования вводимых полей. В нашем случае при разработке строкового редактора ввода ограничимся упрощенным редактором, позволяющим изменять (стирать) только последний символ в строке.
Теперь подпрограмма (функция) ввода с клавиатуры должна вырабатывать "класс" клавиши" и, для "допустимых" печатных символов, их код.
Как мы уже делали это ранее, связанные логически данные удобно представить в виде структуры. Например – такой:
typedef enum typeKlav { M_ESC, M_LEVO, M_PRAVO, M_DELETE, M_BASCSP,
M_TOP, M_DOWN, M_CLEAR, M_CHAR } TtypeKlav;
//typedef struct KodKav { enum typeKlav klav; uchar ch; } TkodKlav;
typedef struct KodKav { TtypeKlav klav; uchar ch; } TkodKlav;
//TkodKlav ku = { M_ESC, 27 }; // пример данных
Тут специально представлен вариант (выделено цветом) определения TkodKlav без использования конструкции typedef для определения перечисления типов клавиш.
Теперь определение подпрограммы ввода можно представить так:
TkodKlav getKlav();
А ее реализация:
TkodKlav getKlav(){
TkodKlav rez;
uchar c[2];
int n, k;
while ( !kbhit() ); // ожидание нажатия клавиши
n = 0;
while ( 1 ) {
while ( kbhit() ){
k = getch();
c[ n++ ] = k;
}
if ( n==1 ){
switch( c[0] ){
case 27 : rez.klav = M_ESC; return rez;
case 8 : rez.klav = M_BASCSP; return rez;
case 9 : rez.klav = M_DOWN; return rez;
case 13 : rez.klav = M_CLEAR; return rez;
default :
if ( isMyAlpha( c[0] )) {
rez.klav=M_CHAR; rez.ch=c[0]; return rez;
}
} // switch
} else {
if ( c[0]==224 ){
switch( c[1]){
case 75 : rez.klav = M_LEVO; return rez;
case 77 : rez.klav = M_PRAVO; return rez;
case 83 : rez.klav = M_DELETE; return rez;
}
} else if ( c[0]==0 && c[1]==148 )
rez.klav = M_TOP; return rez;
}
} // while
return rez;
} // TkodKlav
Задание: самостоятельно изобразите диаграмму деятельности этой подпрограммы.
Построим теперь подпрограммы редактирования поля ввода.
Опять главный вопрос: представление параметров ввода, с которыми работает подпрограмма редактирования.
Как говорилось ранее: если у нас есть хотя бы два похожих фрагмента – их необходимо объединить в одну подпрограмму!
Однако такая подпрограмма, почти наверняка, должна будет работать в различных условиях. Иначе – в разном контекстном окружении.
В данном случае это и положение на экране отображаемых при вводе символов и различная реакция на вводимые символы: при вводе логина – отображение (вывод) символов, а при вводе пароля – вывод условных обозначений.
Поэтому перед разработкой подпрограммы определим структуру "контекста".
Например, в данном случае, это может быть такая структура:
typedef struct KodKav { TtypeKlav klav; uchar ch; } TkodKlav;
typedef struct PoleVvoda { uchar posX, posY, s[20], maxLen,
curLen, posInStr, kodZameny; } TPoleVvoda;
У нас два поля ввода: логина и пароля.
Определим их контексты:
TPoleVvoda login={ .posX=12, .posY=5, .s="", .maxLen=15,
.curLen=0, .posInStr=0, .kodZameny=0 },
parol={ .posX=12, .posY=11, .s="", .maxLen=15,
.curLen=0, .posInStr=0, .kodZameny=249 };
Теперь подпрограммы работы с этими контекстами (не только редактирование, но и сброс – начальная установка контекста, установка позиции ввода – курсора) могут быть определены следующим образом:
void ustPos( TPoleVvoda * pole );
void sbrosPola( TPoleVvoda * pole );
void redPola( TPoleVvoda * pole, TkodKlav kod );
Построим их "болванки" и приступим к реализации главной части программы – подпрограммы loop.
Именно на основе постепенного подключения функционала к этой подпрограмме мы и будем отлаживать всю программную систему:
- получение данных клавиатуры и выход из подпрограммы;
- переход между полями ввода:
- ввод и редактирование данных.
void loop(){
uchar s[50], sost = 0;
TkodKlav kod;
gotoxy( 12, 5 ); // ??????
while( 1 ){
kod = getKlav();
if ( kod.klav==M_ESC ) break;
switch ( sost ){
case 0 : // vvod logina
if ( kod.klav==M_DOWN ) {
ustPos( &parol );
sost=1;
} else redPola( &login, kod );
break;
case 1 : // vvod parola
if ( kod.klav==M_DOWN ) {
gotoxy( 12, 18 );
sost=2;
} else if ( kod.klav==M_TOP ){
ustPos( &login );
sost=0;
} else redPola( &parol, kod );
break;
case 2 : // ogidanie sbrosa
if ( kod.klav==M_TOP ) {
ustPos( &parol );
sost=1;
} else if ( kod.klav==M_CLEAR ) {
sbrosPola( &login );
sbrosPola( &parol );
ustPos( &login );
sost=0;
}
break;
} // switch sost
}
gotoxy( 1, PANEL_H+4 );
login.s[ login.curLen ] = 0;
parol.s[ parol.curLen ] = 0;
puts( login.s );
puts( parol.s );
gotoxy( 1, PANEL_H+8 );
} // loop
Реализация подпрограмм работы к контекстом ввода данных:
void sbrosPola( TPoleVvoda * pole ){
// parol={ .posX=12, .posY=11, .s="", .maxLen=15, .posInStr=0, .curLen=0, .kodZameny=249 };
gotoxy( pole->posX, pole->posY );
while ( pole->curLen ){
putch( ' ' );
pole->curLen--;
}
pole->s[0] = 0; //pole->curLen=0;
pole->posInStr = 0;
} // sbrosPola
void ustPos( TPoleVvoda * pole ){
gotoxy( pole->posX+pole->curLen, pole->posY );
pole->posInStr = pole->curLen;
} // ustPos
void redPola( TPoleVvoda * pole, TkodKlav kod ){
switch( kod.klav ){
case M_LEVO :
break;
case M_PRAVO :
break;
case M_DELETE :
break;
case M_BASCSP :
if ( pole->curLen ){
pole->curLen--;
gotoxy( pole->posX+pole->curLen, pole->posY );
putch( ' ' );
gotoxy( pole->posX+pole->curLen, pole->posY );
}
break;
case M_CHAR :
if ( pole->curLen < pole->maxLen ){
pole->s[ pole->curLen++ ] = kod.ch;
if ( pole->kodZameny ) putch( pole->kodZameny );
else putch( kod.ch );
}
}
} // redPola
-
Julia Olenichenko
21 травня 2021
2.1. Написать программу:
2.1.1. Сформировать массив (установкой начальных значений) и вывести его изображение. Выход из подпрограммы по нажатию клавиши ESC
2.1.2. Написать подпрограмму, формирующую следующее изображение
Выход из подпрограммы по нажатию клавиши ESC
я так понимаю, что при запуске сразу выходит вид таблички с номерками.
К сдаче нужен:
код,
псевдокод (словесный)
и блок-схума со словами а не текстом из кода (если большая, то можно по функциям) - схему можно от руки, мы потом перерисовываем в спец программе.
Актуальні фриланс-проєкти в категорії C та C++
Потрібно розробити патч для драйвера відеокарти, який розширює можливості управління графічним адаптером за рахунок додавання додаткових користувацьких налаштувань. Патч має інтегруватися в існуючу архітектуру драйвера без порушення його основної функціональності та забезпечувати сумісність з підтримуваними версіями операційної системи. Основною метою є надання більш гнучкого доступу до параметрів, які недоступні в стандартній панелі управління драйвером, з можливістю їх зміни через користувацький інтерфейс або програмний API. Патч має передбачати модульну структуру, що дозволяє в подальшому додавати нові параметри без суттєвої переробки коду. Необхідно забезпечити коректну обробку помилок, журналювання змін, можливість відкату налаштувань до значень за замовчуванням, а також збереження сумісності з майбутніми оновленнями драйвера, наскільки це можливо. Рішення має супроводжуватися технічною документацією з описом архітектури, реалізованих можливостей, обмежень і рекомендацій щодо тестування.
Автоматизація на сайті- echerha
Ми є великою логістичною компанією, яка має власний експорт. У нашому розпорядженні великий автомобільний парк, і ми постійно відправляємо власні транспортні засоби на експорт до країн Європи.Опис Сайт: https://echerha.gov.ua/ На цьому сайті ми ставимо наші автомобілі в електронну чергу для перетину державного кордону. Під час реєстрації необхідно ввести такі дані: ім'я та прізвище водія; номер закордонного паспорта; електронну адресу (email); номер телефону логіста для отримання сповіщень; тип транспортного засобу (вантажний); назву виробника автомобіля; державний номерний знак тягача; державний номерний знак причепа; номер митної декларації. Для кожного автомобіля заздалегідь визначено конкретний день і час перетину кордону. Наприклад, автомобіль повинен пройти пункт пропуску «Рава-Руська» у понеділок о 10:00.Наша проблема - Черга на сайті https://echerha.gov.ua/ рухається непередбачувано. - Наприклад, сьогодні п'ятниця, а автомобіль повинен перетнути кордон у понеділок о 10:00. - Ми не знаємо, коли саме почне просуватися черга. Це може статися у п'ятницю ввечері, у будь-який час у суботу або неділю, рано вранці, вдень чи пізно ввечері. - Коли черга починає рухатися, це відразу видно на сайті. Іноді всього за кілька хвилин вона може просунутися з п'ятниці до понеділка або навіть до вівторка. - Через це логісти змушені постійно контролювати мобільний застосунок або вебсайт, щоб не пропустити момент, коли черга дійде до потрібної дати та часу. Якщо цей момент буде втрачено, ми фізично не встигаємо поставити автомобіль у чергу на потрібний часовий слот.Задача - Після внесення даних про автомобіль (наприклад, у таблицю або інший інтерфейс, залежно від реалізації програміста) система повинна автоматично відстежувати рух черги. - Коли черга дійде до заздалегідь визначених дати та часу, система повинна автоматично заповнити необхідні дані та поставити автомобіль у чергу без участі логіста.
Шукаю досвідченого розробника TrinityCore 3.3.5a, який добре розбирається в устрої ядра, системі Battleground, C++, SQL та клієнті WoW 3.3.5. В проект вже інтегровано кастомний Battleground «Долина Рабства» (Slavery Valley), перенесений з AzerothCore на TrinityCore. Основна частина роботи вже виконана, однак потрібно довести його до рівня Blizzard.Що вже зроблено TrinityCore 3.3.5a + Eluna. Повністю налаштований сервер. Battleground інтегровано в ядро. Працює вхід у BG. Працює клієнтський UI (частково). Виконано перенесення більшості SQL та DBC. Збирається без помилок.Що необхідно зробити Виправити залишкові баги Battleground. Довести механіку до рівня офіційних Battleground Blizzard. Виправити стартову фазу матчу. Реалізувати коректні стартові ворота/вогняні стіни. Виправити механіку захоплення точок. Виправити завершення матчу. Перевірити нарахування очок і роботу WorldState. Виправити залишкові проблеми C++ та SQL. Виконати повний ігровий тест.Вимоги Обов'язковий досвід: TrinityCore 3.3.5a; C++; SQL (MariaDB/MySQL); DBC; MPQ; Visual Studio; CMake; Git. Будет великим плюсом: AzerothCore; Eluna; досвід розробки Battleground; розуміння клієнтської частини WoW 3.3.5a.Формат роботи Робота поетапна. Після кожного етапу обов'язкове тестування. Кожен етап приймається тільки після перевірки в грі. Необхідні зрозумілі звіти по змінам.В подальшому Це довгостроковий проект. Після завершення Battleground планується: перенесення нових Battleground; перенесення нових арен; нові раси; нові класи; нові ігрові системи; подальша розробка власного сервера World of Warcraft 3.3.5a. Шукаю розробника, який вже працював з TrinityCore і зможе не просто писати код, а доводити систему до повністю робочого стану.немає сервера з 0 як я хочу Якщо ти шукаєш розробника не на один Battleground, а на створення сервера з нуля, то оголошення повинно виглядати приблизно так.Назва проекту Розробка сервера World of Warcraft 3.3.5a з нуля (TrinityCore / C++ / SQL / Eluna)Опис проекту Шукаю досвідченого розробника TrinityCore 3.3.5a для довгострокового співробітництва. Потрібен чоловік, який зможе з нуля розробити повністю готовий ігровий сервер World of Warcraft 3.3.5a на базі TrinityCore з подальшим розвитком проекту. Проект великий і розрахований на кілька місяців розробки.Основа проекту TrinityCore 3.3.5a. Максимально стабільна і близька до Blizzard база. Eluna Lua Engine. MariaDB. Visual Studio + CMake. Git.Що планується реалізувати Повністю робочий сервер 3.3.5a. Виправлення помилок ядра. Розробка нових ігрових систем. Інтеграція кастомних Battleground. Інтеграція нових арен. Перенесення корисних модулів з AzerothCore на TrinityCore. Розробка власних модулів. Нові PvP та PvE системи. Нові ігрові події. Балансування класів. Додаткові системи прогресії. Покращення продуктивності сервера.В майбутньому Після завершення базової частини планується: нові раси; нові класи; нові зони; нові підземелля; нові рейди; нові Battleground; нові професії; нові ігрові механіки; інтеграція сучасних систем у клієнт 3.3.5a.Вимоги до розробника Обов'язково: Відмінне знання TrinityCore 3.3.5a. Упевнене знання C++. SQL (MariaDB/MySQL). Git. Visual Studio. CMake. Розуміння архітектури TrinityCore. Досвід роботи з Battleground, PvP та ігровими механіками. Будет великим плюсом: Досвід роботи з AzerothCore. Eluna Lua Engine. Робота з DBC та MPQ. Досвід створення власних ігрових систем.Формат роботи Робота поетапно. Кожне завдання оформлюється окремим технічним завданням. Після кожного етапу проводиться обов'язкове тестування. Робота приймається тільки після перевірки безпосередньо в грі. Потрібен розробник, який вміє доводити функціонал до повністю робочого стану, а не тільки писати код
Стоврити сумісність між наземною станцією управління, системою автоматичного старту (САС), радаром та літаком.
это задание