Java竞赛小程序不工作
我很难模拟两个竞争者之间的比赛。这是你典型的比赛程序,你使用一个随机数生成器来确定竞争者使用的“动作”。正如我下面的代码所示,赛道由50个矩形组成,填充的矩形显示了每个参赛者在赛道上的位置。例如,有些“动作”会让选手向右跳9格,或向后跳2格。运行小程序时,仅显示初始启动位置;小程序不工作。我意识到这需要很多代码,但是我需要做什么来解决我的问题呢?我真的被困在这一点上了。感谢您的帮助。我只能用AWT,不能用秋千。这是课堂作业:/代码如下:Java竞赛小程序不工作,java,applet,Java,Applet,我很难模拟两个竞争者之间的比赛。这是你典型的比赛程序,你使用一个随机数生成器来确定竞争者使用的“动作”。正如我下面的代码所示,赛道由50个矩形组成,填充的矩形显示了每个参赛者在赛道上的位置。例如,有些“动作”会让选手向右跳9格,或向后跳2格。运行小程序时,仅显示初始启动位置;小程序不工作。我意识到这需要很多代码,但是我需要做什么来解决我的问题呢?我真的被困在这一点上了。感谢您的帮助。我只能用AWT,不能用秋千。这是课堂作业:/代码如下: import java.awt.*; import jav
import java.awt.*;
import java.applet.*;
public class Example extends Applet
{
Image tortoise, hare;
int tortX = 250, hareX = 250;
final int tortY = 100, hareY = 300, WIDTH = 15, HEIGHT = 50;
int turn; String turnNum;
int move; String tMove, hMove;
public void init()
{
tortoise = getImage( getDocumentBase(), "images/tortoise.gif" );
hare = getImage( getDocumentBase(), "images/hare.gif" );
move = 0; turn = 0;
}
public void control()
{
while (( tortX < 985 ) || ( hareX < 985 ))
{
move = (int)(10 * Math.random());
switch (move)
{
case 1:
case 2:
tortX += (3 * WIDTH);
hareX += (9 * WIDTH);
tMove = "Fast Plod"; hMove = "Big Hop";
break;
case 3:
case 4:
case 5:
tortX += (3 * WIDTH);
hareX += WIDTH;
tMove = "Fast Plod"; hMove = "Small Hop";
break;
case 6:
tortX += WIDTH;
if (hareX == 250) {} // DO NOTHING
else if (hareX <= (250 + (11 * WIDTH)))
hareX = 250;
else
hareX -= (12 * WIDTH);
tMove = "Slow Plod"; hMove = "Big Slip";
break;
case 7:
case 8:
tortX += (1 * WIDTH);
if (hareX == 250) {} // DO NOTHING
else if (hareX <= (250 + (WIDTH)))
hareX = 250;
else
hareX -= (2 * WIDTH);
tMove = "Slow Plod"; hMove = "Small Slip";
break;
case 9:
case 10:
if (tortX == 250) {} // DO NOTHING
else if (tortX <= (250 + (5 * WIDTH)))
tortX = 250;
else
tortX -= (6 * WIDTH);
tMove = "Slip"; hMove = "Fall Asleep. Zzz...";
break;
// Hare falls asleep. No action.
}
turn++; turnNum = (turn + "");
repaint();
for (int i = 1; i <= 10; i++)
{
delay();
}
}
tortX = 985; hareX = 985;
repaint();
}
public void paint( Graphics screen )
{
drawRace(screen);
if (tortX >= 985)
{
screen.setFont(new Font("Times New Roman", Font.ITALIC, 48));
screen.drawString("Tortoise Wins", 650, 240);
clearCurrent(screen);
fillNext(screen);
}
else if (hareX >= 985)
{
screen.setFont(new Font("Times New Roman", Font.ITALIC, 48));
screen.drawString("Tortoise Wins", 650, 240);
clearCurrent(screen);
fillNext(screen);
}
else
{
screen.drawString(("Turn " + turnNum), 621, 55);
screen.setFont(new Font("Times New Roman", Font.ITALIC, 12));
screen.drawString(tMove, 59, 65); screen.drawString(hMove, 66, 255);
clearCurrent(screen);
fillNext(screen);
}
stop();
}
public void clearCurrent( Graphics s )
{
s.clearRect(tortX+1, tortY+1, WIDTH-1, HEIGHT-1);
s.clearRect(hareX+1, hareY+1, WIDTH-1, HEIGHT-1);
}
public void fillNext( Graphics s )
{
s.fillRect(tortX+1, tortY+1, WIDTH-1, HEIGHT-1);
s.fillRect(hareX+1, hareY+1, WIDTH-1, HEIGHT-1);
}
public void drawRace( Graphics s )
{
// GENERATES INITIAL GRAPHICS FOR RACE
s.drawRect(250, 100, 750, 50);
s.drawRect(250, 300, 750, 50);
int lineX = 265, lineYi = 100, lineYf = 150;
for (int i = 1; i <= 98; i++)
{
if (lineX == 1000)
{
lineX = 265; lineYi = 300; lineYf = 350;
}
s.drawLine(lineX, lineYi, lineX, lineYf);
lineX += 15;
}
s.fillRect(tortX+1, tortY+1, WIDTH-1, HEIGHT-1);
s.fillRect(hareX+1, hareY+1, WIDTH-1, HEIGHT-1);
s.drawImage(tortoise, 59, 80, this);
s.drawImage(hare, 66, 271, this);
s.setFont(new Font("Times New Roman", Font.BOLD, 24));
s.drawString("Race", 250, 55);
}
public void delay()
{
for (int i = 0; i < 90000000; i++)
{
}
}
public void stop()
{
}
}
import java.awt.*;
导入java.applet.*;
公共类示例扩展了Applet
{
形象乌龟、野兔;
int tortX=250,hareX=250;
最终的整数比=100,哈雷=300,宽度=15,高度=50;
int-turn;字符串turnNum;
int move;字符串tMove,hMove;
公共void init()
{
tortoise=getImage(getDocumentBase(),“images/tortoise.gif”);
hare=getImage(getDocumentBase(),“images/hare.gif”);
移动=0;转动=0;
}
公共无效控制()
{
而((tortex<985)| |(hareX<985))
{
move=(int)(10*Math.random());
开关(移动)
{
案例1:
案例2:
tortX+=(3*宽度);
hareX+=(9*宽度);
tMove=“快速扑通”hMove=“大跳”;
打破
案例3:
案例4:
案例5:
tortX+=(3*宽度);
hareX+=宽度;
tMove=“快速扑通”hMove=“小跳跃”;
打破
案例6:
tortX+=宽度;
如果(hareX==250){}//什么也不做
否则,如果(hareX您的第一个问题是您实际上从未“开始”比赛…请确保您的init
小程序,但是,没有任何问题
您的第二个问题是控制
方法阻止了事件调度线程,这意味着,当您使用此方法时,任何内容都不会被绘制到屏幕上。这是因为事件调度线程还负责调度重绘请求
第三个问题是您违反了paint
联系人。您有责任调用super。paint(screen)
-paint是一种复杂的方法,除非您有充分的理由这样做,否则决不能忽略它
第四个问题是,您使用的是Applet
而不是JApplet
。最好忽略AWT控件而使用Swing控件。Swing更灵活,更易于扩展
您的第五个问题是在顶级容器上进行绘制,这是不推荐的。您最好使用JPanel
之类的方法并重写它的paintComponent
方法(不要忘记调用super.paintComponent
).除此之外,它还具有双缓冲功能,可在屏幕更新时减少抖动
看看
- 为了解决EDT阻塞问题
- 关于秋千绘画的想法
您的第一个问题是您实际上从未“开始”比赛…请确保您的初始化
小程序,但之后,什么都没有
您的第二个问题是控制
方法阻止了事件调度线程,这意味着,当您使用此方法时,任何内容都不会被绘制到屏幕上。这是因为事件调度线程还负责调度重绘请求
第三个问题是您违反了paint
联系人。您有责任调用super。paint(screen)
-paint是一种复杂的方法,除非您有充分的理由这样做,否则决不能忽略它
第四个问题是,您使用的是Applet
而不是JApplet
。最好忽略AWT控件而使用Swing控件。Swing更灵活,更易于扩展
您的第五个问题是在顶级容器上进行绘制,这是不推荐的。您最好使用JPanel
之类的方法并重写它的paintComponent
方法(不要忘记调用super.paintComponent
).除此之外,它还具有双缓冲功能,可在屏幕更新时减少抖动
看看
- 为了解决EDT阻塞问题
- 关于秋千绘画的想法
我的任务说我们必须使用AWT,因为我们还没有学会日本式挥杆:/嗯,其他的一切都是正确的:PMy任务说我们必须使用AWT,因为我们还没有学会日本式挥杆:/嗯,其他的一切都是正确的:P