Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: näppiksestä...

dungeon86 [29.10.2004 14:19:16]

#

Elikkä olen tehnyt seuraavanlaisen demonstraation Allegrolla ja C:llä:

Binääri: http://www.freewebs.com/dungeon86/esimerkki.zip

/* esimerkki.c - Demonstroi Allegron ja C:n käyttöä */

/* Otsikkotiedostojen sisällyttäminen */

#include "allegro.h" /* Allegron sisällyttäminen */

/* Globaalisten muuttujien määrittely */

int x, y; /* Koordinaattien määrittely */
RGB red={63,0,0}; /* Väriarvon määrittely */
BITMAP *bground, *buffer; /* Kuvien määrittely */
PALETTE palette; /* Paletin määrittely */

/* Funktioiden esittely */

void new_place(void); /* new_place -funktion esittely */

/* Funktioiden sisältö */

void main(void) /* Pääfunktion sisältö */
{
 allegro_init(); /* Allegron alustus */
 install_keyboard(); /* Näppäimistön asennus */
 set_gfx_mode(GFX_VGA,320,200,0,0); /* Grafiikkatilan asetus */
 bground=load_pcx("bground.pcx", &palette); /* Kuvan asetus */
 set_palette(palette); /* Paletin asetus */
 set_color(255, &red); /* Värin asetus */
 buffer=create_bitmap(32,32); /* Kuvan luonti */
 clear_bitmap(buffer); /* Kuvan tyhjennys */
 x=rand()%(SCREEN_W-32); /* x-koordinaatin asetus */
 y=rand()%(SCREEN_H-32); /* y-koordinaatin asetus */
 blit(bground,buffer,x,y,0,0,buffer->w,buffer->h); /* Taustan kopiointi */
 circlefill(bground,x+16,y+16,15,255); /* Ympyrän piirto */
 while(!key[KEY_ESC]) /* Kunnes painetaan ESC:iä */
 {
  new_place(); /* new_place -funktion kutsu */
  blit(bground,screen,0,0,0,0,SCREEN_W,SCREEN_H); /* Piirto näytölle */
 }
 destroy_bitmap(bground); /* Muistin vapautus */
 destroy_bitmap(buffer); /* Muistin vapautus */
 allegro_exit(); /* Allegrosta poistuminen */
}

END_OF_MAIN() /* Pääfunktion lopetus */

void new_place(void) /* new_place -funktion sisältö */
{
 if(key[KEY_SPACE]) /* Jos painetaan välilyöntiä */
 {
  blit(buffer,bground,0,0,x,y,buffer->w,buffer->h); /* Taustan täyttö */
  x=rand()%(SCREEN_W-32); /* x-koordinaatin asetus */
  y=rand()%(SCREEN_H-32); /* y-koordinaatin asetus */
  blit(bground,buffer,x,y,0,0,buffer->w,buffer->h); /* Taustan kopiointi */
  circlefill(bground,x+16,y+16,15,255); /* Ympyrän piirto */
 }
}

Ongelmana on siis se,että välilyöntiä painettaessa pallo vaihtaa jopa 10:een eri paikkaan itsensä vaikka välilyöntiä vain hipaisee!!! Miten pystyn tekemään ohjelmasta kaksi eri versiota, jossa toisesta välilyöntiä painettaessa pallo siirtyy vain yhteen paikkaan jos välilyöntiä pitää pohjassa, sitten kun sen vapauttaa ja painaa uudestaan niin pallo vaihtaa taas paikkaa yhden kerran... Toisessa versiossa välilyöntiä painettaessa ja pidettäessä pohjassa pallo vaihtaa paikkaa järkevällä nopeudella esim. 1 kerta / 1 sekunti... Miten nämä kikat toteutetaan... Kääntäjänä loistava DJGPP...

Jaska [29.10.2004 14:45:23]

#

En tunne Allegroa, mutta ensimmäisessä tapauksessa päivitä pallon sijainti kun napin tila vaihtuu vapautetusta painetuksi. Toisessa versiossa aloita aikalaskuri nollasta kun välilyönti painetaan alas. Sitten vain vertailet montako sekuntia nappulaa on painettu. Todennäköisesti Allegron spekseistä löytyvät tarvittavat näppiksenlukurutiinit.

Vastaus

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

Tietoa sivustosta