Pong с ботом на arduino mega и tft дисплеем

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

Купил дисплей 3.2" LCD Module 40pin(списал с этикетки), шилд и мегу. Далее захотел сделать игру понг с ботом, используя библиотеку https://github.com/Bodmer/TFT_HX8357(с другими этот дисплей не работает) и тачскрин(библиотека TouchScreen.h). Нужна помощь с написанием кода противника. Help!..

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А от нас чонада?

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

ILI9341 16 bit 240x320 with touchscreen(дисплей)

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

Arduino_Pro_Micro пишет:

Нужна помощь с написанием кода противника.

это надо... э... помощчь

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

то есть сделать захотел ты, а код за тебя кто-то писать будет?  

хорошо, я возьмусь от $1000

b707
Онлайн
Зарегистрирован: 26.05.2017

Парень, ты уже все форумы заспамил

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

3 раз мне называют эту цену

 

 

ну ладно, я говорю, ПРОСТО КУСОЧЕК КОДА С ПРОТИВНИКОМ!!!

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

ты на AlexGyver Community и Forum Amerka тоже есть?

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019
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);
  }
}

Это от другого дисплея, но тоже понг с ботом

 

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019
#define RACKET_LEN 5
#define II_SPEED 175
byte iiIncr = 0

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arduino_Pro_Micro пишет:

это надо... э... помощчь

В чём она должна выражаться?

Пожелать удачи - это помощь? А порекомендовать вуз, где учат программированию - это помощь?

Напишите конкретно, какая именно помощь Вам нужна.

b707
Онлайн
Зарегистрирован: 26.05.2017

Arduino_Pro_Micro пишет:

3 раз мне называют эту цену


не ври.
Хватит побираться по форумам, пойми уже, что никто тебе игрушки бесплатно не напишет

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Arduino_Pro_Micro пишет:

3 раз мне называют эту цену

Ты прав, $1k - действительно неадекватная цена.

Хочешь реальную, адекватную цену, обращайся ко мне, я сделаю за $2.5k

Устраивает?

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

ЕвгенийП пишет:

Напишите конкретно, какая именно помощь Вам нужна.

Обьяснить, что значит этот код:

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

 

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

Ворота пишет:

Arduino_Pro_Micro пишет:

3 раз мне называют эту цену

Ты прав, $1k - действительно неадекватная цена.

Хочешь реальную, адекватную цену, обращайся ко мне, я сделаю за $2.5k

Устраивает?

Еще неадекватнее сделал

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

b707 пишет:

никто тебе игрушки бесплатно не напишет

я не игрушку прошу, а объяснение кода (это все што надо от вас):

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

Во!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arduino_Pro_Micro пишет:

Обьяснить, что значит этот код:

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

Ничего не значит.

Это кусок без начала и без конца в котором используются переменные, которых описаны где-то в другом месте.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а автор кода что говорит?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Arduino_Pro_Micro пишет:

я не игрушку прошу, а объяснение кода (это все што надо от вас):

#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 за строку. Согласен?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Arduino_Pro_Micro пишет:

Еще неадекватнее сделал

А сколько э по твоему адекватно? $3к? Ну, может, ты и прав, давай эту цену обсудим.

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

ГРАБЯТ!!!

 

 

все, вы меня всбесили

 

 

 

иду делать сам, и еще на ютюб выложу

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

ничего не говорит

 

 

 

"нате вам код, и делайте с неим что хотите"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arduino_Pro_Micro пишет:

иду делать сам, и еще на ютюб выложу

Давно бы так!

Есть всё-таки польза от нашего форума!!!

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

ЕвгенийП пишет:

Есть всё-таки польза от нашего форума!!!

это уже 3 форум на котором я спрашивал, такчто вы не первые

b707
Онлайн
Зарегистрирован: 26.05.2017

Arduino_Pro_Micro пишет:

ЕвгенийП пишет:

Есть всё-таки польза от нашего форума!!!

это уже 3 форум на котором я спрашивал, такчто вы не первые


ага, и уже третий, где ты обещаешь "сделаю сам". Давай уже делай

Arduino_Pro_Micro
Offline
Зарегистрирован: 08.03.2019

тэма закрыта

b707
Онлайн
Зарегистрирован: 26.05.2017

Arduino_Pro_Micro пишет:

тэма закрыта


вопрос решили за час:)

mixail844
Offline
Зарегистрирован: 30.04.2012

Arduino_Pro_Micro пишет:

ЕвгенийП пишет:

Напишите конкретно, какая именно помощь Вам нужна.

Обьяснить, что значит этот код:

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

 

 

да что тут не ясного , этот код что и делает , всего лишь следует за..

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Вот магия, даже без мата послали и, дошёл!!))) Правда результата не будет, но это мелочи...