Pong с ботом на arduino mega и tft дисплеем
- Войдите на сайт для отправки комментариев
Втр, 22/09/2020 - 13:26
Купил дисплей 3.2" LCD Module 40pin(списал с этикетки), шилд и мегу. Далее захотел сделать игру понг с ботом, используя библиотеку https://github.com/Bodmer/TFT_HX8357(с другими этот дисплей не работает) и тачскрин(библиотека TouchScreen.h). Нужна помощь с написанием кода противника. Help!..
А от нас чонада?
ILI9341 16 bit 240x320 with touchscreen(дисплей)
Нужна помощь с написанием кода противника.
это надо... э... помощчь
то есть сделать захотел ты, а код за тебя кто-то писать будет?
хорошо, я возьмусь от $1000
Парень, ты уже все форумы заспамил
3 раз мне называют эту цену
ну ладно, я говорю, ПРОСТО КУСОЧЕК КОДА С ПРОТИВНИКОМ!!!
ты на AlexGyver Community и Forum Amerka тоже есть?
void enemyTick() { if (millis() - enemyTimer >= (II_SPEED - iiIncr)) { enemyTimer = millis(); if (racketPos2 + RACKET_LEN / 2 > ballPos[1]) racketPos2--; else racketPos2++; racketPos2 = constrain(racketPos2, 0, 16 - RACKET_LEN); } }Это от другого дисплея, но тоже понг с ботом
это надо... э... помощчь
В чём она должна выражаться?
Пожелать удачи - это помощь? А порекомендовать вуз, где учат программированию - это помощь?
Напишите конкретно, какая именно помощь Вам нужна.
3 раз мне называют эту цену
не ври.
Хватит побираться по форумам, пойми уже, что никто тебе игрушки бесплатно не напишет
3 раз мне называют эту цену
Ты прав, $1k - действительно неадекватная цена.
Хочешь реальную, адекватную цену, обращайся ко мне, я сделаю за $2.5k
Устраивает?
Напишите конкретно, какая именно помощь Вам нужна.
Обьяснить, что значит этот код:
void enemyTick() { if (millis() - enemyTimer >= (II_SPEED - iiIncr)) { enemyTimer = millis(); if (racketPos2 + RACKET_LEN / 2 > ballPos[1]) racketPos2--; else racketPos2++; racketPos2 = constrain(racketPos2, 0, 16 - RACKET_LEN); } }3 раз мне называют эту цену
Ты прав, $1k - действительно неадекватная цена.
Хочешь реальную, адекватную цену, обращайся ко мне, я сделаю за $2.5k
Устраивает?
Еще неадекватнее сделал
никто тебе игрушки бесплатно не напишет
я не игрушку прошу, а объяснение кода (это все што надо от вас):
#define GAME_SPEED 110 // стандартный период движения шарика #define II_SPEED 175 // стандартный период движения противника #define ALWAYS_SPEED 1 // беспеременная скорость противника ( 1 - беспеременная, 0 - переменная) #define MY_SPEED 1 // моя скорость(в пикселях)(2 - для начинающих, 1 - для опытных) #define RANDOM_BOUNCE 1 // отбивать шарик в случайном направлении // пины #define BTN_UP 4 #define BTN_DWN 3 // другие настройки #define X_PLAYER_1 7 #define X_PLAYER_2 55 #define RACKET_LEN 5 int8_t ballPos[2]; int8_t ballSpeed[2]; uint32_t ballTimer, enemyTimer; boolean btnFlag1, btnFlag2; int8_t racketPos1, racketPos2 = 0; int8_t prevRacketPos1, prevRacketPos2 = 0; byte count2; byte speedIncr = 0, iiIncr = 0; byte count1; #include <Wire.h> void setup() { pinMode(BTN_UP, INPUT_PULLUP); pinMode(BTN_DWN, INPUT_PULLUP); Wire.begin(); oledInit(); oledClear(); digit(0, 0, 0); digit(0, 20, 0); randomSeed(analogRead(0)); newRound(); redrawRacket(); redrawRacket2(); } void loop() { ballRoutine(); buttonTick(); enemyTick(); } void enemyTick() { if (millis() - enemyTimer >= (II_SPEED - iiIncr)) { enemyTimer = millis(); if (racketPos2 + RACKET_LEN / 2 > ballPos[1]) racketPos2--; else racketPos2++; racketPos2 = constrain(racketPos2, 0, 16 - RACKET_LEN); redrawRacket2(); } } void buttonTick() { if (!digitalRead(BTN_DWN) && !btnFlag1) { btnFlag1 = true; racketPos1 += MY_SPEED; if (racketPos1 > (16 - RACKET_LEN)) racketPos1 = (16 - RACKET_LEN); redrawRacket(); } if (digitalRead(BTN_DWN) && btnFlag1) { btnFlag1 = false; } if (!digitalRead(BTN_UP) && !btnFlag2) { btnFlag2 = true; racketPos1 -= MY_SPEED; if (racketPos1 < 0) racketPos1 = 0; redrawRacket(); } if (digitalRead(BTN_UP) && btnFlag2) { btnFlag2 = false; } } void redrawRacket() { for (byte i = prevRacketPos1; i < prevRacketPos1 + RACKET_LEN; i++) { dotClear(X_PLAYER_1, i); } for (byte i = racketPos1; i < racketPos1 + RACKET_LEN; i++) { dotSet(X_PLAYER_1, i); } prevRacketPos1 = racketPos1; } void redrawRacket2() { for (byte i = prevRacketPos2; i < prevRacketPos2 + RACKET_LEN; i++) { dotClear(X_PLAYER_2, i); } for (byte i = racketPos2; i < racketPos2 + RACKET_LEN; i++) { dotSet(X_PLAYER_2, i); } prevRacketPos2 = racketPos2; } void ballRoutine() { if (millis() - ballTimer >= (GAME_SPEED - speedIncr)) { ballTimer = millis(); int8_t prevPos[2]; for (byte i = 0; i < 2; i++) { prevPos[i] = ballPos[i]; ballPos[i] += ballSpeed[i]; } if (ballPos[0] < X_PLAYER_1) { if (!(prevPos[1] >= racketPos1 && prevPos[1] <= (racketPos1 + RACKET_LEN))) { count2++; if (count2 > 9) { digit(count2 / 10, 20, 0); digit(count2 % 10, 20, 1); } else { digit(count2, 20, 0); } delay(1000); newRound(); dotClear(prevPos[0], prevPos[1]); return; } else { ballPos[0] = prevPos[0]; ballSpeed[0] = -ballSpeed[0]; if (RANDOM_BOUNCE) ballSpeed[1] *= (random(0, 2)) ? 1 : -1; } } if (ballPos[1] < 0) { ballPos[1] = -ballPos[1]; ballSpeed[1] = -ballSpeed[1]; } if (ballPos[0] > X_PLAYER_2) { if (!(prevPos[1] >= racketPos2 && prevPos[1] <= (racketPos2 + RACKET_LEN))) { count1++; if (count1 > 9) { digit(count1 / 10, 0, 0); digit(count1 % 10, 0, 1); } else { digit(count1, 0, 0); } delay(1000); newRound(); dotClear(prevPos[0], prevPos[1]); return; } else { ballPos[0] = prevPos[0]; ballSpeed[0] = -ballSpeed[0]; if (RANDOM_BOUNCE) ballSpeed[1] *= (random(0, 2)) ? 1 : -1; } } if (ballPos[1] > 15) { ballPos[1] = 15; ballSpeed[1] = -ballSpeed[1]; } dotClear(prevPos[0], prevPos[1]); dotSet(ballPos[0], ballPos[1]); } } void newRound() { randomSeed(millis()); ballPos[0] = X_PLAYER_1 + 1; racketPos1 = random(0, 16 - RACKET_LEN); ballPos[1] = racketPos1 + RACKET_LEN / 2; ballSpeed[0] = 2; ballSpeed[1] = (random(0, 2)) ? 1 : -1; //racketPos2 = 8; redrawRacket(); redrawRacket2(); if (ALWAYS_SPEED == 1) { if (count1 >= 10) { speedIncr = 10; iiIncr = 20; } if (count1 >= 20) { speedIncr = 20; iiIncr = 50; } if (count1 >= 30) { speedIncr = 35; iiIncr = 75; } } }Во!
Обьяснить, что значит этот код:
void enemyTick() { if (millis() - enemyTimer >= (II_SPEED - iiIncr)) { enemyTimer = millis(); if (racketPos2 + RACKET_LEN / 2 > ballPos[1]) racketPos2--; else racketPos2++; racketPos2 = constrain(racketPos2, 0, 16 - RACKET_LEN); } }Ничего не значит.
Это кусок без начала и без конца в котором используются переменные, которых описаны где-то в другом месте.
а автор кода что говорит?
я не игрушку прошу, а объяснение кода (это все што надо от вас):
#define GAME_SPEED 110 // стандартный период движения шарика #define II_SPEED 175 // стандартный период движения противника #define ALWAYS_SPEED 1 // беспеременная скорость противника ( 1 - беспеременная, 0 - переменная) #define MY_SPEED 1 // моя скорость(в пикселях)(2 - для начинающих, 1 - для опытных) #define RANDOM_BOUNCE 1 // отбивать шарик в случайном направлении // пины #define BTN_UP 4 #define BTN_DWN 3 // другие настройки #define X_PLAYER_1 7 #define X_PLAYER_2 55 #define RACKET_LEN 5 int8_t ballPos[2]; int8_t ballSpeed[2]; uint32_t ballTimer, enemyTimer; boolean btnFlag1, btnFlag2; int8_t racketPos1, racketPos2 = 0; int8_t prevRacketPos1, prevRacketPos2 = 0; byte count2; byte speedIncr = 0, iiIncr = 0; byte count1; #include <Wire.h> void setup() { pinMode(BTN_UP, INPUT_PULLUP); pinMode(BTN_DWN, INPUT_PULLUP); Wire.begin(); oledInit(); oledClear(); digit(0, 0, 0); digit(0, 20, 0); randomSeed(analogRead(0)); newRound(); redrawRacket(); redrawRacket2(); } void loop() { ballRoutine(); buttonTick(); enemyTick(); } void enemyTick() { if (millis() - enemyTimer >= (II_SPEED - iiIncr)) { enemyTimer = millis(); if (racketPos2 + RACKET_LEN / 2 > ballPos[1]) racketPos2--; else racketPos2++; racketPos2 = constrain(racketPos2, 0, 16 - RACKET_LEN); redrawRacket2(); } } void buttonTick() { if (!digitalRead(BTN_DWN) && !btnFlag1) { btnFlag1 = true; racketPos1 += MY_SPEED; if (racketPos1 > (16 - RACKET_LEN)) racketPos1 = (16 - RACKET_LEN); redrawRacket(); } if (digitalRead(BTN_DWN) && btnFlag1) { btnFlag1 = false; } if (!digitalRead(BTN_UP) && !btnFlag2) { btnFlag2 = true; racketPos1 -= MY_SPEED; if (racketPos1 < 0) racketPos1 = 0; redrawRacket(); } if (digitalRead(BTN_UP) && btnFlag2) { btnFlag2 = false; } } void redrawRacket() { for (byte i = prevRacketPos1; i < prevRacketPos1 + RACKET_LEN; i++) { dotClear(X_PLAYER_1, i); } for (byte i = racketPos1; i < racketPos1 + RACKET_LEN; i++) { dotSet(X_PLAYER_1, i); } prevRacketPos1 = racketPos1; } void redrawRacket2() { for (byte i = prevRacketPos2; i < prevRacketPos2 + RACKET_LEN; i++) { dotClear(X_PLAYER_2, i); } for (byte i = racketPos2; i < racketPos2 + RACKET_LEN; i++) { dotSet(X_PLAYER_2, i); } prevRacketPos2 = racketPos2; } void ballRoutine() { if (millis() - ballTimer >= (GAME_SPEED - speedIncr)) { ballTimer = millis(); int8_t prevPos[2]; for (byte i = 0; i < 2; i++) { prevPos[i] = ballPos[i]; ballPos[i] += ballSpeed[i]; } if (ballPos[0] < X_PLAYER_1) { if (!(prevPos[1] >= racketPos1 && prevPos[1] <= (racketPos1 + RACKET_LEN))) { count2++; if (count2 > 9) { digit(count2 / 10, 20, 0); digit(count2 % 10, 20, 1); } else { digit(count2, 20, 0); } delay(1000); newRound(); dotClear(prevPos[0], prevPos[1]); return; } else { ballPos[0] = prevPos[0]; ballSpeed[0] = -ballSpeed[0]; if (RANDOM_BOUNCE) ballSpeed[1] *= (random(0, 2)) ? 1 : -1; } } if (ballPos[1] < 0) { ballPos[1] = -ballPos[1]; ballSpeed[1] = -ballSpeed[1]; } if (ballPos[0] > X_PLAYER_2) { if (!(prevPos[1] >= racketPos2 && prevPos[1] <= (racketPos2 + RACKET_LEN))) { count1++; if (count1 > 9) { digit(count1 / 10, 0, 0); digit(count1 % 10, 0, 1); } else { digit(count1, 0, 0); } delay(1000); newRound(); dotClear(prevPos[0], prevPos[1]); return; } else { ballPos[0] = prevPos[0]; ballSpeed[0] = -ballSpeed[0]; if (RANDOM_BOUNCE) ballSpeed[1] *= (random(0, 2)) ? 1 : -1; } } if (ballPos[1] > 15) { ballPos[1] = 15; ballSpeed[1] = -ballSpeed[1]; } dotClear(prevPos[0], prevPos[1]); dotSet(ballPos[0], ballPos[1]); } } void newRound() { randomSeed(millis()); ballPos[0] = X_PLAYER_1 + 1; racketPos1 = random(0, 16 - RACKET_LEN); ballPos[1] = racketPos1 + RACKET_LEN / 2; ballSpeed[0] = 2; ballSpeed[1] = (random(0, 2)) ? 1 : -1; //racketPos2 = 8; redrawRacket(); redrawRacket2(); if (ALWAYS_SPEED == 1) { if (count1 >= 10) { speedIncr = 10; iiIncr = 20; } if (count1 >= 20) { speedIncr = 20; iiIncr = 50; } if (count1 >= 30) { speedIncr = 35; iiIncr = 75; } } }Во!
Что конкретно тебе непонятно в этом коде? Строка №1 понятна? А строка №2? Ты вопрос задать можешь? Или тебе надо просто идти по строчкам и всё разжёвывать? Так тоже можно, $20 за строку. Согласен?
Еще неадекватнее сделал
А сколько э по твоему адекватно? $3к? Ну, может, ты и прав, давай эту цену обсудим.
ГРАБЯТ!!!
все, вы меня всбесили
иду делать сам, и еще на ютюб выложу
ничего не говорит
"нате вам код, и делайте с неим что хотите"
иду делать сам, и еще на ютюб выложу
Давно бы так!
Есть всё-таки польза от нашего форума!!!
Есть всё-таки польза от нашего форума!!!
это уже 3 форум на котором я спрашивал, такчто вы не первые
Есть всё-таки польза от нашего форума!!!
это уже 3 форум на котором я спрашивал, такчто вы не первые
ага, и уже третий, где ты обещаешь "сделаю сам". Давай уже делай
тэма закрыта
тэма закрыта
вопрос решили за час:)
Напишите конкретно, какая именно помощь Вам нужна.
Обьяснить, что значит этот код:
void enemyTick() { if (millis() - enemyTimer >= (II_SPEED - iiIncr)) { enemyTimer = millis(); if (racketPos2 + RACKET_LEN / 2 > ballPos[1]) racketPos2--; else racketPos2++; racketPos2 = constrain(racketPos2, 0, 16 - RACKET_LEN); } }да что тут не ясного , этот код что и делает , всего лишь следует за..
Вот магия, даже без мата послали и, дошёл!!))) Правда результата не будет, но это мелочи...