(在我为大型无组织代码开始抱歉之前,我还是比较新的)
我目前正在使用BlueJ进行我的项目,我需要一个计时器来实际计算游戏的每个级别。我使用Try和Catch命令实际上有计时器,我试图使用两个不同的类,我想知道是否有更好的方法来做到这一点,或者我将如何引用它两个在彼此里面。谢谢!
import java.util.Random;
import java.util.Scanner;
public class grid5x5{
String a= "x";
String b= "x";
String c= "x";
String d= "x";
String e= "x";
String f= "x";
String g= "x";
String h= "x";
String i= "x";
String j= "x";
String k= "x";
String l= "x";
String m= "x";
String n= "x";
String o= "x";
String p= "x";
String q= "x";
String r= "x";
String s= "x";
String t= "x";
String u= "x";
String v= "x";
String w= "x";
String x= "x";
String y= "x";
private int a1;
private int a2;
private int a3;
public int a4=2;
public void Grid(){
while(a4==2){
System.out.println('\f');
Random rand = new Random();
int z = rand.nextInt(25) + 1;
if (z==1){
a= "O";
a1=11;
}
if (z==2){
b= "O";
a1=21;
}
if (z==3){
c= "O";
a1=31;
}
if (z==4){
d= "O";
a1=41;
}
if (z==5){
e= "O";
a1=51;
}
if (z==6){
f= "O";
a1=12;
}
if (z==7){
g= "O";
a1=22;
}
if (z==8){
h= "O";
a1=32;
}
if (z==9){
i= "O";
a1=42;
}
if (z==10){
j= "O";
a1=52;
}
if (z==11){
k= "O";
a1=13;
}
if (z==12){
l= "O";
a1=23;
}
if (z==13){
m= "O";
a1=33;
}
if (z==14){
n= "O";
a1=43;
}
if (z==15){
o= "O";
a1=53;
}
if (z==16){
p= "O";
a1=14;
}
if (z==17){
q= "O";
a1=24;
}
if (z==18){
r= "O";
a1=34;
}
if (z==19){
s= "O";
a1=44;
}
if (z==20){
t= "O";
a1=54;
}
if (z==21){
u= "O";
a1=15;
}
if (z==22){
v= "O";
a1=25;
}
if (z==23){
w= "O";
a1=35;
}
if (z==24){
x= "O";
a1=45;
}
if (z==25){
y= "O";
a1=55;
}
else{
}
System.out.println(" 1 2 3 4 5");
System.out.println("1 "+a+" "+b+" "+c+" "+d+" "+e);
System.out.println("2 "+f+" "+g+" "+h+" "+i+" "+j);
System.out.println("3 "+k+" "+l+" "+m+" "+n+" "+o);
System.out.println("4 "+p+" "+q+" "+r+" "+s+" "+t);
System.out.println("5 "+u+" "+v+" "+w+" "+x+" "+y);
System.out.println("Points: "+a2);
System.out.println("Time: "+a3);
int inVar;
Scanner input = new Scanner(System.in);
System.out.println("Enter the Coordinates: ");
inVar = input.nextInt();
if(inVar==a1){
System.out.println('\f');
System.out.println("CORRECT!");
a2=a2+1;
}
else{
a4=a4+1;
}
a= "x";
b= "x";
c= "x";
d= "x";
e= "x";
f= "x";
g= "x";
h= "x";
i= "x";
j= "x";
k= "x";
l= "x";
m= "x";
n= "x";
o= "x";
p= "x";
q= "x";
r= "x";
s= "x";
t= "x";
u= "x";
v= "x";
w= "x";
x= "x";
y= "x";
System.out.println('\f');
}
System.out.println('\f');
System.out.println("INCORRECT, Game Over");
System.out.println("Total Points: "+a2);
System.out.println("Thanks for playing!");
}
}
这是我的另一个类
的另一个代码块public class Timer
{
public int a5=5000;
public void timer(){
while(a4==2) {
try {Thread.sleep(1000);}
catch (InterruptedException ie){}
a5=a5-100;
if(a5<300){
a5=300;
}
else
{
}
}
}
}
答案 0 :(得分:0)
您需要做的第一件事是修复这些可变名称。由于这个问题,我无法轻易理解这段代码应该做什么。我看了你this guide on varible names。
此外,通常在Java类名称中以大写字母开头,方法名称以小写字母开头,但这不是一个大问题。
至于使用计时器,您将在声明其他变量的同一位置创建对象的新实例:
Time timer = new Timer();
要调用timer内部的方法,您将使用包含Timer类实例的timer varible来调用该方法:
timer.timer();
我在这段代码中看到的另一个问题是你试图在timer类中使用主类中的varible。我谨慎地将你的构造函数添加到接受主类实例的计时器类中,这样你就可以访问计时器类中的变量了(这打破了封装,但现在不是一个严重的问题)。
最后,此代码存在严重的逻辑问题。现在,调用timer方法将挂起程序,因为您在主线程上调用Thread.sleep。您需要在不同于计时器的线程上运行程序。我希望您允许Timer类实现Runnable,命名时间方法运行,并启动计时器:
new Thread(new Timer(this)).run();