First commit
This commit is contained in:
19
.hgignore
Normal file
19
.hgignore
Normal file
@@ -0,0 +1,19 @@
|
||||
syntax: glob
|
||||
|
||||
mathwars
|
||||
recursos/*
|
||||
bin/*
|
||||
obj/*
|
||||
Debug/*
|
||||
Release/*
|
||||
data/*
|
||||
*.suo
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.user
|
||||
*.dll
|
||||
.DS_Store
|
||||
trick.ini
|
||||
*.xcuserstate
|
||||
project.xcworkspace/
|
||||
xcuserdata/
|
||||
136
Enemies.cpp
Normal file
136
Enemies.cpp
Normal file
@@ -0,0 +1,136 @@
|
||||
#include "Enemies.h"
|
||||
#include "api.h"
|
||||
|
||||
#define MAX_ENEMIES 5
|
||||
struct Enemy {
|
||||
float x, y, by, fn;
|
||||
int m1, m2;
|
||||
int state;
|
||||
int type;
|
||||
};
|
||||
Enemy enemies[MAX_ENEMIES];
|
||||
int enemyTimer = 0;
|
||||
int kills = 0;
|
||||
int wave = 5;
|
||||
int betweenWaves = 300;
|
||||
int generations = 0;
|
||||
int table[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
|
||||
bool visited[8] = { false, false, false, false, false, false, false, false };
|
||||
int tableSize = 8;
|
||||
|
||||
void ResetEnemies() {
|
||||
enemyTimer = 0;
|
||||
kills = 0;
|
||||
generations = 0;
|
||||
tableSize = 8;
|
||||
for (int i = 0; i < 8; i++) { table[i] = i; visited[i] = false; }
|
||||
for (int i = 0; i < MAX_ENEMIES; i++) {
|
||||
enemies[i].x = enemies[i].y = enemies[i].by = -1;
|
||||
enemies[i].fn = 0;
|
||||
enemies[i].state = 0;
|
||||
enemies[i].type = rand() % 2;
|
||||
}
|
||||
}
|
||||
|
||||
Enemies::Enemies() {
|
||||
ResetEnemies();
|
||||
RegisterMessage("CheckEnemyHit", this);
|
||||
RegisterMessage("ResetEnemies", this);
|
||||
}
|
||||
|
||||
void GenerateNewEnemy() {
|
||||
if (generations >= 16) return;
|
||||
enemyTimer = 60 + SDL_max(60 - (kills), 0);
|
||||
for (int i = 0; i < MAX_ENEMIES; i++) {
|
||||
if (enemies[i].y == -1) {
|
||||
generations++;
|
||||
enemies[i].by = enemies[i].y = 20 + rand() % 230;
|
||||
enemies[i].fn = 0;
|
||||
enemies[i].x = 480;
|
||||
enemies[i].m1 = 1 + wave; // (rand() % (3 + SDL_min(int(SDL_floor(kills / 5.0f)), 4)));
|
||||
int num = rand() % tableSize;
|
||||
/*char peiv[10]; itoa(table[num], peiv, 10);
|
||||
SDL_Log(peiv);*/
|
||||
enemies[i].m2 = 2 + table[num];
|
||||
if (visited[table[num]]) { tableSize--; if (num < tableSize) table[num] = table[tableSize]; } else { visited[table[num]] = true; }
|
||||
enemies[i].state = 0;
|
||||
enemies[i].type = rand() % 2;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Enemies::Update() {
|
||||
if (betweenWaves > 0) {
|
||||
betweenWaves--;
|
||||
if (betweenWaves < 240) {
|
||||
char waveText[7] = "WAVE 0"; waveText[5] = wave + 48;
|
||||
Print(200, 120, waveText, 255, 255, 255);
|
||||
}
|
||||
} else {
|
||||
enemyTimer--;
|
||||
if (enemyTimer <= 0) GenerateNewEnemy();
|
||||
for (int i = 0; i < MAX_ENEMIES; i++) {
|
||||
if (enemies[i].y > -1) {
|
||||
enemies[i].fn += (0.01f + kills*0.0025f);
|
||||
enemies[i].y = enemies[i].by + SDL_sinf(enemies[i].fn)*10.0f;
|
||||
enemies[i].x -= (0.5f + kills*0.02f);
|
||||
if (enemies[i].state == 0 && enemies[i].x <= 100) {
|
||||
SendMessage("CreateNewLaser", enemies[i].x, enemies[i].y, 40, 125, 1);
|
||||
Blink();
|
||||
SendMessage("HeroHit");
|
||||
enemyTimer = 400;
|
||||
for (int j = 0; j < MAX_ENEMIES; j++) {
|
||||
if (enemies[j].y < 135) { enemies[j].state = 10; }
|
||||
else { enemies[j].state = -10; }
|
||||
enemies[j].m1 = enemies[j].m2 = 0;
|
||||
}
|
||||
//betweenWaves = 420; ResetEnemies();
|
||||
}
|
||||
if (enemies[i].state != 0) enemies[i].x -= 1.0f;
|
||||
if (enemies[i].state > 0) enemies[i].y -= 1.0f;
|
||||
if (enemies[i].state < 0) enemies[i].y += 1.0f;
|
||||
|
||||
if (enemies[i].type == 0) {
|
||||
Draw(enemies[i].x, enemies[i].y, 37, 64, 17, 13, enemies[i].state - SDL_cosf(enemies[i].fn)*10.0f);
|
||||
}
|
||||
else {
|
||||
Draw(enemies[i].x, enemies[i].y, 54, 64, 21, 13, enemies[i].state - SDL_cosf(enemies[i].fn)*10.0f);
|
||||
}
|
||||
if (enemies[i].state == 0) {
|
||||
PrintChar(enemies[i].x - 2, enemies[i].y - 10, enemies[i].m1 + 48, 0, 255, 0);
|
||||
PrintChar(enemies[i].x + 5, enemies[i].y - 10, 'x', 128, 128, 128);
|
||||
PrintChar(enemies[i].x + 12, enemies[i].y - 10, enemies[i].m2 + 48, 0, 255, 0);
|
||||
}
|
||||
if (enemies[i].x < -20) { enemies[i].x = enemies[i].y = -1; }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckEnemyHit(int n1, int n2) {
|
||||
for (int i = 0; i < MAX_ENEMIES; i++) {
|
||||
if (enemies[i].y > -1) {
|
||||
if (enemies[i].m1 * enemies[i].m2 == n1 * 10 + n2) {
|
||||
SendMessage("CreateNewLaser", 40, 125, enemies[i].x, enemies[i].y, 0);
|
||||
Blink();
|
||||
kills++;
|
||||
SendMessage("GenerateExplosion", enemies[i].x, enemies[i].y); //GenerateExplosion(enemies[i].x, enemies[i].y);
|
||||
enemies[i].x = enemies[i].y = -1;
|
||||
SendMessage("IncreaseScore", 100); //score += 100;
|
||||
if (kills == 16) {
|
||||
betweenWaves = 360; wave++; ResetEnemies();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Enemies::ProcessMessage(const char* msg) {
|
||||
if (msg == "CheckEnemyHit") {
|
||||
int* params = GetMessageParams();
|
||||
CheckEnemyHit(params[0], params[1]);
|
||||
} else if (msg == "ResetEnemies") {
|
||||
betweenWaves = 420; ResetEnemies();
|
||||
}
|
||||
}
|
||||
10
Enemies.h
Normal file
10
Enemies.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "System.h"
|
||||
|
||||
class Enemies : public System {
|
||||
public:
|
||||
Enemies();
|
||||
void Update();
|
||||
void ProcessMessage(const char* msg);
|
||||
};
|
||||
|
||||
95
Explosions.cpp
Normal file
95
Explosions.cpp
Normal file
@@ -0,0 +1,95 @@
|
||||
#include "Explosions.h"
|
||||
#include "api.h"
|
||||
|
||||
#define MAX_EXPLOSIONS 5
|
||||
#define PIXELS_PER_EXPLOSION 24
|
||||
#define PARTICLES_PER_EXPLOSION 4
|
||||
struct Particle {
|
||||
Point pos;
|
||||
Point dir;
|
||||
float scale;
|
||||
float angle;
|
||||
};
|
||||
struct Explosion {
|
||||
Point pos;
|
||||
Point dir;
|
||||
float scale;
|
||||
float angle;
|
||||
int ttl;
|
||||
};
|
||||
Explosion explosions[MAX_EXPLOSIONS][PIXELS_PER_EXPLOSION];
|
||||
Particle particles[MAX_EXPLOSIONS][PARTICLES_PER_EXPLOSION];
|
||||
|
||||
Explosions::Explosions() {
|
||||
for (int i = 0; i < MAX_EXPLOSIONS; i++) {
|
||||
explosions[i][0].ttl = 0;
|
||||
}
|
||||
RegisterMessage("GenerateExplosion", this);
|
||||
}
|
||||
|
||||
|
||||
void Explosions::Update() {
|
||||
for (int i = 0; i < MAX_EXPLOSIONS; i++) {
|
||||
if (explosions[i][0].ttl > 0) {
|
||||
for (int j = 0; j < PIXELS_PER_EXPLOSION; j++) {
|
||||
explosions[i][j].pos.x += explosions[i][j].dir.x;
|
||||
explosions[i][j].pos.y += explosions[i][j].dir.y;
|
||||
//SetColor(128+rand()%128, 128+rand()%128, 128+rand()%128);
|
||||
//DrawPoint(explosions[i][j].pos.x, explosions[i][j].pos.y);
|
||||
Tint(128 + rand() % 128, 128 + rand() % 128, 128 + rand() % 128);
|
||||
DrawEx(explosions[i][j].pos.x, explosions[i][j].pos.y, 3, 85, 1, 1, explosions[i][j].scale, explosions[i][j].angle);
|
||||
if (explosions[i][j].scale > 1) explosions[i][j].scale -= 0.01f;
|
||||
explosions[i][j].angle += explosions[i][j].dir.x + explosions[i][j].dir.y;
|
||||
}
|
||||
explosions[i][0].ttl--;
|
||||
|
||||
SetBlend(BlendAdd);
|
||||
SetAlpha(128);
|
||||
for (int j = 0; j < 4; j++) DrawEx(particles[i][j].pos.x, particles[i][j].pos.y, 0, 85, 10, 10, particles[i][j].scale, particles[i][j].angle);
|
||||
Tint(255, 128, 0);
|
||||
SetAlpha(64);
|
||||
for (int j = 0; j < 4; j++) DrawEx(particles[i][j].pos.x, particles[i][j].pos.y, 0, 85, 10, 10, particles[i][j].scale * 2, particles[i][j].angle);
|
||||
SetBlend(BlendBlend);
|
||||
Tint(255, 255, 255);
|
||||
SetAlpha(255);
|
||||
for (int j = 0; j < 4; j++) {
|
||||
if (particles[i][j].scale > 0.0f) {
|
||||
particles[i][j].pos.x += particles[i][j].dir.x;
|
||||
particles[i][j].pos.y += particles[i][j].dir.y;
|
||||
particles[i][j].scale -= 0.1f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GenerateExplosion(int x, int y) {
|
||||
for (int i = 0; i < MAX_EXPLOSIONS; i++) {
|
||||
if (explosions[i][0].ttl == 0) {
|
||||
explosions[i][0].ttl = 60;
|
||||
for (int j = 0; j < PIXELS_PER_EXPLOSION; j++) {
|
||||
explosions[i][j].pos.x = x;
|
||||
explosions[i][j].pos.y = y;
|
||||
explosions[i][j].dir.x = ((rand() % 200) - 100)*0.1f;
|
||||
explosions[i][j].dir.y = ((rand() % 200) - 100)*0.1f;
|
||||
explosions[i][j].scale = 1 + (rand() % 100)*0.04f;
|
||||
explosions[i][j].angle = rand() % 360;
|
||||
}
|
||||
for (int j = 0; j < PARTICLES_PER_EXPLOSION; j++) {
|
||||
particles[i][j].pos.x = x;
|
||||
particles[i][j].pos.y = y;
|
||||
particles[i][j].dir.x = ((rand() % 200) - 100)*0.02f;
|
||||
particles[i][j].dir.y = ((rand() % 200) - 100)*0.02f;
|
||||
particles[i][j].scale = 4;
|
||||
particles[i][j].angle = rand() % 360;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Explosions::ProcessMessage(const char* msg) {
|
||||
if (msg == "GenerateExplosion") {
|
||||
int* params = GetMessageParams();
|
||||
GenerateExplosion(params[0], params[1]);
|
||||
}
|
||||
}
|
||||
10
Explosions.h
Normal file
10
Explosions.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "System.h"
|
||||
|
||||
class Explosions : public System {
|
||||
public:
|
||||
Explosions();
|
||||
void Update();
|
||||
void ProcessMessage(const char* msg);
|
||||
};
|
||||
|
||||
83
Lasers.cpp
Normal file
83
Lasers.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#include "Lasers.h"
|
||||
#include "api.h"
|
||||
|
||||
#define MAX_LASERS 5
|
||||
struct Laser {
|
||||
Point ini, fin;
|
||||
float pos;
|
||||
unsigned char r, g, b;
|
||||
};
|
||||
Laser lasers[MAX_LASERS];
|
||||
int randomLaserCounter = 60;
|
||||
|
||||
Lasers::Lasers() {
|
||||
randomLaserCounter = 60;
|
||||
for (int i = 0; i < MAX_LASERS; i++) lasers[i].pos = -1.0f;
|
||||
RegisterMessage("CreateNewLaser", this);
|
||||
}
|
||||
|
||||
void GenerateNewLaser() {
|
||||
randomLaserCounter = rand() % 60;
|
||||
for (int i = 0; i < MAX_LASERS; i++) {
|
||||
if (lasers[i].pos < 0.0f) {
|
||||
if (rand() % 2 == 0) {
|
||||
lasers[i].ini.x = 0;
|
||||
lasers[i].ini.y = rand() % 270;
|
||||
lasers[i].fin.x = 480;
|
||||
lasers[i].fin.y = (rand() % 200) - 100;
|
||||
lasers[i].pos = 0.0f;
|
||||
lasers[i].r = 255; lasers[i].g = 0; lasers[i].b = 0;
|
||||
}
|
||||
else {
|
||||
lasers[i].ini.x = 480;
|
||||
lasers[i].ini.y = rand() % 270;
|
||||
lasers[i].fin.x = -480;
|
||||
lasers[i].fin.y = (rand() % 200) - 100;
|
||||
lasers[i].pos = 0.0f;
|
||||
lasers[i].r = 0; lasers[i].g = 255; lasers[i].b = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Lasers::Update() {
|
||||
randomLaserCounter--;
|
||||
if (randomLaserCounter <= 0) GenerateNewLaser();
|
||||
for (int i = 0; i < MAX_LASERS; i++) {
|
||||
if (lasers[i].pos >= 0.0f) {
|
||||
lasers[i].pos += 0.1f;
|
||||
SetColor(lasers[i].r, lasers[i].g, lasers[i].b);
|
||||
DrawLine(lasers[i].ini.x + lasers[i].fin.x*lasers[i].pos, lasers[i].ini.y + lasers[i].fin.y*lasers[i].pos, lasers[i].ini.x + lasers[i].fin.x*(lasers[i].pos + 0.2f), lasers[i].ini.y + lasers[i].fin.y*(lasers[i].pos + 0.2f));
|
||||
DrawLine(lasers[i].ini.x + lasers[i].fin.x*lasers[i].pos, 0.5 + lasers[i].ini.y + lasers[i].fin.y*lasers[i].pos, lasers[i].ini.x + lasers[i].fin.x*(lasers[i].pos + 0.2f), 0.5 + lasers[i].ini.y + lasers[i].fin.y*(lasers[i].pos + 0.2f));
|
||||
DrawLine(lasers[i].ini.x + lasers[i].fin.x*lasers[i].pos, 1 + lasers[i].ini.y + lasers[i].fin.y*lasers[i].pos, lasers[i].ini.x + lasers[i].fin.x*(lasers[i].pos + 0.2f), 1 + lasers[i].ini.y + lasers[i].fin.y*(lasers[i].pos + 0.2f));
|
||||
if (lasers[i].pos >= 0.8f)
|
||||
lasers[i].pos = -1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CreateNewLaser(float x1, float y1, float x2, float y2, unsigned char r, unsigned char g, unsigned char b) {
|
||||
for (int i = 0; i < MAX_LASERS; i++) {
|
||||
if (lasers[i].pos < 0.0f) {
|
||||
lasers[i].ini.x = x1;
|
||||
lasers[i].ini.y = y1;
|
||||
lasers[i].fin.x = x2 - x1;
|
||||
lasers[i].fin.y = y2 - y1;
|
||||
lasers[i].pos = 0.0f;
|
||||
lasers[i].r = r; lasers[i].g = g; lasers[i].b = b;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Lasers::ProcessMessage(const char* msg) {
|
||||
if (msg == "CreateNewLaser") {
|
||||
int* params = GetMessageParams();
|
||||
if (params[4] == 0) {
|
||||
CreateNewLaser(params[0], params[1], params[2], params[3], 255, 0, 0);
|
||||
} else {
|
||||
CreateNewLaser(params[0], params[1], params[2], params[3], 0, 255, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
10
Lasers.h
Normal file
10
Lasers.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "System.h"
|
||||
|
||||
class Lasers : public System {
|
||||
public:
|
||||
Lasers();
|
||||
void Update();
|
||||
void ProcessMessage(const char* msg);
|
||||
};
|
||||
|
||||
23
Menu.cpp
Normal file
23
Menu.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "Menu.h"
|
||||
#include "api.h"
|
||||
|
||||
#include "StarField.h"
|
||||
#include "Explosions.h"
|
||||
#include "Lasers.h"
|
||||
#include "Enemies.h"
|
||||
#include "Xwing.h"
|
||||
#include "Score.h"
|
||||
|
||||
Menu::Menu() {
|
||||
SendMessage("SetStarFieldVelocity", 25);
|
||||
}
|
||||
|
||||
|
||||
void Menu::Update() {
|
||||
Draw(176, 50, 128, 0, 128, 64);
|
||||
Print(130, 150, "PULSA UNA TECLA PARA EMPEZAR", 255, 255, 255);
|
||||
}
|
||||
|
||||
void Menu::ProcessMessage(const char* msg) {
|
||||
|
||||
}
|
||||
10
Menu.h
Normal file
10
Menu.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "System.h"
|
||||
|
||||
class Menu : public System {
|
||||
public:
|
||||
Menu();
|
||||
void Update();
|
||||
void ProcessMessage(const char* msg);
|
||||
};
|
||||
|
||||
15
Scene.cpp
Normal file
15
Scene.cpp
Normal file
@@ -0,0 +1,15 @@
|
||||
#include "Scene.h"
|
||||
|
||||
|
||||
Scene::Scene()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Scene::~Scene()
|
||||
{
|
||||
}
|
||||
|
||||
bool Scene::Update() {
|
||||
return true;
|
||||
}
|
||||
8
Scene.h
Normal file
8
Scene.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
class Scene {
|
||||
public:
|
||||
Scene();
|
||||
virtual ~Scene() = 0;
|
||||
virtual bool Update();
|
||||
};
|
||||
|
||||
32
Score.cpp
Normal file
32
Score.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "Score.h"
|
||||
#include "api.h"
|
||||
|
||||
namespace {
|
||||
int lives = 3;
|
||||
int score = 0;
|
||||
}
|
||||
|
||||
Score::Score() {
|
||||
lives = 3;
|
||||
score = 0;
|
||||
RegisterMessage("IncreaseScore", this);
|
||||
RegisterMessage("DecreaseLives", this);
|
||||
}
|
||||
|
||||
void Score::Update() {
|
||||
char strScore[10];
|
||||
itoa(score, strScore, 10);
|
||||
Print(220, 4, strScore, 255, 255, 0);
|
||||
if (lives > 0) Draw(5, 5, 10, 85, 18, 18);
|
||||
if (lives > 1) Draw(25, 5, 10, 85, 18, 18);
|
||||
if (lives > 2) Draw(45, 5, 10, 85, 18, 18);
|
||||
}
|
||||
|
||||
void Score::ProcessMessage(const char* msg) {
|
||||
if (msg == "IncreaseScore") {
|
||||
int* params = GetMessageParams();
|
||||
score += params[0];
|
||||
} else if (msg == "DecreaseLives") {
|
||||
lives--;
|
||||
}
|
||||
}
|
||||
10
Score.h
Normal file
10
Score.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "System.h"
|
||||
|
||||
class Score : public System {
|
||||
public:
|
||||
Score();
|
||||
void Update();
|
||||
void ProcessMessage(const char* msg);
|
||||
};
|
||||
|
||||
41
StarField.cpp
Normal file
41
StarField.cpp
Normal file
@@ -0,0 +1,41 @@
|
||||
#include "StarField.h"
|
||||
#include "api.h"
|
||||
|
||||
Point starField[3][24];
|
||||
float speed = 1;
|
||||
|
||||
StarField::StarField() {
|
||||
speed = 1;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 24; j++) {
|
||||
starField[i][j].x = rand() % 480;
|
||||
starField[i][j].y = rand() % 270;
|
||||
}
|
||||
}
|
||||
RegisterMessage("SetStarFieldVelocity", this);
|
||||
}
|
||||
|
||||
void StarField::Update() {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 24; j++) {
|
||||
starField[i][j].x -= (speed + i*speed);
|
||||
if (starField[i][j].x < 0) {
|
||||
starField[i][j].x = 480;
|
||||
starField[i][j].y = rand() % 270;
|
||||
}
|
||||
}
|
||||
}
|
||||
SetColor(32, 32, 32);
|
||||
for (int j = 0; j < 24; j++) DrawPoint(starField[0][j].x, starField[0][j].y);
|
||||
SetColor(96, 96, 96);
|
||||
for (int j = 0; j < 24; j++) DrawPoint(starField[1][j].x, starField[1][j].y);
|
||||
SetColor(192, 192, 192);
|
||||
for (int j = 0; j < 24; j++) DrawPoint(starField[2][j].x, starField[2][j].y);
|
||||
}
|
||||
|
||||
void StarField::ProcessMessage(const char* msg) {
|
||||
if (msg == "SetStarFieldVelocity") {
|
||||
int* params = GetMessageParams();
|
||||
speed = params[0] * 0.01f;
|
||||
}
|
||||
}
|
||||
10
StarField.h
Normal file
10
StarField.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "System.h"
|
||||
|
||||
class StarField : public System {
|
||||
public:
|
||||
StarField();
|
||||
void Update();
|
||||
void ProcessMessage(const char* msg);
|
||||
};
|
||||
|
||||
9
System.h
Normal file
9
System.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
class System {
|
||||
public:
|
||||
virtual ~System() {};
|
||||
virtual void Update() = 0;
|
||||
virtual void ProcessMessage(const char* msg) {};
|
||||
};
|
||||
|
||||
82
Xwing.cpp
Normal file
82
Xwing.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "Xwing.h"
|
||||
#include "api.h"
|
||||
|
||||
#include "keyHandlers.h"
|
||||
#include "StarField.h"
|
||||
#include "Menu.h"
|
||||
|
||||
namespace {
|
||||
int hit = 0;
|
||||
int lives = 3;
|
||||
int n1 = -1;
|
||||
int n2 = -1;
|
||||
int dead = 0;
|
||||
float y = 125;
|
||||
float fn = 0;
|
||||
}
|
||||
|
||||
Xwing::Xwing() {
|
||||
hit = 0;
|
||||
lives = 3;
|
||||
n1 = -1;
|
||||
n2 = -1;
|
||||
dead = 0;
|
||||
y = 125;
|
||||
RegisterMessage("HeroHit", this);
|
||||
RegisterMessage("SetNumbers", this);
|
||||
}
|
||||
|
||||
void Xwing::Update() {
|
||||
if (dead == 0) {
|
||||
if (n1 != -1) PrintChar(20, 115, n1 + 48, 0, 255, 0);
|
||||
if (n2 != -1) {
|
||||
PrintChar(27, 115, n2 + 48, 0, 255, 0);
|
||||
n1 = n2 = -1;
|
||||
}
|
||||
if (hit > 0) hit--;
|
||||
//Tint(255, 0, 0);
|
||||
fn += 0.05f;
|
||||
y = 125 + SDL_sinf(fn)*10.0f;
|
||||
if ((hit / 15) % 2 == 0) Draw(20, y, 0, 64, 37, 21, SDL_cosf(fn)*5.0f);
|
||||
//Tint(255, 255, 255);
|
||||
}
|
||||
else {
|
||||
dead--;
|
||||
if (lives == 0) {
|
||||
if (dead < 120) Print(200, 120, "GAME OVER", 255, 255, 255);
|
||||
if (dead == 0) {
|
||||
Reset();
|
||||
RegisterSystem(new StarField());
|
||||
RegisterSystem(new Menu());
|
||||
RegisterKeyboardHandler(&menuKeyHandler);
|
||||
}
|
||||
} else {
|
||||
if (dead == 0) SendMessage("ResetEnemies");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HeroHit(int x, int y) {
|
||||
SendMessage("CreateNewLaser", x, y, 40, 125, 1);
|
||||
hit = 240;
|
||||
lives--;
|
||||
dead = lives == 0 ? 300 : 180;
|
||||
SendMessage("DecreaseLives");
|
||||
//if (lives == 0)
|
||||
SendMessage("GenerateExplosion", 60, 135);
|
||||
}
|
||||
|
||||
void SetNumbers(int p1, int p2) {
|
||||
if (p1 >= 0) n1 = p1;
|
||||
if (p2 >= 0) n2 = p2;
|
||||
}
|
||||
|
||||
void Xwing::ProcessMessage(const char* msg) {
|
||||
if (msg == "HeroHit") {
|
||||
int* params = GetMessageParams();
|
||||
HeroHit(params[0], params[1]);
|
||||
} else if (msg == "SetNumbers") {
|
||||
int* params = GetMessageParams();
|
||||
SetNumbers(params[0], params[1]);
|
||||
}
|
||||
}
|
||||
10
Xwing.h
Normal file
10
Xwing.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "System.h"
|
||||
|
||||
class Xwing : public System {
|
||||
public:
|
||||
Xwing();
|
||||
void Update();
|
||||
void ProcessMessage(const char* msg);
|
||||
};
|
||||
|
||||
193
api.cpp
Normal file
193
api.cpp
Normal file
@@ -0,0 +1,193 @@
|
||||
#include "api.h"
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
#include "stb_image.h"
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
SDL_Window* sdlWindow = NULL;
|
||||
SDL_Renderer* sdlRenderer = NULL;
|
||||
SDL_Texture* sdlTexture = NULL;
|
||||
SDL_Event sdlEvent;
|
||||
SDL_Scancode keyJustPressed = SDL_SCANCODE_UNKNOWN;
|
||||
const Uint8* keyboard = nullptr;
|
||||
bool blink = false;
|
||||
KeyboardHandler keyboardHandler = NULL;
|
||||
std::vector<System*> systems;
|
||||
std::vector<std::string> msgTexts;
|
||||
std::vector<System*> msgSystems;
|
||||
int msgParams[5];
|
||||
bool reseted = false;
|
||||
bool anyKey = false;
|
||||
|
||||
void Init() {
|
||||
SDL_Init(SDL_INIT_EVERYTHING);
|
||||
sdlWindow = SDL_CreateWindow("Math Wars v0.1", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 960, 540, SDL_WINDOW_FULLSCREEN_DESKTOP); // SDL_WINDOW_SHOWN
|
||||
sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_PRESENTVSYNC);
|
||||
SDL_SetRenderDrawBlendMode(sdlRenderer, SDL_BLENDMODE_BLEND);
|
||||
SDL_RenderSetLogicalSize(sdlRenderer, 480, 270);
|
||||
}
|
||||
|
||||
void Quit() {
|
||||
SDL_DestroyWindow(sdlWindow);
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
void LoadImage(const char* filename) {
|
||||
int w, h, c;
|
||||
FILE* f = fopen(filename, "rb");
|
||||
//if (!f) { error = 2; return; }
|
||||
unsigned char* buffer = stbi_load_from_file(f, &w, &h, &c, 4);
|
||||
if (sdlTexture) SDL_DestroyTexture(sdlTexture);
|
||||
sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STATIC, w, h);
|
||||
SDL_UpdateTexture(sdlTexture, NULL, buffer, w * sizeof(Uint32));
|
||||
SDL_SetTextureBlendMode(sdlTexture, SDL_BLENDMODE_BLEND);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
void Flip() {
|
||||
SDL_RenderPresent(sdlRenderer);
|
||||
}
|
||||
|
||||
void Clear() {
|
||||
if (blink) {
|
||||
SDL_SetRenderDrawColor(sdlRenderer, 255, 255, 255, 255);
|
||||
}
|
||||
else {
|
||||
SDL_SetRenderDrawColor(sdlRenderer, 0, 0, 0, 255);
|
||||
}
|
||||
blink = false;
|
||||
SDL_RenderClear(sdlRenderer);
|
||||
}
|
||||
|
||||
void Blink() {
|
||||
blink = true;
|
||||
}
|
||||
|
||||
void Draw(int x, int y, int sx, int sy, int w, int h, int angle) {
|
||||
SDL_Rect src, dst;
|
||||
src.x = sx; src.y = sy;
|
||||
dst.x = x; dst.y = y;
|
||||
src.w = dst.w = w;
|
||||
src.h = dst.h = h;
|
||||
SDL_RenderCopyEx(sdlRenderer, sdlTexture, &src, &dst, angle, NULL, SDL_FLIP_NONE);
|
||||
}
|
||||
|
||||
void DrawScale(int x, int y, int sx, int sy, int w, int h, float scale) {
|
||||
SDL_Rect src, dst;
|
||||
src.x = sx; src.y = sy;
|
||||
dst.x = x; dst.y = y;
|
||||
src.w = w; dst.w = w*scale;
|
||||
src.h = h; dst.h = h*scale;
|
||||
SDL_RenderCopy(sdlRenderer, sdlTexture, &src, &dst);
|
||||
}
|
||||
|
||||
void DrawEx(int x, int y, int sx, int sy, int w, int h, float scale, int angle) {
|
||||
SDL_Rect src, dst;
|
||||
float xx = x - (w*scale - w) / 2;
|
||||
float yy = y - (h*scale - h) / 2;
|
||||
src.x = sx; src.y = sy;
|
||||
dst.x = xx; dst.y = yy;
|
||||
src.w = w; dst.w = w*scale;
|
||||
src.h = h; dst.h = h*scale;
|
||||
SDL_RenderCopyEx(sdlRenderer, sdlTexture, &src, &dst, angle, NULL, SDL_FLIP_NONE);
|
||||
}
|
||||
|
||||
void Print(int x, int y, const char* text, int r, int g, int b) {
|
||||
int str_size = strlen(text);
|
||||
SDL_SetTextureColorMod(sdlTexture, r, g, b);
|
||||
for (int i = 0; i < str_size; i++) {
|
||||
char chr = text[i];
|
||||
Draw(x + (i * 8), y, (chr & 0x0f) * 8, (chr >> 4) * 8, 8, 8);
|
||||
}
|
||||
SDL_SetTextureColorMod(sdlTexture, 255, 255, 255);
|
||||
}
|
||||
|
||||
void PrintChar(int x, int y, const char text, int r, int g, int b) {
|
||||
SDL_SetTextureColorMod(sdlTexture, r, g, b);
|
||||
Draw(x, y, (text & 0x0f) * 8, (text >> 4) * 8, 8, 8);
|
||||
SDL_SetTextureColorMod(sdlTexture, 255, 255, 255);
|
||||
}
|
||||
|
||||
void SetColor(int r, int g, int b) {
|
||||
SDL_SetRenderDrawColor(sdlRenderer, r, g, b, 255);
|
||||
}
|
||||
|
||||
void DrawPoint(int x, int y) {
|
||||
SDL_RenderDrawPoint(sdlRenderer, x, y);
|
||||
}
|
||||
|
||||
void DrawLine(int x1, int y1, int x2, int y2) {
|
||||
SDL_RenderDrawLine(sdlRenderer, x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
void Tint(int r, int g, int b) {
|
||||
SDL_SetTextureColorMod(sdlTexture, r, g, b);
|
||||
}
|
||||
|
||||
void SetBlend(BlendMode mode) {
|
||||
SDL_BlendMode m = mode == BlendNone ? SDL_BLENDMODE_NONE : mode == BlendBlend ? SDL_BLENDMODE_BLEND : mode == BlendAdd ? SDL_BLENDMODE_ADD : SDL_BLENDMODE_MOD;
|
||||
SDL_SetTextureBlendMode(sdlTexture, m);
|
||||
}
|
||||
|
||||
void SetAlpha(int alpha) {
|
||||
SDL_SetTextureAlphaMod(sdlTexture, alpha);
|
||||
}
|
||||
|
||||
void RegisterKeyboardHandler(KeyboardHandler handler) {
|
||||
keyboardHandler = handler;
|
||||
}
|
||||
|
||||
void RegisterSystem(System* system) {
|
||||
systems.push_back(system);
|
||||
}
|
||||
|
||||
void RemoveSystem(System* system) {
|
||||
systems.erase(std::remove(systems.begin(), systems.end(), system), systems.end());
|
||||
}
|
||||
|
||||
void Reset() {
|
||||
systems.clear();
|
||||
msgSystems.clear();
|
||||
msgTexts.clear();
|
||||
reseted = true;
|
||||
}
|
||||
|
||||
bool Update() {
|
||||
while (SDL_PollEvent(&sdlEvent)) {
|
||||
if (sdlEvent.type == SDL_QUIT) { return true; break; }
|
||||
else if (sdlEvent.type == SDL_KEYDOWN) {
|
||||
anyKey = true;
|
||||
keyJustPressed = sdlEvent.key.keysym.scancode;
|
||||
if (sdlEvent.key.keysym.scancode == SDL_SCANCODE_ESCAPE) { return true; }
|
||||
if (keyboardHandler) keyboardHandler(keyJustPressed);
|
||||
anyKey = false;
|
||||
}
|
||||
}
|
||||
Clear();
|
||||
for (auto system : systems) {
|
||||
system->Update();
|
||||
if (reseted) {
|
||||
reseted = false; break;
|
||||
}
|
||||
}
|
||||
Flip();
|
||||
return false;
|
||||
}
|
||||
|
||||
void RegisterMessage(const char* msg, System* handler) {
|
||||
msgTexts.push_back(msg);
|
||||
msgSystems.push_back(handler);
|
||||
}
|
||||
|
||||
void SendMessage(const char* msg, int p1, int p2, int p3, int p4, int p5) {
|
||||
msgParams[0] = p1; msgParams[1] = p2; msgParams[2] = p3; msgParams[3] = p4; msgParams[4] = p5;
|
||||
auto it = std::find(msgTexts.begin(), msgTexts.end(), msg);
|
||||
if (it != msgTexts.end()) {
|
||||
auto index = std::distance(msgTexts.begin(), it);
|
||||
msgSystems[index]->ProcessMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
int* GetMessageParams() {
|
||||
return msgParams;
|
||||
}
|
||||
49
api.h
Normal file
49
api.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL.h>
|
||||
#include "System.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
enum BlendMode { BlendNone, BlendBlend, BlendAdd, BlendMod };
|
||||
|
||||
struct Point {
|
||||
float x, y;
|
||||
};
|
||||
|
||||
typedef void(*KeyboardHandler)(SDL_Scancode);
|
||||
|
||||
void Init();
|
||||
void Quit();
|
||||
|
||||
void LoadImage(const char* filename);
|
||||
|
||||
void Flip();
|
||||
void Clear();
|
||||
void Blink();
|
||||
|
||||
void Draw(int x, int y, int sx, int sy, int w, int h, int angle = 0);
|
||||
void DrawScale(int x, int y, int sx, int sy, int w, int h, float scale = 1.0f);
|
||||
void DrawEx(int x, int y, int sx, int sy, int w, int h, float scale, int angle);
|
||||
void Print(int x, int y, const char* text, int r, int g, int b);
|
||||
|
||||
void PrintChar(int x, int y, const char text, int r, int g, int b);
|
||||
|
||||
void SetColor(int r, int g, int b);
|
||||
void DrawPoint(int x, int y);
|
||||
void DrawLine(int x1, int y1, int x2, int y2);
|
||||
|
||||
void Tint(int r, int g, int b);
|
||||
void SetBlend(BlendMode mode);
|
||||
void SetAlpha(int alpha);
|
||||
|
||||
void RegisterKeyboardHandler(KeyboardHandler handler);
|
||||
|
||||
void RegisterSystem(System* system);
|
||||
void RemoveSystem(System* system);
|
||||
void Reset();
|
||||
bool Update();
|
||||
|
||||
void RegisterMessage(const char* msg, System* handler);
|
||||
void SendMessage(const char* msg, int p1 = 0, int p2 = 0, int p3 = 0, int p4 = 0, int p5 = 0);
|
||||
|
||||
int* GetMessageParams();
|
||||
40
keyHandlers.cpp
Normal file
40
keyHandlers.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include "api.h"
|
||||
|
||||
#include "keyHandlers.h"
|
||||
|
||||
#include "StarField.h"
|
||||
#include "Explosions.h"
|
||||
#include "Lasers.h"
|
||||
#include "Enemies.h"
|
||||
#include "Xwing.h"
|
||||
#include "Score.h"
|
||||
|
||||
int digit = -1;
|
||||
|
||||
void keyHandler(SDL_Scancode key) {
|
||||
if (key >= 89 && key <= 98) {
|
||||
int num = key == 98 ? 0 : key - 88;
|
||||
if (digit == -1) {
|
||||
digit = num;
|
||||
SendMessage("SetNumbers", num, -1);
|
||||
}
|
||||
else {
|
||||
SendMessage("SetNumbers", -1, num);
|
||||
SendMessage("CheckEnemyHit", digit, num);
|
||||
digit = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void menuKeyHandler(SDL_Scancode key) {
|
||||
Reset();
|
||||
RegisterSystem(new StarField());
|
||||
RegisterSystem(new Xwing());
|
||||
RegisterSystem(new Enemies());
|
||||
RegisterSystem(new Lasers());
|
||||
RegisterSystem(new Explosions());
|
||||
RegisterSystem(new Score());
|
||||
RegisterKeyboardHandler(&keyHandler);
|
||||
}
|
||||
6
keyHandlers.h
Normal file
6
keyHandlers.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "api.h"
|
||||
|
||||
void keyHandler(SDL_Scancode key);
|
||||
void menuKeyHandler(SDL_Scancode key);
|
||||
21
main.cpp
Normal file
21
main.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include "api.h"
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "keyHandlers.h"
|
||||
#include "StarField.h"
|
||||
#include "Menu.h"
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
srand(time(NULL));
|
||||
Init();
|
||||
LoadImage("gfx.png");
|
||||
|
||||
RegisterSystem(new StarField());
|
||||
RegisterSystem(new Menu());
|
||||
RegisterKeyboardHandler(&menuKeyHandler);
|
||||
|
||||
while (!Update()) {}
|
||||
Quit();
|
||||
return 0;
|
||||
}
|
||||
22
mathwars.sln
Normal file
22
mathwars.sln
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.31101.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mathwars", "mathwars.vcxproj", "{5CCE4316-2638-47DA-9C0B-3075E1120FD1}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5CCE4316-2638-47DA-9C0B-3075E1120FD1}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{5CCE4316-2638-47DA-9C0B-3075E1120FD1}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{5CCE4316-2638-47DA-9C0B-3075E1120FD1}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{5CCE4316-2638-47DA-9C0B-3075E1120FD1}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
111
mathwars.vcxproj
Normal file
111
mathwars.vcxproj
Normal file
@@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{5CCE4316-2638-47DA-9C0B-3075E1120FD1}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>mathwars</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>C:\dev\lib\sdl2\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\dev\lib\sdl2\lib\x86;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="api.cpp" />
|
||||
<ClCompile Include="Enemies.cpp" />
|
||||
<ClCompile Include="Explosions.cpp" />
|
||||
<ClCompile Include="keyHandlers.cpp" />
|
||||
<ClCompile Include="Lasers.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="Menu.cpp" />
|
||||
<ClCompile Include="Scene.cpp" />
|
||||
<ClCompile Include="Score.cpp" />
|
||||
<ClCompile Include="StarField.cpp" />
|
||||
<ClCompile Include="Xwing.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="api.h" />
|
||||
<ClInclude Include="Enemies.h" />
|
||||
<ClInclude Include="Explosions.h" />
|
||||
<ClInclude Include="keyHandlers.h" />
|
||||
<ClInclude Include="Lasers.h" />
|
||||
<ClInclude Include="Menu.h" />
|
||||
<ClInclude Include="Scene.h" />
|
||||
<ClInclude Include="Score.h" />
|
||||
<ClInclude Include="StarField.h" />
|
||||
<ClInclude Include="stb_image.h" />
|
||||
<ClInclude Include="System.h" />
|
||||
<ClInclude Include="Xwing.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
90
mathwars.vcxproj.filters
Normal file
90
mathwars.vcxproj.filters
Normal file
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="api.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="StarField.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Explosions.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Lasers.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Enemies.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Xwing.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Score.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Scene.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Menu.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="keyHandlers.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stb_image.h">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="System.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="api.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="StarField.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Explosions.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Lasers.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Enemies.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Xwing.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Score.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Scene.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Menu.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="keyHandlers.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
6845
stb_image.h
Normal file
6845
stb_image.h
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user