Scardaddy
Member
+37|6399|UK
Hi guys,

I am trying to make this game for school and was getting this error:

C:\WTK2.5.1\apps\QuatschMIDlet\src\QuatschCanvas.java:179: cannot find symbol
symbol  : variable mHighScoresForm
location: class QuatschCanvas
        mDisplay.setCurrent(mHighScoresForm);

I understand that it is saying that it can't recognise mHighScoresForm, but all the variables are set up.  I can't figure out where to go from here and a little help is all I'm looking for.  File is called QuatschCanvas.java, and here's my code:

Code:

import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class QuatschCanvas extends GameCanvas implements Runnable
{
    private boolean mTrucking;

    private LayerManager mLayerManager;

    private TiledLayer mAtmosphere;
    private TiledLayer mBackground;
    private int mAnimatedIndex;

    private Sprite mQuatsch;
    private int mState, mDirection;

    private static final int kStanding = 1;
    private static final int kRunning = 2;

    private static final int kLeft = 1;
    private static final int kRight = 2;

    private static final int[] kRunningSequence = { 0, 1, 2 };
    private static final int[] kStandingSequence = { 3 };


      private QuatschMIDlet mMIDlet;

    public QuatschCanvas(String quatschImageName, String atmosphereImageName,
    String backgroundImageName, QuatschMIDlet m)throws IOException
    {


        super(true);

        // Create a LayerManager.
        mLayerManager = new LayerManager();
        int w = getWidth();
        int h = getHeight();
        mLayerManager.setViewWindow(96, 0, w, h);

        //new
        mMIDlet = m;

        createBackground(backgroundImageName);
        createAtmosphere(atmosphereImageName);
        createQuatsch(quatschImageName);

      }

      private void createBackground(String
      backgroundImageName) throws IOException
      {
        // Create the tiled layer.
        Image backgroundImage = Image.createImage(backgroundImageName);
        int[] map =
        {
              1, 2, 0, 0, 0, 0, 0, 0,
              3, 3, 2, 0, 0, 0, 5, 0,
              3, 3, 3, 2, 4, 1, 3, 2,
              6, 6, 6, 6, 6, 6, 6, 6
        };
        mBackground = new TiledLayer(8, 4, backgroundImage, 48, 48);
        mBackground.setPosition(12, 0);
        for (int i = 0; i < map.length; i++) {
        int column = i % 8;
        int row = (i - column) / 8;
          mBackground.setCell(column, row, map[i]);
    }
    mAnimatedIndex = mBackground.createAnimatedTile(8);
    mBackground.setCell(3, 0, mAnimatedIndex);
    mBackground.setCell(5, 0, mAnimatedIndex);
    mLayerManager.append(mBackground);
  }

  private void createAtmosphere(String atmosphereImageName)
      throws IOException {
    // Create the atmosphere layer
    Image atmosphereImage = Image.createImage(atmosphereImageName);
    mAtmosphere = new TiledLayer(8, 1, atmosphereImage,
        atmosphereImage.getWidth(), atmosphereImage.getHeight());
    mAtmosphere.fillCells(0, 0, 8, 1, 1);
    mAtmosphere.setPosition(0, 96);
    mLayerManager.insert(mAtmosphere, 0);
  }

  private void createQuatsch(String quatschImageName)
      throws IOException {
    // Create the sprite.
    Image quatschImage = Image.createImage(quatschImageName);
    mQuatsch = new Sprite(quatschImage, 48, 48);
    mQuatsch.setPosition(96 + (getWidth() - 48) / 2, 96);
    mQuatsch.defineReferencePixel(24, 24);
    setDirection(kLeft);
    setState(kStanding);
    mLayerManager.insert(mQuatsch, 1);
  }

  public void start() {
    mTrucking = true;
    Thread t = new Thread(this);
    t.start();
  }



public void run()
{
    int w = getWidth();
    int h = getHeight();
    Graphics g = getGraphics();
    int frameCount = 0;
    int factor = 2;
    int animatedDelta = 0;




    while (mTrucking)
    {
      if (isShown())
      {

        int keyStates = getKeyStates();
        if ((keyStates & LEFT_PRESSED) != 0)
        {
          setDirection(kLeft);
          setState(kRunning);
          mBackground.move(3, 0);
          mAtmosphere.move(3, 0);
          mQuatsch.nextFrame();
        }
        else if ((keyStates & RIGHT_PRESSED) != 0)
        {
          setDirection(kRight);
          setState(kRunning);
          mBackground.move(-3, 0);
          mAtmosphere.move(-3, 0);
          mQuatsch.nextFrame();
        }
        else
        {
          setState(kStanding);
        }

        frameCount++;
        if (frameCount % factor == 0)
        {
          int delta = 1;
          if (frameCount / factor < 10) delta = -1;
          mAtmosphere.move(delta, 0);
          if (frameCount / factor == 20) frameCount = 0;

          mBackground.setAnimatedTile(mAnimatedIndex,
              8 + animatedDelta++);
          if (animatedDelta == 3) animatedDelta = 0;

        }

        g.setColor(0x5b1793);
        g.fillRect(0, 0, w, h);

        mLayerManager.paint(g, 0, 0);

        flushGraphics();
      }

      try { Thread.sleep(80); }
      catch (InterruptedException ie) {}
    }

  }


  //new
  public void afterGame(int score)
    {
        mDisplay.setCurrent(mHighScoresForm);
    }



  public void stop() {
    mTrucking = false;
  }



  public void setVisible(int layerIndex, boolean show) {
    Layer layer = mLayerManager.getLayerAt(layerIndex);
    layer.setVisible(show);
  }

  public boolean isVisible(int layerIndex) {
    Layer layer = mLayerManager.getLayerAt(layerIndex);
    return layer.isVisible();
  }

  private void setDirection(int newDirection) {
    if (newDirection == mDirection) return;
    if (mDirection == kLeft)
      mQuatsch.setTransform(Sprite.TRANS_MIRROR);
    else if (mDirection == kRight)
      mQuatsch.setTransform(Sprite.TRANS_NONE);
    mDirection = newDirection;
  }

  private void setState(int newState) {
    if (newState == mState) return;
    switch (newState) {
      case kStanding:
        mQuatsch.setFrameSequence(kStandingSequence);
        mQuatsch.setFrame(0);
        break;
      case kRunning:
        mQuatsch.setFrameSequence(kRunningSequence);
        break;
      default:
        break;
    }
    mState = newState;
  }
}
And this is the MIDlet code, file is called QuatschMIDlet.java:

Code:

import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class QuatschMIDlet extends MIDlet implements CommandListener
{
    private Display mDisplay;
    private QuatschCanvas mQuatschCanvas;
    private Form mShowForm;
    private Command mExitCommand, mShowCommand, mOkCommand;
    private Command mNewGameCommand;
    private Form mHighScoresForm;

    public void startApp()
    {
        if (mQuatschCanvas == null)
        {
              try
              {
mQuatschCanvas = new QuatschCanvas("/quatsch.png", "/atmosphere.png", "/background_tiles.png", this);

                mExitCommand = new Command("Exit", Command.EXIT, 0);
                mShowCommand = new Command("Show/Hide", Command.SCREEN, 0);
                mOkCommand = new Command("OK", Command.OK, 0);
                mQuatschCanvas.addCommand(mExitCommand);
                mQuatschCanvas.addCommand(mShowCommand);
                mQuatschCanvas.setCommandListener(this);

                mNewGameCommand = new Command("New Game", Command.OK, 0);
                mHighScoresForm = new Form("High Scores");
                mHighScoresForm.addCommand(mNewGameCommand);
                mHighScoresForm.addCommand(mExitCommand);
                mHighScoresForm.setCommandListener(this);



              }
              catch (IOException ioe)
              {
                System.out.println(ioe);
              }
        }

        mDisplay = Display.getDisplay(this);
        mDisplay.setCurrent(mQuatschCanvas);
        mDisplay.setCurrent(mHighScoresForm);
      }

      public void pauseApp() {}

      public void destroyApp(boolean unconditional)
      {
        mQuatschCanvas.stop();
      }




      public void commandAction(Command c, Displayable s)
      {
        if (c.getCommandType() == Command.EXIT)
        {
              destroyApp(true);
              notifyDestroyed();
        }


        else if(c==mNewGameCommand)
        {
            mQuatschCanvas.start();
            mDisplay.setCurrent(mQuatschCanvas);
        }


        else if (c == mShowCommand)
        {
              if (mShowForm == null)
              {
                mShowForm = new Form("Show/Hide");
                ChoiceGroup cg = new ChoiceGroup("Layers", Choice.MULTIPLE);
                cg.append("Fog", null);
                cg.append("Dr. Quatsch", null);
                cg.append("Background", null);
                mShowForm.append(cg);
                mShowForm.addCommand(mOkCommand);
                mShowForm.setCommandListener(this);
              }
              ChoiceGroup cg = (ChoiceGroup)mShowForm.get(0);
              cg.setSelectedIndex(0, mQuatschCanvas.isVisible(0));
              cg.setSelectedIndex(1, mQuatschCanvas.isVisible(1));
              cg.setSelectedIndex(2, mQuatschCanvas.isVisible(2));
              mDisplay.setCurrent(mShowForm);
        }
        else if (c == mOkCommand)
        {
              ChoiceGroup cg = (ChoiceGroup)mShowForm.get(0);
              mQuatschCanvas.setVisible(0, cg.isSelected(0));
              mQuatschCanvas.setVisible(1, cg.isSelected(1));
              mQuatschCanvas.setVisible(2, cg.isSelected(2));
              mDisplay.setCurrent(mQuatschCanvas);
        }
      }
}
You guys are always really helpful and maybe someone understands what I am doing wrong.  If you can help thanks.

Last edited by Scardaddy (2007-11-29 18:03:26)

Vilham
Say wat!?
+580|6774|UK
You sure your importing all the necessary library's?

Thats all I can think of without going through your code.
Scardaddy
Member
+37|6399|UK
I'm pretty sure I am.  The mHighScoresForm is set up in the other file and it it is shown at the beginning of the game. I want it to show on exit, but it's not.  They have given us a step by step tutorial and it says:

b) make a member function for  MIDlet that will be called after the game:

public void afterGame(int score)
  {       
        mDisplay.setCurrent(mHighScoresForm);
    }
but that's what I did but it's not working.

Last edited by Scardaddy (2007-11-29 18:13:50)

Scardaddy
Member
+37|6399|UK
no no joy I really can't figure it out, I guess I'll have to restart and try something else, any other ideas guys?

Board footer

Privacy Policy - © 2024 Jeff Minard