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<73> per a Windows. Ja el preparar<61> mes avant per a macOS i Linux.
Per a jugar tamb<6D> et far<61> falta SDL2.dll, que pots ficar, segons les teues prefer<65>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<63> al cap. Has de escriure el resultat usant el teclat num<75>ric per
a rebentar-los. Per exemple, si apareix un meim amb l'operaci<63> "3x4" de sombrero, has de pulsar la tecla "1" i despr<70>s la tecla "2"
del teclat numeric, i autom<6F>gicament el Ala-X rebentar<61> al colega aquell. No es pot corregir si pulses la tecla
incorrecta (ni tampoc te penalitzaci<63>, a part de que se t'acosten els malos implacablement), aix<69> 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<65>ar.
El meu fill de 8 anys ho va entendre a la primera aix<69> que ja hi ha prou de explicar.
Si els malotes s'acosten lo suficient, te petar<61>n el mame i perdr<64>s una vida.
Cada oleada es una tabla de multiplicar, comen<65>ant per la del 2. Cada oleada presentar<61> dos vegades cada operaci<63> de la seua tabla
de forma aleatoria. Per no fer el meim, no apareixen multiplicaci<63>ns per 0, per 1 ni per 10.
El joc no est<73> limitat, aix<69> que despr<70>s de la tabla del 9... mostrar<61> 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<EFBFBD>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<73> baix una [llic<EFBFBD>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,19 +13,31 @@
int digit = -1;
void keyHandler(SDL_Scancode key) {
int num = 0;
if (key >= 89 && key <= 98) {
int num = key == 98 ? 0 : key - 88;
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;
}
}
}
void menuKeyHandler(SDL_Scancode key) {
Reset();

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");

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>