
Programmation C#
Expérience sur s&box
Depuis 2024, je travaille en C#, principalement autour de l’univers de s&box, un jeu sandbox en cours de développement par Facepunch, basé sur le moteur Source 2.
Bien que je ne développe pas directement pour le projet, je participe activement à la communauté en testant les fonctionnalités du jeu et en signalant des bugs ou incohérences a Facepunch. Cela me permet de rester au contact
d’un environnement de développement en constante évolution, tout en observant de près les bonnes pratiques utilisées dans un projet de grande envergure.
Projet personnel
Voici un exemple en C# permettant de générer un mot de passe selon les paramètres choisis:
using System;
using System.Text;
class Program
{
static void Main()
{
Console.WriteLine("=== Générateur de mot de passe ===");
// Demander la longueur du mot de passe avec validation :
// s'assurer que l'utilisateur entre un entier entre 1 et 32
int longueur;
while (true)
{
Console.Write("Longueur du mot de passe (max 32) : ");
string saisie = Console.ReadLine();
if (int.TryParse(saisie, out longueur) && longueur > 0 && longueur <= 32)
break;
Console.WriteLine("Erreur : veuillez entrer un nombre entre 1 et 32.");
}
// Fonction d'aide pour poser des questions oui/non et valider la saisie :
// redemande si la réponse n'est pas 'o' ou 'n'
bool PoserOuiNon(string question)
{
while (true)
{
Console.Write(question);
string reponse = Console.ReadLine().ToLower();
if (reponse == "o") return true;
if (reponse == "n") return false;
Console.WriteLine("Erreur : veuillez répondre 'o' pour oui ou 'n' pour non.");
}
}
// Demander à l'utilisateur quels types de caractères inclure
bool minuscules = PoserOuiNon("Inclure des lettres minuscules ? (o/n) : ");
bool majuscules = PoserOuiNon("Inclure des lettres majuscules ? (o/n) : ");
bool chiffres = PoserOuiNon("Inclure des chiffres ? (o/n) : ");
bool speciaux = PoserOuiNon("Inclure des caractères spéciaux ? (o/n) : ");
// Générer le mot de passe selon les options choisies
string motDePasse = GenererMotDePasse(longueur, minuscules, majuscules, chiffres, speciaux);
// Afficher le résultat
Console.WriteLine($"\nMot de passe généré : {motDePasse}");
// Attendre une touche avant de fermer
Console.WriteLine("\nAppuyez sur une touche pour quitter...");
Console.ReadKey();
}
// Fonction qui génère le mot de passe selon les choix de l'utilisateur
static string GenererMotDePasse(int longueur, bool minuscules, bool majuscules, bool chiffres, bool speciaux)
{
// Jeux de caractères
const string MINUSCULES = "abcdefghijklmnopqrstuvwxyz";
const string MAJUSCULES = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string CHIFFRES = "0123456789";
const string SPECIAUX = "!@#$%^&*()-_=+[]{}<>?/";
// Construire la liste des caractères possibles
StringBuilder caracteresDisponibles = new StringBuilder();
if (minuscules) caracteresDisponibles.Append(MINUSCULES);
if (majuscules) caracteresDisponibles.Append(MAJUSCULES);
if (chiffres) caracteresDisponibles.Append(CHIFFRES);
if (speciaux) caracteresDisponibles.Append(SPECIAUX);
// Si aucun type de caractère n'est sélectionné, retourner un message d'erreur
if (caracteresDisponibles.Length == 0)
{
return "Erreur : aucun type de caractère sélectionné.";
}
// Générer le mot de passe aléatoirement
StringBuilder motDePasse = new StringBuilder();
Random rnd = new Random();
for (int i = 0; i < longueur; i++)
{
int index = rnd.Next(caracteresDisponibles.Length); // Choisir un index au hasard
motDePasse.Append(caracteresDisponibles[index]); // Ajouter le caractère au mot de passe
}
// Retourner le mot de passe généré
return motDePasse.ToString();
}
}
En parallèle, je développe également mon propre logiciel de gestion de mots de passe en C#. Ce projet a pour objectif d’être simple, sécurisé et pratique. Il m’a permis de travailler sur :
- Le chiffrement et la protection des données sensibles
- Le design d’interfaces avec WinForms
- La structuration d’une application desktop complète
- L’optimisation de la gestion des fichiers et utilisateurs
Ce projet est encore en cours, mais représente un bon terrain d'apprentissage pour renforcer mes compétences en C# sur des cas concrets.
Vous pouvez retrouver certains de ces projets sur mon GitHub.
Retour aux projets