Массивы

alex85
Offline
Зарегистрирован: 12.11.2013

Хоть убей не могу понять двухмерные массивы.

Мне они нужны для вывода на дисплей знаков в рандомной позиции(мне так по крайней мере кажется). Можете объяснить тормозу? Как они используются, как их выводить и зачем они нужны?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Не проще брать случайные координаты вывода на дисплей, нежели для этого еще использовать лишнюю память?

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

думаю rnd() больше в памяти займет, чем массив

alex85
Offline
Зарегистрирован: 12.11.2013

Я сделал через переменные просто у меня их много и они постоянно меняются изза чегоыод занимает много места

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012
#include <stdlib.h>

// Пустой скетч 404 байта для ATmega16
// 900 байт

void setup()
{
}

void loop()
{
  rand();
}

Разница 500 байт.

Какого размера массив нужен? А то мы говорим про абстрактный дисплей, а также абстрактный вывод символов в случайную позицию на дисплей.

Если длина массива будет больше 500 байт (заметьте rand() располагается во флеше, а не в RAM, а массив в RAM), то делайте выводы.

 

alex85
Offline
Зарегистрирован: 12.11.2013

дисплей 20 на 4.

3 вида символов.

Один крестик. 5 ноликов  и не более 20 черточек.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Наверное кто то понял больше чем я. Я ничем не могу помочь при такой формулировке задачи.

 

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

kisoft пишет:
Не проще брать случайные координаты вывода на дисплей, нежели для этого еще использовать лишнюю память?

Человек скорее всего имел ввиду не случайную позицию, а любую те произвольную,

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Probelzaelo пишет:

kisoft пишет:
Не проще брать случайные координаты вывода на дисплей, нежели для этого еще использовать лишнюю память?

Человек скорее всего имел ввиду не случайную позицию, а любую те произвольную,

Если бы ему было нужно, он бы объяснил,  а смысл то пинать, да переспрашивать. Наверное уже вопрос и решился сам собой.

 

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Мне вообще мало понятны такие ребята, запустят вопрос и забудут... а тема живет еще пару недель сама в себе )) народ спорит, придумывает, советует... )))

alex85
Offline
Зарегистрирован: 12.11.2013

тему я не забросил. мои знакомые написали программу игры в гонки с помощью массивов. Массивы они использовали для отображение координат встречных машинок.

alex85
Offline
Зарегистрирован: 12.11.2013
#include <LiquidCrystal.h>

LiquidCrystal lcd (8,9,10,11,12,13) ;

int bat_restart;
int bat_left;
int bat_right;
int bat_up;
int bat_down;

int snake_x=0;
int snake_y=0;


int cars[100];
int cars_x[100];
int cars_y[100];

int now_cars=0;
int need_cars=5+2;

int timer=5;

int score = 0;
boolean game_over=false;

boolean bullets[80];

int fire_x[80];
int fire_y[80];
int now_bullets=0;

int current[20][4];

void clear_all(int cx[], int cy[]){
  
  lcd.clear();
  
  lcd.setCursor(snake_x,snake_y);
  lcd.print("X");
  
  if(now_cars!=0){
    for(int i=0;i<now_cars-1;i++){
      lcd.setCursor(cars_x[i],cars_y[i]);
      lcd.print("0");
    }
  }
}

void add_car(int x, int y){
  now_cars+=1;
  cars[now_cars-1]=1;
  cars_x[now_cars-1]=21;
  cars_y[now_cars-1]=y;
}

void setup(){
  
   for(int i=0;i<100;i++){
     cars[i]=0;
   }
 
 
pinMode(2, INPUT); //ВЛЕВО
pinMode(3,INPUT);  //ВПРАВО
pinMode(4, INPUT); //ВВЕРХ
pinMode(5,INPUT);  //НИЗ
pinMode(7,INPUT);  //СТАРТ
pinMode(0,OUTPUT); // Лампа
lcd.begin(20,4);
 
   
  
}           
void loop(){

bat_restart = digitalRead(7);

bat_right = digitalRead(3);
bat_left = digitalRead(2);
bat_up = digitalRead(4);
bat_down = digitalRead(5);

  /*
    Апдейт
  */
  
  if(!game_over){
    
     score+=1;
    
  for(int i=0;i<now_cars;i++){
         
         if(cars_x[i]==snake_x && cars_y[i]==snake_y){
           game_over = true;
           lcd.clear();
           break;
         }
       }
  }
  
if(!game_over){
  if(timer>0){
  timer-=1;
  }else if(timer>-5){ if(timer==-2){add_car(18,random(0,4));} timer-=2; } else{
    
  timer=5;
       for(int i=0;i<now_cars;i++){
        if(cars_x[i]<1){
         cars[i]=0;
         now_cars-=1;
         
           for(int j=0;j<100;j++){
             cars_x[i]=cars_x[i+1];
             cars_y[i]=cars_y[i+1];
           }
         
         }else{
         cars_x[i]-=1;
         }
    }
       
       
       if(!game_over){
       clear_all(cars_x,cars_y);
       }
  
  }
    /*
      УПРАВЛЕНИЕ
    */
  
  delay(20);
  if(bat_right==HIGH){
    if(snake_x<19){
        snake_x+=1; 
       clear_all(cars_x,cars_y);
        lcd.setCursor(snake_x+1,snake_y);
        
        delay(20);
    }
  }
  
   delay(20);
  if(bat_left==HIGH){
    if(snake_x>0){
      snake_x-=1;
       clear_all(cars_x,cars_y);
      lcd.setCursor(snake_x-1,snake_y);
      
      delay(20);
    }
  }
  
  delay(20);
  if(bat_up==HIGH){
    if(snake_y>0){
      snake_y-=1;
       clear_all(cars_x,cars_y);
      lcd.setCursor(snake_x,snake_y-1);
      
      delay(20);
    }
  }
  
  delay(20);
  if(bat_down==HIGH){
    if(snake_y<3){
      
      snake_y+=1;
       clear_all(cars_x,cars_y);
      lcd.setCursor(snake_x,snake_y+1);
      delay(20);
    }
  }}else{
    lcd.setCursor(0,0);
    lcd.print("Game Over!");
    lcd.setCursor(0,1);
    lcd.print("Your score: ");
    lcd.print(score/10);
  }}