Le langage de programmation C# est très populaire et continue d’évoluer pour répondre à de nouveaux besoins. Il est aujourd’hui possible de tout faire avec ce langage : Logiciels, jeux, sites web, API, Applications mobiles… C’est un langage que j’affectionne tout particulièrement et sur lequel j’ai réalisé de nombreuses formations vidéo et livres. Si vous souhaitez apprendre C#, vous trouverez certainement votre bonheur ici !
Si vous souhaitez apprendre programmer avec C# et à créer des logiciels, je vous invite à regarder du côté de la formation la plus complète que vous pouvez trouver sur le web :
J’ai également publié une petite série de tutos sur Youtube sur laquelle vous apprendrez à développer le jeu du Tic Tac Toe en mode console. Si ce cours vous intéresse, c’est par ici.
Le code source du projet
Pour télécharger le code source du projet, c’est ci-dessous :
using System;
using System.Collections.Generic;
namespace ConsoleAppTutoTicTacToe
{
class Program
{
// Variables
public static bool quitGame = false;
public static bool playerTurn = true;
public static char[,] board; // Plateau de jeu
// Fonction main
static void Main(string[] args)
{
// Boucle de jeu / Game loop
while(!quitGame) // Tant que le jeu tourne
{
// Plateau de 3 lignes et 3 col
board = new char[3, 3]
{
{ ' ', ' ', ' ' },
{ ' ', ' ', ' ' },
{ ' ', ' ', ' ' },
};
while(!quitGame)
{
// Tour du joueur
if(playerTurn)
{
PlayerTurn();
if(CheckLines('X'))
{
EndGame("You win!");
break;
}
}
// Tour de l'ordinateur
else
{
ComputerTurn();
if (CheckLines('O'))
{
EndGame("You loose!");
break;
}
}
// Changement de joueur
playerTurn = !playerTurn;
// Vérifier si match nul
if (CheckDraw())
{
EndGame("Draw!");
break;
}
}
if(!quitGame)
{
// Instructions
Console.WriteLine("Appuyer sur [Escape] pour quitter, [Enter] pour rejouer.");
// Récupération touche du clavier
GetKey:
switch (Console.ReadKey(true).Key)
{
// Rejouer
case ConsoleKey.Enter:
break;
// Quitter le jeu
case ConsoleKey.Escape:
quitGame = true;
Console.Clear();
break;
// Tester une autre touche de clavier
default:
goto GetKey;
}
}
}
} // Fin donction main
// Fonctions
// Au tour du joueur
public static void PlayerTurn()
{
// Où se trouve le joueur sur la grille ?
// Le curseur sera sur une ligne et une col
var (row, column) = (0, 0);
// Le curseur a t-il été bougé ?
bool moved = false;
// Boucle pour déplacer le curseur à l'écran
while(!quitGame && !moved)
{
Console.Clear();
// Afficher la grille
RenderBoard();
Console.WriteLine();
// Afficher les instructions
Console.WriteLine("Choisir une case valide puis appuyer sur [Enter].");
// Afficher le curseur
Console.SetCursorPosition(column * 6 + 1, row * 4 + 1);
// Attendre que l'utilisateur réalise une action (Key)
switch (Console.ReadKey(true).Key)
{
// Quitter le jeu
case ConsoleKey.Escape:
quitGame = true;
Console.Clear();
break;
// Gérer les flèches du clavier
// Pour déplacer le curseur à l'écran
case ConsoleKey.RightArrow:
// Si on est sur la col 2...
if (column >= 2)
{
// On retourne dans la col 0
column = 0;
}
else
{
// Sinon on va à droite
column = column + 1;
}
break;
case ConsoleKey.LeftArrow:
if (column <= 0)
{
column = 2;
}
else
{
column = column - 1;
}
break;
case ConsoleKey.UpArrow:
if (row <= 0)
{
row = 2;
}
else
{
row = row - 1;
}
break;
case ConsoleKey.DownArrow:
if (row >= 2)
{
row = 0;
}
else
{
row = row + 1;
}
break;
// Jouer dans la case actuelle
case ConsoleKey.Enter:
if(board[row, column] is ' ')
{
board[row, column] = 'X';
moved = true;
}
break;
}
}
}
// Au tour de l'ordinateur
public static void ComputerTurn()
{
// Liste des cases vides
var emptyBox = new List<(int X, int Y)>();
// Double boucle pour parcourir les cases
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
// Vérif si case vide
if(board[i, j] == ' ')
{
emptyBox.Add((i, j));
}
}
}
// Où est-ce que l'ordinateur va jouer ?
var (X, Y) = emptyBox[new Random().Next(0, emptyBox.Count)];
board[X, Y] = 'O';
}
// Afficher le plateau de jeu
public static void RenderBoard()
{
Console.WriteLine();
Console.WriteLine($" {board[0, 0]} | {board[0, 1]} | {board[0, 2]}");
Console.WriteLine(" | |");
Console.WriteLine("----+-----+----");
Console.WriteLine(" | |");
Console.WriteLine($" {board[1, 0]} | {board[1, 1]} | {board[1, 2]}");
Console.WriteLine(" | |");
Console.WriteLine("----+-----+----");
Console.WriteLine(" | |");
Console.WriteLine($" {board[2, 0]} | {board[2, 1]} | {board[2, 2]}");
}
// Vérifier si un joueur a gagné
public static bool CheckLines(char c) =>
board[0, 0] == c && board[1, 0] == c && board[2, 0] == c ||
board[0, 1] == c && board[1, 1] == c && board[2, 1] == c ||
board[0, 2] == c && board[1, 2] == c && board[2, 2] == c ||
board[0, 0] == c && board[0, 1] == c && board[0, 2] == c ||
board[1, 0] == c && board[1, 1] == c && board[1, 2] == c ||
board[2, 0] == c && board[2, 1] == c && board[2, 2] == c ||
board[0, 0] == c && board[1, 1] == c && board[2, 2] == c ||
board[2, 0] == c && board[1, 1] == c && board[0, 2] == c;
// Vérifier si match nul
public static bool CheckDraw() =>
board[0, 0] != ' ' && board[1, 0] != ' ' && board[2, 0] != ' ' &&
board[0, 1] != ' ' && board[1, 1] != ' ' && board[2, 1] != ' ' &&
board[0, 2] != ' ' && board[1, 2] != ' ' && board[2, 2] != ' ';
// Fin de partie
public static void EndGame(string msg)
{
Console.Clear();
RenderBoard();
Console.WriteLine(msg);
}
}
}
Le développement web avec C#
Comme indiqué en introduction, C# peut également être utilisé dans le cadre du développement web. Vous pouvez créer des applications web, des API et utiliser la puissance de C# pour concevoir des sites modernes et évolués. Si vous souhaitez apprendre C# et ASP .NET vous pouvez regarder du côté de ma formation axée développement web :
Ces deux formations vidéo sur C# sont complémentaires. L’une est spécialisée dans le développement logiciel, l’autre dans le développement web. Vous pouvez mixer les connaissances pour créer des applications ultra complètes ! Je vous apprendrai par exemple à développer des logiciels avec C# / WPF capables de consommer une API web pour charger des données dynamiquement. Dans mon cours ASP vous apprendrez à créer votre propre API. Avec ces deux cours, devenez un expert avec C# et soyez opérationnel sur tous types de projets !