Advertisement
Guest User

Untitled

a guest
May 6th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.63 KB | None | 0 0
  1. import javafx.application.Application
  2. import javafx.scene.Scene
  3. import javafx.scene.layout.StackPane
  4. import javafx.stage.Stage
  5. import javafx.scene.control.Label
  6.  
  7. import scala.util.control._
  8.  
  9. class Jeu {
  10. //True = joueur 1, False = joueur 2
  11. var tour = true;
  12. var charJ1 = 'X'
  13. var charJ2 = 'O'
  14. var gameover = false
  15. var currentGrille = 0
  16.  
  17. //Renvoi false si il y a un gagnant
  18. def checkWinner(grille:Array[Char]): Boolean =
  19. !(grille(0) == 'X' && grille(1) == 'X' && grille(2) == 'X') &&
  20. !(grille(3) == 'X' && grille(4) == 'X' && grille(5) == 'X') &&
  21. !(grille(6) == 'X' && grille(7) == 'X' && grille(8) == 'X') &&
  22. !(grille(0) == 'X' && grille(4) == 'X' && grille(8) == 'X') &&
  23. !(grille(6) == 'X' && grille(4) == 'X' && grille(2) == 'X') &&
  24. !(grille(0) == 'X' && grille(3) == 'X' && grille(6) == 'X') &&
  25. !(grille(1) == 'X' && grille(4) == 'X' && grille(7) == 'X') &&
  26. !(grille(2) == 'X' && grille(5) == 'X' && grille(8) == 'X') &&
  27. !(grille(0) == 'O' && grille(1) == 'O' && grille(2) == 'O') &&
  28. !(grille(3) == 'O' && grille(4) == 'O' && grille(5) == 'O') &&
  29. !(grille(6) == 'O' && grille(7) == 'O' && grille(8) == 'O') &&
  30. !(grille(0) == 'O' && grille(4) == 'O' && grille(8) == 'O') &&
  31. !(grille(6) == 'O' && grille(4) == 'O' && grille(2) == 'O') &&
  32. !(grille(0) == 'O' && grille(3) == 'O' && grille(6) == 'O') &&
  33. !(grille(1) == 'O' && grille(4) == 'O' && grille(7) == 'O') &&
  34. !(grille(2) == 'O' && grille(5) == 'O' && grille(8) == 'O')
  35.  
  36. def checkWinX(grille:Array[Char]): Boolean = {
  37. if ((grille(0) == 'X' && grille(1) == 'X' && grille(2) == 'X') ||
  38. (grille(3) == 'X' && grille(4) == 'X' && grille(5) == 'X') ||
  39. (grille(6) == 'X' && grille(7) == 'X' && grille(8) == 'X') ||
  40. (grille(0) == 'X' && grille(4) == 'X' && grille(8) == 'X') ||
  41. (grille(6) == 'X' && grille(4) == 'X' && grille(2) == 'X') ||
  42. (grille(0) == 'X' && grille(3) == 'X' && grille(6) == 'X') ||
  43. (grille(1) == 'X' && grille(4) == 'X' && grille(7) == 'X') ||
  44. (grille(2) == 'X' && grille(5) == 'X' && grille(8) == 'X'))
  45. return false
  46. else
  47. return true
  48. }
  49.  
  50. def checkWinO(grille:Array[Char]): Boolean = {
  51. if ((grille(0) == 'O' && grille(1) == 'O' && grille(2) == 'O') ||
  52. (grille(3) == 'O' && grille(4) == 'O' && grille(5) == 'O') ||
  53. (grille(6) == 'O' && grille(7) == 'O' && grille(8) == 'O') ||
  54. (grille(0) == 'O' && grille(4) == 'O' && grille(8) == 'O') ||
  55. (grille(6) == 'O' && grille(4) == 'O' && grille(2) == 'O') ||
  56. (grille(0) == 'O' && grille(3) == 'O' && grille(6) == 'O') ||
  57. (grille(1) == 'O' && grille(4) == 'O' && grille(7) == 'O') ||
  58. (grille(2) == 'O' && grille(5) == 'O' && grille(8) == 'O'))
  59. return false
  60. else
  61. return true
  62. }
  63.  
  64. /*def checkWinO(grille:Array[Char]): Boolean =
  65. !(grille(0) == 'O' && grille(1) == 'O' && grille(2) == 'O') &&
  66. !(grille(3) == 'O' && grille(4) == 'O' && grille(5) == 'O') &&
  67. !(grille(6) == 'O' && grille(7) == 'O' && grille(8) == 'O') &&
  68. !(grille(0) == 'O' && grille(4) == 'O' && grille(8) == 'O') &&
  69. !(grille(6) == 'O' && grille(4) == 'O' && grille(2) == 'O') &&
  70. !(grille(0) == 'O' && grille(3) == 'O' && grille(6) == 'O') &&
  71. !(grille(1) == 'O' && grille(4) == 'O' && grille(7) == 'O') &&
  72. !(grille(2) == 'O' && grille(5) == 'O' && grille(8) == 'O')*/
  73.  
  74. def ai(grille:Array[Char], c : Char): Int = {
  75.  
  76. //XXX
  77. //iii
  78. //iii
  79. for (i <- 0 to 2) {
  80. if (grille(0+(i*3)) == c && grille(1+(i*3)) == c)
  81. return 2+(i*3)
  82. else if (grille(0+(i*3)) == c && grille(2+(i*3)) == c)
  83. return 1
  84. else if (grille(1+(i*3)) == c && grille(2+(i*3)) == c)
  85. return 0+(i*3)
  86. }
  87.  
  88. //Xii
  89. //Xii
  90. //Xii
  91. for (i <- 0 to 2) {
  92. if (grille(0+i) == c && grille(3+i) == c)
  93. return 6+i
  94. else if (grille(0+i) == c && grille(6+i) == c)
  95. return 3+i
  96. else if (grille(3+i) == c && grille(6+i) == c)
  97. return 0+i
  98. }
  99.  
  100. //..X
  101. //.X.
  102. //X..
  103. if (grille(2) == c && grille(4) == c)
  104. return 6
  105. else if (grille(2) == c && grille(6) == c)
  106. return 4
  107. else if (grille(4) == c && grille(6) == c)
  108. return 2
  109.  
  110. //X..
  111. //.X.
  112. //..X
  113. if (grille(0) == c && grille(4) == c)
  114. return 8
  115. else if (grille(0) == c && grille(8) == c)
  116. return 4
  117. else if (grille(4) == c && grille(8) == c)
  118. return 0
  119.  
  120. return -1
  121.  
  122. }
  123.  
  124. def checkWinnerGame(grille:Array[Char]) : Char = {
  125. var n = 0;
  126. for (i <- 0 to 8)
  127. if (grille(i) == 'O' || grille(i) == 'X')
  128. n = n + 1;
  129. //Si XXX
  130. if (!checkWinX(grille))
  131. return 'X'
  132. //Si OOO
  133. else if (!checkWinO(grille))
  134. return 'O'
  135. //Si egalité
  136. else if (n == 9)
  137. return 'F'
  138. else
  139. return '.'
  140. }
  141.  
  142.  
  143. def grilleRemplie(grille:Array[Char]) : Boolean = {
  144. for (i <- 0 to 8)
  145. if (grille(i) == '.')
  146. return false
  147. return true;
  148. }
  149.  
  150. def displayGrille(grille:Array[Char]) : Unit = {
  151. for (i <- 0 to 8) {
  152. print(grille(i));
  153. if (i == 2 || i == 5 || i== 8)
  154. println();
  155. }
  156. }
  157.  
  158. def displayPlateau(plateau:Array[Grille]) : Unit = {
  159. println("*************************")
  160. println("*************************")
  161. println("*************************")
  162. for (i <- 0 to 8) {
  163. println("Grille " + i)
  164. for (j <- 0 to 8) {
  165. print(plateau(i).cases(j));
  166. if (j == 2 || j == 5 || j== 8)
  167. println();
  168. }
  169. }
  170. }
  171. }
  172.  
  173. class Grille {
  174. //Un grille contient 9 cases 3*3
  175. var cases = new Array[Char](9)
  176. for (i <- 0 to 8)
  177. cases(i) = '.'
  178.  
  179. //Pour savoir qui a gagné
  180. var winner = 'Z'
  181. }
  182.  
  183. class Plateau {
  184. //Un plateau comporte 9 grilles 3*3
  185. var grilles = new Array[Grille](9)
  186. for (i <- 0 to 8)
  187. grilles(i) = new Grille
  188.  
  189. }
  190.  
  191. class Test extends Application {
  192.  
  193. def start(primaryStage: Stage) {
  194. //************
  195. //INTERFACE
  196. primaryStage.setTitle("Tic Tac Toe Ten!")
  197.  
  198. val root = new StackPane
  199. root.getChildren.add(new Label("Hello world!"))
  200.  
  201. primaryStage.setScene(new Scene(root, 300, 300))
  202. primaryStage.show()
  203. //FIN INTERFACE
  204. //************
  205.  
  206. //DEBUT CODE TIC TAC TOC TEN
  207. var plateau = new Plateau
  208. var grille = new Grille
  209. var game = new Jeu
  210. var ln = ""
  211. var pos = -1
  212. var choix = 0
  213. var ia = true
  214. var posIA = 0
  215. var loop = true
  216. var win = false
  217.  
  218. //DO TO : Tester si valeur numerique
  219.  
  220. //Tant qu'on a pas gagné
  221. while (!win) {
  222.  
  223. //Affichage du plateau en entier
  224. game.displayPlateau(plateau.grilles)
  225.  
  226. //Affichage de la grille en cours
  227. //game.displayGrille(plateau.grilles(game.currentGrille).cases)
  228.  
  229. //SCAN
  230. while ((pos < 0 || pos > 8) || plateau.grilles(game.currentGrille).cases(pos) != '.') {
  231. println("Entrez une position sur la grille " + game.currentGrille + " :")
  232. //ln = readLine()
  233. //pos = ln.toInt
  234. val rnd = new scala.util.Random
  235. val range = 0 to 8
  236. pos = range(rnd.nextInt(range length))
  237. //Verification entrée
  238. if (pos < 0 || pos > 8) {
  239. println ("Un chiffre compris entre 0 et 8 !")
  240. }
  241. //Vérification si case deja prise
  242. else if (plateau.grilles(game.currentGrille).cases(pos) != '.') {
  243. println ("Case deja prise !")
  244. }
  245. }
  246.  
  247. //Prise en compte du choix sur la grille
  248. if (game.tour)
  249. plateau.grilles(game.currentGrille).cases(pos) = game.charJ1
  250. else
  251. plateau.grilles(game.currentGrille).cases(pos) = game.charJ2
  252.  
  253. //Passage au tour de l'autre
  254. game.tour = !game.tour
  255.  
  256. //Verification si une grille complete
  257. if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'X') {
  258. println("X VAINQUEUR")
  259. win = true
  260. }
  261.  
  262. else if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'O') {
  263. println("O VAINQUEUR")
  264. win = true
  265. }
  266.  
  267. if (!win) {
  268. //Changement de grille
  269. game.currentGrille = pos;
  270.  
  271. //Test si prochaine grille complete cas IA
  272. if (ia) {
  273. if (game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'F') {
  274. //On choisi une autre grille
  275. var loop = new Breaks
  276. loop.breakable {
  277. for (i <- 0 to 8) {
  278. if (game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == '.') {
  279. choix = i
  280. loop.break //Break
  281. }
  282. }
  283. }
  284. println("CHOIX PAR L'IA GRILLE " + choix)
  285. game.currentGrille = choix;
  286. }
  287. }
  288. else {
  289. //Si on va jouer sur une grille complete cas Humain
  290. if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'F') {
  291. //On choisi une autre grille
  292. choix = game.currentGrille
  293. while ((game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) != '.') || (choix < 0 || choix > 8)) {
  294. println("Choix de la prochaine grille :")
  295. ln = readLine()
  296. choix = ln.toInt
  297. //Verification entrée
  298. if (choix < 0 || choix > 8) {
  299. println ("Un chiffre compris entre 0 et 8 !")
  300. choix = game.currentGrille
  301. }
  302. }
  303. game.currentGrille = choix;
  304. }
  305. }
  306.  
  307. //Gestion de l'IA si activé et si joueur 2
  308. if (game.tour == false && ia == true) {
  309. //Si on peut jouer un coup gagnant
  310. if (game.ai(plateau.grilles(game.currentGrille).cases, 'O') != -1) {
  311. posIA = game.ai(plateau.grilles(game.currentGrille).cases, 'O')
  312. plateau.grilles(game.currentGrille).cases(game.ai(plateau.grilles(game.currentGrille).cases, 'O')) = game.charJ2
  313. }
  314.  
  315. //Sinon si on peut bloquer un coup adverse
  316. else if (game.ai(plateau.grilles(game.currentGrille).cases, 'X') != -1) {
  317. posIA = game.ai(plateau.grilles(game.currentGrille).cases, 'X')
  318. plateau.grilles(game.currentGrille).cases(game.ai(plateau.grilles(game.currentGrille).cases, 'X')) = game.charJ2
  319. }
  320.  
  321. //Sinon l'IA prend le premier emplacement dispo
  322. else {
  323. loop = true
  324. while (loop) {
  325. val rnd = new scala.util.Random
  326. val range = 0 to 8
  327. var rPos = range(rnd.nextInt(range length))
  328. if (plateau.grilles(game.currentGrille).cases(rPos) == '.') {
  329. posIA = rPos
  330. plateau.grilles(game.currentGrille).cases(rPos) = game.charJ2
  331. loop = false //Break
  332. }
  333. }
  334. }
  335.  
  336. println("IA GRILLE "+ game.currentGrille + " CASE " + posIA)
  337.  
  338. //Verification si une grille complete
  339. if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'X') {
  340. println("X VAINQUEUR")
  341. win = true
  342. }
  343.  
  344. else if(game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) == 'O') {
  345. println("O VAINQUEUR")
  346. win = true
  347. }
  348.  
  349. //Changement de grille
  350. game.currentGrille = posIA
  351.  
  352. if (game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) != '.') {
  353. //On choisi une autre grille
  354. choix = game.currentGrille
  355. while ((game.checkWinnerGame(plateau.grilles(game.currentGrille).cases) != '.') || (choix < 0 || choix > 8)) {
  356. println("Choix de la prochaine grille :")
  357. ln = readLine()
  358. choix = ln.toInt
  359. //Verification entrée
  360. if (choix < 0 || choix > 8) {
  361. println ("Un chiffre compris entre 0 et 8 !")
  362. }
  363. }
  364. game.currentGrille = choix;
  365. }
  366.  
  367. //On repasse au tour du J1
  368. game.tour = !game.tour
  369. }
  370. }
  371.  
  372. pos = -1 //Reset scan
  373. }
  374.  
  375. //Affichage grille
  376. game.displayPlateau(plateau.grilles)
  377.  
  378. }
  379.  
  380. }
  381.  
  382. object Test {
  383. def main(args: Array[String]) {
  384. Application.launch(classOf[Test], args: _*)
  385. }
  386. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement