| |||||||||
![]() |
|
|
«
Previous Thread
|
Next Thread
»
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
General - Basic Space Invaders Question...
Hello all, I am new to the forums, and new to the programming world of C++ as well.
So far, everything is working out great, I love C++ and how simple it actually is in hindsight. I wrote a Space Invaders program (I'm sure everyone here has) and have a question: Everytime I compile and run the program, an MS error shows up and says it has encountered a problem and can't run the program. It's probably a simple solution, but if looking at my code helps at all here it is: Obviously, I started with the basic main.cpp #include <allegro.h> #include <cstdlib> #include <time.h> #include "Character.h" #include "Ship.h" #include "Laser.h" Ship myShip; Laser myLaser; Character myEnemies[10]; Laser enemyLasers[10]; BITMAP* buffer; BITMAP* ship; BITMAP* enemy; BITMAP* laser; BITMAP* enemyLaser; bool update = true; void Draw(){ acquire_screen(); draw_sprite( screen, buffer, 0, 0); release_screen(); update = false; rest(50); } void SetRandSeed(){ time_t secs; time(&secs); srand( (unsigned int)secs); } void updateLives(){ char tempStr[2]; itoa(myShip.GetLives(), tempStr, 10); textout_ex( buffer, font, tempStr, 70, 460, makecol( 255, 0, 0), makecol( 0, 0, 0)); } void SetupGame(){ SetRandSeed(); myLaser.SetDead( true, buffer); for( int i= 0; i <=9; i++){ if( i < 5) myEnemies[i].SetY( 20, buffer, enemy); else myEnemies[i].SetY( 40, buffer, enemy); if( i < 5) myEnemies[i].SetX( ((20* i) + 240), buffer, enemy); else myEnemies[i].SetX( ((20* (i - 5)) + 240), buffer, enemy); } for( int i= 0; i <=9; i++){ enemyLasers[i].SetDead(true, buffer); } myShip.SetX( ((640/2) - 40), buffer, ship); myShip.SetY( (480 - 40), buffer, ship); myShip.SetLives( 4); textout_ex( buffer, font, "Lives: ", 10, 460, makecol( 255, 0, 0), makecol( 0, 0, 0)); updateLives(); Draw(); } void movePlayer(){ if( key[KEY_RIGHT]){ myShip.SetX( (myShip.GetX() + 20), buffer, ship); update = true; } else if( key[KEY_LEFT]){ myShip.SetX( (myShip.GetX() - 20), buffer, ship); update = true; } else if( key[KEY_SPACE]){ if( myLaser.IsDead()){ myLaser.SetDead(false, buffer); myLaser.SetX( myShip.GetX(), buffer, laser); myLaser.SetY( (myShip.GetY() - 20), buffer, laser); update = true; } } } void moveLaser(){ if( !(myLaser.IsDead()) ){ myLaser.SetY( (myLaser.GetY() - 20), buffer, laser); myLaser.CheckCollision(myEnemies, buffer); update = true; } } void moveEnemy(){ int shoot; for( int i = 0; i <= 9; i++){ if(!myEnemies[i].IsDead()){ shoot = rand() % 1000 + 1; if( shoot == 25){ enemyLasers[i].SetDead( false, buffer); enemyLasers[i].SetX( myEnemies[i].GetX(),buffer, enemyLaser); enemyLasers[i].SetY( 60, buffer, enemyLaser); update = true; } } } } void moveEnemyLaser(){ for( int i = 0; i <= 9; i++){ if( !enemyLasers[i].IsDead()){ enemyLasers[i].SetY( (enemyLasers[i].GetY() + 20), buffer, enemyLaser); if( (enemyLasers[i].CheckCollision(myShip, buffer))){ myShip.SetLives(myShip.GetLives() - 1); updateLives(); } update = true; } } } bool checkPlayerLives(){ if ( myShip.GetLives() <= 0){ textout_ex( screen, font, "GAME OVER", 320, 240, makecol( 255, 0, 0), makecol( 0, 0, 0)); while(!key[KEY_ESC]){} return true; } return false; } bool checkEnemyLives(){ int enemiesDead = 0; for( int i = 0; i <= 9; i++){ if(myEnemies[i].IsDead()) ++enemiesDead; } if(enemiesDead >= 10){ textout_ex( screen, font, "YOU WIN!!!!", 320, 240, makecol( 255, 0, 0), makecol( 0, 0, 0)); while(!key[KEY_ESC]){} return true; } return false; } int main(){ allegro_init(); install_keyboard(); set_color_depth(16); set_gfx_mode( GFX_AUTODETECT, 640, 480, 0, 0); buffer = create_bitmap( 640, 480); ship = load_bitmap( "ship.bmp", NULL); enemy = load_bitmap( "enemy.bmp", NULL); laser = load_bitmap( "laser.bmp", NULL); enemyLaser = load_bitmap( "enemyLaser.bmp", NULL); SetupGame(); while(!key[KEY_ESC]){ movePlayer(); moveLaser(); moveEnemy(); moveEnemyLaser(); if(checkPlayerLives()) break; if(checkEnemyLives()) break; if(update) Draw(); } delete [] myEnemies; destroy_bitmap( buffer); destroy_bitmap( ship); destroy_bitmap( enemy); return 0; } END_OF_MAIN(); There's really no need to show the other .cpp and .h files I think, but if anyone could answer my question that would be great! Thanks, Dan |
|
#2
|
|||
|
|||
|
Can you show us the error that it is giving you?
|
|
#3
|
||||
|
||||
|
Try running it in the debugger to see if you get some more information. Try to remove (comment) code to find out which part is causing the problem, i.e., does the program start at all?
Try to put a return statement in main after set_gfx_mode() to see if allegro starts up properly. If it does, put the return statement after SetupGame() to see if the problem is around there. Otherwise you might want to post the remaining code. If you think C++ is simple then you have not used it long enough yet, expect surprises Your code has a lot of C-style in it by the way. (C != C++, C/C++ is a misnomer)
__________________
Current project: roborally |
![]() |
| Viewing: Dev Articles Community Forums > Programming > C/C++ Help > General - Basic Space Invaders Question... |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|
|
|
|