Hi, I really need some help with a school assignment I am doing. Any suggestions will be greatly appreciated! Basically I have a game where an Actor named Soldier X traverses maze-like levels and shoots zombies while navigating the maze. Everything seems to work okay until I code the shooting mechanics. Basically, while we have done "shooting" before, it was only with actors that moved on one axis at a time. Soldier X, however, has four different directions for shooting, and this has for some reason caused no end of complications and I am stumped. From my perspective, this code should work, however I haven't been programming for too long so I could most definitely be wrong. Here is the code for my Soldier X:
Here is the code for the Bullet:
The issue is that no matter what I've tried, the bullet only ever seems to go in one direction (The initial check). All other checks in the code don't seem to be working. I even tried coding the movement and rotation in the soldier class, but then I get static-referencing issues.
Thanks again for any help, I could really use it!
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class SoldierX here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class SoldierX extends Actor
{
private GreenfootImage So1;
private GreenfootImage So2;
private GreenfootImage So3;
private GreenfootImage So4;
public SoldierX() {
So1 = new GreenfootImage("Soldier X.png");
So2 = new GreenfootImage("Soldier X down.png");
So3 = new GreenfootImage("Soldier X right.png");
So4 = new GreenfootImage("Soldier X left.png");
if(Greenfoot.isKeyDown("Right") ||Greenfoot.isKeyDown("d")){
setImage(So3);
}
if(Greenfoot.isKeyDown("Left") ||Greenfoot.isKeyDown("a")){
setImage(So4);
}
if (Greenfoot.isKeyDown("Down") ||Greenfoot.isKeyDown("s")) {
setImage(So2);
}
if (Greenfoot.isKeyDown("Up") ||Greenfoot.isKeyDown("w")) {
setImage(So1);
}
setImage(So1);
}
public GreenfootImage getSo1() {
return So1;
}
public GreenfootImage getSo2() {
return So2;
}
public GreenfootImage getSo3() {
return So3;
}
public GreenfootImage getSo4() {
return So4;
}
public void move() {
if(Greenfoot.isKeyDown("left") ||Greenfoot.isKeyDown("a")) {
if (getImage() == So1) {
setImage(So4);
}
if (getImage() == So2) {
setImage(So4);
}
if (getImage() == So3) {
setImage(So4);
}
else {
setImage(So4);
}
setLocation(getX()-5,getY());
}
if(Greenfoot.isKeyDown("right") ||Greenfoot.isKeyDown("d")) {
if (getImage() == So1) {
setImage(So3);
}
if (getImage() == So2) {
setImage(So3);
}
if (getImage() == So3) {
setImage(So3);
}
else {
setImage(So3);
}
setLocation(getX()+5,getY());
}
if(Greenfoot.isKeyDown("up") ||Greenfoot.isKeyDown("w")) {
if (getImage() == So2) {
setImage(So1);
}
if (getImage() == So3) {
setImage(So1);
}
if (getImage() == So4) {
setImage(So1);
}
else {
setImage(So1);
}
setLocation(getX(),getY()-5);
}
if(Greenfoot.isKeyDown("down") ||Greenfoot.isKeyDown("s")) {
if (getImage() == So1) {
setImage(So2);
}
if (getImage() == So3) {
setImage(So2);
}
if (getImage() == So4) {
setImage(So2);
}
else {
setImage(So2);
}
setLocation(getX(), getY()+5);
}
}
public void edge() {
if(isAtEdge()) {
Greenfoot.setWorld(new LevelTwo());
}
}
public void wall(){
if (isTouching(Wall.class) || isTouching (WallHori.class)) {
setLocation(92,509);
}
}
public void shoot() {
if (Greenfoot.isKeyDown("space")) {
getWorld().addObject(new bullet(), getX()+2, getY() - 2);
}
}
public void act()
{
edge();
move();
wall();
shoot();
}
}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class bullet here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class bullet extends Actor
{
/**
* Act - do whatever the bullet wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
fly();
}
public void fly() {
SoldierX s = new SoldierX();
if (s.getImage().equals(s.getSo2())) {
setRotation(180);
setLocation(getX(), getY() + 5);
}
else if (s.getImage().equals(s.getSo3())) {
setRotation(90);
setLocation(getX() + 5, getY());
}
else if (s.getImage().equals(s.getSo4())) {
setRotation(-90);
setLocation(getX() - 5, getY());
}
else
setLocation(getX(), getY() - 5);
}
}

