Initial commit

This commit is contained in:
2026-01-09 13:20:01 +01:00
commit 7a91913b28
24 changed files with 435 additions and 0 deletions

8
.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
build
enc_temp_folder
out
_deps
CMakeSettings.json
.vs
.cache

34
CMakeLists.txt Normal file
View File

@@ -0,0 +1,34 @@
cmake_minimum_required(VERSION 3.21)
set(NAME skyjo)
project(${NAME} LANGUAGES CXX)
include(FetchContent)
set(ASSET_DIR ${CMAKE_CURRENT_SOURCE_DIR}/assets/)
# Disable sfml audio (This avoids pulling in OpenAL)
set(SFML_BUILD_AUDIO OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
SFML
GIT_REPOSITORY https://github.com/SFML/SFML.git
GIT_TAG 2.6.1
)
FetchContent_MakeAvailable(SFML)
add_executable(${NAME}
sources/main.cpp
sources/CardMaker.cpp
)
target_link_libraries(${NAME} sfml-graphics sfml-window sfml-system)
target_include_directories(${NAME} PUBLIC
./includes
)
target_compile_definitions(${NAME} PRIVATE
ASSET_DIR="${ASSET_DIR}"
)
install(TARGETS ${NAME})

257
Makefile Normal file
View File

@@ -0,0 +1,257 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.22
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
.NOTPARALLEL:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/lju/Documents/game_projects/skyjo
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/lju/Documents/game_projects/skyjo
#=============================================================================
# Targets provided globally by CMake.
# Special rule for the target edit_cache
edit_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
/usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
.PHONY : edit_cache
# Special rule for the target edit_cache
edit_cache/fast: edit_cache
.PHONY : edit_cache/fast
# Special rule for the target rebuild_cache
rebuild_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : rebuild_cache
# Special rule for the target rebuild_cache
rebuild_cache/fast: rebuild_cache
.PHONY : rebuild_cache/fast
# Special rule for the target list_install_components
list_install_components:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
.PHONY : list_install_components
# Special rule for the target list_install_components
list_install_components/fast: list_install_components
.PHONY : list_install_components/fast
# Special rule for the target install
install: preinstall
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
/usr/bin/cmake -P cmake_install.cmake
.PHONY : install
# Special rule for the target install
install/fast: preinstall/fast
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
/usr/bin/cmake -P cmake_install.cmake
.PHONY : install/fast
# Special rule for the target install/local
install/local: preinstall
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
.PHONY : install/local
# Special rule for the target install/local
install/local/fast: preinstall/fast
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
.PHONY : install/local/fast
# Special rule for the target install/strip
install/strip: preinstall
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
.PHONY : install/strip
# Special rule for the target install/strip
install/strip/fast: preinstall/fast
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
.PHONY : install/strip/fast
# The main all target
all: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/lju/Documents/game_projects/skyjo/CMakeFiles /home/lju/Documents/game_projects/skyjo//CMakeFiles/progress.marks
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all
$(CMAKE_COMMAND) -E cmake_progress_start /home/lju/Documents/game_projects/skyjo/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean
.PHONY : clean
# The main clean target
clean/fast: clean
.PHONY : clean/fast
# Prepare targets for installation.
preinstall: all
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
.PHONY : preinstall/fast
# clear depends
depend:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
#=============================================================================
# Target rules for targets named skyjo
# Build rule for target.
skyjo: cmake_check_build_system
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 skyjo
.PHONY : skyjo
# fast build rule for target.
skyjo/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/skyjo.dir/build.make CMakeFiles/skyjo.dir/build
.PHONY : skyjo/fast
sources/CardMaker.o: sources/CardMaker.cpp.o
.PHONY : sources/CardMaker.o
# target to build an object file
sources/CardMaker.cpp.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/skyjo.dir/build.make CMakeFiles/skyjo.dir/sources/CardMaker.cpp.o
.PHONY : sources/CardMaker.cpp.o
sources/CardMaker.i: sources/CardMaker.cpp.i
.PHONY : sources/CardMaker.i
# target to preprocess a source file
sources/CardMaker.cpp.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/skyjo.dir/build.make CMakeFiles/skyjo.dir/sources/CardMaker.cpp.i
.PHONY : sources/CardMaker.cpp.i
sources/CardMaker.s: sources/CardMaker.cpp.s
.PHONY : sources/CardMaker.s
# target to generate assembly for a file
sources/CardMaker.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/skyjo.dir/build.make CMakeFiles/skyjo.dir/sources/CardMaker.cpp.s
.PHONY : sources/CardMaker.cpp.s
sources/main.o: sources/main.cpp.o
.PHONY : sources/main.o
# target to build an object file
sources/main.cpp.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/skyjo.dir/build.make CMakeFiles/skyjo.dir/sources/main.cpp.o
.PHONY : sources/main.cpp.o
sources/main.i: sources/main.cpp.i
.PHONY : sources/main.i
# target to preprocess a source file
sources/main.cpp.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/skyjo.dir/build.make CMakeFiles/skyjo.dir/sources/main.cpp.i
.PHONY : sources/main.cpp.i
sources/main.s: sources/main.cpp.s
.PHONY : sources/main.s
# target to generate assembly for a file
sources/main.cpp.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/skyjo.dir/build.make CMakeFiles/skyjo.dir/sources/main.cpp.s
.PHONY : sources/main.cpp.s
# Help Target
help:
@echo "The following are some of the valid targets for this Makefile:"
@echo "... all (the default if no target is provided)"
@echo "... clean"
@echo "... depend"
@echo "... edit_cache"
@echo "... install"
@echo "... install/local"
@echo "... install/strip"
@echo "... list_install_components"
@echo "... rebuild_cache"
@echo "... skyjo"
@echo "... sources/CardMaker.o"
@echo "... sources/CardMaker.i"
@echo "... sources/CardMaker.s"
@echo "... sources/main.o"
@echo "... sources/main.i"
@echo "... sources/main.s"
.PHONY : help
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system

3
TODO.txt Normal file
View File

@@ -0,0 +1,3 @@
-> Make a cardTextureLoader
-> Make a PlaySpace (with configurable size)

BIN
assets/-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
assets/-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
assets/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
assets/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
assets/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
assets/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
assets/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
assets/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
assets/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
assets/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
assets/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
assets/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
assets/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
assets/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
assets/9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
assets/back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
assets/skyjo-cards.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

35
includes/CardMaker.hpp Normal file
View File

@@ -0,0 +1,35 @@
#include <SFML/Graphics.hpp>
#include <map>
#include <string>
#include <iostream>
#include <cassert>
#include <memory>
#define CARD_BACK -3
#pragma once
class Card {
private:
int value_;
bool flipped_ = false;
bool grabbed_ = false;
std::shared_ptr<sf::Sprite> back_;
std::shared_ptr<sf::Sprite> face_;
public:
Card(int value, std::shared_ptr<sf::Sprite> face, std::shared_ptr<sf::Sprite> back);
~Card();
int getValue();
std::shared_ptr<sf::Sprite> getSprite();
void setPosition(sf::Vector2i pos);
void flip();
};
class CardMaker {
private:
std::map<int, std::shared_ptr<sf::Texture>> textures_;
public:
CardMaker();
~CardMaker();
std::shared_ptr<Card> generate(int value);
};

62
sources/CardMaker.cpp Normal file
View File

@@ -0,0 +1,62 @@
#include <CardMaker.hpp>
/// Card
Card::Card(int value, std::shared_ptr<sf::Sprite> face,
std::shared_ptr<sf::Sprite> back)
: value_(value), face_(face), back_(back) {}
Card::~Card() {}
int Card::getValue() { return value_; }
std::shared_ptr<sf::Sprite> Card::getSprite() {
if (flipped_)
return face_;
return back_;
}
void Card::setPosition(sf::Vector2i vec) {
if (grabbed_)
face_->setPosition(vec.x - 15, vec.y - 25);
}
void Card::flip() {
if (!flipped_)
grabbed_ == true;
flipped_ = true;
}
/// CardMaker
CardMaker::CardMaker() {
std::string ext(".png");
std::string folder(ASSET_DIR);
for (int i = -2; i < 13; i++) {
auto tex = std::make_shared<sf::Texture>();
std::string name(std::to_string(i));
if (!tex->loadFromFile(folder + name + ext)) {
std::cerr << "Failed to load " << folder + name + ext << std::endl;
exit(1);
}
textures_[i] = tex;
}
auto tex = std::make_shared<sf::Texture>();
tex->loadFromFile(folder + "back.png");
textures_[CARD_BACK] = tex;
}
CardMaker::~CardMaker() {}
std::shared_ptr<Card> CardMaker::generate(int value) {
if (value < -2 || value > 12) {
std::cerr << "Trying to generate oob card nbr " << value << std::endl;
exit(1);
}
auto spr_face = std::make_shared<sf::Sprite>();
auto spr_back = std::make_shared<sf::Sprite>();
spr_face->setTexture(*textures_[value]);
spr_back->setTexture(*textures_[CARD_BACK]);
auto card = std::make_shared<Card>(value, spr_face, spr_back);
return card;
}

36
sources/main.cpp Normal file
View File

@@ -0,0 +1,36 @@
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <vector>
#include <CardMaker.hpp>
int main() {
sf::RenderWindow win(sf::VideoMode(800, 600), "Skyjo", sf::Style::Default);
CardMaker cm;
auto card = cm.generate(5);
card->flip();
win.create(sf::VideoMode(800, 600), "Skyjo");
while (win.isOpen()) {
sf::Event ev;
while (win.pollEvent(ev)) {
if (ev.type == sf::Event::Closed) {
win.close();
}
}
if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
card->flip();
// Clear frame buffer
win.clear(sf::Color::Black);
card->setPosition(sf::Mouse::getPosition(win));
// Draw sprite
win.draw(*card->getSprite());
// Draw frame buffer
win.display();
}
return 0;
}