помогите пожалуста игра на ардуино тв

Corolsan
Offline
Зарегистрирован: 03.10.2016

вот не могу понять как сделать чтоб когда ловил хилку здоровье пополнялось ;

(конец скетча);

сам скетч:

#include <TVout.h>
#include <fontALL.h>
TVout TV;
 
 
 
  #define SCREEN_WIDTH 112
  #define SCREEN_HEIGHT 112
#endif 
// potentiometer game paddle input
#define POTPIN 2
#define PADDLE_DEAD_ZONE_LOW 256
 
#define INITIAL_SPEED 10
 
// SPRITE BITMAPS //
PROGMEM const unsigned char CONFETA_SPRITE[] = {
5,5, 0x88,0xD8,0xF8,0xD8,0x88};
PROGMEM const unsigned char HEART_SPRITE[] = {
8,8, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0x7C, 0x38, 0x10};
PROGMEM const unsigned char PLAYER_SPRITE[] = {
16,16,
0x81,0x81,0xFF,0xFF,0x70,0x0E,0x33,0xCC,
0x14,0x28,0x17,0xE8,0x14,0x28,0x13,0xC8,
0x11,0x88,0x1F,0xF8,0x04,0x20,0x05,0xA0,
0x05,0xA0,0x0C,0x30,0x1F,0xF8,0x3F,0xFC
};
PROGMEM const unsigned char HILKA_SPRITE[] = {
5,5, 0xF8,0xD8,0x88,0xD8,0xF8};
 
// GAME STATE //
int state = 0;
int val = 0;  // paddle (potentiometer) position
int newval = 0; // new paddle (potentiometer) position
int pxpos = SCREEN_WIDTH/2; // player position
int cxpos = random(0, SCREEN_WIDTH-COLLECT_SPRITE[0]/2);
int cypos = 0;
int cspeed = 1; // collectible fall speed
int lives = 5;
unsigned long score = 0l; // здесь 01
char strscore[6] = "00000";
 
int i; // your generic loop variable
 
 
void setup() {
  TV.begin(_PAL, SCREEN_WIDTH, SCREEN_HEIGHT);
  TV.clear_screen();
  TV.select_font(font6x8);
  //Serial.begin(9600); // Uncomment for debug
}
int read_paddle_pos() {
 
  return max(PADDLE_DEAD_ZONE_LOW, analogRead(POTPIN))-PADDLE_DEAD_ZONE_LOW;  
}
 
void loop() { 
  
 
  // GAME INTRO STATE //
  if (state==0) {
    delay(500);
    TV.clear_screen();
    TV.print(SCREEN_WIDTH/2-3.3*5,SCREEN_HEIGHT/17,"igra ");
    TV.print(SCREEN_WIDTH/2-8*5,SCREEN_HEIGHT/8,"poimay konfety");
    TV.print(SCREEN_WIDTH/2-4*5,SCREEN_HEIGHT/1.25,"by Corolsan");
    val = read_paddle_pos();
    state+=1;
    return; // EXIT LOOP
  } 
  // WAIT USER INPUT STATE //
  else if (state==1) {
    newval = read_paddle_pos();
    if (abs(val-newval)>10) {
      state+=1;
    }
    return;
  }
  
  
  // 1. CHECK FOR END CONDITION
  if (lives==0) {
    TV.print(SCREEN_WIDTH-33,0, strscore);
    TV.print(SCREEN_WIDTH/6,SCREEN_HEIGHT/2,"igra okoncena");
    TV.noTone();
    state=3;
    return; // EXIT LOOP
  }
  
  // Wait for vblank to avoid flicker
  TV.delay_frame(1);
  TV.clear_screen();
  
  // 2. DRAW LIVES AND SCORE
  for (i = 0 ; i < lives ; i++) {
    TV.bitmap(8*i, 0, HEART_SPRITE);
  }
 
  TV.print(SCREEN_WIDTH-33,0, strscore);
 boolean job = (cspeed == 9 );
 if (job){
  TV.bitmap(cxpos, cypos, HILKA_SPRITE);
 } else {
  TV.bitmap(cxpos, cypos, COLLECT_SPRITE);}
  cypos+=max(1,cspeed/4);
  
  // 4. DRAW PLAYER 
  newval = read_paddle_pos();    // read the value from the sensor
  // Prevent jitter
  if (abs(val-newval)>2) {
    val = newval;
    pxpos = (int)((SCREEN_WIDTH-16)*(float)val/(1024-PADDLE_DEAD_ZONE_LOW));
  }
  TV.bitmap(pxpos, SCREEN_HEIGHT-17, PLAYER_SPRITE);
    
  // 5. CHECK FOR FALLING THINGS HITTING THE FLOOR
   if (cypos>=(SCREEN_HEIGHT-HILKA_SPRITE[1])) { 
 
    int d = abs((cxpos+HILKA_SPRITE[0]/2)-(pxpos+PLAYER_SPRITE[0]/2));
    if (d<PLAYER_SPRITE[0]/2) {
      score+=100;
      sprintf(strscore, "%05lu", score);
      lives+=1;
      cspeed+=1;
    }
 
        }
    cxpos = random(0, SCREEN_WIDTH-HILKA_SPRITE[0]/2);
    cypos = 0;
  }
 
 else {(cypos>=(SCREEN_HEIGHT-COLLECT_SPRITE[1])) { 
    // Player and thing are on top of each other,
    // -> player collected the object
    int d = abs((cxpos+COLLECT_SPRITE[0]/2)-(pxpos+PLAYER_SPRITE[0]/2));
    if (d<PLAYER_SPRITE[0]/2) {
      score+=100*cspeed;
      sprintf(strscore, "%05lu", score);
      cspeed+=1;
    }
    else {
      // Oops, player failed to catch the thing
      lives-=1;
      if (lives==0) {
         TV.clear_screen();
      }
    }
    cxpos = random(0, SCREEN_WIDTH-COLLECT_SPRITE[0]/2);
    cypos = 0;
  }
 }
 
  // Speed up the game as more collectibles are catched
  delay(max(1,INITIAL_SPEED-cspeed));
}

//зарание спасибо

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

Читер? :)))

1. Опубликуйте код как положено.

2. Объясните проблему нормальным языком: в терминах переменных и функций, а не хилок и здоровья.

Corolsan
Offline
Зарегистрирован: 03.10.2016


#include <TVout.h>
#include <fontALL.h>
TVout TV; 
  #define SCREEN_WIDTH 112
  #define SCREEN_HEIGHT 112
#endif 
// potentiometer game paddle input
#define POTPIN 2
#define PADDLE_DEAD_ZONE_LOW 256
 
#define INITIAL_SPEED 10
 
// SPRITE BITMAPS //
PROGMEM const unsigned char CONFETA_SPRITE[] = {
5,5, 0x88,0xD8,0xF8,0xD8,0x88};
PROGMEM const unsigned char HEART_SPRITE[] = {
8,8, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0x7C, 0x38, 0x10};
PROGMEM const unsigned char PLAYER_SPRITE[] = {
16,16,
0x81,0x81,0xFF,0xFF,0x70,0x0E,0x33,0xCC,
0x14,0x28,0x17,0xE8,0x14,0x28,0x13,0xC8,
0x11,0x88,0x1F,0xF8,0x04,0x20,0x05,0xA0,
0x05,0xA0,0x0C,0x30,0x1F,0xF8,0x3F,0xFC
};
PROGMEM const unsigned char HILKA_SPRITE[] = {
5,5, 0xF8,0xD8,0x88,0xD8,0xF8};
 
// GAME STATE //
int state = 0;
int val = 0;  // paddle (potentiometer) position
int newval = 0; // new paddle (potentiometer) position
int pxpos = SCREEN_WIDTH/2; // player position
int cxpos = random(0, SCREEN_WIDTH-COLLECT_SPRITE[0]/2);
int cypos = 0;
int cspeed = 1; // collectible fall speed
int lives = 5;
unsigned long score = 0l; // здесь 01
char strscore[6] = "00000";
 
int i; // your generic loop variable
 
 
void setup() {
  TV.begin(_PAL, SCREEN_WIDTH, SCREEN_HEIGHT);
  TV.clear_screen();
  TV.select_font(font6x8);
  //Serial.begin(9600); // Uncomment for debug
}
int read_paddle_pos() {
 
  return max(PADDLE_DEAD_ZONE_LOW, analogRead(POTPIN))-PADDLE_DEAD_ZONE_LOW;  
}
 
void loop() { 
  
 
  // GAME INTRO STATE //
  if (state==0) {
    delay(500);
    TV.clear_screen();
    TV.print(SCREEN_WIDTH/2-3.3*5,SCREEN_HEIGHT/17,"igra ");
    TV.print(SCREEN_WIDTH/2-8*5,SCREEN_HEIGHT/8,"poimay konfety");
    TV.print(SCREEN_WIDTH/2-4*5,SCREEN_HEIGHT/1.25,"by Corolsan");
    val = read_paddle_pos();
    state+=1;
    return; // EXIT LOOP
  } 
  // WAIT USER INPUT STATE //
  else if (state==1) {
    newval = read_paddle_pos();
    if (abs(val-newval)>10) {
      state+=1;
    }
    return;
  }
  
  
  // 1. CHECK FOR END CONDITION
  if (lives==0) {
    TV.print(SCREEN_WIDTH-33,0, strscore);
    TV.print(SCREEN_WIDTH/6,SCREEN_HEIGHT/2,"igra okoncena");
    TV.noTone();
    state=3;
    return; // EXIT LOOP
  }
  
  // Wait for vblank to avoid flicker
  TV.delay_frame(1);
  TV.clear_screen();
  
  // 2. DRAW LIVES AND SCORE
  for (i = 0 ; i < lives ; i++) {
    TV.bitmap(8*i, 0, HEART_SPRITE);
  }
 
  TV.print(SCREEN_WIDTH-33,0, strscore);
 boolean job = (cspeed == 9 );
 if (job){
  TV.bitmap(cxpos, cypos, HILKA_SPRITE);
 } else {
  TV.bitmap(cxpos, cypos, COLLECT_SPRITE);}
  cypos+=max(1,cspeed/4);
  
  // 4. DRAW PLAYER 
  newval = read_paddle_pos();    // read the value from the sensor
  // Prevent jitter
  if (abs(val-newval)>2) {
    val = newval;
    pxpos = (int)((SCREEN_WIDTH-16)*(float)val/(1024-PADDLE_DEAD_ZONE_LOW));
  }
  TV.bitmap(pxpos, SCREEN_HEIGHT-17, PLAYER_SPRITE);
    
  // 5. CHECK FOR FALLING THINGS HITTING THE FLOOR
   if (cypos>=(SCREEN_HEIGHT-HILKA_SPRITE[1])) { 
 
    int d = abs((cxpos+HILKA_SPRITE[0]/2)-(pxpos+PLAYER_SPRITE[0]/2));
    if (d<PLAYER_SPRITE[0]/2) {
      score+=100;
      sprintf(strscore, "%05lu", score);
      lives+=1;
      cspeed+=1;
    }
 
        }
    cxpos = random(0, SCREEN_WIDTH-HILKA_SPRITE[0]/2);
    cypos = 0;
  }
 
 else {(cypos>=(SCREEN_HEIGHT-COLLECT_SPRITE[1])) { 
    // Player and thing are on top of each other,
    // -> player collected the object
    int d = abs((cxpos+COLLECT_SPRITE[0]/2)-(pxpos+PLAYER_SPRITE[0]/2));
    if (d<PLAYER_SPRITE[0]/2) {
      score+=100*cspeed;
      sprintf(strscore, "%05lu", score);
      cspeed+=1;
    }
    else {
      // если не поймал
      lives-=1;
      if (lives==0) {
         TV.clear_screen();
      }
    }
    cxpos = random(0, SCREEN_WIDTH-COLLECT_SPRITE[0]/2);
    cypos = 0;
  }
 }
 
  // Speed up the game as more collectibles are catched
  delay(max(1,INITIAL_SPEED-cspeed));
}

 

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

Давайте, Вы свё же выложите нормально.

Ну, не хочу я читать такой текст - "( переменная <span style="font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;">HILKA_SPRITE ,здровье </span><span style="font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;">HEART_SPRITE"

Давайте, это не трудно.

Corolsan
Offline
Зарегистрирован: 03.10.2016

Извините я первый раз на этом сайте многого еще не знаю
В самом конце скетча у меня случилась проблема с переменными это игра на тв я и говорил такими словами хилка ( переменная HILKA_SPRITE ,здровье HEART_SPRITE к
ним присвоены функции, но они путаются вот и вся проблема

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

Погодите "к ним присвоены функции, но они путаются" - Вы сами что-нибудь поняли?

Объясните толком, что Вам нужно и что имеем сейчас и чем первое отличается от второго. 

Можете объяснить?

Corolsan
Offline
Зарегистрирован: 03.10.2016

вообщем с 114 строки 

я не понял как сделать правильно

у меня не срабатываут функция

посмотрите и поймете

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

1. В строке 114 нет никакой функции

2. функция не может "не срабатывать" Она всегда что-то делает. то, что Вам нужно или нет. Вот я и пытаюсь понять что же Вам нужно.

В общем, если Вы не в состоянии объяснить в чём Ваша проблема, то я не в состоянии Вам помочь. Жаль.