Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
- import java.sql.*;
- 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;
- public void spielFeld(int berechGr, boolean defGr){
- System.out.println("hallo!!"+defGr);
- if (defGr==true){
- feldGroesseX=berechGr;
- feldGroesseY=berechGr;
- System.out.println("test defgr =true");
- }
- else{
- feldGroesseY=berechGr*10;
- feldGroesseX=berechGr*10;
- System.out.println("defGr=false");
- }
- }
- 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 Änderung
- 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;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[i][j]=true; //lebt die Zelle
- }
- else { //Sonst
- zellen[i][j]=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
- for (int i=0;i<feldGroesseY;i++){ //Geschachtelte for-Schleife um jedes Feld im Array dur8chzugehen
- System.out.println("test"+feldGroesseX);
- for (int j=0;j<feldGroesseX;j++) {
- if (zellen[i][j] == true){ //lebende Zellen werden mit einem (O) dargestellt
- System.out.print(leben);
- }
- else{
- System.out.print(tot); //gestorbene Zellen werden mit einem ( ) dargestellt
- }
- }
- System.out.println(); //Zeilenumbruch nach einer Zeile des Spielfeldes
- }
- generation++;
- }
- public void ausgabeSpielTXT(String leben, String tot,String dateiname) throws IOException {
- 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; i++) { //Geschachtelte for-Schleife um jedes Feld im Array durchzugehen
- for (int j = 0; j < feldGroesseX; j++) {
- if (zellen[i][j] == true) {
- out.append(leben); //lebende Zellen
- } else {
- out.append(tot); //gestorbene Zellen
- }
- }
- out.append("\n"); //Zeilenumbruch nach einer Zeile des Spielfeldes
- }
- 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
- for (int i=0;i<feldGroesseY;i++){ //Aktuelles Spielfeld wird in dem Array temp gespeichert
- for (int j=0;j<feldGroesseX;j++){
- temp[i][j]=zellen[i][j];
- }
- }
- for (int i=0;i<feldGroesseY;i++){
- for (int j=0;j<feldGroesseX;j++){
- if (j-1>=0){ //Prüfen ob j-1 noch im Spielfeld liegt
- if(i-1>=0){ // " i-1 "
- if (temp[i-1][j-1]==true){ //Prüfen ob die Zelle an dieser Position lebt
- testsumme=testsumme+1; //wenn ja testsumme um 1 erhöhen
- }
- if (temp[i][j-1]==true){
- testsumme=testsumme+1;
- }
- if (temp[i-1][j]==true){
- testsumme=testsumme+1;
- }
- }
- if (i+1<feldGroesseY){
- if (temp[i+1][j-1]==true){
- testsumme=testsumme+1;
- }
- if (temp[i+1][j]==true){
- testsumme=testsumme+1;
- }
- }
- }
- if (j+1<feldGroesseX){
- if (i-1>=0){
- if (temp[i-1][j+1]==true){
- testsumme=testsumme+1;
- }
- if (temp[i][j+1]==true){
- testsumme=testsumme+1;
- }
- }
- if (i+1<feldGroesseY){
- if (temp[i+1][j+1]){
- testsumme=testsumme+1;
- }
- }
- }
- zellen[i][j]=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[i][j]=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[i][j]=true;
- testsumme=0;
- }
- }
- }
- testsumme=0;
- }
- }
- }
- 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";
- int anzGleiterERST=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++){//anzGleiterERST<=anzGleiter+1) {
- 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;
- }
- //System.out.println(zelleX + "-" + zelleY + "-" + zelleZustand + "----" + anzGleiterERST);
- try {
- System.out.println(zelleX+"+"+zelleY+"+"+feldGroesseX+"+"+feldGroesseY);
- ausgabeSpielstartMYSQL(zelleX, zelleY, zelleZustand, anzGleiterERST, figurFertig, leben, tot, ausgabeArt, dateiname);
- }
- catch (IOException e){
- }
- }
- anzGleiterERST++;
- rs.beforeFirst();
- if (anzGleiterERST==(anzGleiter)){
- figurFertig=true;
- }
- }
- }
- 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;
- }
- }
- }
- 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){
- figurAbfrage=true;
- }
- if (figurAbfrage==false){
- //if (zelleY+(anzFigurERST*6)>=feldGroesseY || zelleX+(anzFigurERST*6)>=feldGroesseX){
- // figurAbfrage=true;
- // System.out.println(feldGroesseY+"hallo123");
- //}
- //else {
- System.out.println(feldGroesseY+"+"+feldGroesseX+"anzfig="+anzFigurERST*6+"//"+zelleY+zelleX);
- //zellen[zelleY + (anzFigurERST * 6)][zelleX + (anzFigurERST * 6)] = zelleZustand;
- zellen[zelleY][zelleX]=zelleZustand;
- //}
- }
- if (figurAbfrage==true){
- if (ausgabeArt.equals("1")) {
- System.out.println("test"+feldGroesseX+"start");
- System.out.println("Generation: " + generation);
- for (int i = 0; i < feldGroesseY; i++) {
- for (int j = 0; j < feldGroesseX; j++) {
- if (zellen[i][j] == true) {
- System.out.print(leben);
- } else {
- System.out.print(tot);
- }
- }
- System.out.println();
- }
- 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; i++) { //Geschachtelte for-Schleife um jedes Feld im Array durchzugehen
- for (int j = 0; j < feldGroesseX; j++) {
- if (zellen[i][j] == true) {
- out.append(leben); //lebende Zellen
- } else {
- out.append(tot); //gestorbene Zellen
- }
- }
- out.append("\n"); //Zeilenumbruch nach einer Zeile des Spielfeldes
- }
- out.close();
- generation=1; //nächste Generation
- }
- catch (IOException e){
- }
- }
- }
- }
- }
- 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";
- String myDatabase="Startpattern";
- String url = "jdbc:mysql://"+serverName+"/"+myDatabase;
- String username="root";
- String password="joshua123";
- String dateiname="temp";
- Scanner scanner = new Scanner(System.in);
- System.out.println("Bitte geben Sie die Regeln an: ");
- Zellen objekt = new Zellen(); //Objekterzeugung
- 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();
- }
- else {
- System.out.println("Geben Sie die Anzahl der Herschel an: ");
- anzPreset= scanner.nextInt();
- }
- if (anzPreset*6>defaultGr){
- defGr=false;
- System.out.println("hallo??");
- objekt.spielFeld(anzPreset,defGr);
- System.out.println("wtf");
- }
- else {
- objekt.spielFeld(defaultGr,defGr);
- }
- }
- 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)){
- 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