RE: Kleines Raumschiff Spiel
-
sorry wegen doppelpost aber das muss jetzt sein:
erstmal möchte ich allen danken die mirgeholfen haben..
heute möchte ich anfängern zeigen wie man ein einfaches Raumschiff spiel schreibt
es ist zwar mom noch verbugt aber es laüft einigermaßenihr benötigt nur noch 4 bilder:
bild1.bmp -> space ship
bild2.bmp -> laser.bmp
title1.bmp -> title
bild4.bmp -> feind
...
hier der code#include <allegro.h> #include <winalleg.h> #include <stdio.h> #include <stdlib.h> #include <time.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 *bild4; 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 enemy_x; int enemy_y; int title_ini = 1; int enemy_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); bild4 = load_bitmap("data\\bmp\\bild4.bmp",NULL); } void title() { if (title_ini = 1) { draw_sprite(screen,bild3,150,100); textprintf_ex(screen, font, 300, 500, makecol(255, 255, 255), makecol(0, 0, 0), "Press Enter to Start"); Sleep(3000); title_ini = 0; } } void zufall() { srand(time(0)); enemy_x = rand() % 400 + 1;; enemy_y = rand() % 400 + 1;; } int BildKollision(BITMAP* bild2,int shoot_x, int shoot_y, BITMAP* bild4,int enemy_x, int enemy_y) { if(shoot_x>=(enemy_x+bild2->w) || shoot_y>=(enemy_y+bild2->h) || enemy_x>=(shoot_x+bild4->w) || enemy_y>=(shoot_y+bild4->h)) return 0; else return -1; } void game_ini() { while(!done) { zufall(); // change the pos auto 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,shoot_y); shoot_y--; } if(enemy_ini = 1) { draw_sprite(buffer,bild4,enemy_x,enemy_y); enemy_ini = 0; } if(BildKollision(bild2,shoot_x,shoot_y,bild4,enemy_x,enemy_y)) { counter++; shoot_ini = 1; } if(shoot_y == 20) { 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; }
ich hoffe es gefällt euch - seit bitte nicht sauer, ist mein allller erstes
games welches ich jeh mit c++ gemacht habehier der komplette download
http://www.file-upload.net/download-3390618/game.rar.html
-
star_rock_games schrieb:
c++
Ich seh nur C.
Spaß beiseite, ich gucks mir später mal an
-
Das ist tatsächlich nur C.
Würdest du das in C++ machen, bräuchtest du nicht die 2 dutzend Globalen Variablen, welche man vermeiden sollte.
-
Cloppy schrieb:
C++
LOL. Brauchen tut man die auch in C nicht
-
Schon, aber bei C++ liegt es auf der Hand
-
Cloppy schrieb:
Schon, aber bei C++ liegt es auf der Hand
gääääääääh
wuss?
-
"Man braucht keine globalen Variablen" ist echt das coolste Argument für C++ das ich je gehört hab
-
Definitiv kein C, er ist eben noch ein Anfänger...
-
Hab mal ne frage an dich star_rock_games:
diese libary "winalleg.h" find ich nicht. ich hab allegro 5 und die undeklarierten befehle kann ich nur mit "gl_ext.h" deklarieren. doch beim debugging gibt es mindestens 50 fehlermeldungen; z.b. "GLclampf" nicht deklariert ist, oder "GLenum"...
wie hast du das gemacht?
tortorios
-
hat sich schon erledigt, danke. das problem war, dass ich allegro 5 habe und die befehle noch von allegro 4 sind ^^
-
sry für den dripple post! ich wollte nicht extra ein thread aufmachen, deswegen frag ich hier:
ich benutze allegro 4 und wenn ich die libary inlcude und nichtmal einen code schreibe(!), gibt es fehlermeldungen.
#include <allegro.h> #include <winalleg.h> int main() { }
//fehlermeldung
error C4716: '_mangled_main': Muss einen Wert zurückgebenich hab auch schon "return 0;" in den code eingesetzt, doch dann kommen wieder fehler
#include <allegro.h> #include <winalleg.h> int main() { return 0; }
//fehlermeldung
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "___tmainCRTStartup".
fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
-
- du muss am ende
END_OF_MAIN();
eingeben warum weis ich auch nicht ^^
und ich benutzte allegro 4.2.2, weil es die einzigste version ist
die man in dev c++ runterladen kann OHNE fehlermeldungenokey man könnte jetzt erst alles runterladen und einzelnd einlinken aber ich war zu faul ...
-
sry das ich erst jetzt wieder antworte.
wenn ichEND_OF_MAIN()
schreibe kommen nochmehr fehlermeldungen, und ich verstehe noch weniger.
#include <allegro.h> #include <winalleg.h> int main() { return 0; } END_OF_MAIN()
Fehlermeldung:
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp___WinMain" in Funktion "_WinMain@16".
fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
-
Semikolon hinter END_OF_MAIN() vergessen?
Scheint mir ein bisschen dubios zu sein, mit dem "END_OF_MAIN". Bist du dir sicher, dass du auch eine Windows-Anwendung erstellst und nicht etwa eine Konsolenanwendung?
-
hat sich schon erledigt, danke.
nun hab ich wieder ein neues problem und weiß wieder nicht wo ich danach suchen soll :D.ich hab allegro 5 und möchte einfach nur einen wert ausgeben:
#include <allegro5\allegro.h> #include <iostream> int main() { int izahl = 500; while(1) { if(ALLEGRO_KEY_UP) { izahl++; } if(ALLEGRO_KEY_DOWN) { izahl--; } cout << izahl; Sleep(50); } }
so, nur kann ich leider kein "cout" verwenden; warum weiß ich nicht. ich will nur die anzahl von "izahl" irgendwie ausgeben. hat jemand ne andere lösung?
-
cout
liegt im Namensbereichstd
.Das gehört zu den Grundlagen.
-
Läuft Allegro wirklich in der Konsole? Ich dachte, dass man damit auch komplexere Dinge zeichnen kann...
-
Jochen S. schrieb:
Läuft Allegro wirklich in der Konsole?
Natürlich nicht!
-
EOutOfResources schrieb:
Jochen S. schrieb:
Läuft Allegro wirklich in der Konsole?
Natürlich nicht!
Dann ist cout fehl am Platze. Es sei denn, er programmiert eine Konsolenanwendung. Dann ist aber Allegro fehl am Platze.
-
Jochen S. schrieb:
Dann ist cout fehl am Platze. Es sei denn, er programmiert eine Konsolenanwendung. Dann ist aber Allegro fehl am Platze.
So manches Spiel hat eine Konsole und ein Fenster...