Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javafx.application.Application
- import javafx.scene.Scene
- import javafx.scene.layout.StackPane
- import javafx.stage.Stage
- import javafx.scene.control.Label
- import scala.util.control._
- class Jeu {
- //True = joueur 1, False = joueur 2
- var tour = true;
- var charJ1 = 'X'
- var charJ2 = 'O'
- var gameover = false
- var currentGrille = 0
- //Renvoi false si il y a un gagnant
- def checkWinner(grille:Array[Char]): Boolean =
- !(grille(0) == 'X' && grille(1) == 'X' && grille(2) == 'X') &&
- !(grille(3) == 'X' && grille(4) == 'X' && grille(5) == 'X') &&
- !(grille(6) == 'X' && grille(7) == 'X' && grille(8) == 'X') &&
- !(grille(0) == 'X' && grille(4) == 'X' && grille(8) == 'X') &&
- !(grille(6) == 'X' && grille(4) == 'X' && grille(2) == 'X') &&
- !(grille(0) == 'X' && grille(3) == 'X' && grille(6) == 'X') &&
- !(grille(1) == 'X' && grille(4) == 'X' && grille(7) == 'X') &&
- !(grille(2) == 'X' && grille(5) == 'X' && grille(8) == 'X') &&
- !(grille(0) == 'O' && grille(1) == 'O' && grille(2) == 'O') &&
- !(grille(3) == 'O' && grille(4) == 'O' && grille(5) == 'O') &&
- !(grille(6) == 'O' && grille(7) == 'O' && grille(8) == 'O') &&
- !(grille(0) == 'O' && grille(4) == 'O' && grille(8) == 'O') &&
- !(grille(6) == 'O' && grille(4) == 'O' && grille(2) == 'O') &&
- !(grille(0) == 'O' && grille(3) == 'O' && grille(6) == 'O') &&
- !(grille(1) == 'O' && grille(4) == 'O' && grille(7) == 'O') &&
- !(grille(2) == 'O' && grille(5) == 'O' && grille(8) == 'O')
- def checkWinX(grille:Array[Char]): Boolean = {
- if ((grille(0) == 'X' && grille(1) == 'X' && grille(2) == 'X') ||
- (grille(3) == 'X' && grille(4) == 'X' && grille(5) == 'X') ||
- (grille(6) == 'X' && grille(7) == 'X' && grille(8) == 'X') ||
- (grille(0) == 'X' && grille(4) == 'X' && grille(8) == 'X') ||
- (grille(6) == 'X' && grille(4) == 'X' && grille(2) == 'X') ||
- (grille(0) == 'X' && grille(3) == 'X' && grille(6) == 'X') ||
- (grille(1) == 'X' && grille(4) == 'X' && grille(7) == 'X') ||
- (grille(2) == 'X' && grille(5) == 'X' && grille(8) == 'X'))
- return false
- else
- return true
- }
- def checkWinO(grille:Array[Char]): Boolean = {
- if ((grille(0) == 'O' && grille(1) == 'O' && grille(2) == 'O') ||
- (grille(3) == 'O' && grille(4) == 'O' && grille(5) == 'O') ||
- (grille(6) == 'O' && grille(7) == 'O' && grille(8) == 'O') ||
- (grille(0) == 'O' && grille(4) == 'O' && grille(8) == 'O') ||
- (grille(6) == 'O' && grille(4) == 'O' && grille(2) == 'O') ||
- (grille(0) == 'O' && grille(3) == 'O' && grille(6) == 'O') ||
- (grille(1) == 'O' && grille(4) == 'O' && grille(7) == 'O') ||
- (grille(2) == 'O' && grille(5) == 'O' && grille(8) == 'O'))
- return false
- else
- return true
- }
- /*def checkWinO(grille:Array[Char]): Boolean =
- !(grille(0) == 'O' && grille(1) == 'O' && grille(2) == 'O') &&
- !(grille(3) == 'O' && grille(4) == 'O' && grille(5) == 'O') &&
- !(grille(6) == 'O' && grille(7) == 'O' && grille(8) == 'O') &&
- !(grille(0) == 'O' && grille(4) == 'O' && grille(8) == 'O') &&
- !(grille(6) == 'O' && grille(4) == 'O' && grille(2) == 'O') &&
- !(grille(0) == 'O' && grille(3) == 'O' && grille(6) == 'O') &&
- !(grille(1) == 'O' && grille(4) == 'O' && grille(7) == 'O') &&
- !(grille(2) == 'O' && grille(5) == 'O' && grille(8) == 'O')*/
- def ai(grille:Array[Char], c : Char): Int = {
- //XXX
- //iii
- //iii
- for (i <- 0 to 2) {
- if (grille(0+(i*3)) == c && grille(1+(i*3)) == c)
- return 2+(i*3)
- else if (grille(0+(i*3)) == c && grille(2+(i*3)) == c)
- return 1
- else if (grille(1+(i*3)) == c && grille(2+(i*3)) == c)
- return 0+(i*3)
- }
- //Xii
- //Xii
- //Xii
- for (i <- 0 to 2) {
- if (grille(0+i) == c && grille(3+i) == c)
- return 6+i
- else if (grille(0+i) == c && grille(6+i) == c)
- return 3+i
- else if (grille(3+i) == c && grille(6+i) == c)
- return 0+i
- }
- //..X
- //.X.
- //X..
- if (grille(2) == c && grille(4) == c)
- return 6
- else if (grille(2) == c && grille(6) == c)
- return 4
- else if (grille(4) == c && grille(6) == c)
- return 2
- //X..
- //.X.
- //..X
- if (grille(0) == c && grille(4) == c)
- return 8
- else if (grille(0) == c && grille(8) == c)
- return 4
- else if (grille(4) == c && grille(8) == c)
- return 0
- return -1
- }
- def checkWinnerGame(grille:Array[Char]) : Char = {
- var n = 0;
- for (i <- 0 to 8)
- if (grille(i) == 'O' || grille(i) == 'X')
- n = n + 1;
- //Si XXX
- if (!checkWinX(grille))
- return 'X'
- //Si OOO
- else if (!checkWinO(grille))
- return 'O'
- //Si egalité
- else if (n == 9)
- return 'F'
- else
- return '.'
- }
- def grilleRemplie(grille:Array[Char]) : Boolean = {
- for (i <- 0 to 8)
- if (grille(i) == '.')
- return false
- return true;
- }
- def displayGrille(grille:Array[Char]) : Unit = {
- for (i <- 0 to 8) {
- print(grille(i));
- if (i == 2 || i == 5 || i== 8)
- println();
- }
- }
- def displayPlateau(plateau:Array[Grille]) : Unit = {
- println("*************************")
- println("*************************")
- println("*************************")
- for (i <- 0 to 8) {
- println("Grille " + i)
- for (j <- 0 to 8) {
- print(plateau(i).cases(j));
- if (j == 2 || j == 5 || j== 8)
- println();
- }
- }
- }
- }
- class Grille {
- //Un grille contient 9 cases 3*3
- var cases = new Array[Char](9)
- for (i <- 0 to 8)
- cases(i) = '.'
- //Pour savoir qui a gagné
- var winner = 'Z'
- }
- class Plateau {
- //Un plateau comporte 9 grilles 3*3
- var grilles = new Array[Grille](9)
- for (i <- 0 to 8)
- grilles(i) = new Grille
- }
- class Test extends Application {
- def start(primaryStage: Stage) {
- //************
- //INTERFACE
- primaryStage.setTitle("Tic Tac Toe Ten!")
- val root = new StackPane
- root.getChildren.add(new Label("Hello world!"))
- primaryStage.setScene(new Scene(root, 300, 300))
- primaryStage.show()
- //FIN INTERFACE
- //************
- //DEBUT CODE TIC TAC TOC TEN
- var plateau = new Plateau
- var grille = new Grille
- var game = new Jeu
- var ln = ""
- var pos = -1
- var choix = 0
- var ia = true
- var posIA = 0
- var loop = true
- var win = false
- //DO TO : Tester si valeur numerique
- //Tant qu'on a pas gagné
- while (!win) {
- //Affichage du plateau en entier
- game.displayPlateau(plateau.grilles)
- //Affichage de la grille en cours
- //game.displayGrille(plateau.grilles(game.currentGrille).cases)
- //SCAN
- while ((pos < 0 || pos > 8) || plateau.grilles(game.currentGrille).cases(pos) != '.') {
- println("Entrez une position sur la grille " + game.currentGrille + " :")
- //ln = readLine()
- //pos = ln.toInt
- val rnd = new scala.util.Random
- val range = 0 to 8
- pos = range(rnd.nextInt(range length))
- //Verification entrée
- if (pos < 0 || pos > 8) {
- println ("Un chiffre compris entre 0 et 8 !")
- }
- //Vérification si case deja prise
- else if (plateau.grilles(game.currentGrille).cases(pos) != '.') {
- println ("Case deja prise !")
- }
- }
- //Prise en compte du choix sur la grille
- if (game.tour)
- plateau.grilles(game.currentGrille).cases(pos) = game.charJ1
- else
- plateau.grilles(game.currentGrille).cases(pos) = game.charJ2
- //Passage au tour de l'autre
- game.tour = !game.tour
- //Verification si une grille complete
- if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'X') {
- println("X VAINQUEUR")
- win = true
- }
- else if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'O') {
- println("O VAINQUEUR")
- win = true
- }
- if (!win) {
- //Changement de grille
- game.currentGrille = pos;
- //Test si prochaine grille complete cas IA
- if (ia) {
- if (game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'F') {
- //On choisi une autre grille
- var loop = new Breaks
- loop.breakable {
- for (i <- 0 to 8) {
- if (game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == '.') {
- choix = i
- loop.break //Break
- }
- }
- }
- println("CHOIX PAR L'IA GRILLE " + choix)
- game.currentGrille = choix;
- }
- }
- else {
- //Si on va jouer sur une grille complete cas Humain
- if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'F') {
- //On choisi une autre grille
- choix = game.currentGrille
- while ((game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) != '.') || (choix < 0 || choix > 8)) {
- println("Choix de la prochaine grille :")
- ln = readLine()
- choix = ln.toInt
- //Verification entrée
- if (choix < 0 || choix > 8) {
- println ("Un chiffre compris entre 0 et 8 !")
- choix = game.currentGrille
- }
- }
- game.currentGrille = choix;
- }
- }
- //Gestion de l'IA si activé et si joueur 2
- if (game.tour == false && ia == true) {
- //Si on peut jouer un coup gagnant
- if (game.ai(plateau.grilles(game.currentGrille).cases, 'O') != -1) {
- posIA = game.ai(plateau.grilles(game.currentGrille).cases, 'O')
- plateau.grilles(game.currentGrille).cases(game.ai(plateau.grilles(game.currentGrille).cases, 'O')) = game.charJ2
- }
- //Sinon si on peut bloquer un coup adverse
- else if (game.ai(plateau.grilles(game.currentGrille).cases, 'X') != -1) {
- posIA = game.ai(plateau.grilles(game.currentGrille).cases, 'X')
- plateau.grilles(game.currentGrille).cases(game.ai(plateau.grilles(game.currentGrille).cases, 'X')) = game.charJ2
- }
- //Sinon l'IA prend le premier emplacement dispo
- else {
- loop = true
- while (loop) {
- val rnd = new scala.util.Random
- val range = 0 to 8
- var rPos = range(rnd.nextInt(range length))
- if (plateau.grilles(game.currentGrille).cases(rPos) == '.') {
- posIA = rPos
- plateau.grilles(game.currentGrille).cases(rPos) = game.charJ2
- loop = false //Break
- }
- }
- }
- println("IA GRILLE "+ game.currentGrille + " CASE " + posIA)
- //Verification si une grille complete
- if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'X') {
- println("X VAINQUEUR")
- win = true
- }
- else if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'O') {
- println("O VAINQUEUR")
- win = true
- }
- //Changement de grille
- game.currentGrille = posIA
- if (game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) != '.') {
- //On choisi une autre grille
- choix = game.currentGrille
- while ((game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) != '.') || (choix < 0 || choix > 8)) {
- println("Choix de la prochaine grille :")
- ln = readLine()
- choix = ln.toInt
- //Verification entrée
- if (choix < 0 || choix > 8) {
- println ("Un chiffre compris entre 0 et 8 !")
- }
- }
- game.currentGrille = choix;
- }
- //On repasse au tour du J1
- game.tour = !game.tour
- }
- }
- pos = -1 //Reset scan
- }
- //Affichage grille
- game.displayPlateau(plateau.grilles)
- }
- }
- object Test {
- def main(args: Array[String]) {
- Application.launch(classOf[Test], args: _*)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement