Hi,
I created Curve Fever. It is a game with two players and and everyone created a line behind him self. If a player hits a line (doesnt matter which line) or the wall (end of the map) the other player wins and get a point. Who gets 5 points first wins.
So far everything works except of one thing.
Sometimes if one player hits the wall or a line the other player gets more than 1 point. Thats really weird and I could not figure it out why this happens.
After a while I added an object which appears if player1 hits the line of himself or the line of player2.
I wanted it to also appear if player 1 die because hitting the wall. But the weird thing is, that whitout even writing the command for appearing by hitting the wall, the object appears!
I give you the complete code for my game and hope anyone can figure out what I did wrong.
In the class text i have 9 subclasses but didnt wrote anything in them. only selected pictures to appear.
The problem I have is in player1 if hitting the line and the object which appears is text 9 and 7.
sorry for my bad english.
If you have any questions just ask
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse MyWorld.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class MyWorld extends World
{
private boolean gameStarted = false;
public boolean deleteAtEdge = false;
public static int LocXPlayer1;
public static int LocYPlayer1;
public static int LocXPlayer2;
public static int LocYPlayer2;
//achtung static
static GreenfootSound backgroundMusic = new GreenfootSound("CurveFeverSound.mp3");
public static int ScoreCounterPlayer1 = 0;
public static int ScoreCounterPlayer2 = 0;
/**
* Konstruktor für Objekte der Klasse MyWorld
*
*/
public MyWorld()
{
// Erstellt eine neue Welt mit 700x700 Zellen und einer Zell-Größe von 1x1 Pixeln.
super(700, 700, 1);
GreenfootImage bg = new GreenfootImage("background.jpg");
bg.scale(getWidth(), getHeight());
setBackground(bg);
generateLocations();
generateObjects();
Greenfoot.setSpeed(47);
addObject(new logo(), 350, 200);
addObject(new text1(), 350, 400);
addObject(new text2(), 350, 450);
addObject(new text3(), 350, 500);
addObject(new text4(), 350, 550);
addObject(new text5(), 350, 600);
addObject(new text6(), 350, 650);
}
public void playSound()
{
//Hinergrundmusik wrd mit der Lautstärke () und in duerschleife abgespielt.
backgroundMusic.playLoop();
backgroundMusic.setVolume(40);
}
public void act()
{
playSound();
while (!gameStarted)
{
if (Greenfoot.isKeyDown("space"))
{
gameStarted = true;
removeObjects(getObjects(logo.class));
removeObjects(getObjects(text1.class));
removeObjects(getObjects(text2.class));
removeObjects(getObjects(text3.class));
removeObjects(getObjects(text4.class));
removeObjects(getObjects(text5.class));
removeObjects(getObjects(text6.class));
}
}
ifPlayer2Wins();
ifPlayer1Wins();
if (Greenfoot.isKeyDown("r"))
{
Greenfoot.setWorld(new MyWorld());
}
}
public void generateObjects()
{
//erstellt die Spieler und den Countdown
addObject(new Player1(), LocXPlayer1, LocYPlayer1);
addObject(new Player2(), LocXPlayer2, LocYPlayer2);
addObject(new Countdown(), 350, 350);
showText("Blue: "+ScoreCounterPlayer1, 40, 15);
showText("Green: "+ScoreCounterPlayer2, 47, 35);
}
public void generateLocations()
{
//generiert zufällige Koordinaten für die Spieler im Berreich von 50 und 650 mit Voraussetzung, dass ein bestimmter Abstand zwischen den Spielern besteht.
LocXPlayer1 = getRandomNumber(50, 650);
LocYPlayer1 = getRandomNumber(50, 650);
LocXPlayer2 = getRandomNumber(50, 650);
LocYPlayer2 = getRandomNumber(50, 650);
if(Math.abs(LocXPlayer1-LocXPlayer2)<75 || Math.abs(LocYPlayer1-LocYPlayer2)<75){
generateLocations();
}
}
public int getRandomNumber(int start,int end)
{
//Funktion zum Generieren von zufälligen Zahlen.
int normal = Greenfoot.getRandomNumber(end-start+1);
return normal+start;
}
public void addScoreCounterPlayer1()
{
ScoreCounterPlayer1++;
}
public void addScoreCounterPlayer2()
{
ScoreCounterPlayer2++;
}
public void ifPlayer2Wins()
{
if(ScoreCounterPlayer2 == 5){
removeObjects(getObjects(null));
showText("Press R to Restart", 350, 470);
addObject(new Player2Wins(), 350, 350);
ScoreCounterPlayer2 = 0;
ScoreCounterPlayer1 = 0;
}
}
public void ifPlayer1Wins()
{
if(ScoreCounterPlayer1 == 5){
removeObjects(getObjects(null));
showText("Press R to Restart", 350, 470);
addObject(new Player1Wins(), 350, 350);
ScoreCounterPlayer1 = 0;
ScoreCounterPlayer2 = 0;
}
}
public void ifTrue()
{
if(deleteAtEdge == true){
showText("Press Space to Restart", 350, 470);
}
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse Timer.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Countdown extends Actor
{
public int dtime = 40;
/**
* Act - tut, was auch immer Timer tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
countdown();
}
public void countdown()
{
Greenfoot.playSound("Countdownsound.mp3");
setImage("3.png");
Greenfoot.delay(dtime);
setImage("2.png");
Greenfoot.delay(dtime);
setImage("1.png");
Greenfoot.delay(dtime);
setImage("play.png");
Greenfoot.delay(dtime);
getWorld().removeObject(this);
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse Player1.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Player1 extends Player
{
/**
* Act - tut, was auch immer Player1 tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
// Ergänzen Sie Ihren Quelltext hier...
move(4);
removeObjectByTouchingLine();
if (getWorld() == null) return; // needed to avoid IllegalStateException on following codes
createTrack();
movement();
delteAtEdge();
}
public void movement()
{
if (Greenfoot.isKeyDown("right"))
{
turn(6);
}
if (Greenfoot.isKeyDown("left"))
{
turn(-6);
}
}
public void createTrack()
{
//getWorld().addObject(new Line1(), getX(), getY());
Actor line = new Line1();
getWorld().addObject(line, getX(), getY());
line.setRotation(getRotation());
line.move(-getImage().getWidth()/2);
}
public void delteAtEdge()
{
if(getX() > 697)
{
((MyWorld) getWorld()).addScoreCounterPlayer2();
restartGame();
}
else if(getX() < 3)
{
((MyWorld) getWorld()).addScoreCounterPlayer2();
restartGame();
}
else if(getY() < 3)
{
((MyWorld) getWorld()).addScoreCounterPlayer2();
restartGame();
}
else if(getY() > 697)
{
((MyWorld) getWorld()).addScoreCounterPlayer2();
restartGame();
}
}
public void removeObjectByTouchingLine(){
if (isTouching(Line1.class) || isTouching(Line2.class)) {
((MyWorld) getWorld()).addScoreCounterPlayer2();
((MyWorld) getWorld()).addObject(new text9(), 350, 300);
((MyWorld) getWorld()).addObject(new text7(), 350, 400);
Greenfoot.delay(10);
restartGame();
}
}
public void restartGame()
{
Greenfoot.setWorld(new MyWorld());
}
}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse Line1.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Line1 extends Player1
{
/**
* Act - tut, was auch immer Line1 tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
// Ergänzen Sie Ihren Quelltext hier...
}
} import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse Player1Wins.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Player1Wins extends Player1
{
/**
* Act - tut, was auch immer Player1Wins tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
// Ergänzen Sie Ihren Quelltext hier...
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse Player2.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Player2 extends Player
{
/**
* Act - tut, was auch immer Player2 tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
// Ergänzen Sie Ihren Quelltext hier...
move(4);
removeObjectByTouchingLine();
if (getWorld() == null) return; // needed to avoid IllegalStateException on following codes
createTrack();
movement();
delteAtEdge();
}
public void movement()
{
if (Greenfoot.isKeyDown("d"))
{
turn(6);
}
if (Greenfoot.isKeyDown("a"))
{
turn(-6);
}
}
public void createTrack()
{
//getWorld().addObject(new Line1(), getX(), getY());
Actor line = new Line2();
getWorld().addObject(line, getX(), getY());
line.setRotation(getRotation());
line.move(-getImage().getWidth()/2);
}
public void delteAtEdge()
{
if(getX() > 697)
{
((MyWorld) getWorld()).addScoreCounterPlayer1();
restartGame();
}
else if(getX() < 3)
{
((MyWorld) getWorld()).addScoreCounterPlayer1();
restartGame();
}
else if(getY() < 3)
{
((MyWorld) getWorld()).addScoreCounterPlayer1();
restartGame();
}
else if(getY() > 697)
{
((MyWorld) getWorld()).addScoreCounterPlayer1();
restartGame();
}
}
public void removeObjectByTouchingLine(){
if (isTouching(Line1.class) || isTouching(Line2.class)) {
((MyWorld) getWorld()).addScoreCounterPlayer1();
restartGame();
}
}
public void restartGame()
{
Greenfoot.setWorld(new MyWorld());
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse Line2.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Line2 extends Player2
{
/**
* Act - tut, was auch immer Line2 tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
// Ergänzen Sie Ihren Quelltext hier...
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse Player2Wins.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Player2Wins extends Player2
{
/**
* Act - tut, was auch immer Player2Wins tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
// Ergänzen Sie Ihren Quelltext hier...
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse text.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class text extends Actor
{
/**
* Act - tut, was auch immer text tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
// Ergänzen Sie Ihren Quelltext hier...
}
}

