Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F130744
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
32 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/Barrier.h b/Barrier.h
index 24886fe..832f72c 100644
--- a/Barrier.h
+++ b/Barrier.h
@@ -1,29 +1,29 @@
#pragma once
#include<allegro5\allegro.h>
#include<allegro5\allegro_image.h>
using namespace std;
class Barrier
{
public:
Barrier();
void SetBarrierpos(int x, int y);
void setLife(int l);
void drawIfActive(float x, float y);
int x_pos;
int y_pos;
int life_points;
bool active;
ALLEGRO_BITMAP *CurrentImage;
const int BHeight = 31;
const int Bright = 100;
const int Bleft = 0;
};
-static const char *Images[5] = { "B4.png","B3.png","B2.png","B1.png","B0.png" };
\ No newline at end of file
+static const char *Images[5] = { "Pictures/B4.png","Pictures/B3.png","Pictures/B2.png","Pictures/B1.png","Pictures/B0.png" };
\ No newline at end of file
diff --git a/Blast-SoundBible.com-2068539061.wav b/Blast-SoundBible.com-2068539061.wav
deleted file mode 100644
index 43ea366..0000000
Binary files a/Blast-SoundBible.com-2068539061.wav and /dev/null differ
diff --git a/DarthInvaders.sdf b/DarthInvaders.sdf
index c192aa0..8c5d8f3 100644
Binary files a/DarthInvaders.sdf and b/DarthInvaders.sdf differ
diff --git a/Legacy.ttf b/Fonts/Legacy.ttf
similarity index 100%
rename from Legacy.ttf
rename to Fonts/Legacy.ttf
diff --git a/Roboto-Light.ttf b/Fonts/Roboto-Light.ttf
similarity index 100%
rename from Roboto-Light.ttf
rename to Fonts/Roboto-Light.ttf
diff --git a/STARWARS.TTF b/Fonts/STARWARS.TTF
similarity index 100%
rename from STARWARS.TTF
rename to Fonts/STARWARS.TTF
diff --git a/Starjedi.ttf b/Fonts/Starjedi.ttf
similarity index 100%
rename from Starjedi.ttf
rename to Fonts/Starjedi.ttf
diff --git a/Goodpic.png b/Goodpic.png
deleted file mode 100644
index ea9ecd9..0000000
Binary files a/Goodpic.png and /dev/null differ
diff --git a/Laser Blasts.mp3 b/Laser Blasts.mp3
deleted file mode 100644
index f4d3c55..0000000
Binary files a/Laser Blasts.mp3 and /dev/null differ
diff --git a/1.png b/Pictures/1.png
similarity index 100%
rename from 1.png
rename to Pictures/1.png
diff --git a/2.png b/Pictures/2.png
similarity index 100%
rename from 2.png
rename to Pictures/2.png
diff --git a/3.png b/Pictures/3.png
similarity index 100%
rename from 3.png
rename to Pictures/3.png
diff --git a/4.png b/Pictures/4.png
similarity index 100%
rename from 4.png
rename to Pictures/4.png
diff --git a/5.png b/Pictures/5.png
similarity index 100%
rename from 5.png
rename to Pictures/5.png
diff --git a/6.png b/Pictures/6.png
similarity index 100%
rename from 6.png
rename to Pictures/6.png
diff --git a/B0.png b/Pictures/B0.png
similarity index 100%
rename from B0.png
rename to Pictures/B0.png
diff --git a/B1.png b/Pictures/B1.png
similarity index 100%
rename from B1.png
rename to Pictures/B1.png
diff --git a/B2.png b/Pictures/B2.png
similarity index 100%
rename from B2.png
rename to Pictures/B2.png
diff --git a/B3.png b/Pictures/B3.png
similarity index 100%
rename from B3.png
rename to Pictures/B3.png
diff --git a/B4.png b/Pictures/B4.png
similarity index 100%
rename from B4.png
rename to Pictures/B4.png
diff --git a/B5.png b/Pictures/B5.png
similarity index 100%
rename from B5.png
rename to Pictures/B5.png
diff --git a/Lazer.png b/Pictures/Lazer.png
similarity index 100%
rename from Lazer.png
rename to Pictures/Lazer.png
diff --git a/blank.png b/Pictures/blank.png
similarity index 100%
rename from blank.png
rename to Pictures/blank.png
diff --git a/enemy.png b/Pictures/enemy.png
similarity index 100%
rename from enemy.png
rename to Pictures/enemy.png
diff --git a/logo.png b/Pictures/logo.png
similarity index 100%
rename from logo.png
rename to Pictures/logo.png
diff --git a/oldstarMG.png b/Pictures/oldstarMG.png
similarity index 100%
rename from oldstarMG.png
rename to Pictures/oldstarMG.png
diff --git a/player1.png b/Pictures/player1.png
similarity index 100%
rename from player1.png
rename to Pictures/player1.png
diff --git a/player2.png b/Pictures/player2.png
similarity index 100%
rename from player2.png
rename to Pictures/player2.png
diff --git a/starBG.png b/Pictures/starBG.png
similarity index 100%
rename from starBG.png
rename to Pictures/starBG.png
diff --git a/starFG.png b/Pictures/starFG.png
similarity index 100%
rename from starFG.png
rename to Pictures/starFG.png
diff --git a/starMG.jpg b/Pictures/starMG.jpg
similarity index 100%
rename from starMG.jpg
rename to Pictures/starMG.jpg
diff --git a/Blast.ogg b/Sounds/Blast.ogg
similarity index 100%
rename from Blast.ogg
rename to Sounds/Blast.ogg
diff --git a/Emperor1.ogg b/Sounds/Emperor1.ogg
similarity index 100%
rename from Emperor1.ogg
rename to Sounds/Emperor1.ogg
diff --git a/Emperor2.ogg b/Sounds/Emperor2.ogg
similarity index 100%
rename from Emperor2.ogg
rename to Sounds/Emperor2.ogg
diff --git a/Emperor3.ogg b/Sounds/Emperor3.ogg
similarity index 100%
rename from Emperor3.ogg
rename to Sounds/Emperor3.ogg
diff --git a/MenuMusic.ogg b/Sounds/MenuMusic.ogg
similarity index 100%
rename from MenuMusic.ogg
rename to Sounds/MenuMusic.ogg
diff --git a/Star_Wars.ogg b/Sounds/Star_Wars.ogg
similarity index 100%
rename from Star_Wars.ogg
rename to Sounds/Star_Wars.ogg
diff --git a/TIE-Fire.ogg b/Sounds/TIE-Fire.ogg
similarity index 100%
rename from TIE-Fire.ogg
rename to Sounds/TIE-Fire.ogg
diff --git a/XWing-Laser.ogg b/Sounds/XWing-Laser.ogg
similarity index 100%
rename from XWing-Laser.ogg
rename to Sounds/XWing-Laser.ogg
diff --git a/boom.ogg b/Sounds/boom.ogg
similarity index 100%
rename from boom.ogg
rename to Sounds/boom.ogg
diff --git a/chirp.ogg b/Sounds/chirp.ogg
similarity index 100%
rename from chirp.ogg
rename to Sounds/chirp.ogg
diff --git a/xwing.ogg b/Sounds/xwing.ogg
similarity index 100%
rename from xwing.ogg
rename to Sounds/xwing.ogg
diff --git a/Star Wars.wav b/Star Wars.wav
deleted file mode 100644
index e4e9f6d..0000000
Binary files a/Star Wars.wav and /dev/null differ
diff --git a/TIE-Fire.wav b/TIE-Fire.wav
deleted file mode 100644
index dbfe38c..0000000
Binary files a/TIE-Fire.wav and /dev/null differ
diff --git a/Test.cpp b/Test.cpp
index b1367c5..a373b4f 100644
--- a/Test.cpp
+++ b/Test.cpp
@@ -1,955 +1,954 @@
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup") //no console window behind game window
#include<allegro5\allegro.h>
#include<allegro5\allegro_native_dialog.h>
#include<allegro5\allegro_primitives.h>
#include<allegro5\allegro_image.h>
#include <allegro5\allegro_font.h>
#include <allegro5\allegro_ttf.h>
#include <allegro5\allegro_audio.h>
#include <allegro5\allegro_acodec.h>
#include <string>
#include <string.h>
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include "Enemy.h"
#include "Spaceship.h"
#include "Bullet.h"
#include "Global.h"
#include "BackGround.h"
#include "Barrier.h"
#include "Highscores.h"
using namespace std;
//GLOBALS
enum KEYS {LEFT, RIGHT, SPACE};
bool keys[5] = {false,false,false};
int gameState = 1; //initial gamestate is menu
extern int width;
extern int height;
int numAlive = NUM_COLUMNS*NUM_ROWS;
int EnemyWaveCount = 0;
int input=0; //count variable to ensure action occurs only once
int output = 0; //count variable to ensure action occurs only once
int x = 20; //initial position of animated ship
int score = 0;
char *nameString;
bool startAnim = false;
bool isHighscore = false; //will be true if user's score is higher than lowest highscore
int lowScore = 0; //value of lowest highscore
//METHODS
void setEnemy();
void collideEnemy(int&);
void collidePlayer();
void moveDown(int&);
void enemyShoot();
void updateBullet();
bool reachEnd();
void InitBackground(BackGround &back, float x, float y, float velx, float vely, int width, int height, int dirX, int dirY, ALLEGRO_BITMAP *image);
void UpdateBackground(BackGround &back);
void DrawBackground(BackGround &back);
void CollideBarrier();
void Reactivate_Enemies();
void DrawAnimation(ALLEGRO_BITMAP *pic, int &y);
void writeScore();
void readScores();
void EnemyReachEnd();
void BulletBarrierCollide();
void InitBarriers();
void Reactivate_Barriers();
void updateEnemyCount();
void UpdateBarrierImages(ALLEGRO_BITMAP *SpaceBarrier[]);
//INITIALISE
Spaceship player(width/2, height*4/5);
Bullet playerBullet(player.x_pos, player.y_pos,10,true);
Bullet enemyBullet(0,0,10,false);
Enemy arrEnem[NUM_COLUMNS][NUM_ROWS]; //array of objects
Barrier redBarrier[3];
Highscores arrScores[11];
BackGround BG;
BackGround MG;
BackGround FG;
BackGround MM;
int main(void)
{
readScores(); //reads in scores from textfile
setEnemy();
enemyBullet.isFriendly = false;
srand((unsigned)time(NULL));
//variables
const int FPS = 60;
bool done = false;
bool redraw = true;
int CurrentFrame = 0;
const int frames = 28;
if(!al_init())
{
al_show_native_message_box(NULL,NULL,NULL,"Could not initialize allegro",NULL,NULL);
return -1;
}
//Allegro variables
ALLEGRO_DISPLAY *DISPLAY = NULL;
ALLEGRO_BITMAP *picHealth[7];
ALLEGRO_BITMAP *picShip = NULL;
ALLEGRO_BITMAP *picBullet = NULL;
ALLEGRO_BITMAP *picEnemy = NULL;
ALLEGRO_BITMAP *Game = NULL;
ALLEGRO_BITMAP *MENU = NULL;
ALLEGRO_BITMAP *bgImage = NULL;
ALLEGRO_BITMAP *mgImage = NULL;
ALLEGRO_BITMAP *fgImage = NULL;
ALLEGRO_BITMAP *SpaceBarrier[5];
ALLEGRO_BITMAP *animShip;
ALLEGRO_BITMAP *logo;
ALLEGRO_EVENT_QUEUE *TestQueue = NULL;
ALLEGRO_TIMER *timer = NULL;
ALLEGRO_FONT *font38 = NULL;
ALLEGRO_FONT *starFont = NULL;
ALLEGRO_FONT *fontName = NULL;
ALLEGRO_SAMPLE *blaster = NULL;
ALLEGRO_SAMPLE *explosion = NULL;
ALLEGRO_SAMPLE *music = NULL;
ALLEGRO_SAMPLE *startGame = NULL;
ALLEGRO_SAMPLE *emperor1 = NULL;
ALLEGRO_SAMPLE *emperor2 = NULL;
ALLEGRO_SAMPLE *emperor3 = NULL;
ALLEGRO_USTR* str = al_ustr_new("ENTER NAME");
//Allegro Module Init
al_init_image_addon();
al_set_new_window_position(400, 200); //set pos of game window
DISPLAY = al_create_display(width, height);
al_hide_mouse_cursor(DISPLAY);
al_init_primitives_addon();
al_install_keyboard();
al_init_font_addon();
al_init_ttf_addon();
al_install_audio();
al_init_acodec_addon();
if (!DISPLAY)
{
al_show_native_message_box(NULL, NULL, NULL, "Could not initialize display", NULL, NULL);
return -1;
}
//load sounds
al_reserve_samples(4);
- blaster = al_load_sample("XWing-Laser.ogg");
- explosion = al_load_sample("Blast.ogg");
- startGame = al_load_sample("xwing.ogg");
- music = al_load_sample("Star_Wars.ogg");
- emperor1 = al_load_sample("Emperor1.ogg");
- emperor2 = al_load_sample("Emperor2.ogg");
- emperor3 = al_load_sample("Emperor3.ogg");
+ blaster = al_load_sample("Sounds/XWing-Laser.ogg");
+ explosion = al_load_sample("Sounds/Blast.ogg");
+ startGame = al_load_sample("Sounds/xwing.ogg");
+ music = al_load_sample("Sounds/Star_Wars.ogg");
+ emperor1 = al_load_sample("Sounds/Emperor1.ogg");
+ emperor2 = al_load_sample("Sounds/Emperor2.ogg");
+ emperor3 = al_load_sample("Sounds/Emperor3.ogg");
//Load Pictures
- picBullet=al_load_bitmap("Lazer.png");
- picShip =al_load_bitmap("player1.png");
- picEnemy = al_load_bitmap("enemy.png");
- Game = al_load_bitmap("Goodpic.png");
- MENU = al_load_bitmap("starBG.png");
+ picBullet=al_load_bitmap("Pictures/Lazer.png");
+ picShip =al_load_bitmap("Pictures/player1.png");
+ picEnemy = al_load_bitmap("Pictures/enemy.png");
+ MENU = al_load_bitmap("Pictures/starBG.png");
for (int i = 0; i < 5; i++)
SpaceBarrier[i] = al_load_bitmap(Images[i]);
for (int i = 0; i < 5; i++)
al_convert_mask_to_alpha(SpaceBarrier[i], al_map_rgb(255, 255, 255));
for (int i = 0; i < 3; i++)
redBarrier[i].CurrentImage = SpaceBarrier[4];
- picHealth[0] = al_load_bitmap("1.png");
- picHealth[1] = al_load_bitmap("2.png");
- picHealth[2] = al_load_bitmap("3.png");
- picHealth[3] = al_load_bitmap("4.png");
- picHealth[4] = al_load_bitmap("5.png");
- picHealth[5] = al_load_bitmap("6.png");
- picHealth[6] = al_load_bitmap("blank.png");
+ picHealth[0] = al_load_bitmap("Pictures/1.png");
+ picHealth[1] = al_load_bitmap("Pictures/2.png");
+ picHealth[2] = al_load_bitmap("Pictures/3.png");
+ picHealth[3] = al_load_bitmap("Pictures/4.png");
+ picHealth[4] = al_load_bitmap("Pictures/5.png");
+ picHealth[5] = al_load_bitmap("Pictures/6.png");
+ picHealth[6] = al_load_bitmap("Pictures/blank.png");
for (int i = 0; i < 7; i++)
al_convert_mask_to_alpha(picHealth[i], al_map_rgb(0, 0, 0));
- bgImage = al_load_bitmap("starBG.png");
- mgImage = al_load_bitmap("starMG.jpg");
- fgImage = al_load_bitmap("starFG.png");
- animShip = al_load_bitmap("player2.png");
- logo = al_load_bitmap("logo.png");
+ bgImage = al_load_bitmap("Pictures/starBG.png");
+ mgImage = al_load_bitmap("Pictures/starMG.jpg");
+ fgImage = al_load_bitmap("Pictures/starFG.png");
+ animShip = al_load_bitmap("Pictures/player2.png");
+ logo = al_load_bitmap("Pictures/logo.png");
al_convert_mask_to_alpha(picShip,al_map_rgb(0,0,0));
al_convert_mask_to_alpha(picEnemy, al_map_rgb(0, 0, 0));
al_convert_mask_to_alpha(picBullet, al_map_rgb(0, 0, 0));
al_convert_mask_to_alpha(mgImage, al_map_rgb(0, 0, 0));
al_convert_mask_to_alpha(animShip, al_map_rgb(0, 0, 0));
InitBackground(BG, 0, 0, 1, 0, 800, 600, -1, 1, bgImage);
InitBackground(MG, 0, 0, 3, 0, 2000, 768, -1, 1, mgImage);
InitBackground(FG, 0, 0, 5, 0, 800, 600, -1, 1, fgImage);
InitBackground(MM, 0, 0, 1, 0, 800, 600, -1, 1,MENU);
InitBarriers();
timer = al_create_timer(1.0 / FPS);
al_set_display_icon(DISPLAY, picShip);
al_play_sample(music, 1, 0, 1, ALLEGRO_PLAYMODE_LOOP, NULL);
TestQueue= al_create_event_queue();
al_register_event_source(TestQueue,al_get_keyboard_event_source());
al_register_event_source(TestQueue,al_get_display_event_source(DISPLAY));
al_register_event_source(TestQueue,al_get_timer_event_source(timer));
al_start_timer(timer);
int frameCount = 0;
int pos = (int)al_ustr_size(str);
- font38 = al_load_font("Legacy.ttf", 38, 0);
- starFont = al_load_font("STARWARS.TTF", 80, 0);
- fontName = al_load_font("Legacy.ttf", 38, 0);
+ font38 = al_load_font("Fonts/Legacy.ttf", 38, 0);
+ starFont = al_load_font("Fonts/STARWARS.TTF", 80, 0);
+ fontName = al_load_font("Fonts/Legacy.ttf", 38, 0);
while (!done)
{
ALLEGRO_EVENT GETKEY;
al_wait_for_event(TestQueue, &GETKEY);
if (GETKEY.type == ALLEGRO_EVENT_DISPLAY_CLOSE) //will allow clicking X button to close program
{
done = true;
}
else if (GETKEY.type == ALLEGRO_EVENT_TIMER)
{
redraw = true;
UpdateBackground(MM);
frameCount++;
if (keys[LEFT] && gameState == 2)
player.MoveSpaceshipLeft();
if (keys[RIGHT] && gameState == 2)
player.MoveSpaceshipRight();
if (keys[SPACE]) //Spacebar will fire
{
if (gameState == 1) {
if(!startAnim)
al_play_sample(startGame, 1, 0, 1, ALLEGRO_PLAYMODE_ONCE, NULL); //plays when spaceship flies across screen
startAnim = true;
}
else if(gameState ==2)
{
if (playerBullet.status ==0)
{
al_play_sample(blaster, 1, 0, 1, ALLEGRO_PLAYMODE_ONCE, NULL);
playerBullet.status = 1;
}
}
}
if (gameState == 2)
{
UpdateBackground(BG);
UpdateBackground(MG);
UpdateBackground(FG);
collideEnemy(score);
updateEnemyCount();
CollideBarrier();
collidePlayer();
BulletBarrierCollide();
EnemyReachEnd();
enemyShoot();
moveDown(frameCount);
updateBullet();
}
}
else if (GETKEY.type==ALLEGRO_EVENT_KEY_DOWN)
{
switch(GETKEY.keyboard.keycode)
{
case ALLEGRO_KEY_ESCAPE: //esc to end the game
if (gameState == 2)
gameState = 3;
else if (gameState == 3)
gameState = 4;
else
done = true;
break;
case ALLEGRO_KEY_RIGHT:
keys[RIGHT] = true;
break;
case ALLEGRO_KEY_LEFT:
keys[LEFT] = true;
break;
case ALLEGRO_KEY_SPACE:
keys[SPACE]=true;
break;
case ALLEGRO_KEY_BACKSPACE: //backspace for name input
if (gameState == 3)
if (al_ustr_prev(str, &pos))
al_ustr_truncate(str, pos);
break;
case ALLEGRO_KEY_ENTER: //will display leaderboard once they press enter.
if (gameState == 3)
gameState = 4;
break;
}
}
if (GETKEY.type == ALLEGRO_EVENT_KEY_UP)
{
switch (GETKEY.keyboard.keycode)
{
case ALLEGRO_KEY_RIGHT:
keys[RIGHT] = false;
break;
case ALLEGRO_KEY_LEFT:
keys[LEFT] = false;
break;
case ALLEGRO_KEY_SPACE:
keys[SPACE] = false;
break;
}
}
else if (GETKEY.type == ALLEGRO_EVENT_KEY_CHAR && gameState == 3 && isHighscore)
{
if (GETKEY.keyboard.unichar >= 32)
{
if (input == 0)
{
al_ustr_remove_range(str, 0, al_ustr_length(str)); //clears 'ENTER NAME: '
pos = 0;
input = 1;
}
pos += al_ustr_append_chr(str, GETKEY.keyboard.unichar);
}
}
if (redraw && al_is_event_queue_empty(TestQueue)) //rendering
{
redraw = false;
if (gameState == 1) //menu
{
DrawBackground(MM);
if (startAnim)
{
DrawAnimation(animShip, x);
}
al_draw_text(font38, al_map_rgb(255, 40, 78), width / 2, height- 750, ALLEGRO_ALIGN_CENTRE, "AMMST PRESENTS");
al_draw_bitmap(logo, 140, (height)-690, 0);
//al_draw_text(starFont, al_map_rgb(255, 40, 78), (width / 2), (height) - 690, ALLEGRO_ALIGN_CENTRE, "DARTH");
//al_draw_text(starFont, al_map_rgb(255, 40, 78), (width / 2), (height)-590, ALLEGRO_ALIGN_CENTRE, "INVADERS");
al_draw_text(font38, al_map_rgb(255, 40, 78), (width / 2), (height) - 150, ALLEGRO_ALIGN_CENTRE, "PRESS SPACE TO START");
al_draw_text(font38, al_map_rgb(255, 40, 78), (width / 2), (height -100) , ALLEGRO_ALIGN_CENTRE, "PRESS ESC TO EXIT");
}
else if (gameState == 2) //main game
{
DrawBackground(BG);
DrawBackground(MG);
DrawBackground(FG);
UpdateBarrierImages(SpaceBarrier);
redBarrier[0].drawIfActive(50, 500);
redBarrier[1].drawIfActive(435, 500);
redBarrier[2].drawIfActive(820, 500);
if (playerBullet.status == 1 && player.active) //if bullet still active
{
playerBullet.Increment(); //bullet will move pos
al_draw_bitmap(picBullet, playerBullet.x_pos, playerBullet.y_pos, 0); //redraw at new pos
if (playerBullet.y_pos < 20)
{
playerBullet.status = 0;
updateBullet();
}
}
if (enemyBullet.status == 1)
{
enemyBullet.Increment(); //bullet will move pos
al_draw_bitmap(picBullet, enemyBullet.x_pos, enemyBullet.y_pos, 0);
}
switch (player.health)
{
case 60:
al_draw_bitmap(picHealth[0], 10, 40, 0);
break;
case 50:
al_draw_bitmap(picHealth[1], 10, 40, 0);
break;
case 40:
al_draw_bitmap(picHealth[2], 10, 40, 0);
break;
case 30:
al_draw_bitmap(picHealth[3], 10, 40, 0);
break;
case 20:
al_draw_bitmap(picHealth[4], 10, 40, 0);
break;
case 10:
al_draw_bitmap(picHealth[5], 10, 40, 0);
break;
case 0:
al_draw_bitmap(picHealth[6], 10, 40, 0);
break;
}
if (player.health > 0)
{
al_draw_bitmap(picShip, player.x_pos - 45, player.y_pos, 0);
}
bool test = reachEnd();
for (int i = 0; i < NUM_COLUMNS; i++)
{
for (int j = 0; j < NUM_ROWS; j++)
{
if (arrEnem[i][j].active)
{
arrEnem[i][j].Move(test);
al_draw_bitmap(picEnemy, arrEnem[i][j].x_pos, arrEnem[i][j].y_pos, 0);
}
}
}
al_draw_textf(font38, al_map_rgb(255, 0, 0), 10, 0, 0, "SCORE: %i", score);
}
else if(gameState == 3) //end game
{
if (player.health == 0)
{
al_play_sample(explosion, 1, 0, 1, ALLEGRO_PLAYMODE_ONCE, NULL);
if(frameCount % 7 == 0)
al_play_sample(emperor3, 1, 0, 1, ALLEGRO_PLAYMODE_ONCE, NULL);
else if (frameCount % 3 == 0)
al_play_sample(emperor2, 1, 0, 1, ALLEGRO_PLAYMODE_ONCE, NULL);
else
al_play_sample(emperor1, 1, 0, 1, ALLEGRO_PLAYMODE_ONCE, NULL);
player.health = 1; // will only sound once
}
//check to determine if he made a highscore
if(score>lowScore)
isHighscore = true;
nameString = al_cstr_dup(str);
al_draw_textf(starFont, al_map_rgb(255, 0, 0), width / 2, height / 2 - 200, ALLEGRO_ALIGN_CENTRE, "FINAL SCORE: %i", score);
if(isHighscore)
al_draw_text(fontName, al_map_rgb_f(1, 1, 1), width / 2, height / 2 - 100, ALLEGRO_ALIGN_CENTRE, nameString);
}
else if (gameState == 4) //highscores
{
if (isHighscore && output == 0)
{
writeScore();
output = 1;
}
al_draw_textf(starFont, al_map_rgb(255, 0, 0), width/2,40, ALLEGRO_ALIGN_CENTRE, "HIGHSCORES");
for (int i = 0; i < 10; i++)
{
al_draw_textf(font38, al_map_rgb(255, 0, 0), width / 2 -80, 120 + i*60, ALLEGRO_ALIGN_RIGHT,"%i", arrScores[i].score);
al_draw_textf(font38, al_map_rgb(255, 0, 0), width / 2 + 80, 120 + i * 60, ALLEGRO_ALIGN_LEFT, "%s", arrScores[i].name.c_str());
}
}
al_flip_display(); //flip display to show all drawn objects
al_clear_to_color(al_map_rgb(0, 0, 0)); //background colour
}
}
al_destroy_sample(blaster);
al_destroy_sample(explosion);
al_destroy_sample(startGame);
al_destroy_sample(music);
al_destroy_sample(emperor1);
al_destroy_sample(emperor2);
al_destroy_sample(emperor3);
al_destroy_event_queue(TestQueue);
al_destroy_timer(timer);
al_destroy_display(DISPLAY);
al_destroy_font(font38);
al_destroy_font(starFont);
al_destroy_font(fontName);
al_destroy_bitmap(Game);
al_destroy_bitmap(MENU);
al_destroy_bitmap(picEnemy);
al_destroy_bitmap(picShip);
al_destroy_bitmap(picBullet);
al_destroy_bitmap(bgImage);
al_destroy_bitmap(mgImage);
al_destroy_bitmap(fgImage);
al_destroy_bitmap(animShip);
al_destroy_bitmap(logo);
for (int i = 0; i < 7; i++)
al_destroy_bitmap(picHealth[i]);
for (int i = 0; i < 5; i++)
al_destroy_bitmap(SpaceBarrier[i]);
return 0;
}
void collidePlayer()
{
if (enemyBullet.status)
{
if (enemyBullet.y_pos < player.y_pos + player.boxheight //checks if within box
&& enemyBullet.y_pos > player.y_pos - player.boxheight
&& enemyBullet.x_pos < player.x_pos + player.boxright
&& enemyBullet.x_pos > player.x_pos - player.boxleft)
{
enemyBullet.status = 0; //bullet set to not active
player.health -= 10;
}
}
if (player.health == 0)
{
player.active = false;
gameState = 3;
}
}
void setEnemy()
{
//row 1
arrEnem[0][0].set(width / 2 - sp, 65); //left
arrEnem[1][0].set(width / 2, 65); //middle
arrEnem[2][0].set(width / 2 + sp, 65); //right
arrEnem[3][0].set(width / 2 - 2 * sp, 65);
arrEnem[4][0].set(width / 2 + 2 * sp, 65);
arrEnem[5][0].set(width / 2 - 3 * sp, 65);
arrEnem[6][0].set(width / 2 + 3 * sp, 65);
arrEnem[7][0].set(width / 2 - 4 * sp, 65);
//row 2
arrEnem[0][1].set(width / 2 - sp, 130); //left
arrEnem[1][1].set(width / 2, 130); //middle
arrEnem[2][1].set(width / 2 + sp, 130); //right
arrEnem[3][1].set(width / 2 - 2 * sp, 130);
arrEnem[4][1].set(width / 2 + 2 * sp, 130);
arrEnem[5][1].set(width / 2 - 3 * sp, 130);
arrEnem[6][1].set(width / 2 + 3 * sp, 130);
arrEnem[7][1].set(width / 2 - 4 * sp, 130);
//row 3
arrEnem[0][2].set(width / 2 - sp, 195); //left
arrEnem[1][2].set(width / 2, 195); //middle
arrEnem[2][2].set(width / 2 + sp, 195); //right
arrEnem[3][2].set(width / 2 - 2 * sp, 195);
arrEnem[4][2].set(width / 2 + 2 * sp, 195);
arrEnem[5][2].set(width / 2 - 3 * sp, 195);
arrEnem[6][2].set(width / 2 + 3 * sp, 195);
arrEnem[7][2].set(width / 2 - 4 * sp, 195);
//row 4
arrEnem[0][3].set(width / 2 - sp, 260);
arrEnem[1][3].set(width / 2, 260);
arrEnem[2][3].set(width / 2 + sp, 260);
arrEnem[3][3].set(width / 2 - 2 * sp, 260);
arrEnem[4][3].set(width / 2 + 2 * sp, 260);
arrEnem[5][3].set(width / 2 - 3 * sp, 260);
arrEnem[6][3].set(width / 2 + 3 * sp, 260);
arrEnem[7][3].set(width / 2 - 4 * sp, 260);
}
void collideEnemy(int &score)
{
if (playerBullet.status)
{
for (int i = 0; i < NUM_COLUMNS; i++)
{
for (int j = 0; j < NUM_ROWS; j++) //collision detection ahead. Proceed with caution
{
if (arrEnem[i][j].active) //checks if enemy active
{
if (playerBullet.y_pos - 25 < arrEnem[i][j].y_pos + arrEnem[i][j].boxheight //checks if within box of enemy
&& playerBullet.y_pos > arrEnem[i][j].y_pos - arrEnem[i][j].boxheight
&& playerBullet.x_pos < arrEnem[i][j].x_pos + arrEnem[i][j].boxright
&& playerBullet.x_pos > arrEnem[i][j].x_pos - arrEnem[i][j].boxleft)
{
playerBullet.status = 0; //bullet set to not active
arrEnem[i][j].active = false; //enemy set to not active
switch (j)
{
case 0:
score += 40;
break;
case 1:
score += 20;
break;
case 2:
score += 20;
break;
default:
score += 10;
break;
}
numAlive--;
}
}
}
}
}
}
void moveDown(int &frameCount)
{
int interval = 60; //how long enemies take to move down depends on how many enemies left
if (numAlive > 30)
{
interval = 360;
}
else if (30 > numAlive && numAlive > 15)
{
interval = 300;
}
else if (15 > numAlive && numAlive > 8)
{
interval = 240;
}
else if (8 > numAlive && numAlive > 2)
{
interval = 120;
}
else if (numAlive == 0)
{
gameState = 3;
}
if (frameCount % interval == 0)
{
for (int i = 0; i < NUM_COLUMNS; i++)
{
for (int j = 0; j < NUM_ROWS; j++)
{
arrEnem[i][j].y_pos += 20;
}
}
}
}
void enemyShoot()
{
if (!enemyBullet.status)
{
for (int i = 0; i < NUM_COLUMNS; i++)
{
for (int j = 0; j < NUM_ROWS; j++)
{
if (arrEnem[i][j].active)
{
int randCol = rand() % NUM_COLUMNS;
int randRow = rand() % NUM_ROWS;
if (randCol == i && randRow == j)
{
enemyBullet.UpdatebulletPos(arrEnem[i][j]);
enemyBullet.status = 1;
break;
}
}
}
}
}
}
void updateBullet()
{
if (playerBullet.status == 0) //while bullet not active sets pos of ship as initial bullet pos
playerBullet.UpdateBulletPos(player);
}
bool reachEnd() //returns true if any enemy hits either of the sides
{
for (int i = 0; i < NUM_COLUMNS; i++)
{
for (int j = 0; j < NUM_ROWS; j++)
{
if (arrEnem[i][j].active) //checks if enemy active
{
if (width-80 < arrEnem[i][j].x_pos && arrEnem[i][j].speed > 0) //if moving to the right and close to right wall
{
return true;
break;
}
else if (10 > arrEnem[i][j].x_pos && arrEnem[i][j].speed < 0) //if moving to the left and close to left wall
{
return true;
break;
}
}
}
}
return false;
}
void InitBackground(BackGround &back, float x, float y, float velx, float vely, int width, int height, int dirX, int dirY, ALLEGRO_BITMAP *image)
{
back.x = x;
back.y = y;
back.velX = velx;
back.velY = vely;
back.WIDTH = width;
back.HEIGHT = height;
back.dirX = dirX;
back.dirY = dirY;
back.image = image;
}
void UpdateBackground(BackGround &back)
{
back.x += back.velX * back.dirX;
if (back.x + back.WIDTH <= 0)
back.x = 0;
}
void DrawBackground(BackGround &back)
{
al_draw_bitmap(back.image, back.x, back.y, 0);
al_draw_bitmap(back.image, back.x + back.WIDTH, back.HEIGHT, 0);
al_draw_bitmap(back.image, back.x, back.HEIGHT, 0);
al_draw_bitmap(back.image, back.x + back.WIDTH, back.y, 0);
}
void InitBarriers()
{
redBarrier[0].SetBarrierpos(50, 500);
redBarrier[1].SetBarrierpos(435, 500);
redBarrier[2].SetBarrierpos(820, 500);
for (int i = 0; i < 3; i++)
{
redBarrier[i].setLife(5);
redBarrier[i].active = true;
}
}
void Reactivate_Enemies()
{
for (int i = 0; i < NUM_COLUMNS; i++)
{
for (int j = 0; j < NUM_ROWS; j++)
{
arrEnem[i][j].active = true;
}
}
}
void CollideBarrier()
{
for (int i = 0; i < 3; i++)
{
if (redBarrier[i].active && enemyBullet.status == 1)
{
if (enemyBullet.x_pos >(redBarrier[i].x_pos - redBarrier[i].Bleft) && enemyBullet.x_pos<(redBarrier[i].x_pos + redBarrier[i].Bright)
&& enemyBullet.y_pos>(redBarrier[i].y_pos - redBarrier[i].BHeight) && enemyBullet.y_pos < (redBarrier[i].y_pos + redBarrier[i].BHeight))
{
if (redBarrier[i].life_points != 0)
{
redBarrier[i].life_points--;
if (redBarrier[i].life_points == 0)
{
redBarrier[i].active = false;
}
}
enemyBullet.status = 0;
}
}
}
}
void BulletBarrierCollide()
{
for (int i=0; i < 3; i++)
{
if (redBarrier[i].active && playerBullet.status == 1)
{
if (playerBullet.x_pos >(redBarrier[i].x_pos - redBarrier[i].Bleft) && playerBullet.x_pos<(redBarrier[i].x_pos + redBarrier[i].Bright)
&& playerBullet.y_pos>(redBarrier[i].y_pos - redBarrier[i].BHeight) && playerBullet.y_pos < (redBarrier[i].y_pos + redBarrier[i].BHeight))
{
playerBullet.status = 0;
}
}
}
}
void updateEnemyCount()
{
if (numAlive == 0)
{
EnemyWaveCount++;
numAlive = NUM_COLUMNS*NUM_ROWS;
Reactivate_Enemies();
Reactivate_Barriers();
setEnemy();
switch (player.health)
{
case 50:
player.health += 10;
break;
case 40:
player.health += 20;
break;
case 30:
player.health += 20;
break;
case 20:
player.health += 20;
break;
case 10:
player.health += 20;
break;
}
}
}
void EnemyReachEnd()
{
for (int i = 0; i < NUM_COLUMNS; i++)
{
for (int j = 0; j < NUM_ROWS; j++)
{
if (arrEnem[i][j].active == true)
{
if (arrEnem[i][j].y_pos > redBarrier[0].y_pos - redBarrier[0].BHeight)
{
gameState = 3;
}
}
}
}
}
void Reactivate_Barriers()
{
for (int b = 0; b < 3; b++)
{
redBarrier[b].life_points = 5;
redBarrier[b].active = true;
}
}
void UpdateBarrierImages(ALLEGRO_BITMAP *SpaceBarrier[])
{
for (int i = 0; i < 3; i++)
{
if (redBarrier[i].life_points != -1)
{
redBarrier[i].CurrentImage = SpaceBarrier[redBarrier[i].life_points];
}
if (redBarrier[i].life_points == 5)
redBarrier[i].CurrentImage = SpaceBarrier[4];
if (redBarrier[i].life_points == 4)
redBarrier[i].CurrentImage = SpaceBarrier[3];
if (redBarrier[i].life_points == 3)
redBarrier[i].CurrentImage = SpaceBarrier[2];
if (redBarrier[i].life_points == 2)
redBarrier[i].CurrentImage = SpaceBarrier[1];
if (redBarrier[i].life_points == 1)
redBarrier[i].CurrentImage = SpaceBarrier[0];
}
}
void DrawAnimation(ALLEGRO_BITMAP *pic, int &x)
{
al_draw_bitmap(pic, x, 400, 0);
x = x + 6;
if (x > width - 20)
{
gameState = 2;
}
}
void readScores()
{
ifstream myfile("scores.txt");
string line;
Highscores temp;
int count = 0;
while (myfile.good())
{
getline(myfile, line);
//now you must split the line. Easiest way to do it is like this:
temp.score = stoi(line.substr(0, (int)line.find(' '))); //get substring from index 0 to space and convert it to integer
temp.name = line.substr((int)line.find(' ') + 1); //get substring from space and to the end of the string
arrScores[count].name = temp.name;
arrScores[count].score = temp.score;
count++;
}
myfile.close();
lowScore = arrScores[9].score;
}
void writeScore()
{
int pos = 9 - 1;
int i = 0;
while (score > arrScores[pos].score && pos >= 0)
{
arrScores[pos + 1] = arrScores[pos];
pos--;
}
arrScores[pos + 1].score = score;
arrScores[pos + 1].name = nameString;
ofstream OutputFile("scores.txt");
for (i = 0; i < 9; i++)
{
if (arrScores[i].name == "")
arrScores[i].name = "NAME";
OutputFile << arrScores[i].score << " " << arrScores[i].name << endl;
}
if (arrScores[i].name == "")
arrScores[i].name = "NAME";
OutputFile << arrScores[i].score << " " << arrScores[i].name;
OutputFile.close();
}
\ No newline at end of file
diff --git a/cb.png b/cb.png
deleted file mode 100644
index c4482d8..0000000
Binary files a/cb.png and /dev/null differ
diff --git a/scores.txt b/scores.txt
index c9b03a9..8bb1902 100644
--- a/scores.txt
+++ b/scores.txt
@@ -1,10 +1,10 @@
6160 muhammad vaid
120 mo
20 mo
-0 NAME
+10 ENTER NAME
0 NAME
0 NAME
0 NAME
0 NAME
0 NAME
0 NAME
\ No newline at end of file
diff --git a/star_sky.png b/star_sky.png
deleted file mode 100644
index d4eefe5..0000000
Binary files a/star_sky.png and /dev/null differ
diff --git a/xwing.wav b/xwing.wav
deleted file mode 100644
index 5cb1d3a..0000000
Binary files a/xwing.wav and /dev/null differ
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Jun 15, 11:35 PM (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
72208
Default Alt Text
(32 KB)
Attached To
Mode
R72 DarthInvaders
Attached
Detach File
Event Timeline