Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.sun.org.apache.xpath.internal.operations.Bool;
- import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
- import java.sql.*;
- import java.util.ArrayList;
- import java.util.Random;
- import java.util.Scanner;
- import java.io.*;
- /**
- * Created by activeagent on 02.05.16.
- */
- class Zellen {
- int feldGroesseX; //Variable zur Einstellung der Feldgröße
- int feldGroesseY;
- int festeZellen=0;
- int auffuelen=0;
- Zellen(boolean defGr, int berechGr){
- if (defGr==true){
- feldGroesseX=berechGr;
- feldGroesseY=berechGr;
- }
- else{
- berechGr=6;
- feldGroesseY=berechGr*10;
- feldGroesseX=berechGr*10;
- }
- }
- //boolean[][] zellen = new boolean[feldGroesseY][feldGroesseX]; //Erstellen eines doppelten Boolean Array für den zustand der Zelle true = leben/false=tot
- //boolean[][] temp = new boolean[feldGroesseY][feldGroesseX]; // " für die Zwischenspeicherung des Zustands bei Änderun
- ArrayList <Boolean> zellen = new ArrayList<Boolean>();
- Scanner scanner = new Scanner(System.in);
- String regeln = scanner.next(); //Einlesen der Regeln
- String[] parts = regeln.split("/"); //String beim "/" splitten
- String part1 = parts[0]; //String-Teil1
- String part2 = parts[1]; //String-Teil2
- char[] c = part1.toCharArray(); //String-Teil1 in einen CharArray umwandeln
- char[] c0 = part2.toCharArray(); //String-Teil2 "
- int [] regelnArray1 = new int[part1.length()]; //Neuen int Array erstellen mit der länge von dem String-Teil1
- int [] regelnArray2 = new int[part2.length()]; // " String-Teil2
- public void regelnSetzen() {
- for (int x = 0; x < c.length; x++) { //for-Schleife mit der Anzahl an durchgängen wie lange der Chararray c ist
- regelnArray1[x] = Character.getNumericValue(c[x]); //in den regelnArray den numerischen Wert der einzelnen einträge im charArray einfügen
- }
- for (int y = 0; y<c0.length;y++){
- regelnArray2[y] = Character.getNumericValue(c0[y]);
- }
- }
- int generation=0;
- public void arrayStartwerte() { //Methode zum setzen der Startwerte der Zellen
- int zufall; //Zufallszahl
- Random random = new Random();
- for (int i=0;i<feldGroesseY*feldGroesseX;i++){ //Geschachtelte for-Schleife um Werte im Array zu setzen
- //for (int j=0;j<feldGroesseX;j++){
- zufall=random.nextInt(10-0+1)+1; //Zufallszahl erstellen für das Festlegen der Startzustände der Zellen
- if (zufall>=5){ //Wenn zufall >=5 ist
- zellen.add(true); //lebt die Zelle
- }
- else { //Sonst
- zellen.add(false); //ist die Zelle tot
- }
- //}
- }
- }
- public void ausgabeSpielKonsole(String leben, String tot){ //Methode um das Spielfeld auszugeben
- System.out.println("Generation: "+generation); //Ausgabe in welcher Generation das Spiel sich momentan befindet
- int zeilenumbruch=feldGroesseX;
- for (int i=0;i<feldGroesseY*feldGroesseX;i++){ //Geschachtelte for-Schleife um jedes Feld im Array dur8chzugehen
- //for (int j=0;j<feldGroesseX;j++) {
- if (zellen.get(i)==true){ //lebende Zellen werden mit einem (O) dargestellt
- System.out.print(leben);
- }
- else{
- System.out.print(tot); //gestorbene Zellen werden mit einem ( ) dargestellt
- }
- //}
- if (i==zeilenumbruch-1) {
- System.out.println(); //Zeilenumbruch nach einer Zeile des Spielfeldes
- zeilenumbruch=zeilenumbruch+feldGroesseX;
- }
- }
- generation++;
- }
- public void ausgabeSpielTXT(String leben, String tot,String dateiname) throws IOException {
- int zeilenumbruch=feldGroesseX;
- String filename = "/Users/activeagent/Desktop/Test/"+dateiname; //Variabler Dateiname(Einträge werden an alte Datei angehängt wenn eine Datei mit dem selben Namen bereits existiert)
- File file = new File(filename);
- file.getParentFile().mkdirs(); //Erstellt Ordnerstruktur falls nicht vorhanden
- Writer out;
- out = new BufferedWriter(new FileWriter(filename,true));
- try {
- out.append("Generation: " + generation); //Ausgabe in welcher Generation das Spiel sich momentan befindet
- out.append("\n"); //"\n" für Zeilenumbruch
- for (int i = 0; i < feldGroesseY*feldGroesseX; i++) { //Geschachtelte for-Schleife um jedes Feld im Array durchzugehen
- //for (int j = 0; j < feldGroesseX; j++) {
- if (zellen.get(i)==true) {
- out.append(leben); //lebende Zellen
- } else {
- out.append(tot); //gestorbene Zellen
- }
- //}
- if (i==zeilenumbruch-1) {
- out.append("\n"); //Zeilenumbruch nach einer Zeile des Spielfeldes
- zeilenumbruch = zeilenumbruch + feldGroesseX;
- }
- }
- out.close();
- generation++; //nächste Generation
- }
- catch (IOException e){
- }
- }
- public void spielZug() { //Methode um einen Spielzug zu simulieren
- int testsumme = 0; //Testsumme um den neuen Zustand der Zelle festzulegen
- int zeilenumbruch=feldGroesseX;
- ArrayList<Boolean> temp = new ArrayList<Boolean>();
- temp.addAll(zellen); //Aktuelles Spielfeld wird in dem Array temp gespeichert
- //for (int i = 0; i < feldGroesseY * feldGroesseX; i++) {
- //for (int j=0;j<feldGroesseX;j++){
- // temp.addAll(zellen);
- //}
- //}
- for (int i = 0; i < feldGroesseY * feldGroesseX; i++) {
- //for (int j=0;j<feldGroesseX;j++){
- //if (j-1>=0){ // Prüfen ob j-1 noch im Spielfeld liegt
- //if (i==zeilenumbruch-1){
- // zeilenumbruch=zeilenumbruch+feldGroesseX;
- //}
- if (i - 1 >= 0 && i != (feldGroesseX * i) + 1) { // " i-1 "
- if (temp.get(i - 1) == true) { //Prüfen ob die Zelle an dieser Position lebt (LINKS VON DER ZELLE)
- testsumme = testsumme + 1; //wenn ja testsumme um 1 erhöhen
- }
- if (i - (feldGroesseX + 1) >= 0) {
- if (temp.get(i - (feldGroesseX + 1)) == true) { //LINKS ÜBER DER ZELLE
- testsumme = testsumme + 1;
- }
- }
- if (i + (feldGroesseX - 1) < feldGroesseY * feldGroesseX) {
- if (temp.get(i + (feldGroesseX - 1)) == true) { //LINKS UNTER DER ZELLE
- testsumme = testsumme + 1;
- }
- }
- }
- if (i - feldGroesseX >= 0) {
- if (temp.get(i - feldGroesseX) == true) { //GENAU ÜBER DER ZELLE
- testsumme = testsumme + 1;
- }
- }
- if (i + feldGroesseX < feldGroesseY*feldGroesseX) {
- if (temp.get(i + feldGroesseX) == true) { //GENAU UNTER DER ZELLE
- testsumme = testsumme + 1;
- }
- }
- if (i - (feldGroesseX - 1) <= feldGroesseX * i && i-(feldGroesseX - 1)>=0 && i!=zeilenumbruch-1) {
- if (temp.get(i - (feldGroesseX - 1)) == true) { //RECHTS ÜBER DER ZELLE
- testsumme = testsumme + 1;
- //System.out.println("test" + " +i "+i+"+ zeilenumbruch: "+ zeilenumbruch);
- }
- }
- if (i + 1 <= feldGroesseX * i && i!=zeilenumbruch-1) {
- if (temp.get(i + 1) == true) { //RECHTS VON DER ZELLE
- //System.out.println("test" + " +i "+i+"+ zeilenumbruch: "+ zeilenumbruch);
- testsumme = testsumme + 1;
- }
- if (i + (feldGroesseX) < feldGroesseY * feldGroesseX && i!=zeilenumbruch-1) {
- if (temp.get(i + (feldGroesseX + 1)) == true) { //RECHTS UNTER DER ZELLE
- //System.out.println("test" + " +i "+i+"+ zeilenumbruch: "+ zeilenumbruch);
- testsumme = testsumme + 1;
- }
- }
- }
- zellen.set(i, false);// = false; //Zellen werden erst auf tot gesetzt
- int regelnMax; //maximale Anzahl an Regeln
- if (regelnArray1.length > regelnArray2.length) { //Wenn regelnArray1 länger als regelnArray2
- regelnMax = regelnArray1.length; //wird regelnArray1 Länge als maximale Anzahl Regeln gesetzt
- } else { //Sonst (also wenn regelnArray2 länger als regelnArray1 ist oder bei gleichstand)
- regelnMax = regelnArray2.length; //wird regelnArray2 Länge als maximale Anzahl Regeln gesetzt
- }
- for (int l = 0; l < regelnMax; l++) { //for-Schleife mit Anzahl an durchgängen der maximalen Anzahl an Regeln
- if (l < regelnArray1.length) { //Schutz vor ArrayIndexOutOfBoundsException()
- if (testsumme == regelnArray1[l]) { //Wenn testsumme mit dem Eintrag im regelnArray1 an der Stelle l übereinstimmt
- zellen.set(i,true); //Zelle wird auf leben gesetzt
- testsumme = 0; //testsumme wird vor nächstem Durchgang auf 0 gesetzt
- }
- }
- if (l < regelnArray2.length) {
- if (testsumme == regelnArray2[l]) {
- zellen.set(i,true);
- testsumme = 0;
- }
- }
- }
- testsumme = 0;
- if (i==zeilenumbruch-1){
- zeilenumbruch=zeilenumbruch+feldGroesseX;
- }
- }
- }
- public void gleiterTable(Connection connection,int anzGleiter,String leben,String tot,String dateiname, String ausgabeArt) throws SQLException{
- Statement stmnt = null;
- String querry = "SELECT ZelleX, ZelleY, ZelleZustand FROM Gleiter"; //Der MYSQL Querry
- int anzGleiterERST=0;
- int zelleX=0;
- int zelleY=0;
- boolean zelleZustand=false;
- boolean figurFertig=false;
- boolean werteSetzen=true;
- try {
- stmnt = connection.createStatement();
- ResultSet rs = stmnt.executeQuery(querry); //Den Querry ausführen
- for (int i=0;i<anzGleiter;i++){
- while (rs.next() && werteSetzen==true) { //while rs.next true erhält und werteSetzen true ist
- zelleX = rs.getInt(1); //Den Integer an row 1 in MYSQl auslesen
- zelleY = rs.getInt(2);
- int zelleZustandTEMP = rs.getInt(3); //Da MYSQL kein boolean datentyp hat int auslesen
- if (zelleZustandTEMP == 0) {
- zelleZustand = false;
- }
- if (zelleZustandTEMP == 1) {
- zelleZustand = true;
- }
- try {
- ausgabeSpielstartMYSQL(zelleX, zelleY, zelleZustand, anzGleiterERST, figurFertig, leben, tot, ausgabeArt, dateiname);
- }
- catch (IOException e){
- }
- }
- anzGleiterERST++; //Anzahl erstellter Gleiter um 1 erhöhen
- rs.beforeFirst(); //Den MYSQL cursor wieder an den Anfang setzen
- if (anzGleiterERST==(anzGleiter)){ //Wenn die Anzahl der erstellten Gleiter mit der der gewünschten Gleiter übereistimmt
- figurFertig=true;
- try {
- ausgabeSpielstartMYSQL(zelleX, zelleY, zelleZustand, anzGleiterERST, figurFertig, leben, tot, ausgabeArt, dateiname);
- }
- catch (IOException e){
- }
- }
- }
- }
- catch (SQLException e){}
- }
- public void herschelTable(Connection connection,int anzGleiter,String leben,String tot,String dateiname,String ausgabeArt) throws SQLException{
- Statement stmnt = null;
- String querry = "SELECT ZelleX, ZelleY, ZelleZustand FROM Herschel";
- int anzHerschelERST=0;
- int zelleX=0;
- int zelleY=0;
- boolean zelleZustand=false;
- boolean figurFertig=false;
- try {
- stmnt = connection.createStatement();
- ResultSet rs = stmnt.executeQuery(querry);
- for (int i=0;i<anzGleiter;i++){
- while (rs.next()) {
- zelleX = rs.getInt(1);
- zelleY = rs.getInt(2);
- int zelleZustandTEMP = rs.getInt(3);
- if (zelleZustandTEMP == 0) {
- zelleZustand = false;
- }
- if (zelleZustandTEMP == 1) {
- zelleZustand = true;
- }
- try {
- ausgabeSpielstartMYSQL(zelleX, zelleY, zelleZustand, anzHerschelERST, figurFertig, leben, tot, ausgabeArt, dateiname);
- }
- catch (IOException e){
- }
- }
- anzHerschelERST++;
- rs.beforeFirst();
- if (anzHerschelERST==(anzGleiter)){
- figurFertig=true;
- try {
- ausgabeSpielstartMYSQL(zelleX, zelleY, zelleZustand, anzHerschelERST, figurFertig, leben, tot, ausgabeArt, dateiname);
- }
- catch (IOException e){
- }
- }
- }
- }
- catch (SQLException e){}
- }
- public void ausgabeSpielstartMYSQL(int zelleX, int zelleY, boolean zelleZustand,int anzFigurERST,boolean figurFertig, String leben,String tot,String ausgabeArt, String dateiname) throws IOException{
- boolean figurAbfrage=false;
- if (figurFertig==true){ //wenn die Figuren presets fertig sind figurAbfrage auf true
- figurAbfrage=true;
- }
- if (figurAbfrage==false){ //sonst
- if (zelleZustand==true){ //Wenn der Zustand der Zelle aus der MYSQL-Tabelle true ist
- zellen.add(true); //Der ArrayList zellen ein Element true hinzufügen
- }
- if (zelleZustand==false){ //Wenn der Zustand der Zelle aus der MYSQL-Tabelle false ist
- zellen.add(false); ////Der ArrayList zellen ein Element false hinzufügen
- }
- auffuelen=auffuelen+1; //integer für die angabe wann die Zeile fertig mit presets der MYSQL-DB ist und den Rest mit false auffülen soll
- festeZellen++; //Anzahl festgelegter Zellen die gesetzt wurden
- if (auffuelen==5){ //Wenn alle presets einer Zeile eingetragen sind
- for (int i =0;i<(feldGroesseX-5);i++){ //for-Schleife mit Anzahl an durchgängen von feldGrößeX-5
- zellen.add(false);
- }
- auffuelen=0;
- festeZellen=festeZellen+(feldGroesseX-5);
- }
- }
- if (figurAbfrage==true){
- for (int i=0;i<((feldGroesseX*feldGroesseY)-festeZellen);i++){
- zellen.add(false);
- }
- }
- if (figurAbfrage==true){
- int zeilenumbruch=feldGroesseX;
- if (ausgabeArt.equals("1")) {
- System.out.println("Generation: " + generation);
- for (int i = 0; i < feldGroesseY*feldGroesseX; i++) {
- //for (int j = 0; j < feldGroesseX; j++) {
- if (zellen.get(i) == true) {
- System.out.print(leben);
- } else {
- System.out.print(tot);
- }
- //}
- if (i==zeilenumbruch-1) {
- System.out.println();
- zeilenumbruch=zeilenumbruch+feldGroesseX;
- }
- }
- generation++;
- }
- else {
- String filename = "/Users/activeagent/Desktop/Test/"+dateiname; //Variabler Dateiname(Einträge werden an alte Datei angehängt wenn eine Datei mit dem selben Namen bereits existiert)
- File file = new File(filename);
- file.getParentFile().mkdirs(); //Erstellt Ordnerstruktur falls nicht vorhanden
- Writer out;
- out = new BufferedWriter(new FileWriter(filename,true));
- try {
- out.append("Generation: " + generation); //Ausgabe in welcher Generation das Spiel sich momentan befindet
- out.append("\n"); //"\n" für Zeilenumbruch
- for (int i = 0; i < feldGroesseY*feldGroesseX; i++) { //Geschachtelte for-Schleife um jedes Feld im Array durchzugehen
- //for (int j = 0; j < feldGroesseX; j++) {
- if (zellen.get(i) == true) {
- out.append(leben); //lebende Zellen
- } else {
- out.append(tot); //gestorbene Zellen
- }
- //}
- if (i==zeilenumbruch-1) {
- out.append("\n"); //Zeilenumbruch nach einer Zeile des Spielfeldes
- zeilenumbruch=zeilenumbruch+feldGroesseX;
- }
- }
- out.close();
- generation=1; //nächste Generation
- }
- catch (IOException e){
- }
- }
- System.out.println();
- }
- }
- }
- public class GameOfLife {
- public static void main(String[] args) throws Exception{
- //String driverName="org.gjt.mm.mysql.Driver";
- //class.forName(driverName).newInstance;
- System.out.println("Loading driver...");
- try {
- Class.forName("com.mysql.jdbc.Driver");
- System.out.println("Driver loaded!");
- } catch (ClassNotFoundException e) {
- throw new IllegalStateException("Cannot find the driver in the classpath!", e);
- }
- String serverName="localhost:3306"; //Servername der MYSQL DB
- String myDatabase="Startpattern"; //Name der MYSQL DB
- String url = "jdbc:mysql://"+serverName+"/"+myDatabase; //Genauer URL "
- String username="root"; //Zugangsdaten "
- String password="joshua123";
- String dateiname="temp";
- Scanner scanner = new Scanner(System.in);
- int defaultGr=50;
- boolean defGr=true;
- System.out.println("Wählen Sie das Startfeld(1 Gleiter/2 Herschel/3 Zufall)");
- int preset= scanner.nextInt();
- int anzPreset=0;
- if (preset== 1 || preset==2){
- if (preset==1){
- System.out.println("Geben Sie die Anzahl der Gleiter an: ");
- anzPreset= scanner.nextInt();
- System.out.println("Bitte geben Sie die Regeln an: ");
- }
- else {
- System.out.println("Geben Sie die Anzahl der Herschel an: ");
- anzPreset= scanner.nextInt();
- System.out.println("Bitte geben Sie die Regeln an: ");
- }
- if (anzPreset*6>defaultGr){
- defGr=false;
- }
- }
- else {
- System.out.println("Bitte geben Sie die Regeln an: ");
- }
- Zellen objekt = new Zellen(defGr,defaultGr); //Objekterzeugung mit Übergabeparametern zur Festlegung der Größe
- if (preset==3) {
- //objekt.spielFeld(defaultGr,defGr);
- objekt.arrayStartwerte(); //Methode arrayStartawrte aufrufen
- }
- objekt.regelnSetzen();
- int anzahlGenerationen=50; //Anzahl der Generationen (Spielzüge) setzen
- System.out.println("Geben Sie die Art der Darstellung an");
- System.out.print("lebendig: ");
- String leben= scanner.next();
- System.out.print("tot: ");
- String tot=scanner.next();
- System.out.println("Geben Sie die Art der Ausgabe an (1 Konsole/2 Textdatei):");
- String ausgabeArt = scanner.next();
- if (ausgabeArt.equals("2")){
- System.out.println("Geben Sie den gewünschten Namen der Datei an: ");
- dateiname= scanner.next();
- }
- objekt.regelnSetzen();
- try (Connection connection = DriverManager.getConnection(url, username, password)){ //Zu MYSQL verbinden
- System.out.println("Zu mysql verbunden");
- if (preset==1) {
- objekt.gleiterTable(connection,anzPreset,leben,tot,dateiname,ausgabeArt);
- }
- if (preset==2) {
- objekt.herschelTable(connection,anzPreset,leben,tot,dateiname,ausgabeArt);
- }
- }
- catch (SQLException e){
- throw new IllegalStateException("konnte nicht verbinden");
- }
- if (ausgabeArt.equals("1")) { //Wenn in ausgabeArt "1" steht
- objekt.ausgabeSpielKonsole(leben, tot); //Methode ausgabeSpielKonsole aufrufen um Startfeld auszugeben mit übergabe der Strings leben und tot
- }
- if (ausgabeArt.equals("2")) {
- try {
- objekt.ausgabeSpielTXT(leben,tot,dateiname); // " ausgabeSpielTXT " leben, tot und dateiname
- }
- catch (IOException e){
- }
- }
- for (int i=0;i<anzahlGenerationen;i++){ //for-Schleife mit anzahlGenerationen als Anzahl der Durchläufe
- objekt.spielZug(); //Bei jedem durchgang die Methode spielZug aufrufen um eine Generation zu simulieren
- if (ausgabeArt.equals("1")) {
- objekt.ausgabeSpielKonsole(leben, tot); //und ausgabeSpielKonsole um jede Generation auszugeben
- try {
- Thread.sleep(500); //nach jeder Ausgabe 1/2 Sekunde warten
- }
- catch (InterruptedException e){
- }
- }
- if (ausgabeArt.equals("2")) {
- try {
- objekt.ausgabeSpielTXT(leben,tot,dateiname);
- }
- catch (IOException e){
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement