Le Deal du moment : -29%
DYSON V8 Origin – Aspirateur balai sans fil
Voir le deal
269.99 €

Hello C#

4 participants

Page 3 sur 3 Précédent  1, 2, 3

Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Sam 25 Nov - 16:19

Non, il s'est barré ! mdr
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Sam 25 Nov - 16:31

L'enfant Voodoo a écrit:Non, il s'est barré ! mdr

avec sa fiancée comme butin? Very Happy
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Lun 27 Nov - 14:06

Bon, on s'y remet ?
On programme un jeu ?
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Lun 27 Nov - 14:17

Un puissance 4, ça te dit ?

Avec comme objets:
- le jeu,
- les joueurs.

Pour des jeux à base de grille, comme le puissance 4, mais aussi les dames, la bataille navale, etc..., on utilise ce qu'on appelle les tableaux à deux dimensions.

On déclare la grille comme ça:
Code:
int[,] grille;
Le type est entier (int). On dit que, lorsqu'il y a une pièce du joueur 1, la valeur est 1, quand il y a une pièce du joueur 2, la valeur est 2, quand il n'y a pas de pièce, la valeur est 0.

On initialise la grille comme ça:
Code:
grille = new int[8, 6];
Ici, ça signifie une grille de 8 x 6. On peut, bien sûr, choisir les dimensions qu'on veut.

Après, on peut accéder au éléments de la grille. De grille[0, 0] (en haut à gauche) à grille[7, 5] (en bas à droite).

1 ère étape: créer un objet jeu qui contient une grille, et l'afficher.

Code:

Code:
using System;

class Jeu {
  int longueur, hauteur;
  int[,] grille;
  
  public Jeu(int l, int h) {
    longueur = l;
    hauteur = h;
    grille = new int[l, h];
    viderLaGrille();
  }
  
  public Jeu() : this(10, 7) {
  }
  
  private void viderLaGrille() {
    for (int i = 0; i < longueur; i++)
      for (int j = 0; j < hauteur; j++)
        grille[i, j] = 0;
  }
  
  public void Afficher() {
    for (int j = 0; j < hauteur; j++)
    {
      for (int i = 0; i < longueur; i++)
      {
        if (grille[i, j] == 0) Console.Write(". ");
        else if (grille[i, j] == 1) Console.Write("O ");
        else Console.Write("X ");
      }
      Console.WriteLine();
    }
    for (int i = 0; i < longueur; i++) Console.Write("__");
    Console.WriteLine();
    for (int i = 0; i < longueur; i++) Console.Write((char)('A' + i) + " ");
    Console.WriteLine();
  }
}

class MainClass {
  public static void Main (string[] args) {
    Jeu jeu = new Jeu(15, 8);
    jeu.Afficher();
  }
}
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 15:20

y'a une couille Shocked
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Lun 27 Nov - 15:31

archibald de montpucier a écrit:y'a une couille Shocked
Ouhais, mais si tu me dis pas quoi, je peux pas le deviner.
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 15:33

L'enfant Voodoo a écrit:
archibald de montpucier a écrit:y'a une couille Shocked
Ouhais, mais si tu me dis pas quoi, je peux pas le deviner.

main.cs(1,12): error CS1525: Unexpected symbol `:', expecting `.', `::', `;', `<', or `='
Compilation failed: 1 error(s), 0 warnings

exit status 1
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Lun 27 Nov - 15:39

Il te dit que t'as le signe : dans la première ligne.
Il n'y en n'a pas dans mon code, donc t'as copié-collé n'importe-quoi.
Donc tu refais le copier coller comme il faut.
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Lun 27 Nov - 15:40

Et Bob, si tu passes, ta gueule.
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 15:47

bon ben voilà Je ne sais pas ce que ce : est venu foutre ici


Bon j'ai le tableau !
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 15:47

Salut Bob ! Wink
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Lun 27 Nov - 16:01

Bon, maintenant, il nous faut les joueurs. C'est là où va intervenir l'abstraction.

Une classe abstraite, on ne peut pas en faire un objet.
Par exemple, imagine que tu veuille faire des classes d'animaux.
Tu auras la classe "animal", divisée en sous-classes "poisson", "mammifère", etc...
Puis tu auras les classes "chat", "chient", "requin", etc... qui hériteront de leur classe mère.
Créer un objet "corbeau" a un sens. Créer un objet "oiseau" non, parce qu'il n'est pas complètement défini.

Pour les joueurs, on va faire pareil.
La classe joueur sera abstraite, et on aura une classe "joueur humain" et une classe "intelligence artificielle" qu'on implémentera plus tard.

Voici la classe joueur:
Code:
abstract class Joueur {
  string nom;
  int numero;
 
  public string Nom {
    get {return nom; }
  }
 
  public Joueur(string nomJoueur, int nrJoueur) {
    nom = nomJoueur;
    numero = nrJoueur;
  }
 
  abstract public int joue();
}

Le joueur a un nom et un numéro (1 ou 2).
Il a une fonction "joue". Cette fonction dit où il va mettre le jeton. On ne peut pas dire comment elle marche parce que, à ce niveau, on ne sait pas.
Pour le joueur humain: on demande au joueur où il veut jouer.
Pour le joueur machine: son algorithme décide.

Voici la classe du joueur humain:
Code:
class Humain : Joueur {
  public Humain(string nom, int nr): base (nom, nr) {}
 
  public static int charToInt(char c) {
    int result = -1;
    if (c >= 'a' && c <= 'z') result = c - 'a';
    else if (c >= 'A' && c <= 'Z') result = c - 'A';
    return result;
  }
 
  override public int joue() {
    System.Console.Write(Nom + ", quelle colonne ? >");
    string result = System.Console.ReadLine();
    return charToInt(result[0]);
  }
}
Ici, on implémente la méthode joue en demandant au joueur.

Maintenant, on va tester ça avec un code complet avec un seul joueur. On peut placer 10 jetons X où on veut:

Code:
using System;

class Jeu {
  int longueur, hauteur;
  int[,] grille;
 
  public Jeu(int l, int h) {
    longueur = l;
    hauteur = h;
    grille = new int[l, h];
    viderLaGrille();
  }
 
  public Jeu() : this(10, 7) {
  }
 
  private void viderLaGrille() {
    for (int i = 0; i < longueur; i++)
      for (int j = 0; j < hauteur; j++)
        grille[i, j] = 0;
  }
 
  public void Afficher() {
    for (int j = 0; j < hauteur; j++)
    {
      for (int i = 0; i < longueur; i++)
      {
        if (grille[i, j] == 0) Console.Write(". ");
        else if (grille[i, j] == 1) Console.Write("X ");
        else Console.Write("O ");
      }
      Console.WriteLine();
    }
    for (int i = 0; i < longueur; i++) Console.Write("__");
    Console.WriteLine();
    for (int i = 0; i < longueur; i++) Console.Write((char)('A' + i) + " ");
    Console.WriteLine();
  }
 
  public bool AjouterPiece(int colonne, int joueur) {
    if (colonne < 0 || colonne >= longueur || grille[colonne, 0] > 0) return false;
    int y = hauteur - 1;
    while (grille[colonne, y] > 0) y--;
    grille[colonne, y] = joueur;
    return true;
  }
}

abstract class Joueur {
  string nom;
  int numero;
 
  public string Nom {
    get {return nom; }
  }
 
  public Joueur(string nomJoueur, int nrJoueur) {
    nom = nomJoueur;
    numero = nrJoueur;
  }
 
  abstract public int joue();
}

class Humain : Joueur {
  public Humain(string nom, int nr): base (nom, nr) {}
 
  public static int charToInt(char c) {
    int result = -1;
    if (c >= 'a' && c <= 'z') result = c - 'a';
    else if (c >= 'A' && c <= 'Z') result = c - 'A';
    return result;
  }
 
  override public int joue() {
    System.Console.Write(Nom + ", quelle colonne ? >");
    string result = System.Console.ReadLine();
    return charToInt(result[0]);
  }
}

class MainClass {
  public static void Main (string[] args) {
    Jeu jeu = new Jeu(15, 8);
    Humain joueur1 = new Humain("Voodoo", 1);
    for (int i = 0; i < 10; i++) {
      jeu.Afficher();
      int x = joueur1.joue();
      jeu.AjouterPiece(x, 1);
    }
  }
}

L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 16:14


main.cs(95,246): error CS1525: Unexpected symbol `end-of-file'
Compilation failed: 1 error(s), 0 warnings

exit status 1
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 16:16

au temps pour moi...j'avais oublie un signe
c est ok!
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 16:18

bravo bravo bravo Ca fonctionne! faut le deuxième joueur maintenant!
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Lun 27 Nov - 16:25

Vite fait, alors:

Code:
using System;

class Jeu {
  int longueur, hauteur;
  int[,] grille;
 
  public Jeu(int l, int h) {
    longueur = l;
    hauteur = h;
    grille = new int[l, h];
    viderLaGrille();
  }
 
  public Jeu() : this(10, 7) {
  }
 
  private void viderLaGrille() {
    for (int i = 0; i < longueur; i++)
      for (int j = 0; j < hauteur; j++)
        grille[i, j] = 0;
  }
 
  public void Afficher() {
    for (int j = 0; j < hauteur; j++)
    {
      for (int i = 0; i < longueur; i++)
      {
        if (grille[i, j] == 0) Console.Write(". ");
        else if (grille[i, j] == 1) Console.Write("X ");
        else Console.Write("O ");
      }
      Console.WriteLine();
    }
    for (int i = 0; i < longueur; i++) Console.Write("__");
    Console.WriteLine();
    for (int i = 0; i < longueur; i++) Console.Write((char)('A' + i) + " ");
    Console.WriteLine();
  }
 
  public bool AjouterPiece(int colonne, int joueur) {
    if (colonne < 0 || colonne >= longueur || grille[colonne, 0] > 0) return false;
    int y = hauteur - 1;
    while (grille[colonne, y] > 0) y--;
    grille[colonne, y] = joueur;
    return true;
  }
}

abstract class Joueur {
  string nom;
  int numero;
 
  public string Nom {
    get {return nom; }
  }
 
  public Joueur(string nomJoueur, int nrJoueur) {
    nom = nomJoueur;
    numero = nrJoueur;
  }
 
  abstract public int joue();
}

class Humain : Joueur {
  public Humain(string nom, int nr): base (nom, nr) {}
 
  public static int charToInt(char c) {
    int result = -1;
    if (c >= 'a' && c <= 'z') result = c - 'a';
    else if (c >= 'A' && c <= 'Z') result = c - 'A';
    return result;
  }
 
  override public int joue() {
    System.Console.Write(Nom + ", quelle colonne ? >");
    string result = System.Console.ReadLine();
    return charToInt(result[0]);
  }
}

class MainClass {
  public static void Main (string[] args) {
    Jeu jeu = new Jeu(15, 8);
    Humain joueur1 = new Humain("Voodoo", 1);
    Humain joueur2 = new Humain("Archie", 2);
    for (int i = 0; i < 8; i++) {
      jeu.Afficher();
      int x = joueur1.joue();
      jeu.AjouterPiece(x, 1);
      jeu.Afficher();
      x = joueur2.joue();
      jeu.AjouterPiece(x, 2);
    }
  }
}
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Lun 27 Nov - 16:35

cheers
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 8:56

Bon, on en est où...

Ah, oui ! Il faut maintenant programmer le cœur du programme, les règles du jeu !

Alors, le pion est déjà placé au bon endroit (si tu regardes mon code, je fais une boucle pour trouver le premier emplacement vide). Donc ça, c'est fait.
Il faut maintenant voir si la partie est terminée, et donc:
- si le joueur a fait une ligne de 4 (victoire du joueur),
- ou si la grille est pleine (match nul).

Comment testerais-tu une grille pleine ?
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 9:02

L'enfant Voodoo a écrit:Bon, on en est où...

Ah, oui ! Il faut maintenant programmer le cœur du programme, les règles du jeu !

Alors, le pion est déjà placé au bon endroit (si tu regardes mon code, je fais une boucle pour trouver le premier emplacement vide). Donc ça, c'est fait.
Il faut maintenant voir si la partie est terminée, et donc:
- si le joueur a fait une ligne de 4 (victoire du joueur),
- ou si la grille est pleine (match nul).

Comment testerais-tu une grille pleine ?

Ben quand il n'y a plus moyen d'en aligner 4 ou alors s'il n'y a plus de case vide scratch
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 9:16

archibald de montpucier a écrit:ou alors s'il n'y a plus de case vide scratch
Ouhais !
Mais pas besoin de tester toute la grille, il suffit de tester la ligne du haut !

Avec un code comme ça, par exemple:
Code:
public bool GrillePleine() {
  for (int i = 0; i < longueur; i++)
    if (grille[i, 0] == 0) return false;
  return true;
}

On parcourt la longueur de la grille, si on trouve une case vide ( = 0), on renvoie faux, si arrive au bout sans avoir rien trouvé, on renvoie vrai.

Maintenant, tester une ligne de 4, ça va être plus compliqué !
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 9:22

Il eut fallu numéroter les lignes....Comme ça on peut jouer partout, comme à la bataille navale par ex
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 9:24

Oui mais on a dit qu'on fait un puissance 4 !
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 9:35

to dernier codage est à rajouter à celui de hier?
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 9:49

Ouhais, mais pas n'importe où, c'est une méthode de la classe Jeu.
Et voilà la méthode de test:
Code:
public int NombresPions(int x, int y) {
    int pieces = 1;
    int piecesMax = 1;
    int couleur = grille[x, y];
    
    // test horizontal
    int i = 1;
    while (GetPion(x-i, y) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = pieces;
    
    // test vertical
    i = 1;
    pieces = 1;
    while (GetPion(x, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
    
    // test /
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
    
    // test \
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y+i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y-i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
    
    return piecesMax;
  }

Elle a l'air compliquée, mais ne l'est pas tant que ça... On fait la même chose dans toutes les directions, on calcule, et on sort la plus grande ligne.

Ça a l'air de marcher, en plus !
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 10:09

Voilà un code complet avec un jeu pour deux personnes:

Code:
using System;

class Jeu {
  int longueur, hauteur;
  int[,] grille;
 
  public Jeu(int l, int h) {
    longueur = l;
    hauteur = h;
    grille = new int[l, h];
    viderLaGrille();
  }
 
  public Jeu() : this(10, 7) {
  }
 
  private void viderLaGrille() {
    for (int i = 0; i < longueur; i++)
      for (int j = 0; j < hauteur; j++)
        grille[i, j] = 0;
  }
 
  public void Afficher() {
    for (int j = 0; j < hauteur; j++)
    {
      for (int i = 0; i < longueur; i++)
      {
        if (grille[i, j] == 0) Console.Write(". ");
        else if (grille[i, j] == 1) Console.Write("X ");
        else Console.Write("O ");
      }
      Console.WriteLine();
    }
    for (int i = 0; i < longueur; i++) Console.Write("__");
    Console.WriteLine();
    for (int i = 0; i < longueur; i++) Console.Write((char)('A' + i) + " ");
    Console.WriteLine();
  }
 
  public int AjouterPiece(int colonne, int joueur) {
    if (colonne < 0 || colonne >= longueur || grille[colonne, 0] > 0) return -1;
    int y = hauteur - 1;
    while (grille[colonne, y] > 0) y--;
    grille[colonne, y] = joueur;
    return y;
  }
 
  public bool GrillePleine() {
    for (int i = 0; i < longueur; i++)
      if (grille[i, 0] == 0) return false;
    return true;
  }
 
  public int GetPion(int x, int y) {
    if (x < 0 || x >= longueur || y < 0 || y >= hauteur) return -1;
    return grille[x, y];
  }
 
  public int NombresPions(int x, int y) {
    int pieces = 1;
    int piecesMax = 1;
    int couleur = grille[x, y];
   
    // test horizontal
    int i = 1;
    while (GetPion(x-i, y) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = pieces;
   
    // test vertical
    i = 1;
    pieces = 1;
    while (GetPion(x, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
   
    // test /
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
   
    // test \
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y+i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y-i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
   
    return piecesMax;
  }
}

abstract class Joueur {
  string nom;
  int numero;
 
  public string Nom {
    get {return nom; }
  }
 
  public Joueur(string nomJoueur, int nrJoueur) {
    nom = nomJoueur;
    numero = nrJoueur;
  }
 
  abstract public int joue();
}

class Humain : Joueur {
  public Humain(string nom, int nr): base (nom, nr) {}
 
  public static int charToInt(char c) {
    int result = -1;
    if (c >= 'a' && c <= 'z') result = c - 'a';
    else if (c >= 'A' && c <= 'Z') result = c - 'A';
    return result;
  }
 
  override public int joue() {
    System.Console.Write(Nom + ", quelle colonne ? >");
    string result = System.Console.ReadLine();
    return charToInt(result[0]);
  }
}

class MainClass {
  public static void Main (string[] args) {
    Jeu jeu = new Jeu(15, 8);
   
    Joueur joueur1 = new Humain("Voodoo", 1);
    Joueur joueur2 = new Humain("Archie", 2);
   
    int joueur = 1;
    bool finDePartie = false;
   
    while (!finDePartie) {
      jeu.Afficher();
      int x = joueur == 1 ? joueur1.joue() : joueur2.joue();
      int y = jeu.AjouterPiece(x, joueur);
      if (y >= 0) {
        if (jeu.NombresPions(x, y) >= 4) {
          finDePartie = true;
          jeu.Afficher();
          System.Console.WriteLine((joueur == 1 ? joueur1.Nom : joueur2.Nom) +
          " est le vainqueur ! BRAVO !");
        }
        else if (jeu.GrillePleine()) {
          finDePartie = true;
          jeu.Afficher();
          System.Console.WriteLine("Match null...");
        }
        else {
          joueur = 3 - joueur;
        }
      }
    }
  }
}
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 11:17

Y'a que Voodoo qui joue?
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 11:21

archibald de montpucier a écrit:Y'a que Voodoo qui joue?


au temps pour moi... sifflote
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 11:27

Bon, on va ajouter une Intelligence Artificielle.
Enfin... Vraiment basique (elle joue au pif).
Une connerie artificielle quoi...

Ce sera aussi une classe héritée de Joueur.
On appelle seulement la méthode "joue" du joueur, et, si c'est un humain, la machine demandera de taper la colonne (Bob, ta gueule), et si c'est l'IA, une colonne aléatoire sera choisie.
C'est ce qu'on appelle le polymorphisme, le troisième point primordial de la POO (avec l'encapsulation des données et l'héritage).

Et voilà le code:
(Archie est le joueur humain, Bob est l'IA)
Code:
using System;

class Jeu {
  int longueur, hauteur;
  int[,] grille;
  
  public int Longueur {get {return longueur; }}
  public int Hauteur {get {return hauteur; }}
  
  public Jeu(int l, int h) {
    longueur = l;
    hauteur = h;
    grille = new int[l, h];
    viderLaGrille();
  }
  
  public Jeu() : this(10, 7) {
  }
  
  private void viderLaGrille() {
    for (int i = 0; i < longueur; i++)
      for (int j = 0; j < hauteur; j++)
        grille[i, j] = 0;
  }
  
  public void Afficher() {
    for (int j = 0; j < hauteur; j++)
    {
      for (int i = 0; i < longueur; i++)
      {
        if (grille[i, j] == 0) Console.Write(". ");
        else if (grille[i, j] == 1) Console.Write("X ");
        else Console.Write("O ");
      }
      Console.WriteLine();
    }
    for (int i = 0; i < longueur; i++) Console.Write("__");
    Console.WriteLine();
    for (int i = 0; i < longueur; i++) Console.Write((char)('A' + i) + " ");
    Console.WriteLine();
  }
  
  public int AjouterPiece(int colonne, int joueur) {
    if (colonne < 0 || colonne >= longueur || grille[colonne, 0] > 0) return -1;
    int y = hauteur - 1;
    while (grille[colonne, y] > 0) y--;
    grille[colonne, y] = joueur;
    return y;
  }
  
  public bool GrillePleine() {
    for (int i = 0; i < longueur; i++)
      if (grille[i, 0] == 0) return false;
    return true;
  }
  
  public int GetPion(int x, int y) {
    if (x < 0 || x >= longueur || y < 0 || y >= hauteur) return -1;
    return grille[x, y];
  }
  
  public int NombresPions(int x, int y, int textCol = -1) {
    int pieces = 1;
    int piecesMax = 1;
    int couleur;
    if (textCol < 0) couleur = grille[x, y];
    else couleur = textCol;
    
    // test horizontal
    int i = 1;
    while (GetPion(x-i, y) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = pieces;
    
    // test vertical
    i = 1;
    pieces = 1;
    while (GetPion(x, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
    
    // test /
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
    
    // test \
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y+i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y-i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
    
    return piecesMax;
  }
}

abstract class Joueur {
  string nom;
  int numero;
  
  public string Nom {
    get {return nom; }
  }
  
  public Joueur(string nomJoueur, int nrJoueur) {
    nom = nomJoueur;
    numero = nrJoueur;
  }
  
  abstract public int joue();
}

class Humain : Joueur {
  public Humain(string nom, int nr): base (nom, nr) {}
  
  public static int charToInt(char c) {
    int result = -1;
    if (c >= 'a' && c <= 'z') result = c - 'a';
    else if (c >= 'A' && c <= 'Z') result = c - 'A';
    return result;
  }
  
  override public int joue() {
    System.Console.Write(Nom + ", quelle colonne ? >");
    string result = System.Console.ReadLine();
    return charToInt(result[0]);
  }
}

class IABasic : Joueur {
  
  protected Jeu jeu;
  public IABasic(string nom, int nr, Jeu j): base (nom, nr) { jeu = j; }
  
  override public int joue() {
    Random rnd = new Random();
    return rnd.Next(0, jeu.Longueur - 1);
  }
}

class MainClass {
  public static void Main (string[] args) {
    Jeu jeu = new Jeu(15, 8);
    
    Joueur joueur1 = new Humain("Archie", 1);
    Joueur joueur2 = new IABasic("Bob", 2, jeu);
    
    int joueur = 1;
    bool finDePartie = false;
    
    while (!finDePartie) {
      jeu.Afficher();
      int x = joueur == 1 ? joueur1.joue() : joueur2.joue();
      int y = jeu.AjouterPiece(x, joueur);
      if (y >= 0) {
        if (jeu.NombresPions(x, y) >= 4) {
          finDePartie = true;
          jeu.Afficher();
          System.Console.WriteLine((joueur == 1 ? joueur1.Nom : joueur2.Nom) +
          " est le vainqueur ! BRAVO !");
          System.Console.WriteLine((joueur == 1 ? joueur2.Nom : joueur1.Nom) +
          " s'est fait piner comme une sous-merde !");
        }
        else if (jeu.GrillePleine()) {
          finDePartie = true;
          jeu.Afficher();
          System.Console.WriteLine("Match null...");
        }
        else {
          joueur = 3 - joueur;
        }
      }
    }
  }
}
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 11:37

J'ai gagné cheers
Tu ne peux pas rendre Bob plus intelligent? Il joue comme une Caca !!!
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 11:41

Oui mais il faut un peu plus de temps pour développer une IA, c'est normalement un vrai sous-domaine informatique !
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 11:48

A la lumière de tout ça je me pose la question: bosser pour une boite c'est pas trop chiant pour un programmeur ? Plutôt que de créer ses propres trucs à lui? Very Happy
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 12:02

Ça dépend.
Pour un programmeur avec un bon niveau technique et créatif comme moi, oui.

J'ai bricolé une IA en 5 minutes:
Code:
using System;

class Jeu {
  int longueur, hauteur;
  int[,] grille;
 
  public int Longueur {get {return longueur; }}
  public int Hauteur {get {return hauteur; }}
 
  public Jeu(int l, int h) {
    longueur = l;
    hauteur = h;
    grille = new int[l, h];
    viderLaGrille();
  }
 
  public Jeu() : this(10, 7) {
  }
 
  private void viderLaGrille() {
    for (int i = 0; i < longueur; i++)
      for (int j = 0; j < hauteur; j++)
        grille[i, j] = 0;
  }
 
  public void Afficher() {
    for (int j = 0; j < hauteur; j++)
    {
      for (int i = 0; i < longueur; i++)
      {
        if (grille[i, j] == 0) Console.Write(". ");
        else if (grille[i, j] == 1) Console.Write("X ");
        else Console.Write("O ");
      }
      Console.WriteLine();
    }
    for (int i = 0; i < longueur; i++) Console.Write("__");
    Console.WriteLine();
    for (int i = 0; i < longueur; i++) Console.Write((char)('A' + i) + " ");
    Console.WriteLine();
  }
 
  public int AjouterPiece(int colonne, int joueur) {
    if (colonne < 0 || colonne >= longueur || grille[colonne, 0] > 0) return -1;
    int y = hauteur - 1;
    while (grille[colonne, y] > 0) y--;
    grille[colonne, y] = joueur;
    return y;
  }
 
  public int PremiereCase(int colonne) {
    if (colonne < 0 || colonne >= longueur || grille[colonne, 0] > 0) return -1;
    int y = hauteur - 1;
    while (grille[colonne, y] > 0) y--;
    return y;
  }
 
  public bool GrillePleine() {
    for (int i = 0; i < longueur; i++)
      if (grille[i, 0] == 0) return false;
    return true;
  }
 
  public int GetPion(int x, int y) {
    if (x < 0 || x >= longueur || y < 0 || y >= hauteur) return -1;
    return grille[x, y];
  }
 
  public int NombresPions(int x, int y, int textCol = -1) {
    int pieces = 1;
    int piecesMax = 1;
    int couleur;
    if (textCol < 0) couleur = grille[x, y];
    else couleur = textCol;
   
    // test horizontal
    int i = 1;
    while (GetPion(x-i, y) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = pieces;
   
    // test vertical
    i = 1;
    pieces = 1;
    while (GetPion(x, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
   
    // test /
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y-i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y+i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
   
    // test \
    i = 1;
    pieces = 1;
    while (GetPion(x-i, y+i) == couleur) {
      pieces++;
      i++;
    }
    i = 1;
    while (GetPion(x+i, y-i) == couleur) {
      pieces++;
      i++;
    }
    piecesMax = Math.Max(pieces, piecesMax);
   
    return piecesMax;
  }
}

abstract class Joueur {
  protected string nom;
  protected int numero;
 
  public string Nom {
    get {return nom; }
  }
 
  public Joueur(string nomJoueur, int nrJoueur) {
    nom = nomJoueur;
    numero = nrJoueur;
  }
 
  abstract public int joue();
}

class Humain : Joueur {
  public Humain(string nom, int nr): base (nom, nr) {}
 
  public static int charToInt(char c) {
    int result = -1;
    if (c >= 'a' && c <= 'z') result = c - 'a';
    else if (c >= 'A' && c <= 'Z') result = c - 'A';
    return result;
  }
 
  override public int joue() {
    System.Console.Write(Nom + ", quelle colonne ? >");
    string result = System.Console.ReadLine();
    return charToInt(result[0]);
  }
}

class IABasic : Joueur {
 
  protected Jeu jeu;
  public IABasic(string nom, int nr, Jeu j): base (nom, nr) { jeu = j; }
 
  override public int joue() {
    Random rnd = new Random();
    return rnd.Next(0, jeu.Longueur - 1);
  }
}

class IANormal : IABasic {
 
  public IANormal(string nom, int nr, Jeu j): base (nom, nr, j) { }
 
  override public int joue() {
    int result = 0;
    int maxScore = 0;
    for (int i = 0; i < jeu.Longueur; i++) {
      int score = 0;
      if (i == jeu.Longueur / 2) score = 1;
      int j = jeu.PremiereCase(i);
      if (j < 0) score = -500000;
      else {
        int n = jeu.NombresPions(i, j, numero);
        if (n > 3) score += 500000;
        else if (n == 3) score += 1000;
        else if (n == 2) score += 400;
       
        n = jeu.NombresPions(i, j, 3 - numero);
        if (n > 3) score += 50000;
        else if (n == 3) score += 200;
        else if (n == 2) score += 100;
       
        if (j > 0) {
          n = jeu.NombresPions(i, j - 1, 3 - numero);
          if (n > 3) score -= 50000;
          else if (n == 3) score -= 10;
        }
      }
      System.Console.Write(score + " ");
      if (score > maxScore) {
        maxScore = score;
        result = i;
      }
    }
    System.Console.WriteLine();
    return result;
  }
}

class MainClass {
  public static void Main (string[] args) {
    Jeu jeu = new Jeu(15, 8);
   
    Joueur joueur1 = new Humain("Archie", 1);
    Joueur joueur2 = new IANormal("Bob", 2, jeu);
   
    int joueur = 1;
    bool finDePartie = false;
   
    while (!finDePartie) {
      jeu.Afficher();
      int x = joueur == 1 ? joueur1.joue() : joueur2.joue();
      int y = jeu.AjouterPiece(x, joueur);
      if (y >= 0) {
        if (jeu.NombresPions(x, y) >= 4) {
          finDePartie = true;
          jeu.Afficher();
          System.Console.WriteLine((joueur == 1 ? joueur1.Nom : joueur2.Nom) +
          " est le vainqueur ! BRAVO !");
          System.Console.WriteLine((joueur == 1 ? joueur2.Nom : joueur1.Nom) +
          " s'est fait piner comme une sous-merde !");
        }
        else if (jeu.GrillePleine()) {
          finDePartie = true;
          jeu.Afficher();
          System.Console.WriteLine("Match null...");
        }
        else {
          joueur = 3 - joueur;
        }
      }
    }
  }
}
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 13:10

C'est bien de toi dont je voulais parler Very Happy
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 13:13

ça correspond à quoi les chiffres en haut du jeu?
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 13:15

archibald de montpucier a écrit:C'est bien de toi dont je voulais parler Very Happy
Au boulot, je fais des trucs aussi chiants que ton idée de date de consommation produits périmés, c'est dire Sleep
Mais c'est comme ça, une très grande majorité de développeurs font de l'informatique de gestion...
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 13:15

Il commence à bien se défendre là... Very Happy
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 13:16

archibald de montpucier a écrit:ça correspond à quoi les chiffres en haut du jeu?
A des traces de debug que j'ai oublié de désactiver (l'IA attribue un score à chaque colonne, et choisit celle qui a le plus gros score).
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 13:24

L'enfant Voodoo a écrit:
archibald de montpucier a écrit:C'est bien de toi dont je voulais parler Very Happy
Au boulot, je fais des trucs aussi chiants que ton idée de date de consommation produits périmés, c'est dire Sleep
Mais c'est comme ça, une très grande majorité de développeurs font de l'informatique de gestion...

Dans l'informatique de gestion il n'y a plus grand chose à inventer je pense...Il y a déjà des logiciels pour tout...On adapte, on bricole...suivant le client...Alors que dans l'industrie et la recherche ou l'imagerie de synthèse, il y a de quoi faire encore...
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 13:42

archibald de montpucier a écrit:Dans l'informatique de gestion il n'y a plus grand chose à inventer je pense...
La plupart du temps, tu programmes ce qu'un client précis souhaite, parce que souvent, les logiciels du marché ne suffisent pas. C'est ce que je faisais quand j'étais à la banque (avec Poupoune et compagnie) et un peu ce que je fais ici (même si le cœur du programme est générique, j'ai parfois des demandes pour certains clients).

archibald de montpucier a écrit:dans l'industrie et la recherche ou l'imagerie de synthèse, il y a de quoi faire encore...
Ouhais ! J'ai commencé comme chercheur en robotique ! C'était marrant !
Pour l'image de synthèse, il y a quelques boites qui dominent tout le marché de la modélisation et du rendu, et pour bosser là-dedans, il faut être mathématicien ! Comme pour les moteurs 3D et physique dans les jeux vidéo - un autre très gros marché. Le budget d'un "gros" jeu vidéo aujourd'hui est celui d'un blockbuster à Hollywood !
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 13:49

"j'ai parfois des demandes pour certains clients"

C'est là que tu sors le grand jeu qui pérennise la profession :

"Je vais faire mon possible pour Pâques mais pas avant..."
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 13:59

Il faut commencer par: "Vous voulez que je fasse ça ??? Mais voyons, ce n'est pas possible à cause de [truc incompréhensible avec plein de termes techniques dont la moitié n'existe pas].
Mmmmmmh... [en mode Penseur de Rodin].
Si modifie l'architecture du programme en [autres termes techniques incompréhensible], ça pourrait peut-être marcher, mais ça va faire beaucoup de travail supplémentaire !
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 14:28

L'enfant Voodoo a écrit:Il faut commencer par: "Vous voulez que je fasse ça ??? Mais voyons, ce n'est pas possible à cause de [truc incompréhensible avec plein de termes techniques dont la moitié n'existe pas].
Mmmmmmh... [en mode Penseur de Rodin].
Si modifie l'architecture du programme en [autres termes techniques incompréhensible], ça pourrait peut-être marcher, mais ça va faire beaucoup de travail supplémentaire !

plie

...et ce n'est même pas une plaisanterie...J'ai vécu tout ça mdr mdr mdr
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 14:31

sifflote sifflote
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par archibald de montpucier Mar 28 Nov - 14:33

en Afrique celui qui te propose ça te fait une deuxième proposition...Il vient faire ça en dehors de son boulot pour moins cher comme ça il te pine et son patron en même temps Very Happy
archibald de montpucier
archibald de montpucier

Fonction : Majordome révoqué pour filouterie d'aliment (art 315-5 du code pénal) Fait la manche pour survivre
Messages : 21059
Date d'inscription : 16/05/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par L'enfant Voodoo Mar 28 Nov - 14:39

En Afrique, ils bossent au black affraid
L'enfant Voodoo
L'enfant Voodoo

Fonction : Influenceur nihiliste
Messages : 13995
Date d'inscription : 09/04/2016

Revenir en haut Aller en bas

Hello C# - Page 3 Empty Re: Hello C#

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 3 sur 3 Précédent  1, 2, 3

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum