-2
我認爲我的問題是在我的延遲方法。我的遊戲首先應該有一個綠色的按鈕,隨機會變成紅色。如果用戶按下這個紅色按鈕,他們會失去。我的代碼沒有檢測到紅色按鈕被點擊時,我認爲是因爲我的延遲方法。但最終它會在多次顯示紅色按鈕後檢測到它。請幫忙!!運行我的代碼,看看有什麼不對,請告訴我如何解決它! (對於按鈕的圖像是在它們應該是什麼樣的標題非常自我解釋)有人可以幫我用我的按鈕遊戲代碼?
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.applet.Applet;
import java.awt.image.*;
import java.util.*;
import java.net.*;
public class pages extends Applet
{
int numClicks;
boolean isGreen;
boolean isClicked;
boolean ClickedDuringDelay;
int count;
int rand;
int buttonCode;
public void init()
{
numClicks = 0;
buttonCode = 0;
count = 0;
ClickedDuringDelay = false;
}
public void paint(Graphics g)
{
//screens
switch(numClicks)
{
case 0: StartPage(g); break;
case 1: InstrucPage(g); break;
case 2: GamePage(g); break;
}
//pushing buttons
if(numClicks >1)
{
if(rand >= 80)
isGreen = false;
else
isGreen = true;
Image button;
if (isClicked && isGreen)
{button = getImage(getDocumentBase(), "greenpressed.png"); //green pressed
g.drawImage(button,200,150,this);}
else if(!isGreen)
{button = getImage(getDocumentBase(), "red.png"); //red unpressed
g.drawImage(button,200,150,this);
ClickedDuringDelay = delay();
if(ClickedDuringDelay)
LosePage(g);
else{
button = getImage(getDocumentBase(), "green.png");
g.drawImage(button,200,150,this);
rand = (int)(Math.random() * 100);
repaint(); }
}
}
}
public boolean mouseDown(Event e, int x, int y)
{
if(!ClickedDuringDelay){
if(numClicks <2)
{numClicks++; count--;}
isClicked = true;
repaint();
count++;}
return true;
}
public boolean mouseUp(Event e, int x, int y)
{
rand = (int)(Math.random() * 100);
//System.out.println(rand);
if(!ClickedDuringDelay){
isClicked = false;
repaint();}
return true;
}
public void StartPage(Graphics g)
{ //background
g.setColor(Color.black);
g.fillRect(0,0,800,600);
//Title
g.setColor(Color.white);
g.setFont(new Font("Desdemona",Font.BOLD,100));
g.drawString("DO NOT PRESS THE",20,100);
g.setColor(Color.red);
g.setFont(new Font("Braggadocio",Font.BOLD,100));
g.drawString("RED",250,250);
g.drawString("BUTTON",120,350);
g.setColor(Color.white);
//g.drawRect(200,400,400,100);
g.setFont(new Font("American Typewriter",Font.PLAIN,50));
g.drawString("Click anywhere to continue..",60,490);
}
public void InstrucPage(Graphics g)
{
//background
g.setColor(Color.black);
g.fillRect(0,0,800,600);
//title
g.setColor(Color.white);
g.setFont(new Font("Desdemona",Font.BOLD,100));
g.drawString("Instructions",100,100);
g.setColor(Color.red);
g.setFont(new Font("American Typewriter",Font.PLAIN,40));
g.drawString("A green button will first appear.",70,200);
g.drawString("You MAY click this button.",130,250);
g.drawString("A red button will randomly appear.",70,300);
g.drawString("Do NOT press this button.",130,350);
g.setColor(Color.white);
g.setFont(new Font("American Typewriter",Font.PLAIN,50));
g.drawString("Click anywhere to start!", 95, 520);
}
public void GamePage(Graphics g)
{
//background
g.setColor(Color.black);
g.fillRect(0,0,800,600);
//score
g.setColor(Color.white);
g.setFont(new Font("Arial",Font.BOLD,100));
g.drawString("SCORE: " + count,150,100);
//button
Image buttons = getImage(getDocumentBase(), "green.png");
g.drawImage(buttons,200,150,this);
}
public void LosePage(Graphics g)
{
//background
g.setColor(Color.black);
g.fillRect(0,0,800,600);
g.setColor(Color.red);
g.setFont(new Font("Desdemona",Font.BOLD,250));
g.drawString("YOU",200,220);
g.drawString("LOST",150,470);
g.setColor(Color.white);
g.setFont(new Font("American Typewriter",Font.PLAIN,50));
g.drawString("Your final score was " + count, 140, 540);
}
public boolean delay()
{
boolean delayClick = false;
for (int i = 0; i<200;i++)
{
try
{
Thread.sleep(5);
if (isClicked)
{delayClick = true;
System.out.println("pressed");}
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
return delayClick;
}
}
那麼我會在我的延遲方法中使用擺動計時器嗎?對於代碼可讀性抱歉,這是我在AP CS編程的第一年,但我正在盡我所能! –
@JillyPenfield不用擔心,我們都是以不可讀的代碼開始的。我剛剛提到它,因爲它可以幫助您進行調試。至於你會在哪裏使用你的Swing Timer,這真的取決於。你想要什麼時候開始計時器?你想什麼時候結束?當它結束時你想要發生什麼? –
我希望我的swing定時器在我的按鈕變爲紅色後啓動(這是在paint方法中的else-if語句中)。我想讓按鈕保持紅色大約5秒鐘。當計時器結束時,我需要按鈕變回綠色。但是,如果在搖擺計時器(當按鈕紅色5秒鐘),如果用戶點擊,我需要圖片repressed.png來顯示,然後丟失屏幕 –