Voici tous mes projets personnels
Classés par ordre chronologique± 3 jeux avec scratch
Unreal game
± 10 mods avec MCreator
Site web bac
HTML + CSSFarmer
TypeScript terminal + Deno WebUIFarmer INC
C# UnityWeb scrapper
PythonMulti script
PythonModpack Minecraft
JavascriptJeu Roblox
LuaCalculateur d'intérets
C++GuessGame
C++Jeu du pendu
C++Donjon Infini
C# Unity
Scratch
Quand j'était en 5ème je venais de découvrir scratch, j'ai donc créer plein de petits jeux Scratch; mais en voici trois légèrement plus aboutis.
- Clicker
- Collecte Game
- Detective Game
C'est le seul jeu ou j'ai réussi à retrouver ce que j'avais fait, et il est remplie de problème (et pas fini surtout).
Je me souviens que j'avais adoré créer ce jeu, malgrés les énormes difficultés a trouver les bonnes formule pour équilibrer le jeu,
et le fait de trouver les bons blocs de code pour que le jeu soit facilement répétable (vu que c'est un clicker et que scratch reste très limité)
Je n'explique pas ce qu'est un clicker car je suppose que tout le monde connaît déjà, mais voici quelques images du jeu (j'ai fait exprès de ne pas toucher au code pour que l'on voit où j'ai démarrer).
Ce jeu était aussi un jeu incrémental mais le but était de récolter des matières premières (juste des points des différentes couleurs),
qui était dissimulées dans le décor (images prises dans la bibliothèque de Scratch) afin de pouvoir construire le portail vers le paradis.
Il me semble que j'avais finit ce jeu mais impossible de le retrouver.
C'était un jeu narratif où il fallait se déplacer dans différentes pièces pour retrouver des objets (dans un but précis mais je ne me souviens plus de l'histoire).
Je me suis inspiré du jeu There Is No Game pour les énigmes. J'ai créé ce jeu à la même époque que 2Dn'Go.
Unreal Engine
Je n'ai pas fait beaucoup de jeu sur Unreal Engine, mais j'ai quand même essayer.
- Map
- Unreal Game
Après mon stage chez Helios Studio j'ai voulu créer quelque chose avec les livres qu'il m'avait prêtés mais je n'ai réussi qu'à faire une map,
ce qui certes m'a fait évoluer en mapping mais pas en programmation.
Ceci fait suite à la formation que j'ai légèrement présentée ici. Voici une petite vidéo de présentation.
Je mets ça ici aussi car c'est moi qui ai décidé de faire ça tout seul, donc c'est un projet personnel.
Même si je n'ai malheureusement pas pu ouvrir le jeu dans Unreal Engine, car je n'ai que les fichiers de build du jeu.
MCreator
MCreator est un logiciel qui permet de créer des mods/plugins etc... pour Minecraft,
mais il ne nécessite pas de forcément savoir coder car c'est dans le même style que Scratch (en plus poussé évidemment).
Les mods que j'ai faits son souvent peu abouti ou pas du tout fini car MCreator change énormément de version et créer plein d'incompatibilités entre les version,
ce qui fait qu'il est quasiment impossible de reprendre son travail après avoir changé de version de MCreator 🥲.
J'ai fait une vidéo de présentation pour en présenter quelques-uns, mais voici une liste de tous ceux que j'ai faits et dont je me souviens :
-
"Arc tir rapide"
C'est un Mod qui ajoute différents arc, ils ont chacun des craft différent et de plus en plus complexe car ils sont aussi de plus en plus puissants grâce à la vélocité du projectile. -
"Générateur"
C'est un mod qui ajoute des générateur pour chaque minerai et chaque bois du jeu, les craft nécessitent de trouver le nouveau biome que j'ai créer qui a un nouveau type d'arbre,
une fois crafter, les générateur peuvent être posé, ce qui crée un bloc de la ressource qu'il génère, devant lui, enfin on peut faire un clic droit dessus pour que 64 items apparaissent au dessus du bloc. -
"Stuff évolutif"
Ce mod ajoute des armures et outils nécessitant chacun leur version antérieure, et qui augmentent leurs statistiques en fonction de leur niveau -
"Bottle d'xp"
Ce mod ajoute 3 bouteilles d'xp qui donnent chacune plus d'xp que la précédente, pour ce mod je me suis inspirer des bouteilles d'xp qui existe dans le skyblock d'Hypixel -
"Arme"
C'était mon tout premier mod MCreator, il ajoute juste une arme qui est extrèmement puissante (et qui à un modèle 3D... peu abouti 😅) -
"Mod Complet"
Ce mod ajoute un nouveau set d'équipement (armure, outils), d'autres outils permettant de donner des bonus au joueur, un nouveau minerai et un nouveau biome. - Un mod qui ajoute une autre dimension faite en blocs de minerais
- Un mod qui rajoute des structures, principalement des ruines et des arbres
- Un mod qui rajoute des enchantements de niveau superieur à ceux existant déjà
- Un mod qui ajoute différents combustible permettant de cuire plus d'items
- Un mod qui ajoute un générateur d'énergie et plusieurs autres machines autour de l'énergie, mais il me semble que ce mod n'était pas du tout fini
- Un mod qui rajoute des commandes
Maintenant je ne sais plus quel était le nom de ces mods mais je continue la liste.
Site WEB BAC
Ce site avait pour but de s'entraîner suffisamment pour avoir son BAC sans aller à l'école (en théorie).
Mais la seule chose que j'ai faite est un menu (qui m'a pris énormément de temps et qui n'est même pas fini), car je ne suis pas très bon en CSS et que la façon dont je voulais faire mon menu n'était clairement pas la plus optimale.
Vous pouvez quand même aller le voir mais il risque d'y avoir des fautes.
Farmer
C'est un jeu vidéo que j'ai créé en TypeScript après l'avoir appris lors du RPG, au début le jeu était uniquement dans le terminal puis je l'ai dévelopé pour une page web avec Deno WEBUI.
Le but étant de collecter du blé pour augmenter la puissance de son personnage : plus de récolte, plus de place dans le sac à dos, plus grand champ etc.
Je suis très fier de ce que j'ai fait, il y a cependant quelque problèmes mineurs :
- les informations utile au joueur sont au même endroit que les améliorations (j'aurais dû les mettre au milieu à gauche),
- le prestige n'a pas l'air de fonctionner correctement,
- il pourrait être plus joli (mais je suis comme vous l'avez compris pas très bon en design 😅),
- et ce n'est pas très intuitif quand on arrive dessus pour la première fois (il n'y a rien qui dirige le joueur)
parce qu'on ne peut pas lire de TypeScript dans une page WEB. Ce qui fait que si je voulais rajouter une nouvelle variable dans la "class joueur" (en typescript) et que je voulais afficher cette variable dans l'interface et l'actualiser, il fallait que je fasse environ 28 transferts de donnée/fonctions, donc je dois vérifier si les 28 transferts ont bien le même nom. C'est en grande partie pour cette raison que j'ai arrêter ce projet et que je suis passer sur Unity pour essayer de le refaire.
Pendant ce projet j'ai appris à me servir des "workers" pour optimiser le code et parce que je voulais apprendre à les utiliser, et j'ai aussi beaucoup évoluer en JavaScript que ce soit pour du backend ou du frontend
Je ne vais pas faire de vidéo de présentation mais si vous voulez voir le code ou même le tester, vous pouvez allez sur mon Github
Farmer Unity
Comme dit plus haut ce projet est le même que Farmer mais je l'ai fait sur Unity, il n'est pas aussi évolué en terme de gameplay mais il y a les bases,
les problèmes étant que :
- C'est mon premier jeu en 3D sur Unity,
- Je dois faire les modèles 3D moi-même,
- Dans le jeu, il manque beaucoup d'informations pour aider les joueurs (je pense que c'est parce que j'ai arrêté le projet avant de les faire et pas par manque de compétences).
Voici une vidéo de présentation, cependant le code n'est pas présenté, si vous voulez voir mon code, n'hésitez pas à me le demander via mon adresse mail
WEB Scrapper
Ici on change complètement du jeu vidéo, j'ai créé avec l'aide de quelqu'un un WEB scrapper, en Python avec Anaconda et Jupyter Notebook.
Je vais être franc dans mes explications car c'est plus simple pour comprendre mais ce que j'ai fait était purement à but éducatif, donc pour éviter toute reprise ou acte illégal, je ne donnerai pas le code.
Vous pouvez en revanche me le demander via mon adresse mail, avec vos raisons, votre but et pourquoi vous le voulez, alors, si je juge que vous ne le voulez qu'à but purement à but éducatif alors je pourrais vous donner le code.
-
La cible était donc Webtoon, vu que je n'y connaissais pas grand choses en requêtes et gestion de fichiers, j'ai demandé de l'aide à quelqu'un qui m'a dit ce qu'il fallait mettre dans les "headers",
et m'a expliqué comment fonctionnaientt les requêtes (get), ma donné cette boucle (que j'ai vite compris tout seul),
J'ai donc après avoir mis l'URL du premier épisode du Webtoon que je veux récupérer, stocké les URL de tous les autres épisodes,
puis enregistré toutes les images de chaque URL dans un dossier.
Cependant vu que les images de Webtoons sont coupées n'importe comment (pour leur protection donc c'est normal), il a fallu que je les tries et modifie.
Scripts Python
J'ai donc créé des scripts en Python pour continuer ce dont je parlais ci-dessus.
-
J'ai d'abord créé un script qui permet de redécouper toutes les images en plusieurs zones, dès que la ligne n'est pas complètement blanche je crée une nouvelle zone,
et dès qu'il y a une ligne complètement blanche j'enregistre l'ancienne zone et j'en crée une nouvelle. -
Ensuite j'ai créé un script qui supprime toutes les images où il n'y a que du blanc,
et qui supprime aussi les images qui sont exactement les mêmes que une des images que j'ai préalablement mises dans un dossier spécifique. -
Enfin J'ai créé un script qui regroupe plusieurs zones, si la première zone est coupée en bas (tous les pixels ne sont pas blancs), alors je crée une nouvelle image qui contient l'actuelle et la suivante.
Cependant il y avait des images qui était beaucoup trop grande à cause de :- Soit une mauvaise pré-découpe,
- soit des image complètement blanches mal supprimées,
- soit parce que la détection de "full blanc" était mal effectuée
-
Et le dernier script que j'ai donc créer avec ChatGPT toujours en Python est un serveur WEB qui vas chercher toutes les zone que j'ai enregistrer et pré-découper,
qui me montre trois images à la suite et qui me propse de :- Soit fusionner la première et la deuxième image,
- soit fusionner la deuxième et la troisième image,
- soit supprimer l'une des deux premières images,
- soit enregistrer l'une des deux premières images,
- et sur la deuxième version j'ai aussi un retour en arrière, qui est gérer avec un système de backup qui se reinitialiser après 3 sauvegardes d'affilées.
Voici les différentes étapes d'une image que je garde :
Après découpe :
Après fusion :
Rendu dans la Galery :
Et voici une vidéo de présentation de comment ça fonctionne.
Si vous voulez plus détails sur les scripts n'hésitez pas à me demander via mon adresse mail
Modpack Minecraft
Durant 2 mois de l'été 2025, à côté de mon job d'été, j'ai commencé à créer un modpack Minecraft, j'ai dû écrire environ 10 000 lignes de codes, il n'est pas fini mais je pense avoir fait ± la moitié.
Un modpack Minecraft est un ensemble de mods modifiés pour créer de la nouveauté et souvent de la complexité. Nouveaux items, biomes, crafts, équipements, événements, textures, modèles, etc...
Je l'ai fait avec KubeJS, donc en JavaScript, j'y ai créé mes propres objets avec Blockbench, et j'ai progressé dans la compréhension du Java, car les mods principaux sont créés avec, donc je les ai étudiés pour mieux les modifier.
Voici quelques images du projet (recette = un craft):
Tous les items que j'ai créés (les "pentacles" sont une représentation d'une recette) :
Exemple des pentacles lier à des recettes :
Exemple de recettes :
Voici le code de cette dernière recette :
Je ne peux évidemment pas tout mettre ou présenter ici car le projet est trop volumineux, et qu'il y a pas mal de choses similaire une fois qu'on à compris la structure des mods.
Donc si vous souhaitez plus d'informations, de détails ou autre, demandez-moi via mon adresse mail
Jeu Roblox
J'ai créé un Tycoon Roblox en Lua, parce que je voulais apprendre à créer un jeu Roblox et à maîtriser le Lua.
Il est techniquement fini, mais après l'avoir fait tester à quelques personnes, certaines améliorations sont nécessaires, notamment le son (comme souvent dans mes jeux 😅).
Vous pouvez aller le voir et le tester. C'est pourquoi je ne montrerai que du code ci-dessous.
Par ailleurs, j'ai suivi plusieurs tutoriels pour faire ce jeu et certaines lignes de code ont été reprise, mais pour la sauvegarde et le chargement des données,
je les ai réalisés moi-même car celles des tutoriels n'étaient pas optimales ou ne fonctionnaient pas correctement.
---Variables---
local TycoonModel = script.Parent.Parent
local items = {}
local Boughtitems = TycoonModel:FindFirstChild("Boughtitems")
local Buttons = TycoonModel:FindFirstChild("Buttons")
local DropperParts = TycoonModel:FindFirstChild("DropperParts")
local Mainitems = TycoonModel:FindFirstChild("Mainitems")
local Scripts = TycoonModel:FindFirstChild("Scripts")
local Values = TycoonModel:FindFirstChild("Values")
local player
--- Owner Functions ---
Mainitems.OwnerDoor.MainDoor.Touched:Connect(function(Hit)
if Hit.Parent:FindFirstChild("Humanoid") and Values.OwnerValue.Value == nil then
player = game.Players:GetPlayerFromCharacter(Hit.Parent)
if player:FindFirstChild("OwnsTycoon").Value == false then
Values.OwnerValue.Value = player
player:FindFirstChild("OwnsTycoon").Value = true
script.Parent.Parent.Values.CashValue.Value = player.CashT.Value
--Remove hopper check here
--[[
player:SetAttribute("TycoonGUID", TycoonModel:GetAttribute("TycoonGUID"))
--LOAD ITEMS
local player_tycoon_data = _G["PlayerTycoonData"][player.UserId]
if player_tycoon_data then
for _, name in ipairs(player_tycoon_data) do
items[name].Parent = Boughtitems -- ou clone
Buttons[name.."Button"]:Destroy()
end
end
]]
Mainitems.OwnerDoor.MainDoor.SurfaceGui.TextLabel.Text = tostring(Values.OwnerValue.Value).."s'Tycoon"
Mainitems.OwnerDoor.MainDoor.SurfaceGui.TextLabel.TextColor3 = Color3.new(1, 0, 0.0156863)
end
end
end)
-- Buying Functions --
for i, v in pairs(Buttons:GetChildren()) do
local NewItem = Boughtitems:FindFirstChild(v.Item.Value, true)
if NewItem ~= nil then
items[NewItem.Name] = NewItem:Clone()
NewItem:Destroy()
else
v.ButtonPart.Transparency = 1
v.ButtonPart.CanCollide = false
v.ButtonPart.BillboardGui.Frame.Visible = false
end
if v:FindFirstChild("Dependency") then
coroutine.resume(coroutine.create(function()
v.ButtonPart.Transparency = 1
v.ButtonPart.CanCollide = false
v.ButtonPart.BillboardGui.Frame.Visible = false
if Boughtitems:WaitForChild(v.Dependency.Value, 1000000) then
if not v:FindFirstChild("ButtonPart") then
return
end
v.ButtonPart.Transparency = 0
v.ButtonPart.CanCollide = true
v.ButtonPart.BillboardGui.Frame.Visible = true
if player.Droppers.Value > 0 then
v.ButtonPart.Transparency = 1
v.ButtonPart.CanCollide = false
v.ButtonPart.BillboardGui.Frame.Visible = false
end
end
end))
end
v.ButtonPart.Touched:Connect(function(Hit)
if Hit.Parent:FindFirstChild("Humanoid") then
local player = game.Players:GetPlayerFromCharacter(Hit.Parent)
if Values.OwnerValue.Value == player then
if v.ButtonPart.CanCollide == true and v.ButtonPart.Transparency == 0 then
if v:FindFirstChild("Robux") then
local MarketPlaceService = game:GetService("MarketplaceService")
local gamepassId = v:FindFirstChild("Robux").Value
MarketPlaceService:PromptProductPurchase(player, gamepassId)
MarketPlaceService.PromptProductPurchaseFinished:Connect(function(player, Id, wasPurchased)
if Id == gamepassId and wasPurchased then
print("Player has purchased the gamepass")
items[v.Item.Value].Parent = Boughtitems
v:Destroy()
else
print("Player has not purchased the gamepass")
end
end)
elseif player:WaitForChild("leaderstats").Cash.Value >= v.Price.Value then
player.leaderstats.Cash.Value -= v.Price.Value
items[v.Item.Value].Parent = Boughtitems
v:Destroy()
--[[else
--try to buy cash with robux (actually doesn't work)
print("salut")
local MarketPlace = game:GetService("MarketplaceService")
local ProductId = 3418648943
MarketPlace.ProcessReceipt = function(info)
print("try buy")
if info.ProductId then
print("buying")
local player = game.Players:GetPlayerByUserId(info.playerId)
player.leaderstats.Cash.Value += 10000
return Enum.ProductPurchaseDecision.PurchaseGranted
end
end]]
end
end
end
end
end)
end
--Cash Functions--
local Debounce = false
local CashButtons = {
Mainitems.CashButton,
--Boughtitems.CashButton2
}
for _, CashButton in CashButtons do
if CashButton then
CashButton.ButtonPart.Touched:Connect(function(Hit)
if Hit.Parent:FindFirstChild("Humanoid") then
local player = game.Players:GetPlayerFromCharacter(Hit.Parent)
if Values.OwnerValue.Value == player then
if Debounce == false then
Debounce = true
player:WaitForChild("leaderstats").Cash.Value += Values.CashValue.Value
wait()
Values.CashValue.Value = 0
wait(1)
Debounce = false
end
end
end
end)
end
end
while wait() do
for _, CashButton in CashButtons do
if CashButton then
CashButton.ScreenPart.SurfaceGui.TextLabel.Text = Values.CashValue.Value.."$"
end
end
if player then
player.CashT.Value = Values.CashValue.Value
end
end
Voici le code pour la sauvegarde et le chargement des données :
local DataStoreService = game:GetService("DataStoreService")
local TycoonDataStore = DataStoreService:GetDataStore("TycoonDataV2")
local TycoonModel = nil
local function GetPlayerTycoon(player)
for _, tycoon in ipairs(game.Workspace.Tycoons:GetChildren()) do
if tycoon:FindFirstChild("Values")
and tycoon.Values:FindFirstChild("OwnerValue")
and tycoon.Values.OwnerValue.Value == player then
return tycoon
end
end
return nil
end
-- Sauvegarde des données
game.Players.PlayerRemoving:Connect(function(player)
if TycoonModel.Values.OwnerValue.Value == player then
print("Saving data for "..player.Name)
local models = {}
for _, model in ipairs(TycoonModel.Boughtitems:GetChildren()) do
if model:IsA("Model") then
table.insert(models, model.Name)
print(model.Name.." has been added to data.")
end
end
local saveData = {
Coins = player.leaderstats.Cash.Value,
CashButton = TycoonModel.Values.CashValue.Value,
Items = models
}
local success, err = pcall(function()
TycoonDataStore:SetAsync(player.UserId, saveData)
end)
if success then
print("All data saved successfully for "..player.Name)
else
warn("Error saving data: "..err)
end
end
end)
-- Chargement des données
game.Players.PlayerAdded:Connect(function(player)
local once = true
repeat
TycoonModel = GetPlayerTycoon(player)
wait(0.1)
until TycoonModel ~= nil
TycoonModel.Mainitems.OwnerDoor.MainDoor.Touched:Connect(function(Hit)
if Hit.Parent:FindFirstChild("Humanoid") and TycoonModel.Values.OwnerValue.Value == player and once then
once = false
print("Loading data for "..player.Name)
local data
local success, err = pcall(function()
data = TycoonDataStore:GetAsync(player.UserId)
end)
if success and data then
player.leaderstats.Cash.Value = data.Coins or 0
TycoonModel.Values.CashValue.Value = data.CashButton or 0
for _, itemName in ipairs(data.Items or {}) do
local item = game.ReplicatedStorage.Tycoons:FindFirstChild(TycoonModel.Name):FindFirstChild(itemName, true)
if item and table.find(data.Items, itemName) then
item:Clone().Parent = TycoonModel.Boughtitems
local button = TycoonModel.Buttons:FindFirstChild(itemName.."Button")
if button then button:Destroy() end
print(itemName.." has been loaded.")
else
warn("Could not find item "..itemName.." in ReplicatedStorage.Items")
end
end
print("All data loaded successfully for "..player.Name)
else
print("No saved data found for "..player.Name)
end
end
end)
end)
Ensuite le code pour acheter des "Developer Products" :
local MarketPlaceService = game:GetService("MarketplaceService")
local productFunctions = {}
--add 500$ to player
productFunctions[3417899220] = function(receipt, player)
if player then
player.leaderstats.Cash.Value += 500
return true
end
end
--add 2000$ to player
productFunctions[3418452277] = function(receipt, player)
if player then
player.leaderstats.Cash.Value += 2000
return true
end
end
--add 10 000$ to player
productFunctions[3418648943] = function(receipt, player)
if player then
player.leaderstats.Cash.Value += 10000
return true
end
end
--add 100 000$ to player
productFunctions[3419230375] = function(receipt, player)
if player then
player.leaderstats.Cash.Value += 100000
return true
end
end
--add 1 000 000$ to player
productFunctions[3419297992] = function(receipt, player)
if player then
player.leaderstats.Cash.Value += 1000000
return true
end
end
--add 10 000 000$ to player
productFunctions[3419230986] = function(receipt, player)
if player then
player.leaderstats.Cash.Value += 10000000
return true
end
end
local function proceddReceipt(receiptInfo)
local userID = receiptInfo.PlayerId
local productId = receiptInfo.ProductId
local player = game.Players:GetPlayerByUserId(userID)
if player then
local handler = productFunctions[productId]
local success, result = pcall(handler, receiptInfo, player)
if success then
return Enum.ProductPurchaseDecision.PurchaseGranted
else
warn("Failed to purchase poduct")
end
end
return Enum.ProductPurchaseDecision.NotProcessedYet
end
MarketPlaceService.ProcessReceipt = proceddReceipt
Enfin, le code pour accorder un Badge
local BadgeService = game:GetService("BadgeService")
local badgeId = 801286455171703
game.Players.PlayerAdded:Connect(function(player)
task.wait(10)
local hasBadge = BadgeService:UserHasBadgeAsync(player.UserId, badgeId)
if not hasBadge then
BadgeService:AwardBadge(player.UserId, badgeId)
else
print("player already has badge")
end
end)
Calculateur d'intérêts
Étant passioné par l'investissement, notament celui de l'immobilier, j'ai créé un calculateur d'intérêts en C++ en fonction de plusieurs critères.
Je l'ai aussi fait pour progresser en C++, et j'y ai découvert l'univers de JetBrains (un véritable bijou pour les développeurs).
Voici mon code (il n'y a pas d'accents car ils ne s'affichent pas correctement dans le terminal) :
#include <iostream>
#include <sstream>
using namespace std;
double monthresult = 0;
double taux = 0;
double invest = 0;
double allCapital = 0;
double gains = 0;
double personalInvest = 0;
string Investissement(int i){
monthresult = allCapital * (taux / 100.0 / 12);
allCapital += monthresult;
gains += monthresult;
personalInvest += invest;
allCapital += invest;
stringstream ss;
if (i % 12 == 0) {
ss << "Vous aurez "<< allCapital << " au bout de "<< i/12 <<" annees" << endl << "Soit " << personalInvest << " donnee de votre poche et " << gains << " d'argent generer !" << endl;
}else{
ss << "Vous aurez "<< allCapital << " au bout de "<< i <<" mois" << endl << "Soit " << personalInvest << " donnee de votre poche et " << gains << " d'argent generer !" << endl;
}
return ss.str();
};
int main()
{
cout << "Entree le capital de depart (en euro) : ";
cin >> allCapital;
cout << "Entree le montant supplemenaire investi chaque mois (en euro) : ";
cin >> invest;
cout << "Entree le taux d'intêret par an (en %) : ";
cin >> taux;
personalInvest = allCapital-invest;
allCapital -= invest;
for (int i = 1; i < 50*12+1; i++) {
cout << Investissement(i) << endl;
}
return 0;
}
Guess Game
Pour m'entrainer en C++, j'ai créé un jeu où il faut deviner un nombre entre 1 et X (nombre maximum choisi selon la difficulté également choisie).
Voici mon code :
#include <iostream>
#include <limits>
#include <sstream>
#include <ctime>
using namespace std;
int chooseDifficulty() {
string difficulty;
cout << "Choisi une difficulte :\n Facile : entre 1 et 10\n Moyen : entre 1 et 100\n Difficile : entre 1 et 1000" << endl;
while (true){
cin >> difficulty;
if (difficulty == "Facile") {
cout << "J'ai choisi un nombre entre 1 et 10, a toi de deviner !" << endl;
return 10;
}else if(difficulty == "Moyen") {
cout << "J'ai choisi un nombre entre 1 et 100, a toi de deviner !" << endl;
return 100;
}else if(difficulty == "Difficile") {
cout << "J'ai choisi un nombre entre 1 et 1000, a toi de deviner !" << endl;
return 1000;
}else {
cout << "Tu dois ecrire la difficulte comme elle est ecrite actuellement ^o^" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
}
int guessNumber(int x) {
int guess = rand() % x+1;
int trying = 0;
int answer = 0;
while (true) {
cout << "propose un nombre : ";
cin >> answer;
if (cin.fail()) {
cout << "J'ai dit un nombre entre 1 et " << x << " pas autre chose -_-" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
continue;
}
trying++;
if (answer < guess) {
cout << "Trop petit !" << endl;
}
if (answer > guess) {
cout << "Trop grand !" << endl;
}
if (answer == guess) {
cout << "Bravo ! Tu as trouve en " << trying << " essais." << endl;
break;
}
}
return 0;
}
int playAgain() {
guessNumber(chooseDifficulty());
return 0;
}
int main() {
srand(time(0));
string again;
cout << "=== Jeu de devinette ===" << endl;
guessNumber(chooseDifficulty());
while (true) {
cout << "Veux-tu rejouer (oui/non) ?"<< endl;
cin >> again;
if (cin.fail() || again != "oui" && again != "non") {
cout << "Ecrit simplement 'oui' ou 'non'." << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
continue;
}
if (again == "oui") {
playAgain();
}if (again == "non") {
break;
}
}
return 0;
}
Jeu du pendu
Toujours pour m'entrainer j'ai créé un jeu du pendu en C++
Voici mon code :
#include <iostream>
#include <vector>
#include <ctime>
#include <limits>
#include <sstream>
using namespace std;
vector<string> words = {"un","pomme", "banane", "orange", "fraise", "cerise"};
string lettersTry = "";
string secretWord = "";
int life = 7;
int findedLetters = 0;
string chooseWord() {
return words[rand() % words.size()];
}
int showWord(string word, string letters) {
for (int i = 0; i < word.size(); i++) {
if (letters.find(word[i]) != string::npos) {
cout << word[i] << " ";
findedLetters++;
}else {
cout << "_ ";
}
}
return 0;
}
int guessLetter() {
string letter;
cout << "\nEntre une lettre : ";
while (true) {
cin >> letter;
if (cin.fail() || letter[0] < 'a' || letter[0] > 'z' || letter.size() > 1) {
cout << "Entre juste UNE lettre et pas autre chose.";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}else if (lettersTry.find(letter[0]) != string::npos){
cout << "Lettre deja essayer, trouves-en une autre !";
}else {
break;
}
}
lettersTry.push_back(letter[0]);
if (secretWord.find(letter[0]) != string::npos) {
cout << "Bonne lettre ! ";
}else {
life--;
cout << "Rate ! Il te reste " << life << " vies.";
}
return 0;
}
int main() {
srand(time(0));
cout << "=== Jeu du Pendu ===" << endl;
while (true) {
secretWord = chooseWord();
cout << "Mot a deviner : ";
showWord(secretWord, lettersTry);
cout << endl;
while (findedLetters < secretWord.size()-1 && life > 0){
findedLetters = 0;
cout << "\nMot : ";
showWord(secretWord, lettersTry);
guessLetter();
}
cout << endl;
if (life == 0) {
cout << "Dommage tu as perdu ! Le mot etait : " << secretWord << endl;
}else {
cout << "Bravo ! Tu as trouve le mot : " << secretWord << endl;
}
cout << "Veux-tu rejouer ? oui/non";
string playAgain;
cin >> playAgain;
if (cin.fail() || playAgain != "oui" && playAgain != "non") {
cout << "Ecrit juste 'oui' ou 'non'" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}else if (playAgain == "non") {
break;
}else {
lettersTry = "";
secretWord = "";
life = 7;
findedLetters = 0;
}
}
return 0;
}
Donjon Infini
J'ai créé un jeu en 2D sur Unity donc en C#, après la deuxième formation que j'ai suivie.
Le but étant de se déplacer dans un donjon ressemblant à un labyrinthe infini, de récolter des pièces et combattre des monstres, pour faire le meilleur score.
Une fois mort, vous pouvez améliorer votre personnage, ce qui vous permettra d'explorer encore plus profondément le donjon et d'obtenir un meilleur score !
Il n'est pour l'instant pas fini mais est en cours de développement, et j'espère pouvoir le sortir sur Steam un jour. C'est pourquoi je ne dévoile rien à son sujet pour l'instant.