个人网站放什么内容,郑州网络推广公司排名,广州线上推广公司,学习网站制作介绍
井字棋#xff0c;英文名叫Tic-Tac-Toe#xff0c;是一种在3*3格子上进行的连珠游戏#xff0c;和五子棋类似#xff0c;由于棋盘一般不画边框#xff0c;格线排成井字故得名。游戏需要的工具仅为纸和笔#xff0c;然后由分别代表O和X的两个游戏者轮流在格子里留下…介绍
井字棋英文名叫Tic-Tac-Toe是一种在3*3格子上进行的连珠游戏和五子棋类似由于棋盘一般不画边框格线排成井字故得名。游戏需要的工具仅为纸和笔然后由分别代表O和X的两个游戏者轮流在格子里留下标记一般来说先手者为X任意三个标记形成一条直线则为获胜。 训练AI 主要思路是保存每次失败的局下次不在走类似的局这样经过长期训练AI会越来越聪明 import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.CopyOnWriteArrayList;/*** TicTacToe** author your name*/
public class TicTacToe {// member variablesprivate static final String[][] table new String[3][3];private static final CopyOnWriteArrayListString success new CopyOnWriteArrayListString();private static final CopyOnWriteArrayListString pStrings new CopyOnWriteArrayListString();private static final CopyOnWriteArrayListString cStrings new CopyOnWriteArrayListString();private static final CopyOnWriteArrayListString losingStrings new CopyOnWriteArrayListString();// mainpublic static void main(String[] args) {// initialinitSuccess();// loopdo {System.out.println(start game!);test();} while (true);}SuppressWarnings(resource)// testpublic static void test() {Scanner sc new Scanner(System.in);CopyOnWriteArrayListString losingList new CopyOnWriteArrayListString();int index 0;do {System.out.println(input anything);sc.next();System.out.println(your input position 1: (range 0 from 2));int p1 sc.nextInt();System.out.println(your input position 2: (range 0 from 2));int p2 sc.nextInt();table[p1][p2] p;pStrings.add(p1 p2);index;int a1 0;int a2 0;if (index 5) ;else {do {// call computerint[] cs computerTurn();table[cs[0]][cs[1]] c;boolean fs false;String temp print();for (int i 0; i losingStrings.size(); i) {if (temp.equals(losingStrings.get(i))) {fs true;}}if (fs) {table[cs[0]][cs[1]] null;continue;} else {a1 cs[0];a2 cs[1];break;}} while (true);cStrings.add(a1 a2);}// printSystem.err.println(print());// recordlosingList.add(print());// judgeboolean[] flag judge();if (flag[0] | flag[1]) {// clear tablefor (int i 0; i 3; i) {for (int j 0; j 3; j) {table[i][j] null;}}// print resultif (flag[1]) {System.err.println(person wins!);losingStrings.add(losingList.get(losingList.size() - 2));System.err.println(printLosing());pStrings.clear();cStrings.clear();break;} else {System.err.println(computer wins!);cStrings.clear();pStrings.clear();break;}}// is tieif (isTie()) {break;}} while (true);}// printLosingpublic static String printLosing() {String outString ;for (int i 0; i losingStrings.size(); i) {outString losing:\n losingStrings.get(i) \n;}return outString;}// isTiepublic static boolean isTie() {int idxs 0;// valid of tablefor (int i 0; i table.length; i) {for (int j 0; j 3; j) {if (table[i][j] ! null) idxs;}}if (idxs 9) {System.err.println(equal or tie);cStrings.clear();pStrings.clear();// clear tablefor (int i 0; i 3; i) {for (int j 0; j 3; j) {table[i][j] null;}}return true;}return false;}public static boolean[] judge() {// judge successboolean fc false;boolean fp false;for (int i 0; i success.size(); i) {int b 0;for (int j 0; j pStrings.size(); j) {int f 0;if (success.get(i).substring(0, 2).equals(pStrings.get(j))) {f 1;}if (success.get(i).substring(2, 4).equals(pStrings.get(j))) {f 1;}if (success.get(i).substring(4, 6).equals(pStrings.get(j))) {f 1;}if (f 1) {b;}}if (b 3) {fp true;break;}}for (int i 0; i success.size(); i) {int a 0;for (int j 0; j cStrings.size(); j) {int f 0;if (success.get(i).substring(0, 2).equals(cStrings.get(j))) {f 1;}if (success.get(i).substring(2, 4).equals(cStrings.get(j))) {f 1;}if (success.get(i).substring(4, 6).equals(cStrings.get(j))) {f 1;}if (f 1) {a;}}if (a 3) {fc true;break;}}System.out.println(cs cStrings.toString());System.out.println(ps pStrings.toString());return new boolean[]{fc, fp};}public static String print() {// printString tableString ;for (int i 0; i 3; i) {for (int j 0; j 3; j) {if (table[i][j] null) {tableString \t;} else if (table[i][j].equals(c)) {tableString c\t;} else {tableString p\t;}}tableString \n;}return tableString;}// computer turnpublic static int[] computerTurn() {int[] res new int[2];int c1 0;int c2 0;do {c1 new Random().nextInt(3);c2 new Random().nextInt(3);if (table[c1][c2] null) {break;}} while (true);res[0] c1;res[1] c2;return res;}// initSuccesspublic static void initSuccess() {final String[] items {00, 01, 02,10, 11, 12,20, 21, 22};final int[][] combination {{0, 4, 8},{2, 4, 6},{0, 1, 2},{3, 4, 5},{6, 7, 8},{0, 3, 6},{1, 4, 7},{2, 5, 8}};for (int i 0; i combination.length; i) {int[] temp combination[i];String t1 items[temp[0]] items[temp[1]] items[temp[2]];success.add(t1);String t4 items[temp[2]] items[temp[1]] items[temp[0]];success.add(t4);String t2 items[temp[1]] items[temp[0]] items[temp[2]];success.add(t2);String t5 items[temp[2]] items[temp[0]] items[temp[1]];success.add(t5);String t3 items[temp[0]] items[temp[2]] items[temp[1]];success.add(t3);String t6 items[temp[1]] items[temp[2]] items[temp[0]];success.add(t6);}}}
效果
启动后和AI进行对局AI每次会将失败的路数记录下来下次不再走重复的路径训练久了AI就会越来越聪明