Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: engine...

dungeon86 [06.10.2004 14:51:42]

#

Elikkä olen väsännyt allegrolla ja c:llä hienon enginen rope-pelejä varten, mutta en pysty tällä hetkellä kääntämään sitä joten annan teidän tarkistaa koodin ja haluaisin saada tietää, että mitä korjauksia koodiin pitäisi tehdä... Eli kyseessä on roolipelimoottori,jossa keskellä ruutua on pelihahmo ja kun sitä liikutetaan esim. oikealle, niin tausta liikkuukin vasemalle, mutta jos tausta loppuukin yllättäen niin sitä ei tule enempää näkyviin vaan pelihahmo jatkaa matkaa oikealle (niin kauan kun se kohtaa näytön reunan). Tämän pitäisi päteä joka suuntaan... Olen varma, että koodissa on pahasti virheitä, mutta olisin kiitollinen jos debuggaisitte sen minulle ja kertoisitte miten saan sen toimimaan niin kuin yllä selitin!
Tässä on koodi:

#include <stdio.h>
#include <allegro.h>

int main(void)
{
 BITMAP *tausta;
 BITMAP *sprite;
 BITMAP *spriten_taus;

 PALETTE pal;

 int xres = 320;
 int yres = 200;
 int xs = (320-30)/2;
 int ys = (200-30)/2;
 int xt = -640;
 int yt = -400

 allegro_init();
 install_keyboard();
 set_gfx_mode(GFX_VGA,xres,yres,0,0);

 tausta=load_pcx("tausta.pcx",&pal);
 set_palette(pal);
 sprite=load_pcx("sprite.pcx",&pal);
 spriten_taus=create_bitmap(sprite->w,sprite->h);
 blit(tausta,spriten_taus,xs,ys,0,0,spriten_taus->w,spriten_taus->h);
 draw_sprite(tausta,sprite,xs,ys);

 while(!key[KEY_ESC])
 {
  blit(spriten_taus,tausta,0,0,xs,ys,spriten_taus->w,spriten_taus->h);
  if(key[KEY_LEFT])
  {
   sprite=load_pcx("left.pcx",&pal);
   if(xt<0) xt++;
   else if((xt==0 && xs>=0) || (xt==640 && xs>>145)) xs--;
  }
  else if(key[KEY_RIGHT])
  {
   sprite=load_pcx("right.pcx",&pal);
   if(xt>640) xt--;
   else if((xt==640 && xs<=930) || (xt==0 && xs<=145)) xs++;
  }
  else if(key[KEY_DOWN])
  {
   sprite=load_pcx("down.pcx",&pal);
   if(yt<0) yt++;
   else if((yt==0 && ys>=0) || (yt==400 && ys>=85)) ys--;
  }
  else if(key[KEY_UP])
  {
   sprite=load_pcx("up.pcx",&pal);
   if(yt>400) yt--;
   else if((yt==400 && ys<=570) || (yt==0 && ys<=85)) ys++;
  }
  blit(tausta,spriten_taus,xs,ys,0,0,spriten_taus->w,spriten_taus->h);
  draw_sprite(tausta,sprite,xs,ys);
  blit(tausta,screen,xt,yt,0,0,tausta->w,tausta->h);
 }
 allegro_exit();
 return 0;
}

(lisäys)

Miten saan hoidettua myös sellaisen asian, että jos taustalla tulee vastaan vaikka kivi tai puu, niin pelihahmon pysähtyy siihen kohtaan?

Jos teillä on parempi idea tälle enginelle niin kertokaa ihmeessä!!

Deewiant [06.10.2004 16:50:34]

#

dungeon86 kirjoitti:

en pysty tällä hetkellä kääntämään sitä joten annan teidän tarkistaa koodin ja haluaisin saada tietää, että mitä korjauksia koodiin pitäisi tehdä...

Erm. Ei millään pahalla, mutta luuletko, että täällä on porukkaa joka jaksaa käydä tuon kaiken läpi ja sanoa, missä virhe on - ehkä jopa niin, että he kopioivat tuon kaiken, maagisesti arvaavat mitä kääntäjää käytät, ja katsovat sillä mitä virheilmoituksia tulevat ja sitten kertovat sinulle mitä tehdä? Ehkä onkin, mutta vähän tyhmää olettaa niin.

Jos ohjelma ei käänny, kerro a) millä kääntäjällä yritit kääntää ja b) mitä virheilmoituksia se antoi. Silloin on vähän helpompi debugata nääs.

Ja noissa featureissa en osaa auttaa.

Metabolix [06.10.2004 16:50:41]

#

  1. Tuossa taitaa olla vakavan puoleinen muistivuoto. Lataat aina kuvan uudestaan etkä tuhoa sitä missään.
  2. Eikö tuo pyöritä koodia aika vauhdilla läpi? Siis tyyppi varmaan liikkuu aivan mielettömiä matkoja pikaisella napinpainalluksella...
  3. Eihän tuota voi testata, kun ei tiedä, mitä kuvien pitää sisältää.
  4. Koodi on erittäin sekavaa, eikä koko pohja varsinaisesti ole mitenkään erityisen hyväkään. Ehkä jos sitä selkeyttää vähän. Kannattaisi tehdä siitä oma funktionsa eikä tunkea sitä main-funktioon.
  5. Tuo törmäystarkistus on käyty aika usein läpi, ja se on niin yksinkertainen, että saat kyllä itse keksiä sen. Graafisesti et kuitenkaan sitä voi tehdä, vaan tarvitset erillisen taulukon objekteja varten.

Ja Deewiant, veikkaisin tuon kääntämisjutun tarkoittaneen, että hänellä ei ole juuri nyt kääntäjää käytössään.
Ja dungeon, en usko, että Ojelmointiputkan tarkoitus on se, että tänne lähetetään kaikki omat koodaukset. Jospa siis ohjelmoisit ihan itse ja lähettäisit tällaisia viestejä vasta, kun ilmenee ongelmia tai tarvitset testausapua. Vai onko tavoitteenasi vain ilmoittaa kaikille, että "täällä minä olen, osaan ohjelmoida (vähän)!"

Deewiant [06.10.2004 22:15:02]

#

Metabolix kirjoitti:

Ja Deewiant, veikkaisin tuon kääntämisjutun tarkoittaneen, että hänellä ei ole juuri nyt kääntäjää käytössään.

Hyvä pointti, ei tullut mieleen.

Pyydän anteeksi suorasukaisuuttani jos noin oli. Pointtini on kuitenkin silti validi - älä postaa suurta pätkää koodia ja sano "tässä on virhe, kertokaa missä".

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta