Compare commits

...

10 Commits

Author SHA1 Message Date
d9a4507f93 - [FIX] Estic peiv i estava mal 2024-05-14 13:13:42 +02:00
fcb1f2a9ee Removed vsstudio project
works on mac
other minor changes
2021-08-24 18:20:48 +02:00
f6679961f3 README.md edited online with Bitbucket 2020-02-18 16:51:15 +00:00
e96d611b8e - Modified "Wave X" text for "Tabla del X"
- Implemented return values for messages
- Implemented one digit answers
- Project upgraded to VS2017
2020-02-18 17:41:59 +01:00
5148f16577 Restored initial wave to be 1 2017-10-13 16:34:27 +02:00
91c3d31133 README.md edited online with Bitbucket 2017-10-13 14:32:24 +00:00
f295c25a51 README.md edited online with Bitbucket 2017-10-13 14:30:50 +00:00
857aee2d27 README.md added 2017-10-13 16:29:16 +02:00
8454e7e6eb Cleanup: Removed dependency with 'time.h' by using 'getpid()' instead of 'time(NULL)' as seed for the random number generator 2017-10-13 15:48:58 +02:00
bd98dc8a4e Cleanup: Removed useless Scene class 2017-10-13 14:53:51 +02:00
18 changed files with 107 additions and 274 deletions

View File

View File

@@ -11,7 +11,7 @@ struct Enemy {
Enemy enemies[MAX_ENEMIES];
int enemyTimer = 0;
int kills = 0;
int wave = 5;
int wave = 1;
int betweenWaves = 300;
int generations = 0;
int table[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
@@ -64,7 +64,7 @@ void Enemies::Update() {
if (betweenWaves > 0) {
betweenWaves--;
if (betweenWaves < 240) {
char waveText[7] = "WAVE 0"; waveText[5] = wave + 48;
char waveText[12] = "TABLA DEL 0"; waveText[10] = 1+wave + 48;
Print(200, 120, waveText, 255, 255, 255);
}
} else {
@@ -108,7 +108,7 @@ void Enemies::Update() {
}
}
void CheckEnemyHit(int n1, int n2) {
int 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) {
@@ -121,16 +121,18 @@ void CheckEnemyHit(int n1, int n2) {
if (kills == 16) {
betweenWaves = 360; wave++; ResetEnemies();
}
return 1;
}
}
}
return 0;
}
void Enemies::ProcessMessage(const char* msg) {
if (msg == "CheckEnemyHit") {
if (strcmp(msg, "CheckEnemyHit") == 0) {
int* params = GetMessageParams();
CheckEnemyHit(params[0], params[1]);
} else if (msg == "ResetEnemies") {
SetMessageReturn(CheckEnemyHit(params[0], params[1]));
} else if (strcmp(msg, "ResetEnemies") == 0) {
betweenWaves = 420; ResetEnemies();
}
}

View File

@@ -88,7 +88,7 @@ void GenerateExplosion(int x, int y) {
}
void Explosions::ProcessMessage(const char* msg) {
if (msg == "GenerateExplosion") {
if (message_eq("GenerateExplosion")) {
int* params = GetMessageParams();
GenerateExplosion(params[0], params[1]);
}

View File

@@ -72,7 +72,7 @@ void CreateNewLaser(float x1, float y1, float x2, float y2, unsigned char r, uns
}
void Lasers::ProcessMessage(const char* msg) {
if (msg == "CreateNewLaser") {
if (message_eq("CreateNewLaser")) {
int* params = GetMessageParams();
if (params[4] == 0) {
CreateNewLaser(params[0], params[1], params[2], params[3], 255, 0, 0);

6
Makefile Executable file
View File

@@ -0,0 +1,6 @@
game :
g++ *.cpp -std=c++11 -lSDL2 -o mathwars
run : game
./mathwars

45
README.md Normal file
View File

@@ -0,0 +1,45 @@
MathWars v 0.algo
=================
Que seto?
---------
Un joc que vaig fer a principis de 2016 per a que el meu fill, fan d'Star Wars, practicara les tables de multiplicar.
Que fa falta?
-------------
Visual Studio 2017. Per ara nomes està per a Windows. Ja el prepararé mes avant per a macOS i Linux.
Per a jugar també et farà falta SDL2.dll, que pots ficar, segons les teues preferències:
- En el directori del projecte, si l'executes desde el Visual Studio
- En el directori del executable, si l'executes por si mism
- En el windows/System32 i a tomar por culo
Com se chua?
------------
Tu eres el Ala-X eixe que veus, encara que no pugues moure'l. Te van apareguent Tie Fighters i Tie Bombers (ninguna
diferencia, nomes el dibuixet) amb una multiplicació al cap. Has de escriure el resultat usant el teclat numèric per
a rebentar-los. Per exemple, si apareix un meim amb l'operació "3x4" de sombrero, has de pulsar la tecla "1" i després la tecla "2"
del teclat numeric, i automàgicament el Ala-X rebentarà al colega aquell. No es pot corregir si pulses la tecla
incorrecta (ni tampoc te penalització, a part de que se t'acosten els malos implacablement), així que si, en l'exemple
d'abans la primera tecla has polsat per error "4", polsa altra tecla per a acabar el numero actual, i tornes a començar.
El meu fill de 8 anys ho va entendre a la primera així que ja hi ha prou de explicar.
Si els malotes s'acosten lo suficient, te petaràn el mame i perdràs una vida.
Cada oleada es una tabla de multiplicar, començant per la del 2. Cada oleada presentarà dos vegades cada operació de la seua tabla
de forma aleatoria. Per no fer el meim, no apareixen multiplicacións per 0, per 1 ni per 10.
El joc no està limitat, així que després de la tabla del 9... mostrarà la del 10, 11, 12.... amb simbols raros i, clar, al final
amb l'imposibilitat de guanyar, per no poder ficar resultats de mes de 2 xifres. Es lo que té no estar acabat.
Algún dia me molaria fer mes nivells o modes de joc. Per exemple, varies multiplicacions rápidament per a destruir un AT-AT en Hoth,
divisions per a esquivar els turbolasers del corredor de la Estrella de la Muerte, que se jo...
JailDoctor 2020
![picture](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)
Aquesta obra està baix una [llicència de Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional](http://creativecommons.org/licenses/by-sa/4.0/)

View File

@@ -1,15 +0,0 @@
#include "Scene.h"
Scene::Scene()
{
}
Scene::~Scene()
{
}
bool Scene::Update() {
return true;
}

View File

@@ -1,8 +0,0 @@
#pragma once
class Scene {
public:
Scene();
virtual ~Scene() = 0;
virtual bool Update();
};

View File

@@ -15,7 +15,8 @@ Score::Score() {
void Score::Update() {
char strScore[10];
itoa(score, strScore, 10);
sprintf(strScore, "%d", score);
//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);
@@ -23,10 +24,10 @@ void Score::Update() {
}
void Score::ProcessMessage(const char* msg) {
if (msg == "IncreaseScore") {
if (message_eq("IncreaseScore")) {
int* params = GetMessageParams();
score += params[0];
} else if (msg == "DecreaseLives") {
} else if (message_eq("DecreaseLives")) {
lives--;
}
}

View File

@@ -34,7 +34,7 @@ void StarField::Update() {
}
void StarField::ProcessMessage(const char* msg) {
if (msg == "SetStarFieldVelocity") {
if (message_eq("SetStarFieldVelocity")) {
int* params = GetMessageParams();
speed = params[0] * 0.01f;
}

View File

@@ -72,10 +72,11 @@ void SetNumbers(int p1, int p2) {
}
void Xwing::ProcessMessage(const char* msg) {
if (msg == "HeroHit") {
if (message_eq("HeroHit")) {
//if (msg == "HeroHit") {
int* params = GetMessageParams();
HeroHit(params[0], params[1]);
} else if (msg == "SetNumbers") {
} else if (message_eq("SetNumbers")) {
int* params = GetMessageParams();
SetNumbers(params[0], params[1]);
}

10
api.cpp
View File

@@ -1,6 +1,7 @@
#include "api.h"
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#include <string>
#include <vector>
#include <algorithm>
@@ -16,6 +17,7 @@ std::vector<System*> systems;
std::vector<std::string> msgTexts;
std::vector<System*> msgSystems;
int msgParams[5];
int msgReturn;
bool reseted = false;
bool anyKey = false;
@@ -191,3 +193,11 @@ void SendMessage(const char* msg, int p1, int p2, int p3, int p4, int p5) {
int* GetMessageParams() {
return msgParams;
}
int GetMessageReturn() {
return msgReturn;
}
void SetMessageReturn(int value) {
msgReturn = value;
}

6
api.h
View File

@@ -1,9 +1,11 @@
#pragma once
#include <SDL.h>
#include <SDL2/SDL.h>
#include "System.h"
#include <stdlib.h>
#define message_eq(m) (strncmp(msg, m, 20)==0)
enum BlendMode { BlendNone, BlendBlend, BlendAdd, BlendMod };
struct Point {
@@ -47,3 +49,5 @@ 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();
int GetMessageReturn();
void SetMessageReturn(int value);

View File

@@ -1,4 +1,3 @@
#pragma once
#include "api.h"
@@ -14,17 +13,29 @@
int digit = -1;
void keyHandler(SDL_Scancode key) {
int num = 0;
if (key >= 89 && key <= 98) {
int num = key == 98 ? 0 : key - 88;
if (digit == -1) {
digit = num;
num = key == 98 ? 0 : key - 88;
} else if (key >= 30 && key <= 39) {
num = key == 39 ? 0 : key - 29;
} else {
return;
}
if (digit == -1) {
digit = num;
SendMessage("CheckEnemyHit", 0, num);
if (GetMessageReturn() != 0) {
SendMessage("SetNumbers", -1, num);
digit = -1;
} else {
SendMessage("SetNumbers", num, -1);
}
else {
SendMessage("SetNumbers", -1, num);
SendMessage("CheckEnemyHit", digit, num);
digit = -1;
}
}
else {
SendMessage("SetNumbers", -1, num);
SendMessage("CheckEnemyHit", digit, num);
digit = -1;
}
}

View File

@@ -1,13 +1,12 @@
#include "api.h"
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include "keyHandlers.h"
#include "StarField.h"
#include "Menu.h"
int main(int argc, char* argv[]) {
srand(time(NULL));
srand(getpid());
Init();
LoadImage("gfx.png");
@@ -18,4 +17,4 @@ int main(int argc, char* argv[]) {
while (!Update()) {}
Quit();
return 0;
}
}

View File

@@ -1,22 +0,0 @@
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

View File

@@ -1,111 +0,0 @@
<?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>

View File

@@ -1,90 +0,0 @@
<?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>