Newsgroup: it.comp.programmare
Titolo: piccolo giochino

ho realizzato un piccolo giochino in c++ seguendo una guida su internet 
in cui appare uno scarabocchio che sarebbe la mia astronave,un bmp che 
rappresenta il nemico e il fondale che fa scrolling.
non ci sono ancora collisioni ecco però il nemico mi appare doppio e si 
muove troppo velocemente cosi come lo scrolling del fondale.
non c'è modo di regolare velocità.
se volete posto codice ...


Difficilmente se non lo posti si può riuscire ad indovinare :)
 
Ciao!


ecco qua il codice:
 
#include "allegro.h"
BITMAP *buf, *sprite,*sfondo,*scrolling,*cattivo;
PALETTE colori;
int x,y,moltiplica,xscroll,xcattivo,ycattivo,xconto,yconto,morto;
void doppiobuffering()
{
vsync();
blit(buf, screen, 0, 0, 0, 0, 640, 480);
clear(buf);
}
void player() {
if(morto==1){
draw_sprite(buf, sprite, x, y);
}
}
void movimentotasti() {
if (key[KEY_LEFT]) x=x-2; if (x<=0) x=0;
if (key[KEY_RIGHT]) x=x+2; if (x>=300) x=300;
if (key[KEY_UP]) y=y-2; if (y<=0) y=0;
if (key[KEY_DOWN]) y=y+2; if (y>=180) y=180;
}
void fondale() {
xscroll=xscroll+1;
blit(scrolling,buf,xscroll,0, 0, 0, 320, 200);
if(xscroll>319){
xscroll=0;
}
}
void nemico(){
draw_sprite(buf,cattivo,xcattivo,ycattivo);
}
void movimentonemico(){
if(yconto==1){
ycattivo=ycattivo-1;
if(ycattivo<=10){
yconto=2;
}
}
if(yconto==2){
ycattivo=ycattivo+1;
if(ycattivo>=150){
yconto=3;
}
}
if(yconto==3){
xcattivo=xcattivo-1;
xconto=xconto+1;
if(xconto>=40){
xconto=0;yconto=1;
}
}
if (xcattivo<=50) {
xcattivo=360;
ycattivo=10;
yconto=3;
}
}
void collisione() {
if (((x+30)>=xcattivo) && (x<=(xcattivo+40))) {
if (((y+20)>=ycattivo) && (y<=(ycattivo+31))) {
morto=0;}
}
}
int main()
{
allegro_init();
install_keyboard();
set_color_depth(32);
set_palette(colori);
set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0);
buf = create_bitmap(320, 200);
clear(buf);
sprite = load_bmp("player.bmp",colori);
sfondo = load_bmp("fondale.bmp",colori);
cattivo=load_bmp("nemico.bmp",colori);
scrolling=create_bitmap(640,200);
clear(scrolling);
for (moltiplica=0;moltiplica<=640;moltiplica=moltiplica+320) {
blit(sfondo,scrolling,0,0,moltiplica,0,320,200);
}
morto=1;
x=10; y=30;
xcattivo=360;ycattivo=10;
yconto=3;xconto=0;
while (!key[KEY_ESC]) {
doppiobuffering();
fondale();
player();
movimentotasti();
nemico();
movimentonemico();
collisione();
}
destroy_bitmap(buf);
destroy_bitmap(sprite);
destroy_bitmap(sfondo);
destroy_bitmap(cattivo);
destroy_bitmap(scrolling);
 
}
END_OF_MAIN ();


 
Mamma mia, butta quella "guida"! :)
 
Come prima cosa, non si scrive a video in un ciclo stretto (il tuo while nel
main()), che non ha senso: vuoi bloccare il framerate (e tutti i conti che
fai prima del rendering) sui 30/sec, e per farlo ti devi tarare con qualche
timer. Non conosco allegro ma sicuramente c'è una funzione per avere il clock.
 
Per tarare la "velocità" a quel punto puoi incrementare i tuoi movimenti di
diversi pixel (o frazioni di pixel, se è per questo) - ora è hardwired a
2.
Per "il nemico che si vede doppio" probabilmente è perché scrivi oltre la
dimensione della riga (x e/o y troppo grosse, o negative): trovare un errore
così però in un codice pieno di numerelli che non dicono nulla (10, 150, 40,
etc. - ma come fai a capirci qualcosa?) è impossibile: usa costanti o
#define per incrementare la leggibilità del codice, e quasi sicuramente a
quel punto vedrai anche te qual'è il numero sbagliato.
 
Ciao!


è che io sono un niubbo totale ...
la guida era proprio per niubbi totali o quasi ...
 
 
 


Un motivo in più per prenderne una buona: se uno comincia subito a farsi
brutte abitudini poi è finita! :)
 
Una volta uno dei tutorial orientati allo sviluppo di giochini 2d che mi
sembrava ben fatto era questo: 
http://lazyfoo.net/tutorials/SDL/index.php
 
(che però usa le SDL invece di allegro).
In ogni caso l'importante sono i concetti base, poi quale libreria usi
conta fino ad un certo punto.
 
Se potessi ti consiglierei qualche libro, ma lo sviluppo di giochi non è
proprio il mio campo, per cui purtroppo non ne ho la minima idea.
 
Ciao!
 

 (che però usa le SDL invece di allegro).
 
mi sembra troppo complicato e poi è in inglese e il testo è su fondale 
scuro !!!
 
 


comunque ci darò un'occhiata grazie ... dovrei essere almeno in grado di 
importare le librerie ;)