在CS课上,我们使用名为greenfoot的程序制作了一个简单的游戏。如果你熟悉的话,这个游戏很像游戏“Frogger”。我现在正在练习,想要制作类似的游戏。我的新游戏将与PacMan有点接近。在我控制需要到达屏幕顶部的火箭飞船之前我制作的游戏。与此同时,我已经随机选择了尺寸和速度的矩形弹跳墙。但是,我想让我的新游戏更有趣。我想为这些对象创建一个循环,当它首次符合时会创建一个随机方向,并弹出墙壁并继续向那个方向移动,就像那个反弹的着名屏幕保护程序一样。这是第一款游戏的代码,是这样的吗? 所以最终我的问题是,如何为随机方向编写循环。
public boolean canMoveRight()
{
if ( getX() + 1 < getWorld().getWidth() )
return true;
else
return false;
}
public boolean canMoveLeft()
{
if ( getX() - 1 > 0 )
return true;
else
return false;
}
public void moveRight()
{
setLocation( getX() + speed, getY() );
}
public void moveLeft()
{
setLocation ( getX() - speed, getY() );
}
public void act()
{
if (right==true)
{
if (canMoveRight() )
{
moveRight();
}
else
{
right = false;
}
}
else
{
if( canMoveLeft() )
moveLeft();
else
right = true;
}
}
答案 0 :(得分:0)
定义方向枚举 例如 Up,RightUp,Right ... LeftUp。
使用随机选择一个。 方向转换为dX,dX位置的变化,因此运动步长为1像素UpLeft为-1,-1(原点左上角!) 然后在你的循环中简单地将dx添加到X并将dy添加到Y.
答案 1 :(得分:0)
我想这些方面的东西会起作用:
Random random = new Random();
int direction = random.nextInt(1); // gives 0 or 1 randomly
if (direction == 0) {
// move left
} else {
// move right
}
答案 2 :(得分:0)
你在找这样的东西吗?
int horz = ((Math.random() * 10) % 10) + 1; //I just choose 10 at random
int vert = ((Math.random() *10) % 10) + 1;
//You can use another random number to choose to negate either horz or vert if you want
//You can also use random numbers to define the start location.
public boolean canMoveHorz()
{
if ( (getX() + horz < getWorld().getWidth() && horz > 0) || (getX() + horz > 0 && horz < 0))
return true;
else
return false;
}
public boolean canMoveVert()
{
if ( (getY() + vert > 0 && vert < 0) || (getY() + vert < getWorld().getHeight() && vert > 0))
return true;
else
return false;
}
public void act() {
if(!canMoveHorz()) {
horz *= -1;
}
if(!canMoveVert()) {
vert *= -1;
}
setLocation(getX() + horz, getY() + vert);
}
这需要一些调整,但它的作用是选择2个随机数来决定对象的速度(垂直和水平)。然后它将物体移动到那些方向,直到它到达世界的边缘,此时它会使速度无效,因此物体将向相反的方向移动。这与墙壁上的真实反弹不同,因为我没有对击球的角度做任何事情以确定反弹的角度,但这应该能让你开始。如果你想要更逼真的弹跳,你将不得不做一些几何计算。