我正在使用默认的JFrame gui进行粗略的空闲游戏(想想CookieClicker)。货币单位是“点击”,一旦获得足够的“点击”,玩家应该能够点击与他们可以购买的自动转换相对应的JButton。但是,只有最后一个'autoclicker'添加到自动链接器的ArrayList才能在正确的时间可用,如果单击它,则所有其他JButton都会使用其属性。如果可能的话,你能帮我解决问题吗?免责声明:可能是一堆故障排除。
这是我的主要课程: (我有额外的JButtons和AutoClickers注释掉,所以它按预期工作)
public class AutoClicker {
private static String name;
private static double cps;
private static double cost;
private static int numberOwned;
public AutoClicker(String nameIn, double cpsIn, int costIn){
name = nameIn;
cps = cpsIn;
cost = costIn;
numberOwned = 0;
}
public String getName(){
return name;
}
public double getCPS(){
return cps;
}
public double getCost(){
return cost;
}
public int getNumberOwned(){
return numberOwned;
}
public void buy(){
numberOwned++;
cost*=1.174;
}
}
这是我的AutoClicker类:
#include<stdlib.h>
#include<stdio.h>
//begin function
int main ()
{
//declare variables
int choice;
int number = 0;
int cubed;
int squared;
//menu and begin do while loop
do {
printf("***********************\n");
printf("--Main Menu---\n");
printf("***********************\n");
printf("1.Enter a number\n");
printf("2.Cube the number\n");
printf("3.Square the number\n");
printf("4.Display Even or Odd\n");
printf("5.Quit\n");
printf("Enter your choice: ");
scanf("%i", &choice);
printf("Your current number is: %i \n", number);
//begin switch and functions
switch(choice){
case 1:
printf("Enter a number\n");
scanf("%i", &number);
break;
case 2:
if (number == 0)
printf("You have not entered a number\n");
else
cubed= number * number * number;
printf("Your number cubed is: %i \n", cubed);
break;
case 3:
if (number == 0)
printf("You have not entered a number\n");
else
squared= number * number;
printf("Your number squared is: %i \n", squared);
break;
case 4:
if (number == 0)
printf("You have not entered a number\n");
else if
(number % 2 ==0)
printf("Your number squared is even!\n");
else
printf("Your number is odd!\n");
break;
case 5:
printf("Goodbye!!!!\n");
system("pause");
break;
default:
printf("Was not 1 through 5\n");
break;
}// end switch and functions
} while (choice!=5);
} //end function
非常感谢! ^ _ ^
答案 0 :(得分:5)
事实上,唯一应该是静态的东西应该是主要方法,就是这样。然后你可以改变这个:
public static void main(String[] args){
init();
run();
}
到此:
public static void main(String[] args){
Main main = new Main();
main.init();
main.run();
}
另外
render()
方法的一个本地,最后一个是阴影类字段 - 你确定要这样做吗? run()
方法中调用代码。如果您的代码已正确启动,则会在Swing事件线程中调用它,并完全冻结您的程序。如果你更正了这个并将Runnable放在一个Thread中并在其上调用了start()
,那么现在你要在后台线程中改变Swing组件 - 所有危险的事情都要做。请阅读:课程:Swing中的并发以了解如何解决此问题。