kleines raumschiff spiel mit allegro



  • 😃 hallo allerseits

    ich habe gerade ein bischen mit allegro programmiert und jetzt hale
    ich mal ein kleines sample geschreiben für ein raumschiff spiel ^^

    ich ´selbst finde den code total hammer

    #include <allegro.h>
    #include <winalleg.h>
    
    volatile bool Close = false;
    volatile bool done = false;
    
    void Handler() {Close = true;}
    void Handler2() {done = true;}
    
    void game_ini();
    void title();
    void load_cache();
    
    BITMAP *bild1;
    BITMAP *bild2;
    BITMAP *bild3;
    
    BITMAP *buffer;
    
    int shoot_ini = 0;
    
    int ship_x = 300;
    int ship_y = 300;
    int shoot_x = ship_x;
    int shoot_y = ship_y;
    int title_ini = 1;
    
    int counter =0;
    char score[]= {"score"};
    
    int main()
    {
    
     allegro_init();
     install_keyboard();
     install_mouse();
     set_color_depth(16);
     set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
     set_window_title("Star-Battle 1.0");
    
     //-------------------------------------------//
    
     load_cache(); 
     title();
    
     while (!Close)
     {   
      game_ini();
     } 
    
    }
    END_OF_MAIN();
    
    void load_cache()
    {
     buffer = create_bitmap(SCREEN_W, SCREEN_H);
     bild1 = load_bitmap("data\\bmp\\bild1.bmp",NULL);
     bild2 = load_bitmap("data\\bmp\\bild2.bmp",NULL);
     bild3 = load_bitmap("data\\bmp\\title1.bmp",NULL);
    }
    
    void title()
    {
      if (title_ini = 1)
      {             
       draw_sprite(screen,bild3,150,150);
       textprintf_ex(screen, font, 300, 500, makecol(255, 255, 255), makecol(0, 0, 0), "Press Enter to Start");              
       Sleep(3000);
       title_ini = 0;
      }
    
    }
    
    void game_ini()
    {
    
     while(!done)
     {
      clear(buffer);
    
      if(title_ini == 0)
      {
    
      draw_sprite(buffer,bild1,ship_x,ship_y); 
      textprintf_ex(buffer, font, 0, 0, makecol(255, 255, 255), -1, "Score: %d",counter);
    
      if (shoot_ini == 1)
      {
       draw_sprite(buffer,bild2,shoot_x+40,shoot_y); 
       shoot_y--;
      }
    
      if(shoot_y == 20)
      {
       counter++;          
       Handler2(); // close while loop
      } 
      } // title = 0 loop
    
      blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
    
      //-------------------------------------------//
    
      if(key[KEY_LEFT]) 
      {
       ship_x--;
      }
    
      if(key[KEY_RIGHT]) 
      {
       ship_x++;
      }
    
      if(key[KEY_UP]) 
      {
       ship_y--;
      }
    
      if(key[KEY_DOWN]) 
      {
       ship_y++;
      }
    
      if(key[KEY_SPACE] and shoot_ini == 0) // shoot
      {
       shoot_ini = 1;
    
      }
    
      if(key[KEY_ESC]) // shoot
      {
       Handler();
       Handler2();  // close while-loop
      }
    
     }
    
     shoot_ini = 0;        // reset int
     shoot_x = ship_x;     // reset x
     shoot_y = ship_y;     // reset y
     done = false;
    }
    

    jetzt will ich noch feine machen , die "runter fallen"
    wie kann man das machen das per zufall die sprites an bestimmten stellen sind

    - ist das machbar wenn ja wie ???

    danke im vorraus 😃


  • Mod

    wenn du schon soviel geschaft hast, kannst du uns doch sicher sagen, wo genau du bei dem letzten rest stockst, oder?



  • es geht mir ehr um den zufall - also
    ... so ungefähr

    ...
    int x = zufalls zahl bis 700
    int y = zufalls zahl bis 200
    
    draw_sprite(buffer,bild,x,y)
    ...
    




  • hab was gefunden im inet und bearbeitet 😃

    #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      #include <windows.h>
    
      int main()
      {
        int i;
        time_t t;
    
        time(&t);
        srand((unsigned int)t);              /* Zufallsgenerator initialisieren */
    
        for ( i=0; i<20; i++ )
        printf("%d ", rand() % 6 + 1);     /* Wuerfeln */
        printf("\n");
        Sleep(1000);
        return 0;
      }
    

    so jetzt muss ich den kram ins spiel rein bringen



  • 😞 irgentwie tuts das nicht

    #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      #include <windows.h>
      #include <iostream>
    
      using namespace std;
    
      int main()
      {
        int x;
        int y =0;
    
        time_t t;
    
        time(&t);
        srand((unsigned int)t);   
    
        for ( y=0; y<1; y++ ) 
        rand() % 400 + 1;   
    
        cout<<y;
    
        Sleep(3000);
        return 0;
      }
    

    der zeigt nur 1 an und kein zufalls wert
    ich will aber das sich int ändert zur zufalls zahl nicht
    aus int irgenteine ausgibt



  • Alles was die Schleife macht ist eben ein Inkrement von y von 0 auf 1. Wie willst du auch irgendwas aendern, wenn du in der Schleife keine Zuweisung machst?



  • bei snake ist das doch auch so das ein object immer an einer anderen stelle liegt



  • so habs hinbekommen ...mithilfe von google uns selber experimentieren

    /* rand example: guess the number */
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    
    int main ()
    {
     int y, x;
    
     srand(time(0)); 
    
     y= rand() % 400 + 1;;
    
     cout<<y;
     Sleep(3000);
     return 0;
    }
    


  • #include <cstdlib>
    int Ergebnis = std::rand() % Maximalwert;
    

    Seed kann man mit std::time() machen.



  • 😃 geil das tuts !!!! - zwar noch grotten schlecht und ein bischen verbugt aber egal^^


Anmelden zum Antworten