File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Java in General and the fly likes is it an array i need? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of EJB 3 in Action this week in the EJB and other Java EE Technologies forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "is it an array i need?" Watch "is it an array i need?" New topic
Author

is it an array i need?

tom brownlee
Greenhorn

Joined: Aug 14, 2001
Posts: 28
hi people...a question all the way from new zealand.
i have an assignment, of which i can choose, the only rule is that it must be a short text based adventure game. simple?. well my game is a jewel game. heres my problem.
it has nine rooms (3x3) of which you start in a room and move through the rooms by the 'go' command. each movement is by way of north,south, east,west. ie go north.
this movement will return the room, in my case the rooms are labelled as colours. this is ok for me to code. BUT, in each room is a coloured jewel, the same colours as the room colours, but a different coloured jewel in each room, the goal of my game(to win)is to put a specific jewel in a specific room by way of a 'pick up' and 'put down' method, using clues(im not sure yet),
the problem??
how do i assign the coloured jewel to the room.
(and i suppose i should ask also how can i move jewel, from room to room).
below is my game class...(1 class from 6)

//////////////////
as you can see here i have no clue to what i should do next. no idea as to what i should do to allocate a jewel to a room.
please any help would be marvellous!
thankyou

(edited by Cindy to format code using [ code] and [ /code] tags without the spaces)
[ March 18, 2003: Message edited by: Cindy Glass ]
Corey McGlone
Ranch Hand

Joined: Dec 20, 2001
Posts: 3271
Instead of having every jewel know what room it's in, why not let the rooms keep track of what jewel is in them. You could do something like this:

Then, when you initialize your game, you'll want to create a jewel and then "give" that jewel to a room. You can always "ask" the room later to give it back so that you can do things with it.
I have a feeling that an approach like this might be a bit easier for you.
What do you think?
Corey


SCJP Tipline, etc.
tom brownlee
Greenhorn

Joined: Aug 14, 2001
Posts: 28
awesome corey..thanks for the help..it did work...
my problem now is how do i access a method in a class from inside another class.
ie access the method jewelDescription in the Jewel class from the Room class (where i print out the jewel description as i move from room to room)

here ??? represents what i need to add to display the jewel description in that particular room.
Corey McGlone
Ranch Hand

Joined: Dec 20, 2001
Posts: 3271
Originally posted by tom brownlee:
awesome corey..thanks for the help..it did work...
my problem now is how do i access a method in a class from inside another class.

Don't make the Room class invoke everything on the Jewel class for you. The Room class contains the Jewel class, it doesn't "wrap" it. Generally, when we talk about an object that "wraps" another, we think of a case in which the wrapping object entirely obscures the fact that it contains the object. In this case, however, it's no secret that a Room contains a Jewel. With the getContainedJewel() method I defined above, you already have a mechanism in the Room class in which to obtain the Jewel that it contains. Then, if your Jewel class has a method to retrieve it's description, you're all set, like this:

You see, you can actually retrieve the Jewel object from the Room and then invoke the methods of the Jewel class on that object - you don't have to make the Room class invoke the methods for you.
Also, you can do that in one line by chaining method invocations, like this:

You see, the first method, getContainedJewel(), is resolved first, which returns a Jewel object. Then, we invoke the getDescription() method on that object and, nicely enough, we're left with the description of the Jewel that is contained within that room.
I hope that helps,
Corey
Layne Lund
Ranch Hand

Joined: Dec 06, 2001
Posts: 3061
For debugging purposes, I like to have a string that prints out the "contents" of a class, similar to the longDescription() method. (I normally use the toString() method instead, but that's just my own personal preference). You can easily call methods on the jewel contained in a room. For example:

Remember that each Room object contains a Jewel object named containedJewel. You can use this reference to call any methods you wish.
HTH
Layne


Java API Documentation
The Java Tutorial
Corey McGlone
Ranch Hand

Joined: Dec 20, 2001
Posts: 3271
Originally posted by Layne Lund:


This only works if you have access to the containedJewel variable from where this code is executing.
In the example I posted, the above code would cause a compile-time error because from the main method in class Game, where you'd be getting the description of the Jewel, you don't have access to the containedJewel variable within a Room object because that variable is declared as private. Therefore, you must first "get" the object through the getContainedJewel() method.
Of course, you could change the accessibility modifier on the containedJewel variable to protected or public, but it's often a bad idea to do so and almost certainly deviates from good OO practice.
Corey
Layne Lund
Ranch Hand

Joined: Dec 06, 2001
Posts: 3061
Originally posted by Corey McGlone:

This only works if you have access to the containedJewel variable from where this code is executing.

I should have been more explicit about the above line of code. I am assuming that you would call do this from a method of the Room class since it has the declaration for containedJewel.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: is it an array i need?
 
Similar Threads
Generating list of colours.
How to change Scroll Bar color
Please Help Me
How Can I Colorize Text?
what is your favorite color?