Compare commits
9 Commits
c85b335478
...
v1.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
| e2a787ab2f | |||
| 7ecd47f20c | |||
| 095dbfb0b9 | |||
| 2f0c9ad012 | |||
| 6fa0475acf | |||
| 3d461163d3 | |||
| c9809a934f | |||
| e08f8be87d | |||
| db921e3390 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -7,3 +7,6 @@ build/
|
||||
|
||||
# Vscode
|
||||
.vscode
|
||||
|
||||
# ImGui
|
||||
**/imgui.ini
|
||||
21
README.md
Normal file
21
README.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Perfect Ear
|
||||
|
||||
Train your ears to recognize piano notes !
|
||||
|
||||
## Screenshots
|
||||
|
||||
[[screenshots/success.png]]
|
||||
|
||||
[[screenshots/failure.png]]
|
||||
|
||||
## Build ⚙️
|
||||
|
||||
```bash
|
||||
xmake # xmake will download all the required dependencies
|
||||
```
|
||||
|
||||
## Run 🏃
|
||||
|
||||
```bash
|
||||
xmake run
|
||||
```
|
||||
@@ -3,7 +3,7 @@
|
||||
namespace ph {
|
||||
namespace gui {
|
||||
|
||||
void Render();
|
||||
bool Render();
|
||||
void Init();
|
||||
|
||||
} // namespace gui
|
||||
|
||||
BIN
screenshots/failure.png
Normal file
BIN
screenshots/failure.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
BIN
screenshots/success.png
Normal file
BIN
screenshots/success.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
@@ -5,12 +5,12 @@
|
||||
#include <random>
|
||||
#include <string>
|
||||
|
||||
#define DISABLED_COND(code, cond) \
|
||||
#define DISABLED_COND(cond, ...) \
|
||||
{ \
|
||||
bool Disabled = cond; \
|
||||
bool Disabled = (cond); \
|
||||
if (Disabled) \
|
||||
ImGui::BeginDisabled(); \
|
||||
code if (Disabled) ImGui::EndDisabled(); \
|
||||
__VA_ARGS__ if (Disabled) ImGui::EndDisabled(); \
|
||||
}
|
||||
|
||||
|
||||
@@ -65,11 +65,10 @@ static void RenderGameWindow() {
|
||||
ImGui::Text("Quelle est la note ?");
|
||||
|
||||
DISABLED_COND(
|
||||
if (ImGui::Button("Réécouter")) {
|
||||
!Hint, if (ImGui::Button("Réécouter")) {
|
||||
audio::PlayNote(Answer);
|
||||
Hint = false;
|
||||
},
|
||||
!Hint)
|
||||
})
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Voir la réponse")) {
|
||||
@@ -84,51 +83,53 @@ static void RenderGameWindow() {
|
||||
Right = false;
|
||||
}
|
||||
|
||||
if (Cooldown > 0.0)
|
||||
ImGui::BeginDisabled();
|
||||
|
||||
for (int i = 0; i < NoteCount; i++) {
|
||||
ImVec4 color = (i == Ab || i == Bb || i == Db || i == Eb || i == Gb) ? ImVec4{0, 0, 0, 1} : ImVec4{0.5, .5, .5, 1};
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, color);
|
||||
bool green = (ShowAnswer && i == Answer);
|
||||
if (green)
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, {0, 1, 0, 1});
|
||||
if (ImGui::Button(Notes[i].c_str())) {
|
||||
Cooldown = audio::NoteDuration();
|
||||
Right = (i == Answer);
|
||||
if (Right && !ShowAnswer) {
|
||||
audio::PlayNote(Answer);
|
||||
Score++;
|
||||
} else {
|
||||
Score = 0;
|
||||
DISABLED_COND(
|
||||
Cooldown > 0.0f, for (int i = 0; i < NoteCount; i++) {
|
||||
ImVec4 color = (i == Ab || i == Bb || i == Db || i == Eb || i == Gb) ? ImVec4{0, 0, 0, 1} : ImVec4{0.5, .5, .5, 1};
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, color);
|
||||
bool green = (ShowAnswer && i == Answer);
|
||||
if (green)
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, {0, 1, 0, 1});
|
||||
if (ImGui::Button(Notes[i].c_str())) {
|
||||
Cooldown = audio::NoteDuration();
|
||||
Right = (i == Answer);
|
||||
if (Right && !ShowAnswer) {
|
||||
audio::PlayNote(Answer);
|
||||
Score++;
|
||||
} else {
|
||||
Score = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (green)
|
||||
if (green)
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
|
||||
if (Cooldown > 0.0)
|
||||
ImGui::EndDisabled();
|
||||
ImGui::SameLine();
|
||||
})
|
||||
}
|
||||
|
||||
static void RenderMainWindow() {
|
||||
static bool RenderMainWindow() {
|
||||
if (ImGui::Button("Nouvelle Partie")) {
|
||||
InGame = true;
|
||||
Right = true;
|
||||
}
|
||||
if (ImGui::Button("Quitter")) {}
|
||||
if (ImGui::Button("Quitter")) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Render() {
|
||||
bool Render() {
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
ImGui::SetNextWindowPos(ImVec2(io.DisplaySize.x * 0.5f, io.DisplaySize.y * 0.5f), ImGuiCond_Always, ImVec2(0.5f, 0.5f));
|
||||
ImGui::Begin("MainWindow", nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration);
|
||||
if (InGame)
|
||||
RenderGameWindow();
|
||||
else
|
||||
RenderMainWindow();
|
||||
else {
|
||||
if (!RenderMainWindow()) {
|
||||
ImGui::End();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (Cooldown > 0.0f) {
|
||||
ImGui::NewLine();
|
||||
@@ -143,6 +144,8 @@ void Render() {
|
||||
#ifndef NDEBUG
|
||||
ImGui::ShowDemoWindow();
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Init() {}
|
||||
|
||||
@@ -102,7 +102,7 @@ int main(int, char**) {
|
||||
// io.Fonts->GetGlyphRangesJapanese()); IM_ASSERT(font != nullptr);
|
||||
|
||||
ImFontConfig cfg;
|
||||
cfg.SizePixels = 30;
|
||||
cfg.SizePixels = 40;
|
||||
io.Fonts->AddFontDefault(&cfg);
|
||||
|
||||
ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
|
||||
@@ -146,7 +146,10 @@ int main(int, char**) {
|
||||
ImGui_ImplSDL2_NewFrame();
|
||||
ImGui::NewFrame();
|
||||
|
||||
ph::gui::Render();
|
||||
if (!done && !ph::gui::Render()) {
|
||||
done = true;
|
||||
}
|
||||
|
||||
|
||||
// Rendering
|
||||
ImGui::Render();
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
add_rules("mode.debug", "mode.release")
|
||||
|
||||
add_requires("libsdl")
|
||||
add_requires("libsdl_mixer", {system = true})
|
||||
add_requires("imgui", {configs = {sdl2 = true, opengl3 = true}})
|
||||
add_requires("libsdl2_mixer 2.8.1")
|
||||
add_requires("imgui v1.91.8", {configs = {sdl2 = true, opengl3 = true}})
|
||||
|
||||
target("PerfectHear")
|
||||
set_kind("binary")
|
||||
add_files("src/*.cpp")
|
||||
add_includedirs("include")
|
||||
|
||||
add_packages("libsdl", "libsdl_mixer", "imgui")
|
||||
add_packages("libsdl2", "libsdl2_mixer", "imgui")
|
||||
|
||||
if is_os("windows") then
|
||||
if is_plat("mingw") then
|
||||
add_ldflags("-static")
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user