Edelleen säätöä 2D-pelimoottorin parissa (ja uusia projekteja) | 26.12.2018

26/12/2018

Pelimoottorin säätämistä

Huomenta vain kaikille. Eilisen säädön lopputuloksena sain vinkkiä Arduino Finland -ryhmästä koodiin. Sieltä tuli hyvät suositukset kirjaston koodaamisen helpottamiseksi: jos laitat kaiken ensin samaan tiedostoon, ei tarvitse huolehtia vielä linkittämisen tuomista onglemista heti alkuun. Tällöin saat enemmän vapauksia toteuttaa kirjastoa ja koodata osia jotka ovat osaamisesi parissa.

Mutta kuten koodaamisessa yleensä käy, jouduinkin jo heti seuraavan ongelman kimppuun. Ajattelin laittaa kartan 16x8 taulukkoon näin:



const int map1[8] {
    0b1111111111111111,   
    0b1000000000000001,
    0b1000000000000001,
    0b1000000000000001,
    0b1000000000000001,
    0b1000000000000001,
    0b1000000000000001,
    0b1111111111111111,
}; 


Taulukosta pitäisi lukea bitti kohdasta (x,y), joka onnistuu ainakin Dev-C++ -ohjelmointiympäristössä näin:



map1[y] & (1<<15)>>x

Ja sehän ei tietenkään toiminut Arduinossa. Ei mitään hajua miksi näin kävi, mutta yritän selvittää sitä. Jos haluat kokeilla, niin testikoodi löytyy tuosta: 

Together C & C++ discord-serveriltä tuli käyttäjältä qrpnxz hyvin tiivistetty versio kyseisestä koodista. Tuossa on myös linkki kyseiselle discord-serverille: https://discord.gg/mTT559R


Koodi Arduinolle löytyy taas täältä:


HUOM! An0num0us sai hienosti hoidettua algoritmin kuntoon! Tältä se näyttää:

((map1[y] & (1<<x))>>x)


Tässä on testikoodi Arduinolle:


const uint16_t map1[8] {
  0b1111111111111111,
  0b1000000000000001,
  0b1000000000000001,
  0b1000000000000001,
  0b1000000000000001,
  0b1000000000000001,
  0b1000000000000001,
  0b1111111111111111,
};

void setup() {
  Serial.begin(115200);

  for(int y=0; y<8; y++) {
    for(int x=0; x<16; x++) {
      Serial.print(((map1[y] & (1<>x));
    }
    Serial.println();
  }
}

void loop() {
  
}

Uusia projekteja

Kunhan osat saapuvat, pääsen jatkamaan kotiautomaatioprojektia ja uutta käsikonsoliprojektia.