Uploading assets & developing multiplayer implementations
@@ -0,0 +1,16 @@
|
||||
# Asset Credits & Attribution
|
||||
|
||||
The multimedia resources (graphics, sprites, and audio files) contained within this folder are not my personal creations. They have been curated and adapted from the open-source community for educational development.
|
||||
|
||||
## Original Source Information
|
||||
* **Project:** Moddable Pong
|
||||
* **Author / Creator:** Endless OS Foundation & Endless Studios
|
||||
* **Website:** [endlessos.org](https://endlessos.org)
|
||||
* **Source Code Repository:** [github.com/endlessm/moddable-pong](https://github.com/endlessm/moddable-pong/)
|
||||
|
||||
---
|
||||
|
||||
## Usage Notice
|
||||
These assets are integrated strictly for non-commercial, academic layout validation and development milestones. This work is part of a student engineering project within the **Helios Additional_activity** initiative at the **Technical University of Cluj-Napoca (UTCN) - Faculty of Electronics, Telecommunications and Information Technology (ETTI)**.
|
||||
|
||||
All rights, ownership, and copyrights belong entirely to the original creators at the Endless OS Foundation.
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 179 B |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 18 KiB |
@@ -7,6 +7,7 @@
|
||||
// Game States & Configurations
|
||||
enum class GameState {
|
||||
MainMenu,
|
||||
DifficultySelect,
|
||||
Playing,
|
||||
Paused,
|
||||
GameOver
|
||||
@@ -28,8 +29,6 @@ class GameObject {
|
||||
public:
|
||||
Vector2 position;
|
||||
Color color;
|
||||
|
||||
public:
|
||||
GameObject(Vector2 pos, Color c) : position(pos), color(c) {}
|
||||
virtual ~GameObject() = default;
|
||||
|
||||
|
||||
@@ -16,6 +16,6 @@ public:
|
||||
: title(menuTitle), options(menuOptions), selectedIndex(0) {
|
||||
}
|
||||
|
||||
void Update(GameState& currentState);
|
||||
int Update();
|
||||
void Draw();
|
||||
};
|
||||
@@ -48,6 +48,7 @@ int main() {
|
||||
|
||||
GameState currentState = GameState::MainMenu;
|
||||
Menu mainMenu("PONG RELOADED", { "Start Game", "Quit" });
|
||||
Menu difficultyMenu("SELECT DIFFICULTY", { "Easy", "Normal", "Hard", "Back" });
|
||||
|
||||
// --- Main Game Loop ---
|
||||
|
||||
@@ -58,11 +59,44 @@ int main() {
|
||||
switch (currentState) {
|
||||
case GameState::MainMenu:
|
||||
{
|
||||
mainMenu.Update(currentState);
|
||||
int selected = mainMenu.Update();
|
||||
if (selected == 0) {
|
||||
currentState = GameState::DifficultySelect;
|
||||
}
|
||||
else if (selected == 1) {
|
||||
currentState = GameState::GameOver;
|
||||
}
|
||||
mainMenu.Draw();
|
||||
break;
|
||||
}
|
||||
|
||||
case GameState::DifficultySelect:
|
||||
{
|
||||
int selected = difficultyMenu.Update();
|
||||
if (selected >= 0 && selected <= 2) {
|
||||
if (selected == 0) {
|
||||
cpu.SetDifficulty(Difficulty::Easy);
|
||||
}
|
||||
else if (selected == 1) {
|
||||
cpu.SetDifficulty(Difficulty::Normal);
|
||||
}
|
||||
else if (selected == 2) {
|
||||
cpu.SetDifficulty(Difficulty::Hard);
|
||||
}
|
||||
|
||||
// Reset game session stats
|
||||
player_score = 0;
|
||||
cpu_score = 0;
|
||||
ResetBall(ball, screen_width, screen_height);
|
||||
currentState = GameState::Playing;
|
||||
}
|
||||
else if (selected == 3) {
|
||||
currentState = GameState::MainMenu;
|
||||
}
|
||||
difficultyMenu.Draw();
|
||||
break;
|
||||
}
|
||||
|
||||
case GameState::Playing:
|
||||
{
|
||||
ball.Update();
|
||||
|
||||
@@ -1,25 +1,21 @@
|
||||
#include "menu.h"
|
||||
|
||||
void Menu::Update(GameState& currentState) {
|
||||
int Menu::Update() {
|
||||
// Handle Navigation
|
||||
if (IsKeyPressed(KEY_DOWN)) {
|
||||
selectedIndex++;
|
||||
if (selectedIndex >= options.size()) selectedIndex = 0;
|
||||
if (selectedIndex >= static_cast<int>(options.size())) selectedIndex = 0;
|
||||
}
|
||||
if (IsKeyPressed(KEY_UP)) {
|
||||
selectedIndex--;
|
||||
if (selectedIndex < 0) selectedIndex = options.size() - 1;
|
||||
if (selectedIndex < 0) selectedIndex = static_cast<int>(options.size()) - 1;
|
||||
}
|
||||
|
||||
// Handle Selection
|
||||
if (IsKeyPressed(KEY_ENTER)) {
|
||||
if (options[selectedIndex] == "Start Game") {
|
||||
currentState = GameState::Playing;
|
||||
}
|
||||
else if (options[selectedIndex] == "Quit") {
|
||||
currentState = GameState::GameOver;
|
||||
}
|
||||
return selectedIndex;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void Menu::Draw() {
|
||||
@@ -30,7 +26,7 @@ void Menu::Draw() {
|
||||
DrawText(title.c_str(), screenWidth / 2 - MeasureText(title.c_str(), 60) / 2, screenHeight / 4, 60, WHITE);
|
||||
|
||||
// Draw Options
|
||||
for (int i = 0; i < options.size(); i++) {
|
||||
for (int i = 0; i < static_cast<int>(options.size()); i++) {
|
||||
Color textColor = (i == selectedIndex) ? YELLOW : WHITE;
|
||||
DrawText(options[i].c_str(), screenWidth / 2 - MeasureText(options[i].c_str(), 40) / 2, screenHeight / 2 + (i * 60), 40, textColor);
|
||||
}
|
||||
|
||||