Выполнение условий, функций.
- Войдите на сайт для отправки комментариев
Пт, 23/03/2018 - 20:31
Очень прошу помочь! Пожалуйста, напишите мне небольшой скетч: изначально переменная X будет равна 3. На lcd1602 показывать букву , которая в интервале секунды будет передвигаться на один блок вправо. Также выполнить условие - если буква находится на пятом блоке экрана и при этом нажата кнопка на 13 пине - продолжать дальше до 16. Если не нажата - также продолжать и уменьшать X на 1. Аналогично выполнять условия на восьмом, десятом, тринадцатом блоке. Если X будет равен нулю - начинать всё сначала (я делаю игру с жизнями, потому и спрашиваю). Очень прошу, ответьте.
$99
напишите мне небольшой скетч
я делаю игру
Игру делаете типа вы, но ее счетч должны написать мы? Хитро...
$98
$98
$99
А чо так?
ТС - не ведитесь, скупой платит дважды! Выбирайте только качественные предложения от серьёзных людей!
$100500
Я новичок в этом деле. Делаю игру. Кое чего не могу понять. Я не прошу написать за меня игру, прошу помочь в данной ситуации.
Ну, дык, я ж тоже не прошу ничего сверхестественного, просто $100500
ТС - не ведитесь, скупой платит дважды! Выбирайте только качественные предложения от серьёзных людей!
$100500
Поддерживаю, тут не так все просто, за 98$ вам напишут условия на проверку координат. А Евгений сделает обнаружение столкновений на основе физической модели. Игра сразу в топы выйдет.
Brat_Arduino. 1- Что вы не можете понять? 2- В чем мы ,или конкретно я, можем помочь? 3- и наконец где проработаный сюжет игры и 4)где наметки в коде элементов игры?
сюжет простой: на экране изображён бегущий человек. снизу нарисована земля, иногда встречаются провалы, чтобы их перепрыгнуть - нажимать кнопку на 13 пине. если не нажать выполнить return loop() т.е. начать заново. Это слишком примитивно. Поэтому, как сделать чтобы число 10 уменьшалось на 1 при падении в пропасть. И когда 10 уменьшится до нуля - тогда и выполнять return loop(). для наглядности выложу кусочек скетча:
[code] #include <mp3TF.h> #include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 10, 12); boolean keyPresence = false; int countHealth = 3; byte fir[8] = { B01100, B01100, B00000, B01110, B11100, B01100, B11010, B10011, }; byte sec[8] = { B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, }; byte jump[8] = { B01100, B01100, B00000, B11110, B01101, B11111, B10000, B00000, }; byte door[8] = { B11111, B10101, B10101, B11101, B10101, B10101, B10101, B11111, }; mp3TF zvuk = mp3TF (); void setup() { zvuk.init (&Serial); Serial.begin (9600); lcd.begin(16, 2); lcd.createChar(1, fir); lcd.createChar(2, sec); lcd.createChar(3, jump); lcd.createChar(4, door); pinMode(13, INPUT_PULLUP); } void stan() { int x = analogRead(A0); tone(0, 100, 90); delay(x); lcd.clear(); } void gnd1() { lcd.setCursor(0, 1); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); } void gnd2() { lcd.setCursor(0, 1); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); } void gnd3() { lcd.setCursor(0, 1); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); } void gnd4() { lcd.setCursor(0, 1); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.setCursor(11, 0); lcd.write(0x8D); } void kgnd4() { lcd.setCursor(0, 1); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); } void gnd5() { lcd.setCursor(0, 1); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.setCursor(13, 0); lcd.print("\4"); lcd.setCursor(13, 1); lcd.write(0xFF); lcd.setCursor(14, 1); lcd.write(0xFF); lcd.write(0xFF); } void dgnd5() { lcd.setCursor(0, 1); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0x20); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.write(0xFF); lcd.setCursor(13, 1); lcd.write(0xFF); lcd.setCursor(14, 1); lcd.write(0xFF); lcd.write(0xFF); } void lev() { lcd.setCursor(3, 0); lcd.write(0xA9); lcd.print("po"); lcd.write(0xB3); lcd.print("e"); lcd.write(0xBD); lcd.write(0xC4); lcd.setCursor(12, 0); } void sledLev() { lcd.setCursor(3, 0); lcd.write(0xA9); lcd.print("po"); lcd.write(0xB3); lcd.print("e"); lcd.write(0xBD); lcd.write(0xC4); lcd.setCursor(11, 0); } void level1() { lev(); lcd.print("1"); delay(1000); lcd.clear(); land1(); land2(); land3(); land2(); land4(); land2(); land3(); land5(); land2(); land3(); } void level2() { lev(); lcd.print("2"); delay(1000); lcd.clear(); land2(); land3(); land1(); land4(); land3(); land2(); land5(); land3(); land1(); land3(); } void land1() { lcd.setCursor(0, 0); lcd.print("\1"); gnd1(); stan(); lcd.setCursor(1, 0); lcd.print("\2"); gnd1(); stan(); lcd.setCursor(2, 0); lcd.print("\1"); gnd1(); stan(); lcd.setCursor(3, 0); lcd.print("\2"); gnd1(); stan(); lcd.setCursor(4, 0); lcd.print("\1"); gnd1(); stan(); lcd.setCursor(5, 0); lcd.print("\2"); gnd1(); stan(); lcd.setCursor(6, 0); lcd.print("\1"); gnd1(); stan(); if (!digitalRead(13)) { lcd.setCursor(7, 0); lcd.print("\3"); gnd1(); stan(); } else if (digitalRead(13)) { lcd.setCursor(7, 0); lcd.print("\2"); gnd1(); stan(); countHealth = countHealth - 1; // вот здесь проблема if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(8, 0); lcd.print("\1"); gnd1(); stan(); lcd.setCursor(9, 0); lcd.print("\2"); gnd1(); stan(); lcd.setCursor(10, 0); lcd.print("\1"); gnd1(); stan(); lcd.setCursor(11, 0); lcd.print("\2"); gnd1(); stan(); lcd.setCursor(12, 0); lcd.print("\1"); gnd1(); stan(); lcd.setCursor(13, 0); lcd.print("\2"); gnd1(); stan(); lcd.setCursor(14, 0); lcd.print("\1"); gnd1(); stan(); lcd.setCursor(15, 0); lcd.print("\2"); gnd1(); stan(); } void land2() { lcd.setCursor(0, 0); lcd.print("\1"); gnd2(); stan(); lcd.setCursor(1, 0); lcd.print("\2"); gnd2(); stan(); lcd.setCursor(2, 0); lcd.print("\1"); gnd2(); stan(); lcd.setCursor(3, 0); lcd.print("\2"); gnd2(); stan(); lcd.setCursor(4, 0); lcd.print("\1"); gnd2(); stan(); lcd.setCursor(5, 0); lcd.print("\2"); gnd2(); stan(); lcd.setCursor(6, 0); lcd.print("\1"); gnd2(); stan(); if (!digitalRead(13)) { lcd.setCursor(7, 0); lcd.print("\3"); gnd2(); stan(); } else if (digitalRead(13)) { lcd.setCursor(7, 0); lcd.print("\2"); gnd2(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(8, 0); lcd.print("\1"); gnd2(); stan(); lcd.setCursor(9, 0); lcd.print("\2"); gnd2(); stan(); if (!digitalRead(13)) { lcd.setCursor(10, 0); lcd.print("\3"); gnd2(); stan(); } else if (digitalRead(13)) { lcd.setCursor(10, 0); lcd.print("\1"); gnd2(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(11, 0); lcd.print("\1"); gnd2(); stan(); lcd.setCursor(12, 0); lcd.print("\2"); gnd2(); stan(); lcd.setCursor(13, 0); lcd.print("\1"); gnd2(); stan(); lcd.setCursor(14, 0); lcd.print("\2"); gnd2(); stan(); lcd.setCursor(15, 0); lcd.print("\1"); gnd2(); stan(); } void land3() { lcd.setCursor(0, 0); lcd.print("\1"); gnd3(); stan(); lcd.setCursor(1, 0); lcd.print("\2"); gnd3(); stan(); lcd.setCursor(2, 0); lcd.print("\1"); gnd3(); stan(); if (!digitalRead(13)) { lcd.setCursor(3, 0); lcd.print("\3"); gnd3(); stan(); } else if (digitalRead(13)) { lcd.setCursor(3, 0); lcd.print("\2"); gnd3(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(4, 0); lcd.print("\1"); gnd3(); stan(); lcd.setCursor(5, 0); lcd.print("\2"); gnd3(); stan(); lcd.setCursor(6, 0); lcd.print("\1"); gnd3(); stan(); if (!digitalRead(13)) { lcd.setCursor(7, 0); lcd.print("\3"); gnd3(); stan(); } else if (digitalRead(13)) { lcd.setCursor(7, 0); lcd.print("\2"); gnd3(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(8, 0); lcd.print("\1"); gnd3(); stan(); lcd.setCursor(9, 0); lcd.print("\2"); gnd3(); stan(); if (!digitalRead(13)) { lcd.setCursor(10, 0); lcd.print("\3"); gnd3(); stan(); } else if (digitalRead(13)) { lcd.setCursor(10, 0); lcd.print("\1"); gnd3(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(11, 0); lcd.print("\1"); gnd3(); stan(); lcd.setCursor(12, 0); lcd.print("\2"); gnd3(); stan(); lcd.setCursor(13, 0); lcd.print("\1"); gnd3(); stan(); if (!digitalRead(13)) { lcd.setCursor(14, 0); lcd.print("\3"); gnd3(); stan(); } else if (digitalRead(13)) { lcd.setCursor(14, 0); lcd.print("\2"); gnd3(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(15, 0); lcd.print("\1"); gnd3(); stan(); } void land4() { lcd.setCursor(0, 0); lcd.print("\1"); gnd4(); stan(); lcd.setCursor(1, 0); lcd.print("\2"); gnd4(); stan(); lcd.setCursor(2, 0); lcd.print("\1"); gnd4(); stan(); if (!digitalRead(13)) { lcd.setCursor(3, 0); lcd.print("\3"); gnd4(); stan(); } else if (digitalRead(13)) { lcd.setCursor(3, 0); lcd.print("\2"); gnd4(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(4, 0); lcd.print("\1"); gnd4(); stan(); lcd.setCursor(5, 0); lcd.print("\2"); gnd4(); stan(); lcd.setCursor(6, 0); lcd.print("\1"); gnd4(); stan(); lcd.setCursor(7, 1); lcd.print("\2"); gnd4(); stan(); lcd.setCursor(8, 1); lcd.print("\1"); gnd4(); stan(); lcd.setCursor(9, 1); lcd.print("\2"); gnd4(); stan(); lcd.setCursor(10, 1); lcd.print("\1"); gnd4(); stan(); if (!digitalRead(13)) { keyPresence = true; lcd.setCursor(11, 0); lcd.print("\3"); kgnd4(); tone(0, 1000, 90); delay(200); lcd.clear(); lcd.setCursor(12, 1); lcd.print("\1"); kgnd4(); stan(); lcd.setCursor(13, 1); lcd.print("\2"); kgnd4(); stan(); lcd.setCursor(14, 1); lcd.print("\1"); kgnd4(); stan(); lcd.setCursor(15, 1); lcd.print("\2"); kgnd4(); stan(); } else if (digitalRead(13)) { keyPresence = false; lcd.setCursor(11, 1); lcd.print("\2"); gnd4(); stan(); lcd.setCursor(12, 1); lcd.print("\1"); gnd4(); stan(); lcd.setCursor(13, 1); lcd.print("\2"); gnd4(); stan(); lcd.setCursor(14, 1); lcd.print("\1"); gnd4(); stan(); lcd.setCursor(15, 1); lcd.print("\2"); gnd4(); stan(); } } void land5() { lcd.setCursor(0, 0); lcd.print("\1"); gnd5(); stan(); lcd.setCursor(1, 0); lcd.print("\2"); gnd5(); stan(); lcd.setCursor(2, 0); lcd.print("\1"); gnd5(); stan(); if (!digitalRead(13)) { lcd.setCursor(3, 0); lcd.print("\3"); gnd5(); stan(); } else if (digitalRead(13)) { lcd.setCursor(3, 0); lcd.print("\2"); gnd5(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(4, 0); lcd.print("\1"); gnd5(); stan(); lcd.setCursor(5, 0); lcd.print("\2"); gnd5(); stan(); lcd.setCursor(6, 0); lcd.print("\1"); gnd5(); stan(); lcd.setCursor(7, 0); lcd.print("\2"); gnd5(); stan(); if (!digitalRead(13)) { lcd.setCursor(8, 0); lcd.print("\3"); gnd5(); stan(); } else if (digitalRead(13)) { lcd.setCursor(8, 0); lcd.print("\2"); gnd5(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } lcd.setCursor(9, 0); lcd.print("\1"); gnd5(); stan(); lcd.setCursor(10, 0); lcd.print("\2"); gnd5(); stan(); lcd.setCursor(11, 0); lcd.print("\1"); gnd5(); stan(); lcd.setCursor(12, 0); lcd.print("\2"); gnd5(); stan(); if (keyPresence && !digitalRead(13)) { lcd.setCursor(13, 0); lcd.print("\1"); dgnd5(); delay(200); lcd.clear(); lcd.setCursor(14, 0); lcd.print("\2"); dgnd5(); stan(); lcd.setCursor(15, 0); lcd.print("\1"); dgnd5(); stan(); } else if (keyPresence && digitalRead(13)) { lcd.setCursor(12, 0); lcd.print("\2"); gnd5(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } else { lcd.setCursor(12, 0); lcd.print("\2"); gnd5(); stan(); countHealth = countHealth - 1; if (countHealth < 1) { return loop(); countHealth = 3; } } } void loop() { zvuk.setVolume (25); zvuk.play (1); level1(); level2(); } [/code]Такой жести я не видел с тыща девятьсот осьмнадцатого года... Заехали, как сейчас помню, к одной старушке в деревню по пути в Новгород, а она после чарки дареной возьми и покажи рыликвию семейную - грамоту на бересте писанную. И там в точности такие же коды изображены были.
Brat_Arduino. При всей замечательной идее, но структура программы никуда не годится не целиком , ни по частям. Некоторая аналогия. Допустим вы жили в землянке. А теперь решили , что от жизни крота Вы немного подустали и хотите жить в нормальном человеческом доме. А значит полностью убрать землянку и начать строить дом по более "прогрессивным" , чем "земляночные технологиям".
Такой жести я не видел с тыща девятьсот осьмнадцатого года...
да точно кто-то из "старичков" прикалывается... Та же стиральная машина, только теперь на экране...
qwone. Я пробовал применять цикл x = (x + 1) % 16, где x - переменная, которая будет увеличиватся на 1 от 0 до 16. lcd.setCursor(x, 0); Пробовал выполнять условие if(!digitalRead(13) && x == 7) т.е. если человек находитсся на 7-й строке над пропастью и при этом нажата кнопка - перемещаться дальше. иначе возвращаться в начало. Все работало нормально, но человек не реагировал на нажатия кнопки и просто самостоятельно перебегал пропасть. Я пробовал цикл for(int i = 0; ... ++i) но был тот же результат. Поэтому пришлось делать такой "раздутый" код.
Вот что я пытался делать. Помогите, что нужно исправить?
int placeHero = 0; // изначально переменная placeHero т.е. (место человека) равна нулю
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 10, 12);
void setup() {
pinMode(13, INPUT_PULLUP);
lcd.begin(16, 2);
}
void ground() {
lcd.setCursor(0, 1); //здесь не знаю как упростить...
lcd.write(0xFF); // а то пишу lcd.write() по 16 раз!
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0x20);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
lcd.write(0xFF);
}
void loop() {
placeHero = (placeHero + 1) % 16; // более упрощённый цикл
lcd.setCursor(placeHero, 0);
lcd.print("E");
ground();
delay(200);
lcd.clear();
if (placeHero == 5 && !digitalRead(13)) {
placeHero = 6;
lcd.setCursor(placeHero, 0);
lcd.print("E");
ground();
delay(200);
lcd.clear();
}
else if (placeHero == 5 && digitalRead(13)) {
return loop();
}
if (placeHero == 15) {
return placeHero;
}
}
это тоже. Но главное в программах не использовать delay().
А как это без delay()?
millis() что ли? Повторяю ещё раз - я новичок.
Может быть так?
int ms = (millis() / 200) % 16; //
lcd.setCursor(ms, 0);
Или не так?
Брат Ардуино - почему бы вам не начать с чтения учебников и освоения простыхх примеров, типа мигания светодиодом. Кстати, существует пример, обучающий работе с миллис. И тоже со светодиодом. Называется - "Блинк без делей".
А то сразу игру... Почему у вас не возникает желания построить своими руками самолет?
Повторяю ещё раз - я новичок.
Здесь это - отягчающее обстоятельство.
b707. Хе! Да хоть 2 светодиода:
int ledSignal1; int ledSignal2; void setup() { pinMode(10, OUTPUT); pinMode(11, OUTPUT); } void loop() { int ms1 = (millis() / 1000) % 2; int ms2 = (millis() / 700) % 2; if (ms1 == 0) { ledSignal1 = 100; } if (ms1 == 1) { ledSignal1 = 0; } if (ms2 == 0) { ledSignal2 = 100; } if (ms2 == 1) { ledSignal2 = 0; } analogWrite(10, ledSignal1); analogWrite(11, ledSignal2); }Brat_Arduino, ну и что вы написали ? Скорее всего писать надо так 3 скетч отсюда.#2
qwone. Слишком сложно. А чем миллис не пойдёт? Вы же мне сказали не использовать delay(). А я добавил ещё и 2 светодиода.
Ну qwone любит безсмысленой чепухи накидать. Миллис так как у Вас пойдет. Но намного полезней освоить формирование интервалов через вычитание из текущего миллиса значения миллиса в начале формируемого интервала. Это именно как новичку.
ПС. про переполнение не читайте лучше вообще ;) И уж точно не пишите.
Logik. Спасибо. Да меня вот мучает вопрос: я значение миллис записываю в setCursor. Это перемещается буква на блок вперёд. Но есть проблемы: буква не перемещается а добавляется, не стирая за собой предыдущие, когда дойдёт до конца - тупо останавливается, а мне надо, чтобы начиналось снова. Короче, вот мой скетч:
#include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 10, 12); //пины для экрана void setup() { lcd.begin(16, 2); pinMode(13, INPUT_PULLUP); // кнопка } void loop() { int placeHero = (millis() / 500) % 16; // миллис с 0 до 16 lcd.setCursor(placeHero, 0); // ставим курсор в начало и потом его увеличивать на 1 lcd.write(0xff); // отрисовать блок lcd.setCursor(7, 1); // поставить стрелку вниз lcd.write(0xd9); //... и нарисовать её if (placeHero == 6 && digitalRead(13)) { // если увеличился до 7 и НЕ нажата кнопка return loop(); // начинать сначала } }ОЧЕНЬ ПРОШУ, ПОМОГИТЕ ИСПРАВИТЬ!
Извиняюсь, что 8 раз прислал) проблемы с сетью были
Вас 15 строке какой гад научил? И куда направится программа после 17 строки, по вашему?
Вас 15 строке какой гад научил?
Здесь на форуме нашёл. Я такое уже видел :)
Здесь на форуме нашёл. Я такое уже видел :)
Значит вирус уже пошел? Надеялся, что зараза только здесь (#13) началась.((((
Надеялся, что зараза только здесь (#13) началась.((((
Да, ладно! Это очень популярная и полезная конструкция, широко встречающаяся на просторах Интернета - главного учебника наших ньюби. Причём встречается даже в "солидных учебных курсах от больших гуру". Вот, например, "Урок 50. Игра "Лабиринт" на Arduino". Любуйтесь!
----------------------
P.S.
Сегодня трепался по телефону со знакомым - профессором питерского политеха (который "Петра Великого"), неожиданно всплыл наш Форум в забавном контексте.
Мужик говорит, спрашиваю аспиранта, который лабораторные занятия ведёт: "Ну, как там, много у тебя недопусков к экзамену рисуется? А то может не допустишь всех, и во время сессии в Турцию махнём?" - "Да, знаете, задолбали - этот arduino.ru с амперкой вместе хоть через роскомнадзор закрывай!" - "А чего так?" - "Да, сегодня у одного оботуса вижу уж больно необолтусный код, начинаю спрашивать что там да как, чтобы проверить понимает ли что написано, а он мне - "А чего? Тут всё правильно! Мне на arduino.ru подсказали!"".
Во как! Влияние нашего форума на российскую высшую школу!
Надо по почерку выяснить - кто писал.
Ну, текста нет, но "необолтусный код" - думаю Квон со своими классами наворотил. Он одно время любил каждому раздолбаю готовый код на тарелочке выкладывать :)
нет, квонокод бы не сдал.
Точно мне не сказали, но из контекста я понял, что он и не сдал :)