Would you play Monopoly on a calculator? |
Yes |
|
43% |
[ 29 ] |
No |
|
1% |
[ 1 ] |
Maybe |
|
4% |
[ 3 ] |
Only if it was really good |
|
50% |
[ 33 ] |
|
Total Votes : 66 |
|
Well, I have made significant progress. The bare-bones engine of the game is up and running - players can roll, move, collect money from go, go to, and get out of jail. Currently, I am working on the part of the program that processes where people land and what that should do. This will include card drawing, taxes, purchasing properties, and paying rent.
I'd like to give a shoutout to Kerm and everyone that helped to put together SourceCoder and jsTIfied - they have been indispensable tools for writing and testing my code thus far. The indentation and highlighting of SourceCoder allow me to tell what I'm writing and having it linked to the emulator speeds up testing immensely. Thank you!
Things are going great! Here is a checklist of what's done and what is still to come:
√ Storing Property/Player Information
√ New Game
√ Moving
√ Go
√ Jail (except for "Get Out of Jail Free" Card)
√ Taxes
√ Rent for Utilities
√ Rent for Railroads
O Rent For Standard Properties
O Building/Selling Houses and Hotels
O Mortgaging Properties
√ Chance/Community Chest (not properly done yet, just adds or subtracts some money. I'll get the actual cards in later)
√ Detailed Property Info (Title Deed Cards)
O Auctioning
O Trading
O Change property names, etc. to avoid copyright infringement
√ Change "Player 1", etc. to actual Piece Names
O Title/Credits Screens
O House Rules (what to do with free parking, $400 for landing on go, interest on mortgages)
O Release Text-Based TI-Monopoly
O Graphical Opening Screen/Credits
O Graphical Menus
O Graphical Title Deeds
O Graphical Dice/Moving
O Graphical Board/Game Pieces
O Release TI-Monopoly with Nice Graphics
My goal is to finish the text-based version in the next couple of weeks because I will be going on vacation and will need something to amuse myself and my brother on the plane ride.
I fear that this project will be overshadowed by users installing the Gameboy version of Monopoly via Ti Boy CE. I promise I will use this version though!
Edit: My apologies, I thought that this would also be for color calculators. I love monopoly and would play it more often on my 84+CE. I have the Ti Boy version right now, but I would like to have a version that does not create a space issue. If you need any help with the port, I would be more than happy to help!
LAX18 wrote:
I fear that this project will be overshadowed by users installing the Gameboy version of Monopoly via Ti Boy CE. I promise I will use this version though!
Thank you! Your interest and support mean a lot to me. Luckily, this project runs on the monochrome calculators, which don't have a GameBoy emulator they can run (at least not yet )
Speaking of which, I am considering working on a version of this for the color calculators once I'm done. It'll be kind of tricky because I don't own one, but I'll figure something out.
Honestly, I would play a monopoly game that's specifically designed for the CE or CSE. The GB one is fun, but (as LAX pointed out) it's quite space intensive and doesn't look that great due to scaling and I'm sure the extra screen the CE provides could be utilized. Good luck finishing this!
Yesterday, I spent quite a while making the game more polished. I made it possible for players to input their names so that it says things like "Pass to Kerm" instead of "Pass to Player 1." Additionally, I used the Alpha-Lock Hex Code (AsmPrgmFD361251C9) before inputs expecting text to make it clearer to the users what to type. The algorithm for searching information about properties is now more bulletproof because it still works when typing the middle of a property name (like "Charles" instead of "St Charles"). And finally, all of the Title-Deed cards are working as well.
I will be using a couple more hex codes for archiving programs when they are not being used and-unarchiving them when they are needed. Although this will add some loading time, it will allow me to have more than 20kB of code by always having some of it in the Archive memory. I won't be able to package it into an app because it's too large, but by using a bit of assembly, I can prevent users from having to constantly unarchive all 15 or so things needed to run the game.
The Archiving/UnArchiving seems to be working well. It isn't spectacularly effective at saving memory, but it at least prevents multiple unlinked programs from being in RAM at the same time and saves the hassle of Archiving and UnArchiving manually.
Although I haven't had time to test it thoroughly yet, I have written the process of building houses and hotels and it seems to be free of glaring errors. It was quite interesting to write out all of the things that have to be true to buy a house.* Writing the code for selling buildings should be easy because many of the steps are the same.
After that, it's charging rent for standard and developed properties, mortgaging/unmortgaging, and then advanced functions like trading and auctions. At that point, I'll probably release a beta version while I work on a memory-efficient solution for Chance and Community chest cards
*If y'all were wondering, all of these conditions are checked before allowing the user to buy the house or hotel. If I missed anything, please let me know.
- The property exists
- You own it
- It is a standard type of property (not RR or utility)
- It is not mortgaged
- You own the full color-set
- There are remaining buildings (not all 12 hotels/32 houses are used up)
- The property cannot already be further developed than the others in the set
- You can afford the house
so this wont be available on ti84pce
No.
Edit: great work so far kydapoot!
Well, I just got back from a week-long SCUBA vacation, so in the next couple of days I'll be re-orienting myself with my code and seeing if my documentation was sufficient. After that, I'm going to keep the progress going and figure out some of the trickiest parts of the game.
joshuawu518 wrote:
so this wont be available on ti84pce
Not for a while. I would like to try and figure something out for the color calcs after I finish the monochrome version.
TheLastMillennial wrote:
great work so far kydapoot!
Thanks! I appreciate the support.
Also, thank you _iPhoenix_ for listing this as a project of the month! I'm glad y'all are as excited about this project as I am.
I got my 83+ working so I will be happy to help with a port to CE. More importantly, I am excited that I can test this program after all! Keep up the good work!
Well, I have a strange problem. There is a line of code that works on the home screen but not in py program. I have 2 strings. One of them, Str1, contains all of the space names on the board, given 16 characters each.
Code: "GO MEDITERRANEAN AVCOMMUNITY CHEST BALTIC AV INCOME TAX READING RR ORIENTAL AV CHANCE VERMONT AV CONNECTICUT AV JAIL ST CHARLES PLACEELECTRIC COMPANYSTATES AV VIRGINIA AV PENNSYLVANIA RR ST JAMES PLACE COMMUNITY CHEST TENNESSEE AV NEW YORK AV FREE PARKING KENTUCKY AV CHANCE INDIANA AV ILLINOIS AV B AND O RR ATLANTIC AV VENTNOR AV WATER WORKS MARVIN GARDENS GO TO JAIL PACIFIC AV N. CAROLINA AV COMMUNITY CHEST PENNSYLVANIA AV SHORT LINE RR CHANCE PARK PLACE LUXURY TAX BOARDWALK "
Str2 contains a string containing a user's search for a property. For example, if a user wanted to build a house or hotel on "ST CHARLES PLACE", they might have searched:
Code: "CHARLES"
The line of code that is being problematic is supposed to convert from that user input into the row of the matrix B (1-2 containing information about the property that the user searched for. If nothing is found, it should return 0.
Code: |LBOARD(iPart(1+(inString(Str1,Str2)-1)/16->V
I'll do my best to explain what each part of this does:
inString(Str1,Str2)
//Returns the spot in Str1 at which Str2 appears
(inString(Str1,Str2)-1)
//Compensates for TI-Basic string indexes starting at 1. The beginnings of property names in Str1 are at 1, 17, 33, etc. But I want to divide by 16 (the length of each name) and have it come out evenly.
(inString(Str1,Str2)-1)/16
//Converts numbers found such as 0,16,32 into numbers such as 0,1,2
1+(inString(Str1,Str2)-1)/16
//Again, this is because of indexes (this time, of lists) starting at 1. Now, properties found will have a number from 1-40 instead of 0-39.
iPart(1+(inString(Str1,Str2)-1)/16
//This rounds down to the nearest whole number in case someone searched something that was found in Str1 but not located at index 1,17,33, etc. If someone did that (as would be the case if they searched "CHARLES"), the number returned after the previous steps would not be whole, and screw up the next part of this expression. Taking the integer part removes this issue.
|LBOARD(iPart(1+(inString(Str1,Str2)-1)/16
//|LBOARD is a list with 40 elements. Each index of the list corresponds to a space on the board. If that space is a standard property (in a color set), the element of |LBOARD that corresponds to it will have a number from 1-28 that corresponds to the row of matrix B that has that property's information. If there is no standard property on that space, |LBOARD contains 0 at that index.
|LBOARD(iPart(1+(inString(Str1,Str2)-1)/16->V
//Stores its answer into V.
On the home screen, this code works just as it is meant to. But in the program, I sometimes get erratic results, and I can't even figure out a pattern to when it works or doesn't. Sometimes, it throws ERR: INVALID and sometimes it throws ERR: INVALID DIM. Other times, it returns the right number but doesn't draw the right conclusions about the property after (that's probably another issue entirely though). Finally, the line functions more reliably at label BB (buying buildings) than at label SB (selling buildings).
If you want to see the full code, you can look at the project in SourceCoder/jsTIfied here. The program in question is MNMANAG, and the line is located near the top of labels BB and SB.
Sorry about the really long post. I'm pretty stumped and wanted to provide as much information as possible about the problem.
Are you sure your strings or variables aren't getting modified by another part of your code? It took me a month to figure out that's what was messing up my JPL program. Have you tried checking the values of the vars and strings while it's going through the commands? This helped me figure out where the variables were getting modified. This could explain why it works on the home screen (nothing to modify the variables) but not in the program. Have you tried taking this code and running it in a controlled way (completely separate from your Monopoly program) to see if it works properly?
Well...I'm feeling a little dumb right now. If a property isn't found, inString(Str1,Str2) returns 0. That means that iPart(1+(inString(Str1,Str2)-1)/16 also is equal to 0. And |LBOARD(0) in an invalid dimension. Between that and catching a couple other design flaws with that section of the program, I think I know how to sort it out now, although it'll take a while. The reason that it was working on the homescreen was that I wasn't checking searches that weren't present in Str1. *Facepalm*
Well, I made more progress. It appears that I have fixed the bug with buying and selling houses, although I have yet to test some of the upper levels of that code.
For now, I'm moving onto Chance and Community Chest cards. At the moment, I'm just going to display the text on the homescreen. After I finish that, I'll actually write the code that adds money, moves your token, or whatever. I expect some to be trickier than others. Once the whole game is completed in its text-based form, I'll make graphical card drawing.
Well, I have some bad news. School is about to start up again and I have been busy with marching band, so progress has slowed considerably.
However, I will continue to work on this project, and my documentation should allow for some breaks from coding when I have other stuff to take care of. Thanks for putting this on Projects of the Month again, and I hope to be back soonish with an update on progress.