Fout in Allegro code, maar waar?

Status
Niet open voor verdere reacties.

manhaeve5

Gebruiker
Lid geworden
9 jan 2007
Berichten
276
Ik ben momenteel bezig met allegro, een OXO spel, ik heb de code om een oxo veld te tekenen en om het geselcteerde kotje een blauwe kleur te geven, ik heb ook geprobeerd om code te maken om in het veld te navigeren met behulp van de pijltjestoetesen maar dat lukt niet, het blauwe kotje verdwijnt. Mijn code:
Code:
#include <allegro.h>
#include <iostream>
void init();
void deinit();
void drawfield();
void drawhok1(),drawhok2(),drawhok3(),drawhok4(),drawhok5(),drawhok6(),drawhok7(),drawhok8(),drawhok9();
void check();
BITMAP *o;
BITMAP *x;
MIDI *liedje = load_midi("liedje.mid");
struct hok{
       int nummer;
       char letter;
       bool selected;
       };
       hok hok1,hok2,hok3,hok4,hok5,hok6,hok7,hok8,hok9;
 int sel = 1;
    
int main() {
bool musicpause = false;
init();
play_midi(liedje,1);
while (!key[KEY_ESC]) {
      if(key[KEY_UP]){
          sel=sel-3;
          check();
          }
          if(key[KEY_DOWN]){
          sel=sel+3;
          check();
          }
          if(key[KEY_LEFT]){
          sel--;
          check();
          }
          if(key[KEY_RIGHT]){
          sel++;
          check();
          }
      
          drawfield();
          textprintf(screen,font,200,100,makecol(255,255,255),"OXO Spel");
          textprintf(screen,font,100,320,makecol(255,255,255),"Gemaakt door");
          textprintf(screen,font,100,340,makecol(255,255,255),"Controls: P = pauzeer muziek (soms moet je meerdere keren proberen)");
          if(key[KEY_O]){
                         draw_sprite(screen,o,26,51);
                         }
          if(key[KEY_X]){
                         draw_sprite(screen,x,26,51);
                         }
          /*
          draw_sprite(screen,x,26,101);
          draw_sprite(screen,o,26,151);
          draw_sprite(screen,x,76,51);
          draw_sprite(screen,o,76,101);
          draw_sprite(screen,x,76,151);
          draw_sprite(screen,o,126,51);
          draw_sprite(screen,x,126,101);
          */
          if(key[KEY_P]){
               if(musicpause==false){
                                     musicpause = true;
                                     midi_pause();
                                     }
else if(musicpause==true){
     musicpause = false;
     midi_resume();
                        }
     }
}

	deinit();
	destroy_midi(liedje);
	destroy_bitmap(x);
	destroy_bitmap(o);
	return 0;
}
END_OF_MAIN()

void init() {
	int depth, res;
	allegro_init();
	depth = desktop_color_depth();
	if (depth == 0) depth = 32;
	set_color_depth(depth);
	res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
	if (res != 0) {
		allegro_message(allegro_error);
		exit(-1);
	}

	install_timer();
	install_keyboard();
	install_mouse();
	o = load_bitmap("o.bmp",NULL);
          x = load_bitmap("x.bmp",NULL);
          install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, 0);
          hok1.selected=true;  

}

void deinit() {
	clear_keybuf();
	/* add other deinitializations here */
}
void drawfield(){
drawhok1();
drawhok2();
drawhok3();
drawhok4();
drawhok5();
drawhok6();
drawhok7();
drawhok8();
drawhok9();
    }
void drawhok1(){
     if(hok1.selected == true) 
     rect( screen, 25, 50, 75, 100, makecol(0, 0, 255));
     else
     rect( screen, 25, 50, 75, 100, makecol( 255, 255, 255));
     }
void drawhok2(){
     if(hok2.selected == true) 
     rect( screen,75, 50, 125, 100, makecol(0, 0, 255));
     else
     rect( screen,75, 50, 125, 100, makecol( 255, 255, 255));
     }
void drawhok3(){
     if(hok3.selected == true) 
     rect( screen, 125, 50, 175, 100, makecol(0, 0, 255));
     else
     rect( screen, 125, 50, 175, 100, makecol( 255, 255, 255));
     }
void drawhok4(){
     if(hok4.selected == true) 
     rect( screen, 25, 100, 75, 150, makecol(0, 0, 255));
     else
     rect( screen, 25, 100, 75, 150, makecol( 255, 255, 255));
     }
void drawhok5(){
     if(hok5.selected == true) 
     rect( screen,75, 100, 125, 150, makecol(0, 0, 255));
     else
     rect( screen,75, 100, 125, 150, makecol( 255, 255, 255));
     }
void drawhok6(){
     if(hok6.selected == true) 
     rect( screen, 125, 100, 175, 150, makecol(0, 0, 255));
     else
     rect( screen, 125, 100, 175, 150, makecol( 255, 255, 255));
     }
void drawhok7(){
     if(hok7.selected == true)
     rect( screen, 25, 150, 75, 200, makecol(0, 0, 255));
     else
     rect( screen, 25, 150, 75, 200, makecol( 255, 255, 255));
     }
void drawhok8(){
     if(hok8.selected == true) 
     rect( screen,75, 150, 125, 200, makecol(0, 0, 255));
     else
     rect( screen,75, 150, 125, 200, makecol( 255, 255, 255));
     }
void drawhok9(){
     if(hok9.selected == true) 
     rect( screen, 125, 150, 175, 200, makecol(0, 0, 255));
     else
     rect( screen, 125, 150, 175, 200, makecol( 255, 255, 255));
     }
void check(){
     hok1.selected=false;
            hok2.selected=false;
            hok3.selected=false;
            hok4.selected=false;
            hok5.selected=false; 
            hok6.selected=false;
            hok7.selected=false;
            hok8.selected=false;  
            hok9.selected=false;  
     switch (sel){
            case 1:
            hok1.selected=true;
            break;
            case 2:
            hok2.selected=true;
            break;
            case 3:
            hok3.selected=true;
            break;
            case 4:
            hok4.selected=true;
            break;       
            case 5:
            hok5.selected=true;
            break;
            case 6:
            hok6.selected=true;
            break;
            case 7:
            hok7.selected=true;
            break;
            case 8:
            hok8.selected=true;
            break;
            case 9:   
            hok9.selected=true;
            break;
            }
            }
 
Laatst bewerkt door een moderator:
Ik heb nu niet veel tijd, maar wat al zeker zou werken is er ergens een rest tussen te zetten.

Ik heb in de main een rest(1000) gezet, en het programma werkte al veel beter,

het zou ook veel beter zijn als je met een buffer zou werken denkik, dan schokt het programma minder hard enzo. Een buffer is een bitmap die je aan maakt. In plaats van alles op je screen te plaatsen, plaats je alle in de bitmap, en op het einde plak je de bitmap dan op het scherm.

succes nog ^^
 
merci,in m'n nieuwste spel heb ik al een buffer toegepast maar daar heb ik ook gemerkt dat ik rest moet gebruiken :thumb:
 
kun je dan ook alstublieft zeggen waarom de volgende code crasht?
Code:
#include <allegro.h>
#include "collegro.c"
#include <fstream>
#include <string>
using namespace std;
void init();
void deinit();
void drawscreen(char location[]),draw();
BITMAP *knop=NULL;
BITMAP *buffer=NULL;
int main() {
    init();
drawscreen("data/screens/screen1.txt");
    while (!key[KEY_ESC]) {
          draw();
        blit(buffer, screen, 0,0,0,0,640,480);
    }

    deinit();
    return 0;
}
END_OF_MAIN()

void init() {
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if (depth == 0) depth = 32;
    set_color_depth(depth);
    res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
    if (res != 0) {
        allegro_message(allegro_error);
        exit(-1);
    }
    install_timer();
    install_keyboard();
    install_mouse();
    buffer= create_bitmap(640,480);
    knop=load_bitmap("data/knop.bmp",0);
}

void deinit() {
    clear_keybuf();
}
void drawscreen(char location[]){
     char text2[100];
     
     int a, xknop[30],yknop[30],aantalknop;
     string text[30];
     ifstream input(location);
     input>>aantalknop;
     while(! input.eof() ){
     input>>xknop[a];
     input>>yknop[a];
     input.ignore(100,'\n');
     getline(input,text[a]);
     a++;
     }
     for(int b = 0;b != aantalknop;b++){
             for(int m=0;m != text[b].size()+1;m++){
                     text2[m]=text[b][m];
                     }
             draw_sprite(buffer,knop,xknop[b],yknop[b]);
             textprintf(buffer,font,xknop[b]+5,yknop[b]+15,makecol(255,255,255),text2);
             }
}
void draw(){
     BITMAP *cursor=NULL;
     cursor=load_bitmap("cursor.bmp",0);
     draw_sprite(buffer,cursor,mouse_x,mouse_y);
     }
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan