Cookie Clicker

m.s

Mitglied
Hallo, ich würde gerne CookieClicker programmieren und komme bei dem Timer nicht weiter, wie jeder weiß, der CoockieClicker kennt, werden je nach Upgrade immer automatisch Cookies hinzugefügt und ich hab leider keine Ahnung wie ich das machen soll. Ich hab auch schon vieles ausprobiert.
Kann mir da jemand weiterhelfen?


MfG :)

Java:
package CookieClicker;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;

public class Frame extends JFrame {
	
	Timer time;
	
	JButton click;
	JLabel display;
	JLabel cookie_rate_label;
	int cookies = 0;
	double cookie_rate = 0.0;
	
	JButton oma;
	int omas;
	int kosten_oma = 10;
	int kosten_oma_übrig;
	
	JButton farm;
	int farms;
	int kosten_farm = 30;
	int kosten_farm_übrig;
	
	public Frame(){
		super("Cookie Clicker");
		
		Icon cookie = new ImageIcon(getClass().getResource("cookie.png"));
		Font font = new Font("Arial",Font.BOLD, 20);
		
		
		click = new JButton(cookie);
		click.setBounds(173,150,250,250);
		click.addActionListener(new CookieHandler());
		add(click);
		
		
		cookie_rate_label = new JLabel("CookiesPerSecond: "+cookie_rate+" Cookies", JLabel.CENTER);
		cookie_rate_label.setBounds(100,50,400,50);
		cookie_rate_label.setFont(font);
		add(cookie_rate_label);
		
	
		display = new JLabel("Cookies: "+cookies, JLabel.CENTER);
		display.setBounds(100,0,400,50);
		display.setFont(font);
		add(display);
		
		oma = new JButton("Oma ("+kosten_oma+" Cookies)");
		oma.addActionListener(new CookieHandler());
		oma.setBounds(20,425,200,50);
		add(oma);
		
		farm = new JButton("Farm ("+kosten_farm+" Cookies)");
		farm.addActionListener(new CookieHandler());
		farm.setBounds(20,500,200,50);
		add(farm);
		
		
		
	}
	public class CookieHandler implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource() == click){
			cookies++;
			display.setText("Cookies: "+cookies);
			}
			else if(e.getSource() == oma){
			
			if(cookies >= kosten_oma){
			cookies-=kosten_oma;
			cookie_rate+=0.3;
			kosten_oma*=1.2;
			display.setText("Cookies: "+cookies);
			cookie_rate_label.setText("CookiesPerSecond: "+cookie_rate+" Cookies");
			oma.setText("Oma ("+kosten_oma+" Cookies)");
			
			
			}
			else if(cookies < kosten_oma){
				kosten_oma_übrig = kosten_oma - cookies;
				JOptionPane.showMessageDialog(null, "Du benötigst noch " + kosten_oma_übrig + " Cookies, um eine Oma zu kaufen!");
			}
				
			}
			else if(e.getSource() == farm){
				
				if(cookies >= kosten_farm){
					cookies-=kosten_farm;
					cookie_rate+=0.5;
					kosten_farm*=1.2;
					display.setText("Cookies: "+cookies);
					cookie_rate_label.setText("CookiesPerSecond: "+cookie_rate+" Cookies");
					farm.setText("Farm ("+kosten_farm+" Cookies)");
					
				}
				else if(cookies < kosten_farm){
				kosten_farm_übrig = kosten_farm - cookies;
				JOptionPane.showMessageDialog(null, "Du benötigst noch " + kosten_farm_übrig + " Cookies, um eine Farm zu kaufen!");
				}
			}
		}
		
	}

}
 

Gucky

Top Contributor
Du machst eine Variable, die die Cookies speichert und einen Thread, der pro Sekunde den Wert, der in einer anderen Variable steht dazu addiert. Dieser Wert wird geändert, wenn ein Update gekauft wurde.
 

JavaMeister

Gesperrter Benutzer
Ja und was hast du erwartet?

Gucky hat die korrekte Antwort bereits genannt.

Da du dich damit nicht auskennst, bringt dir das nix. Was sollen wir machen?
 

Gucky

Top Contributor
Du sagtest DAMIT. Da ich zwei Dinge genannt habe und die für einen Neuling relativ kompliziert verknüpft habe wissen wir nicht, was du meinst.

Sag, womit du dich nicht auskennst und wir verschaffen dir Hilfe zur Selbsthilfe. Um einen guten Sprich zu zitieren: "Wir werden dir kein Brot geben. Aber wir werden dir zeigen, wie man Getreide anbaut", sofern du es dir nicht selbst beibringen kannst.
 

m.s

Mitglied
Du sagtest DAMIT. Da ich zwei Dinge genannt habe und die für einen Neuling relativ kompliziert verknüpft habe wissen wir nicht, was du meinst.

Sag, womit du dich nicht auskennst und wir verschaffen dir Hilfe zur Selbsthilfe. Um einen guten Sprich zu zitieren: "Wir werden dir kein Brot geben. Aber wir werden dir zeigen, wie man Getreide anbaut", sofern du es dir nicht selbst beibringen kannst.
Ich würde gerne wissen wie ich in den Code, den ich oben genannt habe, einen Thread einbaue damit, je nach Upgrade die Cookies(ein Long-Wert) erhöht werden, also wenn ich mir eine "Oma" kaufe die 0.25 Cookies pro Sekunde macht sollen auch 0.25 Cookies pro Sekunde dazugezählt werden, wenn ich mir noch eine Oma kaufe dann sollen nochmal 0.25 Cookies dazugezählt werden, sodass am Ende 0.5 pro Sekunde dem User gegeben werden. Und ja das ist eigentlich zurzeit mein Hauptproblem in diesem Projekt :/.
 

Gucky

Top Contributor
Du machst eine Variable float cookPerSek = 0. Diese Variable wird mit jedem Kauf von irgendwas entsprechend hochgesetzt. Z. B. in einer Methode kaufeOma().

Der Thread wird als private Klasse innerhalb der Hauptklasse implementiert. Er hat nichts besseres zu tun, als einmal pro Sekunde den Wert, der in cookPerSek steht auf die FLOAT Variable aktAmOfCook zu addieren. Zusätzlich berechnet er die Zeit, die er schlafen muss, um genau auf diese Sekunde zu kommen. Dazu gibt es hier Infos.
 

m.s

Mitglied
Java:
package CookieClicker;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;


public class Frame extends JFrame implements Runnable {
	


	JButton click;
	JLabel display;
	JLabel cookie_rate_label;
	float cookies = 0;
	double cookie_rate = 0.0;
	float cookPerSek = 0;
	long l = 0;
	
	JButton oma;
	int omas = 0;
	int kosten_oma = 10;
	int kosten_oma_übrig;
	double ertrag_oma = 0;
	
	JButton farm;
	int farms;
	int kosten_farm = 30;
	int kosten_farm_übrig;
	double ertrag_farm = 0;
	
	public Frame(){
		super("Cookie Clicker");
		

		
		Icon cookie = new ImageIcon(getClass().getResource("cookie.png"));
		Font font = new Font("Arial",Font.BOLD, 20);
	
		
		
		click = new JButton(cookie);
		click.setBounds(173,150,250,250);
		click.addActionListener(new CookieHandler());
		add(click);
		
		
		cookie_rate_label = new JLabel(cookie_rate+" per Second", JLabel.CENTER);
		cookie_rate_label.setBounds(100,50,400,50);
		cookie_rate_label.setFont(font);
		add(cookie_rate_label);
		
	
		display = new JLabel("Cookies: "+cookies, JLabel.CENTER);
		display.setBounds(100,0,400,50);
		display.setFont(font);
		add(display);
		
		oma = new JButton("Oma ("+kosten_oma+" Cookies)");
		oma.addActionListener(new CookieHandler());
		oma.setBounds(20,425,200,50);
		oma.setToolTipText("Omas: "+omas+" ; Ertrag: "+ertrag_oma);
		add(oma);
		
		farm = new JButton("Farm ("+kosten_farm+" Cookies)");
		farm.addActionListener(new CookieHandler());
		farm.setToolTipText("Farmen: "+farms+" ; Ertrag: "+ertrag_farm);
		farm.setBounds(20,500,200,50);
		add(farm);
		

		
	}

	
	public class CookieHandler implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource() == click){
			cookies++;
			display.setText("Cookies: "+cookies);

			}
			else if(e.getSource() == oma){
			
			if(cookies >= kosten_oma){
			cookies-=kosten_oma;
			cookie_rate+=0.25;
			ertrag_oma+=0.25;
			kosten_oma*=1.2;
			omas++;
			display.setText("Cookies: "+cookies);
			oma.setToolTipText("Omas: "+omas+" ; Ertrag: "+ertrag_oma);
			cookie_rate_label.setText(cookie_rate+" per Second");
			oma.setText("Oma ("+kosten_oma+" Cookies)");
			
			
			
			}
			else if(cookies < kosten_oma){
				kosten_oma_übrig = (int) (kosten_oma - cookies);
				JOptionPane.showMessageDialog(null, "Du benötigst noch " + kosten_oma_übrig + " Cookies, um eine Oma zu kaufen!");
			}
				
			}
			else if(e.getSource() == farm){
				
				if(cookies >= kosten_farm){
					cookies-=kosten_farm;
					cookie_rate+=0.5;
					cookPerSek+=0.25;
					ertrag_farm+=0.5;
					kosten_farm*=1.2;
					farms++;
					display.setText("Cookies: "+cookies);
					cookie_rate_label.setText(cookie_rate+" per Second");
					farm.setToolTipText("Farmen: "+farms+" ; Ertrag: "+ertrag_farm);
					farm.setText("Farm ("+kosten_farm+" Cookies)");
					
				}
				else if(cookies < kosten_farm){
				kosten_farm_übrig = (int) (kosten_farm - cookies);
				JOptionPane.showMessageDialog(null, "Du benötigst noch " + kosten_farm_übrig + " Cookies, um eine Farm zu kaufen!");
				}
			}
		}
		
	}


	@Override
	public void run() {
		
		
	}


}
So das ist mein Code und unten ist meine run()-Methode. Aber ich weiß leider nicht wie ich den Code schreibe.. Sorry :/
Die Seite hat mir leider nur wenig weitergeholfen, und auf Google/Youtube hab ich auch nichts gefunden

Tut mir leid, kannst du mir vllt bitte helfen
 

Gucky

Top Contributor
Ich werde dir kein Brot geben. ;)

Du machst erst eine private Klasse INNERHALB der Klasse Frame (, die du ganz dringend umbenennen solltest. Eigene Klassen so benennen, wie Klassen aus der API ist nicht gut. Nenn die mal lieber Hauptframe o.ä.).

Diese Klasse nennst du irgendwie extends Thread implements Runnable.

In dieser Klasse tust du das, was ein Thread zum Laufen braucht und was er machen soll. Dazu --> Google --> Threads Java.
 

m.s

Mitglied
Find ich gut dass du mir kein Brot geben willst ;)
Also hier bin ich stehn geblieben:

Java:
private class ProSekunde extends Thread implements Runnable{

	@Override
	public void run() {
		for(long i = 0; i < x; i++){
			//...

		}
		
		
	}
	
}

Was soll ich für x einsetzten und wo soll ich die Methode run() aufrufen?
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Warum eine for-Schleife?

Ich mache das immer mit
Java:
while (!isInterrupted()){
   tuWas();
   tuWasAnderes();
   try{
      sleep(ZAHL);
   } catch(InterruptedException e){
      //tuNix();
   }
}

Starten eines Threads gibt es bei Google. Ein Tipp: Es ist so einfach, dass man nicht drauf kommt. ;)
 

JavaMeister

Gesperrter Benutzer
Dir fehlen elementare Grundlagen der Java-Sprache.

Vielleicht solltest Du diese erst aneignen?

Nimm dir ein Buch und lies.

Schau dir die Grundlagen von threads an.

Grundlagen von Spielen.

Grundlagen Interprozess Kommunikation.
 

Gucky

Top Contributor
Programmieren lernt man nur durch Programmieren. Du kannst zehn Bücher durchlesen und dann sitzt du davor und kriegst nicht eine Zeile hin. Deshalb sollte man Programme schreiben. Am Besten kleine Programme, in die man schrittweise immer mehr einbauen kann.

Zum Beispiel ein Programm, das die Wurzel einer Zahl berechnet. Da kannst du schon mal mehrere Klassen einbauen. Dann Multithreading, EventHandling, Rekursion, Exceptions usw.

CookieClicker ist vielleicht erst mal zu groß für dich. Oder du versuchst es weiter. Deine Entscheidung.


Guck dir einmal meinen letzten Post an.
 
Zuletzt bearbeitet:

huhn3k

Neues Mitglied
Ich weiß es ist schon ein bisschen her seit du dein Problem hattest, aber falls du immer noch Interesse daran haben solltest Cookie Clicker zu programmieren, dann schau dir doch einfach mal diese Playlist an.

Schöne Grüße
 

Neue Themen


Oben