Author Topic: WHILE AND DO LOOP CYCLES  (Read 8332 times)

0 Members and 1 Guest are viewing this topic.

Offline Kiara87

  • Forum Regular
  • Posts: 164
    • View Profile
WHILE AND DO LOOP CYCLES
« on: November 06, 2020, 02:00:22 pm »
HELLO EVERYONE

I wanted to know which cycle is better among them
while or do while
do loop
or other cycles can be infinite
which are the most modern cycles among them

DO
~~~
LOOP WHILE n > 0

DO WHILE n > 0
~~~
LOOP

DO UNTIL n = 0
~~~
LOOP

WHILE
~~~
WEND

DO
~~~
LOOP

DO
~~~
LOOP UNTIL n > 0

in other programming languages

there is only
WHILE
DO WHILE
INSTEAD QB64 HAS MORE THAN TWO ?
se avessi solo un'ora per salvare il mondo, passerei 55 minuti per definire bene il problema e 5 a trovare la soluzione

Offline _vince

  • Seasoned Forum Regular
  • Posts: 422
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #1 on: November 06, 2020, 04:18:29 pm »
WHILE...WEND is equivalent to DO WHILE, it is the old gwbasic notation.  I personally stick to DO WHILE as it is more consistent with all the other variants.

Since all the variants are effectively different, I'd use the one that best fits the situation leaning towards DO WHILE whenever possible.  I would also avoid EXIT DO and _CONTINUE inside loops whenever possible as it is essentially spaghetti code.  Having a single exit condition on the top DO WHILE line is going to look the neatest and most readable.

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #2 on: November 06, 2020, 04:43:44 pm »
Your basic DO LOOP is fine, I use WHILE...WEND if there is a condition to test before entering a loop and DO... LOOP UNTIL if you need to run the loop at least once. DO WHILE is an extra word to type!

_EXIT and _CONTINUE are great! The execution picks up at end or start of loop, no spaghetti when the blocks are indented it is easy as eating pie knowing where execution will pick up.

Spaghetti is arbitrary GOTO this and that with no returns so it's jumping all over the source code and execution is extremely hard to follow.

PS The FOR... NEXT loop takes a tiny bit longer but is a natural for array work, do you think you will miss .000002 secs?
« Last Edit: November 06, 2020, 04:49:50 pm by bplus »

Offline Richard Frost

  • Seasoned Forum Regular
  • Posts: 316
  • Needle nardle noo. - Peter Sellers
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #3 on: November 06, 2020, 05:42:12 pm »
Thousands of clowns throughout history have proven that the best cycle is a
unicycle.  The variety available with QB64 is wonderful.  I bet all these variations
compile to the same super-dooper skinny ones and fat zeros.

The FOR/NEXT loop is slower.  This I have tested.  Hence eliminating it from time
critical sections of my chess program. 

Code: QB64: [Select]
  1. stars = 100
  2. two_four = 24 + 2
  3. kfc_franchise = 20 + 1
  4. nine_lives = 9 + 2
  5.  
  6. PRINT: PRINT: PRINT "stars";
  7. DO: _LIMIT 300
  8.     stars = stars - 1
  9.     PRINT stars;
  10. LOOP UNTIL (stars = 0) OR End_Of_Universe
  11.  
  12. PRINT: PRINT: PRINT "beer";
  13. DO: _LIMIT 300
  14.     two_four = two_four - 1
  15.     PRINT two_four;
  16. LOOP WHILE two_four > 0
  17.  
  18. PRINT: PRINT: PRINT "chickens";
  19. DO WHILE kfc_franchise > 0
  20.     _LIMIT 300
  21.     kfc_franchise = kfc_franchise - 1
  22.     PRINT kfc_franchise;
  23.  
  24. PRINT: PRINT: PRINT "cat";
  25. WHILE NOT (Dead)
  26.     _LIMIT 300
  27.     cat_status = (cat_status + 1) MOD nine_lives
  28.     IF cat_status = 0 THEN Dead = -1 ELSE PRINT nine_lives - cat_status - 1;
  29.  
  30. PRINT: PRINT: PRINT "Buddy Holly";
  31. DO WHILE dowoppa = dowap
  32.     _LIMIT 100
  33.     IF RND > .9 THEN
  34.         dowap = 1
  35.         PRINT " dowap";
  36.     ELSE
  37.         PRINT " wappa";
  38.     END IF
« Last Edit: November 06, 2020, 05:45:19 pm by Richard Frost »
It works better if you plug it in.

Offline Kiara87

  • Forum Regular
  • Posts: 164
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #4 on: November 06, 2020, 05:47:11 pm »
thank you both
for replying

@bplus I thought  that you could create spaghetti code with GOSUB,_CONTINUE and not only with goto

thanks for useful information


thanks also to _vince
I did not know that while wend equal do while
se avessi solo un'ora per salvare il mondo, passerei 55 minuti per definire bene il problema e 5 a trovare la soluzione

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #5 on: November 06, 2020, 06:28:04 pm »
GOSUB not nearly as bad as arbitrary GOTO, and GOTO is not evil nor bad and can be quite appropriate occasionally.

_CONTINUE wasn't even invented back in the day when they started complaining about spaghetti code.

Offline _vince

  • Seasoned Forum Regular
  • Posts: 422
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #6 on: November 07, 2020, 04:15:26 am »
_EXIT and _CONTINUE are great! The execution picks up at end or start of loop, no spaghetti when the blocks are indented it is easy as eating pie knowing where execution will pick up.

Spaghetti is arbitrary GOTO this and that with no returns so it's jumping all over the source code and execution is extremely hard to follow.

I'd say that spaghetti code isn't exclusive to the use of GOTO, it's more the concept of having difficult to follow code because of complicated and disorganized jumping/branching.

Some guys will have just a plain Do...LOOP and bury the exit conditions somewhere deep in that block -- I would most often categorize that as spaghetti code.  When you see a DO WHILE x<10 as the first line, you instantly know the condition of exiting that loop and don't have to dig deep in the block to find out how and when, especially if the loop is very large and complicated.

Of course, there are always exceptions when such a thing might be absolutely necessary, maybe due to the algorithm, performance constraints, etc. as is with GOTO, but I personally stick to these principles unless there's a very good reason not to

Offline SMcNeill

  • QB64 Developer
  • Forum Resident
  • Posts: 3972
    • View Profile
    • Steve’s QB64 Archive Forum
Re: WHILE AND DO LOOP CYCLES
« Reply #7 on: November 07, 2020, 07:01:12 am »
Generally speaking, I consider code that flows backwards, or code that jumps to jump, to be “spaghetti code”.

For example:


label:
DO
   IF whatever GOTO label
LOOP

If you follow the flow here, it goes from top-down (which is what we want to see and deal with), until all at once it wraps back around to a previous point.  If you’re looking at stretching out a rope (or spaghetti) like this, you just kinked a knot in it.  Unless absolutely required, these type of structures need to be avoided.

DO
   IF whatever GOTO label1
LOOP

label1: GOTO label2

If you dig up old QBASIC code, you’ll see junk like the above in different programs.  A jump to a jump, which might just be a jump to another jump.

This is just blaaaarrgghhhhhffttt!!



As far as I’m concerned, as long as you have a simple one-directional, top-down flow, it’s hard to call it “spaghetti code”.

DO
    IF whatever GOTO label
LOOP

label:

Personally, I have no issues with the above.  It’s still a simple top-down logic, and if your labels are well-named, it becomes self-documenting, such as below:

DO
   IF whatever GOTO EndOfPrinting
LOOP

EndOfPrinting:



But, then again, this is just my personal take on the concept.  Like usual, if you’re working for someone else, you code to their standards, and not mine.  If the boss don’t like it, don’t do it just “cause Steve would”.  :P
https://github.com/SteveMcNeill/Steve64 — A github collection of all things Steve!

Offline Kiara87

  • Forum Regular
  • Posts: 164
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #8 on: November 07, 2020, 07:36:07 am »
Generally speaking, I consider code that flows backwards, or code that jumps to jump, to be “spaghetti code”.

For example:


label:
DO
   IF whatever GOTO label
LOOP

If you follow the flow here, it goes from top-down (which is what we want to see and deal with), until all at once it wraps back around to a previous point.  If you’re looking at stretching out a rope (or spaghetti) like this, you just kinked a knot in it.  Unless absolutely required, these type of structures need to be avoided.

DO
   IF whatever GOTO label1
LOOP

label1: GOTO label2

If you dig up old QBASIC code, you’ll see junk like the above in different programs.  A jump to a jump, which might just be a jump to another jump.

This is just blaaaarrgghhhhhffttt!!



As far as I’m concerned, as long as you have a simple one-directional, top-down flow, it’s hard to call it “spaghetti code”.

DO
    IF whatever GOTO label
LOOP

label:

Personally, I have no issues with the above.  It’s still a simple top-down logic, and if your labels are well-named, it becomes self-documenting, such as below:

DO
   IF whatever GOTO EndOfPrinting
LOOP

EndOfPrinting:



But, then again, this is just my personal take on the concept.  Like usual, if you’re working for someone else, you code to their standards, and not mine.  If the boss don’t like it, don’t do it just “cause Steve would”.  :P

and true I have many qbasic books and I would say they use goto a lot

from what I understand what you said if the goto goes from the other down it would not be spaghetti code?

but if the goto returns the code above, could we say it is a spaghetti code?

I don't know if I understood correctly?

then i did a google search how to avoid spaghetti code

the answer is by creating programs with structured programming
avoiding the goto using --> Sequence,selection,iteration
second hypothesis  Böhm-Jacopini

 thanx SMcNeill

se avessi solo un'ora per salvare il mondo, passerei 55 minuti per definire bene il problema e 5 a trovare la soluzione

Offline Dimster

  • Forum Resident
  • Posts: 500
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #9 on: November 07, 2020, 09:29:04 am »
Like Kiara87  I do find the term "spaghetti code" somewhat confusing. I will often have loops which watch for a condition and then jump out, do something else and then go back to the loop and continue on. I will use Labels (and on the odd occasion GOTO) to handle Errors and once dealt with go back to where ever the program had encountered the error and carry on. I suppose this is spaghetti coding???

Offline TempodiBasic

  • Forum Resident
  • Posts: 1792
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #10 on: November 07, 2020, 02:09:37 pm »
Hi
from my point of view
this is an old style of coding a program
Code: QB64: [Select]
  1. 10 PRINT TAB(32);"ANIMAL"
  2. 20 PRINT TAB(15);"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY"
  3. 40 PRINT "PLAY 'GUESS THE ANIMAL'"
  4. 50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT."
  5. 70 DIM A$(200)
  6. 80 FOR I=0 TO 3
  7. 90 READ A$(I)
  8. 100 NEXT I
  9. 110 N=VAL(A$(0))
  10. 120 REM          MAIN CONTROL SECTION
  11. 130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$
  12. 140 IF A$="LIST" THEN 600
  13. 150 IF LEFT$(A$,1)<>"Y" THEN 120
  14. 160 K=1
  15. 170 GOSUB 390
  16. 180 IF LEN(A$(K))=0 THEN 999
  17. 190 IF LEFT$(A$(K),2)="\Q" THEN 170
  18. 200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2);
  19. 210 INPUT A$
  20. 220 A$=LEFT$(A$,1)
  21. 230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120
  22. 240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$
  23. 250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A"
  24. 260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2)
  25. 270 INPUT X$
  26. 280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE ";
  27. 290 INPUT A$
  28. 300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280
  29. 310 IF A$="Y" THEN B$="N"
  30. 320 IF A$="N" THEN B$="Y"
  31. 330 Z1=VAL(A$(0))
  32. 340 A$(0)=STR$(Z1+2)
  33. 350 A$(Z1)=A$(K)
  34. 360 A$(Z1+1)="\A"+V$
  35. 370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\"
  36. 380 GOTO 120
  37. 390 REM     SUBROUTINE TO PRINT QUESTIONS
  38. 400 Q$=A$(K)
  39. 410 FOR Z=3 TO LEN(Q$)
  40. 415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);
  41. 417 NEXT Z
  42. 420 INPUT C$
  43. 430 C$=LEFT$(C$,1)
  44. 440 IF C$<>"Y" AND C$<>"N" THEN 410
  45. 450 T$="\"+C$
  46. 455 FOR X=3 TO LEN(Q$)-1
  47. 460 IF MID$(Q$,X,2)=T$ THEN 480
  48. 470 NEXT X
  49. 475 STOP
  50. 480 FOR Y=X+1 TO LEN(Q$)
  51. 490 IF MID$(Q$,Y,1)="\" THEN 510
  52. 500 NEXT Y
  53. 505 STOP
  54. 510 K=VAL(MID$(Q$,X+2,Y-X-2))
  55. 520 RETURN
  56. 530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD"
  57. 600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:"
  58. 605 X=0
  59. 610 FOR I=1 TO 200
  60. 620 IF LEFT$(A$(I),2)<>"\A" THEN 650
  61. 624 PRINT TAB(15*X);
  62. 630 FOR Z=3 TO LEN(A$(I))
  63. 640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);
  64. 642 NEXT Z
  65. 645 X=X+1: IF X=4 THEN X=0: PRINT
  66. 650 NEXT I
  67. 660 PRINT
  68. 670 PRINT
  69. 680 GOTO 120
  70. 999 END
  71.  
that we can call "spaghetti code"... the program runs ok... but its readableness is very poor, now think how  you work to modify this code to guess a number at the place of an animal...the maintenance is harder than a program with code written using the structured technique

this one also using GOTO has a more readableness
Code: QB64: [Select]
  1. 5 CLS
  2. PRINT "1) ADD"
  3. PRINT "2) MULTIPLY"
  4. PRINT "3) DIVIDE"
  5. PRINT "4) SQUARE ROOT"
  6. PRINT "5) EXIT"
  7. IF I = 1 GOTO 10
  8. IF I = 2 GOTO 20
  9. IF I = 3 GOTO 30
  10. IF I = 4 GOTO 40
  11. IF I = 5 GOTO 50
  12. 10 CLS : PRINT "INPUT NUMBER"
  13. PRINT "INPUT NEXT NUMBER"
  14. PRINT A + B
  15. PRINT "PRESS SPACE TO RUN"
  16. 20 CLS : PRINT "INPUT NUMBER"
  17. PRINT "INPUT NEXT NUMBER"
  18. PRINT C * D
  19. PRINT "PRESS SPACE TO RUN"
  20. 30 CLS : PRINT "INPUT NUMBER"
  21. PRINT "INPUT NEXT NUMBER"
  22. PRINT E / F
  23. PRINT "PRESS SPACE TO RUN"
  24. 40 CLS : PRINT "INPUT NUMBER"
  25. PRINT "PRESS SPACE TO RUN"
  26. 50 END
  27.  

Today we can avoid this kind of GOTOing, here the same code structured
Code: QB64: [Select]
  1.     Info
  2.     INPUT I
  3.     SELECT CASE I
  4.         CASE 1
  5.             CLS: PRINT "INPUT NUMBER"
  6.             INPUT A
  7.             CLS
  8.             PRINT "INPUT NEXT NUMBER"
  9.             INPUT B
  10.             CLS
  11.             PRINT A + B
  12.             PRINT "PRESS SPACE TO RUN"
  13.             SLEEP 0
  14.  
  15.         CASE 2
  16.             CLS: PRINT "INPUT NUMBER"
  17.             INPUT C
  18.             CLS
  19.             PRINT "INPUT NEXT NUMBER"
  20.             INPUT D
  21.             CLS
  22.             PRINT C * D
  23.             PRINT "PRESS SPACE TO RUN"
  24.             SLEEP 0
  25.  
  26.         CASE 3
  27.             CLS: PRINT "INPUT NUMBER"
  28.             INPUT E
  29.             CLS
  30.             PRINT "INPUT NEXT NUMBER"
  31.             INPUT F
  32.             CLS
  33.             PRINT E / F
  34.             PRINT "PRESS SPACE TO RUN"
  35.             SLEEP 0
  36.  
  37.         CASE 4
  38.             CLS: PRINT "INPUT NUMBER"
  39.             INPUT G
  40.             CLS
  41.             PRINT SQR(G)
  42.             PRINT "PRESS SPACE TO RUN"
  43.             SLEEP 0
  44.  
  45.         CASE 5
  46.             END
  47.     END SELECT
  48.  
  49.  
  50.  
  51. SUB Info
  52.     CLS
  53.     PRINT "1) ADD"
  54.     PRINT "2) MULTIPLY"
  55.     PRINT "3) DIVIDE"
  56.     PRINT "4) SQUARE ROOT"
  57.     PRINT "5) EXIT"

Here for the coder is easier to modify the instruction if he must add a new function to the calculator for example Substraction! :-)
but using the structured technique you can reach more complex code without loose its readableness
this is an example
Code: QB64: [Select]
  1. DEFINT A-Z
  2. DECLARE FUNCTION chot (t)
  3. DECLARE FUNCTION chou (t)
  4. DECLARE FUNCTION di (d1, d2)
  5. DECLARE FUNCTION lts$ (nu)
  6. DECLARE FUNCTION ltsb$ (nu&)
  7. DECLARE FUNCTION ner (dn, max)
  8. DECLARE FUNCTION nerb& (dn, max&)
  9. DECLARE FUNCTION nerk$ ()
  10. DECLARE SUB act (rl, t)
  11. DECLARE SUB ar (t)
  12. DECLARE SUB auc (t)
  13. DECLARE SUB bca (t, houf, hotf)
  14. DECLARE SUB box ()
  15. DECLARE SUB broke (t)
  16. DECLARE SUB buhot (t)
  17. DECLARE SUB buhou (t)
  18. DECLARE SUB ce (dn, tx$)
  19. DECLARE SUB chk (l, m, h)
  20. DECLARE SUB clk (se!)
  21. DECLARE SUB cont (t, nos)
  22. DECLARE SUB crd ()
  23. DECLARE SUB dcha (t)
  24. DECLARE SUB dche (t)
  25. DECLARE SUB dy (wt)
  26. DECLARE SUB fd (rl1, rl2, d1, d2, d3, d4)
  27. DECLARE SUB gov (t)
  28. DECLARE SUB inc (t)
  29. DECLARE SUB init ()
  30. DECLARE SUB inv ()
  31. DECLARE SUB lil (wt)
  32. DECLARE SUB lop (rl, t)
  33. DECLARE SUB mb ()
  34. DECLARE SUB md ()
  35. DECLARE SUB mini (gr)
  36. DECLARE SUB mob (t)
  37. DECLARE SUB more (t)
  38. DECLARE SUB mort (t)
  39. DECLARE SUB move (dist, t)
  40. DECLARE SUB noo (t)
  41. DECLARE SUB opt (t)
  42. DECLARE SUB pay (t, cge)
  43. DECLARE SUB pim (gr, l, m, h)
  44. DECLARE SUB popp (t, cge)
  45. DECLARE SUB quit ()
  46. DECLARE SUB rlc (t)
  47. DECLARE SUB rules ()
  48. DECLARE SUB save (t)
  49. DECLARE SUB scha ()
  50. DECLARE SUB sche ()
  51. DECLARE SUB short (t, l, m, h)
  52. DECLARE SUB shot (t)
  53. DECLARE SUB shou (t)
  54. DECLARE SUB sml (wt)
  55. DECLARE SUB swbd ()
  56. DECLARE SUB swbs ()
  57. DECLARE SUB tiny (wt)
  58. DECLARE SUB tj (t)
  59. DECLARE SUB tn (t)
  60. DECLARE SUB trade ()
  61. DECLARE SUB unm (t)
  62. DECLARE SUB upd ()
  63. DECLARE SUB utc (t)
  64. DECLARE SUB vwd ()
  65. TYPE dd
  66. ttl AS STRING * 21
  67. ab AS STRING * 5
  68. sty AS STRING * 1
  69. rhot AS INTEGER
  70. stat AS INTEGER
  71. TYPE pl
  72. ft AS STRING * 8
  73. tk AS STRING * 1
  74. chag AS INTEGER
  75. cheg AS INTEGER
  76. DIM SHARED sf!, uf!, j, bn, x, q, fr&, bhu, bht, top(1 TO 6) AS STRING * 7, mdd(1 TO 6) AS STRING * 7, bot(1 TO 6) AS STRING * 7, cha(1 TO 16), che(1 TO 16), lot(39) AS dd, st(1 TO 2) AS pl
  77. mb
  78. md
  79. swbd
  80. cont t, nos
  81. IF nos THEN
  82. rules
  83. bhu = 32
  84. bht = 12
  85. init
  86. t = 1
  87. IF st(1).whr > -10 THEN
  88. LOCATE lot(st(1).whr).od, lot(st(1).whr).oa
  89. PRINT st(1).tk
  90. IF st(2).whr > -10 THEN
  91. LOCATE lot(st(2).whr).id, lot(st(2).whr).ia
  92. PRINT st(2).tk
  93. IF st(t).whr > -10 THEN tn t ELSE tj t
  94. t = 3 - t
  95. 1
  96. CASE 53
  97. nos = -1
  98. CASE 255
  99. ce 10, "The save is faulty."
  100. ce 11, "I will delete it."
  101. p
  102. nos = -1
  103. KILL "monopoly.dat"
  104. box
  105. ce 5, "Crash " + lts(ERR) + " has happened."
  106. ce 7, "Take note of what was going on just before the crash."
  107. ce 9, "Contact me at grahambhg@yahoo.com,"
  108. ce 10, "and I will see what I can do."
  109. crd
  110. DATA ,,o,,,,,,,,,,23,78,21,72,,
  111. DATA Mediterranean Avenue,MEDIT,b,60,2,10,30,90,160,250,50,5,23,68,21,68,22,65
  112. DATA ,,o,,,,,,,,,,23,61,21,61,,
  113. DATA Baltic Avenue,BALTI,b,60,4,20,60,180,320,450,50,5,23,54,21,54,22,51
  114. DATA ,,o,,,,,,,,,,23,47,21,47,,
  115. DATA Reading Railroad,READR,r,200,,25,50,100,200,,,7,23,40,21,40,,
  116. DATA Oriental Avenue,ORIEN,b,100,6,30,90,270,400,550,50,11,23,33,21,33,22,30
  117. DATA ,,o,,,,,,,,,,23,26,21,26,,
  118. DATA Vermont Avenue,VERMO,b,100,6,30,90,270,400,550,50,11,23,19,21,19,22,16
  119. DATA Conneticut Avenue,CONNE,b,120,8,40,100,300,450,600,50,11,23,12,21,12,22,9
  120. DATA ,,o,,,,,,,,,,23,2,21,8,,
  121. DATA Saint Charles Place,STCHA,b,140,10,50,150,450,625,750,100,13,20,2,20,9,20,8
  122. DATA Electric Company,ELECT,u,150,,,,,,,,7,18,2,18,9,,
  123. DATA States Avenue,STATE,b,140,10,50,150,450,625,750,100,13,16,2,16,9,16,8
  124. DATA Virginia Avenue,VIRGI,b,160,12,60,180,500,700,900,100,13,14,2,14,9,14,8
  125. DATA Pennsylvania Railroad,PENRR,r,200,,25,50,100,200,,,7,12,2,12,9,,
  126. DATA Saint James Place,STJAM,b,180,14,70,200,550,750,950,100,12,10,2,10,9,10,8
  127. DATA ,,o,,,,,,,,,,8,2,8,9,,
  128. DATA Tennessee Avenue,TENNE,b,180,14,70,200,550,750,950,100,12,6,2,6,9,6,8
  129. DATA New York Avenue,NEWYO,b,200,16,80,220,600,800,1000,100,12,4,2,4,9,4,8
  130. DATA ,,o,,,,,,,,,,1,2,3,8,,
  131. DATA Kentucky Avenue,KENTU,b,220,18,90,250,700,875,1050,150,4,1,12,3,12,2,15
  132. DATA ,,o,,,,,,,,,,1,19,3,19,,
  133. DATA Indiana Avenue,INDIA,b,220,18,90,250,700,875,1050,150,4,1,26,3,26,2,29
  134. DATA Illinois Avenue,ILLIN,b,240,20,100,300,750,925,1100,150,4,1,33,3,33,2,36
  135. DATA B. & O. Railroad,B&ORR,r,200,,25,50,100,200,,,7,1,40,3,40,,
  136. DATA Atlantic Avenue,ATLAN,b,260,22,110,330,800,975,1150,150,14,1,47,3,47,2,50
  137. DATA Ventnor Avenue,VENTN,b,260,22,110,330,800,975,1150,150,14,1,54,3,54,2,57
  138. DATA Water Works,WATER,u,150,,,,,,,,7,1,61,3,61,,
  139. DATA Marvin Gardens,MARVI,b,280,24,120,360,850,1025,1200,150,14,1,68,3,68,2,71
  140. DATA ,,o,,,,,,,,,,1,78,3,72,,
  141. DATA Pacific Avenue,PACIF,b,300,26,130,390,900,1100,1275,200,10,4,78,4,71,4,72
  142. DATA North Carolina Avenue,NORTH,b,300,26,130,390,900,1100,1275,200,10,6,78,6,71,6,72
  143. DATA ,,o,,,,,,,,,,8,78,8,71,,
  144. DATA Pennsylvania Avenue,PENAV,b,320,28,150,450,1000,1200,1400,200,10,10,78,10,71,10,72
  145. DATA Short Line,SHORT,r,200,,25,50,100,200,,,7,12,78,12,71,,
  146. DATA ,,o,,,,,,,,,,14,78,14,71,,
  147. DATA Park Place,PARKP,b,350,35,175,500,1100,1300,1500,200,9,16,78,16,71,16,72
  148. DATA ,,o,,,,,,,,,,18,78,18,71,,
  149. DATA Boardwalk,BOARD,b,400,50,200,600,1400,1700,2000,200,9,20,78,20,71,20,72
  150.  
  151. SUB act (rl, t)
  152. SELECT CASE st(t).whr
  153. ce 10, "You landed on Go."
  154. IF bn THEN
  155. st(t).c = st(t).c + 200
  156. ce 11, "Collect $400."
  157. ce 11, "Collect $200."
  158. p
  159. CASE 2, 17, 33
  160. dche t
  161. inc t
  162. CASE 7, 22, 36
  163. dcha t
  164. CASE 10
  165. ce 10, "Just visiting"
  166. p
  167. CASE 20
  168. ce 10, "Free Parking"
  169. ce 11, "You get $" + ltsb(fr&)
  170. st(t).c = st(t).c + fr&
  171. fr& = 500
  172. p
  173. CASE 30
  174. ar t
  175. CASE 38
  176. ce 10, "Luxury Tax. Pay $75."
  177. p
  178. pay t, 75
  179. IF j THEN fr& = fr& + 75
  180. p
  181. lop rl, t
  182.  
  183. tx$ = LCASE$(INKEY$)
  184. LOOP UNTIL tx$ > ""
  185. ak = tx$
  186.  
  187. SUB ar (t)
  188. ce 9, RTRIM$(st(t).ft) + " will be sent directly to Jail."
  189. p
  190. IF t = 1 THEN LOCATE lot(st(1).whr).od, lot(st(1).whr).oa ELSE LOCATE lot(st(2).whr).id, lot(st(2).whr).ia
  191. PRINT " "
  192. st(t).whr = -10
  193. st(t).dc = 0
  194. box
  195.  
  196. SUB auc (t)
  197. lwst = INT(.5 + lot(st(t).whr).c / 10)
  198. bj = INT(.5 + lwst / 2)
  199. nw = lwst
  200. box
  201. COLOR lot(st(t).whr).hue
  202. ce 5, RTRIM$(lot(st(t).whr).ttl)
  203. ce 6, RTRIM$(st(1).ft) + ", you have $" + ltsb(st(1).c)
  204. ce 7, "Do I hear $" + lts(nw) + "?"
  205. IF cr(1) + st(1).c >= nw THEN ce 8, "(Y/N)" ELSE ce 8, "press N to Not bid."
  206. yn$ = LCASE$(INKEY$)
  207. LOOP UNTIL yn$ = "n" OR (yn$ = "y" AND cr(1) + st(1).c >= nw)
  208. IF yn$ = "y" THEN
  209. ce 10, " I hear $" + lts(nw)
  210. nw = nw + bj
  211. bidder = 1
  212. ce 10, RTRIM$(st(1).ft) + " passes first bid."
  213. clk .5
  214. box
  215. COLOR lot(st(t).whr).hue
  216. ce 5, RTRIM$(lot(st(t).whr).ttl)
  217. ce 6, RTRIM$(st(2).ft) + ", you have $" + ltsb(st(2).c)
  218. ce 7, "Do I hear $" + lts(nw) + "?"
  219. IF cr(2) + st(2).c >= nw THEN ce 8, "(Y/N)" ELSE ce 8, "press N to Not bid."
  220. yn$ = LCASE$(INKEY$)
  221. LOOP UNTIL yn$ = "n" OR (yn$ = "y" AND cr(2) + st(2).c >= nw)
  222. IF yn$ = "y" THEN
  223. ce 10, " I hear $" + lts(nw)
  224. nw = nw + bj
  225. bidder = 2
  226. ce 9, "Going, going, going..."
  227. clk .5
  228. SELECT CASE bidder
  229. ce 11, "No sale!"
  230. p
  231. pay 1, lwst
  232. COLOR lot(st(t).whr).hue
  233. ce 10, RTRIM$(lot(st(t).whr).ttl)
  234. lot(st(t).whr).own = 1
  235. p
  236. who = 1
  237. box
  238. COLOR lot(st(t).whr).hue
  239. ce 5, RTRIM$(lot(st(t).whr).ttl)
  240. ce 6, RTRIM$(st(who).ft) + ", you have $" + ltsb(st(who).c)
  241. ce 7, "Do I hear $" + lts(nw) + "?"
  242. IF cr(who) + st(who).c >= nw THEN ce 8, "(Y/N)" ELSE ce 8, "press N to Not bid."
  243. yn$ = LCASE$(INKEY$)
  244. LOOP UNTIL yn$ = "n" OR (yn$ = "y" AND cr(who) + st(who).c >= nw)
  245. IF yn$ = "y" THEN
  246. ce 10, " I hear $" + lts(nw)
  247. nw = nw + bj
  248. bidder = who
  249. ce 9, "Going, going, going..."
  250. done = -1
  251. clk .5
  252. who = 3 - who
  253. LOOP UNTIL done
  254. COLOR lot(st(t).whr).hue
  255. ce 10, RTRIM$(lot(st(t).whr).ttl)
  256. pay bidder, nw - bj
  257. lot(st(t).whr).own = bidder
  258. p
  259.  
  260. SUB b
  261. FOR al = 300 TO 500 STEP 100
  262. SOUND al, 2
  263.  
  264. SUB bca (t, houf, hotf)
  265. hss = chou(t)
  266. hts = chot(t)
  267. ce 8, RTRIM$(st(t).ft) + ", you have " + lts(hss) + " house(s) and " + lts(hts) + " hotel(s)."
  268. fee = hss * houf + hts * hotf
  269. ce 9, "$" + lts(fee) + " due."
  270. p
  271. IF fee = 0 THEN EXIT SUB
  272. pay t, fee
  273. p
  274. IF j THEN fr& = fr& + fee
  275.  
  276. SUB box
  277. ce 4, CHR$(201) + STRING$(59, 205) + CHR$(187)
  278. FOR sides = 5 TO 17
  279. ce sides, CHR$(186) + SPACE$(59) + CHR$(186)
  280. ce 18, CHR$(204) + STRING$(8, 205) + CHR$(187) + SPACE$(50) + CHR$(186)
  281. ce 19, CHR$(186) + SPACE$(8) + CHR$(186) + SPACE$(50) + CHR$(186)
  282. ce 20, CHR$(200) + STRING$(8, 205) + CHR$(202) + STRING$(50, 205) + CHR$(188)
  283. LOCATE 19, 11
  284. PRINT "JAIL:"
  285. IF st(1).whr = -10 THEN
  286. LOCATE 19, 16
  287. PRINT st(1).tk
  288. IF st(2).whr = -10 THEN
  289. LOCATE 19, 18
  290. PRINT st(2).tk
  291. IF (NOT x) THEN
  292. LOCATE 18, 61
  293. PRINT USING "houses:##"; bhu
  294. IF (NOT x) THEN
  295. LOCATE 19, 61
  296. PRINT USING "hotels:##"; bht
  297.  
  298. SUB broke (t)
  299. box
  300. owe = ABS(st(t).c)
  301. v = cr(t)
  302. ce 5, RTRIM$(st(t).ft) + ", you need to raise $" + lts(ABS(owe))
  303. ce 6, "You can raise $" + lts(v)
  304. IF owe > v THEN
  305. ce 12, "YOU ARE BROKE!!"
  306. ce 16, "press Q to Quit game"
  307. done$ = LCASE$(INKEY$)
  308. LOOP UNTIL done$ = "q"
  309. gov 3 - t
  310. ce 9, "press 4 to mortgage properties"
  311. ce 10, "press 5 to sell houses"
  312. ce 11, "press 6 to sell hotels"
  313. ce 13, "press 8 to see inventories"
  314. ce 14, "press 9 to view deeds"
  315. ce 16, "press Q to Quit game"
  316. wtn$ = LCASE$(INKEY$)
  317. wtn = VAL(wtn$)
  318. LOOP UNTIL wtn$ > ""
  319. IF wtn$ = "q" THEN quit
  320. mort t
  321. shou t
  322. swbs
  323. shot t
  324. swbs
  325. inv
  326. vwd
  327. LOOP UNTIL st(t).c >= 0
  328. box
  329.  
  330. SUB buhot (t)
  331. DIM gm(9)
  332. gm(0) = -1
  333. box
  334. IF lot(1).own = t AND lot(1).stat = 4 AND st(t).c >= 50 AND bht > 0 THEN
  335. gm(1) = -1
  336. mini 1
  337. IF lot(6).own = t AND lot(6).stat = 4 AND st(t).c >= 50 AND bht > 0 THEN
  338. gm(2) = -1
  339. mini 2
  340. IF lot(11).own = t AND lot(11).stat = 4 AND st(t).c >= 100 AND bht > 0 THEN
  341. gm(3) = -1
  342. mini 3
  343. IF lot(16).own = t AND lot(16).stat = 4 AND st(t).c >= 100 AND bht > 0 THEN
  344. gm(4) = -1
  345. mini 4
  346. IF lot(21).own = t AND lot(21).stat = 4 AND st(t).c >= 150 AND bht > 0 THEN
  347. gm(5) = -1
  348. mini 5
  349. IF lot(26).own = t AND lot(26).stat = 4 AND st(t).c >= 150 AND bht > 0 THEN
  350. gm(6) = -1
  351. mini 6
  352. IF lot(31).own = t AND lot(31).stat = 4 AND st(t).c >= 200 AND bht > 0 THEN
  353. gm(7) = -1
  354. mini 7
  355. IF lot(37).own = t AND lot(37).stat = 4 AND st(t).c >= 200 AND bht > 0 THEN
  356. gm(8) = -1
  357. mini 8
  358. ce 9, RTRIM$(st(t).ft)
  359. ce 10, "Choose a monopoly to buy hotels for"
  360. ce 11, "or 0 to continue"
  361. IF wlb > 0 AND (NOT q) THEN b
  362. wlb$ = INKEY$
  363. IF wlb$ = CHR$(13) THEN wlb$ = "0"
  364. LOOP UNTIL wlb$ > ""
  365. IF wlb$ >= "0" AND wlb$ <= "8" THEN wlb = VAL(wlb$) ELSE wlb = 9
  366. LOOP UNTIL gm(wlb)
  367. IF wlb = 0 THEN EXIT SUB
  368. box
  369. ce 5, RTRIM$(st(t).ft)
  370. pim wlb, l, m, h
  371. IF lot(h).stat = 5 THEN max = 1 ELSE max = 2
  372. max = 3
  373. IF lot(h).stat = 5 THEN max = 2
  374. IF lot(m).stat = 5 THEN max = 1
  375. IF max > bht THEN max = bht
  376. IF max > INT(st(t).c / lot(l).bc) THEN max = INT(st(t).c / lot(l).bc)
  377. ce 7, "you can buy up to " + lts(max) + " hotel(s)."
  378. ce 8, "or 0 to continue"
  379. ce 10, "you have $" + ltsb(st(t).c)
  380. ce 11, "hotels cost $" + lts(lot(l).bc) + " (plus four houses) each."
  381. quan = ner(9, max)
  382. IF quan = 0 THEN EXIT SUB
  383. tot = lot(l).stat + lot(m).stat + lot(h).stat + quan
  384. lot(h).stat = INT(tot / 2)
  385. lot(l).stat = INT(tot / 2)
  386. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  387. lot(h).stat = INT(tot / 3)
  388. lot(m).stat = INT(tot / 3)
  389. lot(l).stat = INT(tot / 3)
  390. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  391. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  392. pay t, lot(l).bc * quan
  393. p
  394. IF (NOT x) THEN
  395. bht = bht - quan
  396. bhu = bhu + quan * 4
  397.  
  398. SUB buhou (t)
  399. DIM gm(9)
  400. gm(0) = -1
  401. box
  402. IF lot(1).own = t AND lot(1).mop AND (NOT lot(1).hk) AND (NOT lot(3).hk) AND lot(1).stat < 4 AND st(t).c >= 50 AND bhu > 0 THEN
  403. gm(1) = -1
  404. mini 1
  405. IF lot(6).own = t AND lot(6).mop AND (NOT lot(6).hk) AND (NOT lot(8).hk) AND (NOT lot(9).hk) AND lot(6).stat < 4 AND st(t).c >= 50 AND bhu > 0 THEN
  406. gm(2) = -1
  407. mini 2
  408. IF lot(11).own = t AND lot(11).mop AND (NOT lot(11).hk) AND (NOT lot(13).hk) AND (NOT lot(14).hk) AND lot(11).stat < 4 AND st(t).c >= 100 AND bhu > 0 THEN
  409. gm(3) = -1
  410. mini 3
  411. IF lot(16).own = t AND lot(16).mop AND (NOT lot(16).hk) AND (NOT lot(18).hk) AND (NOT lot(19).hk) AND lot(16).stat < 4 AND st(t).c >= 100 AND bhu > 0 THEN
  412. gm(4) = -1
  413. mini 4
  414. IF lot(21).own = t AND lot(21).mop AND (NOT lot(21).hk) AND (NOT lot(23).hk) AND (NOT lot(24).hk) AND lot(21).stat < 4 AND st(t).c >= 150 AND bhu > 0 THEN
  415. gm(5) = -1
  416. mini 5
  417. IF lot(26).own = t AND lot(26).mop AND (NOT lot(26).hk) AND (NOT lot(27).hk) AND (NOT lot(29).hk) AND lot(26).stat < 4 AND st(t).c >= 150 AND bhu > 0 THEN
  418. gm(6) = -1
  419. mini 6
  420. IF lot(31).own = t AND lot(31).mop AND (NOT lot(31).hk) AND (NOT lot(32).hk) AND (NOT lot(34).hk) AND lot(31).stat < 4 AND st(t).c >= 200 AND bhu > 0 THEN
  421. gm(7) = -1
  422. mini 7
  423. IF lot(37).own = t AND lot(37).mop AND (NOT lot(37).hk) AND (NOT lot(39).hk) AND lot(37).stat < 4 AND st(t).c >= 200 AND bhu > 0 THEN
  424. gm(8) = -1
  425. mini 8
  426. ce 9, RTRIM$(st(t).ft)
  427. ce 10, "Choose a monopoly to buy houses for"
  428. ce 11, "or 0 to continue"
  429. IF wlb > 0 AND (NOT q) THEN b
  430. wlb$ = INKEY$
  431. IF wlb$ = CHR$(13) THEN wlb$ = "0"
  432. LOOP UNTIL wlb$ > ""
  433. IF wlb$ >= "0" AND wlb$ <= "8" THEN wlb = VAL(wlb$) ELSE wlb = 9
  434. LOOP UNTIL gm(wlb)
  435. IF wlb = 0 THEN EXIT SUB
  436. box
  437. ce 5, RTRIM$(st(t).ft)
  438. pim wlb, l, m, h
  439. max = 8 - lot(l).stat - lot(h).stat
  440. max = 12 - lot(l).stat - lot(m).stat - lot(h).stat
  441. IF max > bhu THEN max = bhu
  442. IF max > INT(st(t).c / lot(l).bc) THEN max = INT(st(t).c / lot(l).bc)
  443. ce 7, "you can buy up to " + lts(max) + " house(s)."
  444. ce 8, "or 0 to continue"
  445. ce 10, "you have $" + ltsb(st(t).c)
  446. ce 11, "houses cost $" + lts(lot(l).bc) + " each."
  447. quan = ner(9, max)
  448. IF quan = 0 THEN EXIT SUB
  449. tot = lot(l).stat + lot(m).stat + lot(h).stat + quan
  450. lot(h).stat = INT(tot / 2)
  451. lot(l).stat = INT(tot / 2)
  452. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  453. lot(h).stat = INT(tot / 3)
  454. lot(m).stat = INT(tot / 3)
  455. lot(l).stat = INT(tot / 3)
  456. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  457. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  458. pay t, lot(l).bc * quan
  459. p
  460. IF (NOT x) THEN bhu = bhu - quan
  461.  
  462. SUB ce (dn, tx$)
  463. LOCATE dn, 40 - INT(LEN(tx$) / 2)
  464. PRINT tx$
  465.  
  466. SUB chk (l, m, h)
  467. IF lot(l).own = lot(m).own AND lot(m).own = lot(h).own AND lot(l).own > 0 THEN
  468. lot(l).mop = -1
  469. lot(m).mop = -1
  470. lot(h).mop = -1
  471. lot(l).mop = 0
  472. lot(m).mop = 0
  473. lot(h).mop = 0
  474.  
  475. FUNCTION chot (t)
  476. FOR sq = 1 TO 39
  477. IF lot(sq).sty = "b" AND lot(sq).own = t AND lot(sq).stat = 5 THEN ced = ced + 1
  478. chot = ced
  479.  
  480. FUNCTION chou (t)
  481. FOR sq = 1 TO 39
  482. IF lot(sq).sty = "b" AND lot(sq).own = t AND lot(sq).stat < 5 THEN ced = ced + lot(sq).stat
  483. chou = ced
  484.  
  485. SUB clk (se!)
  486. start# = TIMER
  487. IF se! >= .1 THEN
  488. LOOP UNTIL TIMER < start# OR TIMER - start# >= se!
  489.  
  490. SUB cont (t, nos)
  491. OPEN "monopoly.dat" FOR INPUT AS #1
  492. IF (NOT nos) THEN
  493. ce 5, "I found a save."
  494. ce 7, "Do you want to continue prior game? (Y/N)"
  495. yn$ = LCASE$(INKEY$)
  496. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  497. ce 8, UCASE$(yn$)
  498. p
  499. IF yn$ = "n" THEN
  500. nos = -1
  501. INPUT #1, sf!
  502. IF sf! <> 1 AND sf! <> .5 THEN GOTO oops
  503. INPUT #1, uf!
  504. IF uf! <> .5 AND uf! <> .55 THEN GOTO oops
  505. INPUT #1, t
  506. IF t < 1 OR t > 2 THEN GOTO oops
  507. INPUT #1, fr&
  508. IF fr& < 0 THEN GOTO oops
  509. INPUT #1, bhu
  510. IF bhu < 0 OR bhu > 32 THEN GOTO oops
  511. INPUT #1, bht
  512. IF bht < 0 OR bht > 12 THEN GOTO oops
  513. INPUT #1, j
  514. IF j < -1 OR j > 0 THEN GOTO oops
  515. INPUT #1, bn
  516. IF bn < -1 OR bn > 0 THEN GOTO oops
  517. INPUT #1, x
  518. IF x < -1 OR x > 0 THEN GOTO oops
  519. INPUT #1, q
  520. IF q < -1 OR q > 0 THEN GOTO oops
  521. FOR sq = 0 TO 39
  522. INPUT #1, lot(sq).own
  523. IF lot(sq).own < 0 OR lot(sq).own > 2 THEN GOTO oops
  524. INPUT #1, lot(sq).stat
  525. IF lot(sq).stat < 0 OR lot(sq).stat > 5 THEN GOTO oops
  526. INPUT #1, lot(sq).mop
  527. IF lot(sq).mop < -1 OR lot(sq).mop > 0 THEN GOTO oops
  528. INPUT #1, lot(sq).hk
  529. IF lot(sq).hk < -1 OR lot(sq).hk > 0 THEN GOTO oops
  530. FOR sq = 1 TO 2
  531. INPUT #1, st(sq).ft
  532. INPUT #1, st(sq).tk
  533. INPUT #1, st(sq).c
  534. IF st(sq).c < 0 THEN GOTO oops
  535. INPUT #1, st(sq).whr
  536. IF (st(sq).whr < 0 OR st(sq).whr > 39) AND st(sq).whr <> -10 THEN GOTO oops
  537. INPUT #1, st(sq).jc
  538. IF st(sq).jc < 0 OR st(sq).jc > 2 THEN GOTO oops
  539. INPUT #1, st(sq).dc
  540. IF st(sq).dc < 0 OR st(sq).dc > 2 THEN GOTO oops
  541. INPUT #1, st(sq).chag
  542. IF st(sq).chag < -1 OR st(sq).chag > 0 THEN GOTO oops
  543. INPUT #1, st(sq).cheg
  544. IF st(sq).cheg < -1 OR st(sq).cheg > 0 THEN GOTO oops
  545. FOR sq = 1 TO 16
  546. INPUT #1, cha(sq)
  547. IF cha(sq) < 0 OR cha(sq) > 2 THEN GOTO oops
  548. INPUT #1, che(sq)
  549. IF che(sq) < 0 OR che(sq) > 2 THEN GOTO oops
  550. KILL "monopoly.dat"
  551. upd
  552. oops:
  553. ERROR 255
  554.  
  555. FUNCTION cr (t)
  556. FOR sq = 1 TO 39
  557. IF lot(sq).own = t THEN
  558. IF (NOT lot(sq).hk) THEN current = current + lot(sq).c / 2
  559. IF lot(sq).sty = "b" THEN current = current + lot(sq).bc * lot(sq).stat * sf!
  560. cr = current
  561.  
  562. SUB crd
  563. ce 12, "Program written by Brian H. Graham."
  564. ce 13, "Based on the board game 'Monopoly' by Parker Brothers."
  565. p
  566. LOCATE 25, 1
  567.  
  568. FUNCTION cw (t)
  569. FOR sq = 1 TO 39
  570. IF lot(sq).own = t THEN
  571. IF lot(sq).hk THEN current = current + lot(sq).c / 2 ELSE current = current + lot(sq).c
  572. IF lot(sq).sty = "b" THEN current = current + lot(sq).bc * lot(sq).stat
  573. cw = current + st(t).c
  574.  
  575. SUB dcha (t)
  576. FOR look = 1 TO 16
  577. IF cha(look) > 0 THEN ucha = ucha + 1
  578. IF ucha = 16 THEN scha
  579. box
  580. ce 5, RTRIM$(st(t).ft)
  581. cd = INT(RND * 16) + 1
  582. LOOP UNTIL cha(cd) = 0
  583. cha(cd) = 1
  584. ce 6, "Chance"
  585. ce 7, "Advance to Go. (Collect $200.)"
  586. p
  587. move 40 - st(t).whr, t
  588. p
  589. ce 7, "Advance to Illinois Avenue."
  590. p
  591. IF st(t).whr < 24 THEN move 24 - st(t).whr, t ELSE move 64 - st(t).whr, t
  592. lop rl, t
  593. ce 7, "Advance to the nearest Utility."
  594. ce 8, "If it is owned, roll the dice,"
  595. ce 9, "and pay the own ten times the amount shown."
  596. ce 10, "If it is not owned, you may buy it."
  597. p
  598. SELECT CASE st(t).whr
  599. move 12 - st(t).whr, t
  600. CASE 22
  601. move 28 - st(t).whr, t
  602. CASE 36
  603. move 52 - st(t).whr, t
  604. utc t
  605. CASE 4, 5
  606. ce 7, "Advance to the next Railroad."
  607. ce 8, "If it is owned, pay the own double"
  608. ce 9, "the rent he/she is usually entitled."
  609. ce 10, "If it is not owned, you may buy it."
  610. p
  611. SELECT CASE st(t).whr
  612. move 15 - st(t).whr, t
  613. CASE 22
  614. move 25 - st(t).whr, t
  615. CASE 36
  616. move 45 - st(t).whr, t
  617. rlc t
  618. ce 7, "Advance to Saint Charles Place."
  619. ce 8, "If you pass Go, collect $200."
  620. p
  621. IF st(t).whr < 11 THEN move 11 - st(t).whr, t ELSE move 51 - st(t).whr, t
  622. lop rl, t
  623. ce 7, "Bank pays you dividend of $50."
  624. st(t).c = st(t).c + 50
  625. p
  626. ce 7, "Get out of Jail free."
  627. ce 8, "This card may be kept until used or traded."
  628. cha(8) = 2
  629. st(t).chag = -1
  630. p
  631. ce 7, "Go back three spaces."
  632. p
  633. mob t
  634. act rl, t
  635. CASE 10
  636. ce 7, "Go directly to Jail."
  637. ce 8, "Do not pass Go, Do not collect $200."
  638. p
  639. ar t
  640. CASE 11
  641. ce 7, "Make general repairs on all you properties."
  642. ce 8, "Pay $25 per house, $100 per hotel."
  643. bca t, 25, 100
  644. CASE 12
  645. ce 7, "Pay poor tax of $15."
  646. p
  647. pay t, 15
  648. IF j THEN fr& = fr& + 15
  649. p
  650. CASE 13
  651. ce 7, "Take a ride on the Reading."
  652. ce 8, "Advance to Reading Railroad."
  653. ce 9, "Collect $200 if you pass Go."
  654. p
  655. move 45 - st(t).whr, t
  656. lop rl, t
  657. CASE 14
  658. ce 7, "Take a walk on the boardwalk."
  659. ce 8, "Advance to Boardwalk."
  660. p
  661. move 39 - st(t).whr, t
  662. lop rl, t
  663. CASE 15
  664. ce 7, "You have been elected chairman of the board."
  665. ce 8, "Pay each player $50."
  666. p
  667. popp t, 50
  668. CASE 16
  669. ce 7, "Your building and loan matures. Collect $150."
  670. st(t).c = st(t).c + 150
  671. p
  672.  
  673. SUB dche (t)
  674. FOR look = 1 TO 16
  675. IF che(look) > 0 THEN uche = uche + 1
  676. IF uche = 16 THEN sche
  677. box
  678. ce 5, RTRIM$(st(t).ft)
  679. cd = INT(RND * 16) + 1
  680. LOOP UNTIL che(cd) = 0
  681. che(cd) = 1
  682. ce 6, "Community Chest"
  683. ce 7, "Advance to Go. (Collect $200.)"
  684. p
  685. move 40 - st(t).whr, t
  686. p
  687. ce 7, "Bank error in your favor. Collect $200."
  688. p
  689. st(t).c = st(t).c + 200
  690. ce 7, "Christmas fund matures. Collect $100."
  691. p
  692. st(t).c = st(t).c + 100
  693. ce 7, "Doctor's fee. Pay $50."
  694. p
  695. pay t, 50
  696. p
  697. IF j THEN fr& = fr& + 50
  698. ce 7, "From sale of stock you get $45."
  699. p
  700. st(t).c = st(t).c + 45
  701. ce 7, "Get out of Jail free."
  702. ce 8, "This card may be kept until used or traded."
  703. che(6) = 2
  704. st(t).cheg = -1
  705. p
  706. ce 7, "Go directly to Jail."
  707. ce 8, "Do not pass Go, Do not collect $200."
  708. p
  709. ar t
  710. ce 7, "Grand opera opening. Collect $50 from every player."
  711. p
  712. popp 3 - t, 50
  713. ce 7, "Income tax refund. Collect $20."
  714. p
  715. st(t).c = st(t).c + 20
  716. CASE 10
  717. ce 7, "Life insurance matures. Collect $100."
  718. p
  719. st(t).c = st(t).c + 100
  720. CASE 11
  721. ce 7, "Pay hospital $100."
  722. p
  723. pay t, 100
  724. p
  725. IF j THEN fr& = fr& + 100
  726. CASE 12
  727. ce 7, "Pay school tax of $150."
  728. p
  729. pay t, 150
  730. p
  731. IF j THEN fr& = fr& + 150
  732. CASE 13
  733. ce 7, "Recieve for services $25."
  734. p
  735. st(t).c = st(t).c + 25
  736. CASE 14
  737. ce 7, "You are assesed for street repairs."
  738. ce 8, "$40 per house, $115 per hotel."
  739. bca t, 40, 115
  740. CASE 15
  741. ce 7, "You have won second prize in a beauty contest."
  742. ce 8, "Collect $10."
  743. p
  744. st(t).c = st(t).c + 10
  745. CASE 16
  746. ce 7, "You inherit $100."
  747. p
  748. st(t).c = st(t).c + 100
  749.  
  750. FUNCTION di (d1, d2)
  751. d1 = INT(RND * 6) + 1
  752. d2 = INT(RND * 6) + 1
  753. di = d1 + d2
  754. ce 14, CHR$(218) + STRING$(5, 196) + CHR$(191) + CHR$(218) + STRING$(5, 196) + CHR$(191)
  755. ce 15, top(d1) + top(d2)
  756. ce 16, mdd(d1) + mdd(d2)
  757. ce 17, bot(d1) + bot(d2)
  758. ce 18, CHR$(192) + STRING$(5, 196) + CHR$(217) + CHR$(192) + STRING$(5, 196) + CHR$(217)
  759.  
  760. SUB dy (wt)
  761. PRINT wt;
  762. COLOR lot(wt).hue
  763. PRINT lot(wt).ab;
  764. PRINT " $";
  765. IF lot(wt).hk THEN PRINT lts(INT(.5 + lot(wt).c * uf!)) ELSE PRINT lts(lot(wt).c / 2)
  766.  
  767. SUB fd (rl1, rl2, d1, d2, d3, d4)
  768. d1 = INT(RND * 6) + 1
  769. d2 = INT(RND * 6) + 1
  770. d3 = INT(RND * 6) + 1
  771. d4 = INT(RND * 6) + 1
  772. rl1 = d1 + d2
  773. rl2 = d3 + d4
  774. ce 13, RTRIM$(st(1).ft) + SPACE$(6) + RTRIM$(st(2).ft)
  775. ce 14, CHR$(218) + STRING$(5, 196) + CHR$(191) + CHR$(218) + STRING$(5, 196) + CHR$(191) + SPACE$(6) + CHR$(218) + STRING$(5, 196) + CHR$(191) + CHR$(218) + STRING$(5, 196) + CHR$(191)
  776. ce 15, top(d1) + top(d2) + SPACE$(6) + top(d3) + top(d4)
  777. ce 16, mdd(d1) + mdd(d2) + SPACE$(6) + mdd(d3) + mdd(d4)
  778. ce 17, bot(d1) + bot(d2) + SPACE$(6) + bot(d3) + bot(d4)
  779. ce 18, CHR$(192) + STRING$(5, 196) + CHR$(217) + CHR$(192) + STRING$(5, 196) + CHR$(217) + SPACE$(6) + CHR$(192) + STRING$(5, 196) + CHR$(217) + CHR$(192) + STRING$(5, 196) + CHR$(217)
  780.  
  781. SUB gov (t)
  782. st(1).whr = 0
  783. st(2).whr = 0
  784. x = -1
  785. swbd
  786. IF t = 0 THEN
  787. ce 5, "This game was a tie!"
  788. ce 7, "Thank you for playing " + RTRIM$(st(1).ft) + " and " + RTRIM$(st(2).ft)
  789. ce 5, RTRIM$(st(t).ft) + " has won!!!"
  790. ce 8, "Better luck next time " + RTRIM$(st(3 - t).ft)
  791. crd
  792.  
  793. SUB inc (t)
  794. box
  795. ce 5, RTRIM$(st(t).ft)
  796. ce 6, "Income Tax"
  797. ce 8, "press W to pay 10% of your Worth"
  798. ce 9, "press F to pay $200 Flat rate"
  799. taxopt$ = LCASE$(INKEY$)
  800. LOOP UNTIL taxopt$ = "f" OR taxopt$ = "w"
  801. IF taxopt$ = "f" THEN fee = 200 ELSE fee = INT(.5 + cw(t) / 10)
  802. ce 10, UCASE$(taxopt$) + ", $" + lts(fee) + " due."
  803. p
  804. pay t, fee
  805. p
  806. IF j THEN fr& = fr& + fee
  807.  
  808. SUB init
  809. alto$ = CHR$(2) + CHR$(3) + CHR$(4) + CHR$(5) + CHR$(6) + CHR$(21) + CHR$(157) + CHR$(232) + CHR$(233) + CHR$(236)
  810. FOR wide = 1 TO 10
  811. wide$ = wide$ + MID$(alto$, wide, 1) + " "
  812. wide$ = RTRIM$(wide$)
  813. FOR sq = 1 TO 2
  814. box
  815. ce 5, "Player " + lts(sq) + " first name"
  816. who$ = ""
  817. ltr$ = txk
  818. IF ltr$ = CHR$(8) AND LEN(who$) > 0 THEN
  819. who$ = LEFT$(who$, (LEN(who$) - 1))
  820. IF ltr$ <> CHR$(13) AND ltr$ <> CHR$(8) THEN who$ = who$ + ltr$
  821. IF LEN(who$) < 9 THEN
  822. ce 6, SPACE$(10)
  823. ce 6, who$
  824. LOOP UNTIL ltr$ = CHR$(13) OR LEN(who$) = 10
  825. st(sq).ft = who$
  826. LOOP UNTIL st(1).ft <> st(2).ft AND st(sq).ft <> SPACE$(8)
  827. ce 7, "pick a token"
  828. ce 8, wide$
  829. ce 9, "1 2 3 4 5 6 7 8 9 0"
  830. IF hide > 0 THEN
  831. LOCATE 8, hide * 2 + 29
  832. PRINT " "
  833. LOCATE 9, hide * 2 + 29
  834. PRINT " "
  835. pick$ = INKEY$
  836. pick = VAL(pick$)
  837. IF pick = 0 THEN pick = 10
  838. LOOP UNTIL pick$ >= "0" AND pick$ <= "9" AND pick <> hide
  839. hide = pick
  840. st(sq).tk = MID$(alto$, hide, 1)
  841. st(sq).c = 1500
  842. ce 11, lts(pick) + ", " + st(sq).tk
  843. p
  844. box
  845. fd rl1, rl2, d1, d2, d3, d4
  846. ce 5, "Determining who goes first:"
  847. ce 7, RTRIM$(st(1).ft) + " rolls " + lts(d1) + " + " + lts(d2) + " = " + lts(rl1)
  848. ce 8, RTRIM$(st(2).ft) + " rolls " + lts(d3) + " + " + lts(d4) + " + " + lts(rl2)
  849. IF rl1 = rl2 THEN
  850. ce 10, "No decision. I will try again."
  851. p
  852. LOOP UNTIL rl1 <> rl2
  853. IF rl2 > rl1 THEN SWAP st(1), st(2)
  854. ce 10, "This means " + RTRIM$(st(1).ft) + " goes first."
  855. p
  856.  
  857. SUB inv
  858. FOR look = 0 TO 2
  859. box
  860. IF lot(1).own = look THEN
  861. LOCATE 5, 11
  862. lil 1
  863. IF lot(3).own = look THEN
  864. LOCATE 6, 11
  865. lil 3
  866. IF lot(5).own = look THEN
  867. LOCATE 7, 11
  868. lil 5
  869. IF lot(6).own = look THEN
  870. LOCATE 8, 11
  871. lil 6
  872. IF lot(8).own = look THEN
  873. LOCATE 9, 11
  874. lil 8
  875. IF lot(9).own = look THEN
  876. LOCATE 10, 11
  877. lil 9
  878. IF lot(11).own = look THEN
  879. LOCATE 5, 26
  880. lil 11
  881. IF lot(12).own = look THEN
  882. LOCATE 6, 26
  883. lil 12
  884. IF lot(13).own = look THEN
  885. LOCATE 7, 26
  886. lil 13
  887. IF lot(14).own = look THEN
  888. LOCATE 8, 26
  889. lil 14
  890. IF lot(15).own = look THEN
  891. LOCATE 9, 26
  892. lil 15
  893. IF lot(16).own = look THEN
  894. LOCATE 10, 26
  895. lil 16
  896. IF lot(18).own = look THEN
  897. LOCATE 11, 26
  898. lil 18
  899. IF lot(19).own = look THEN
  900. LOCATE 12, 26
  901. lil 19
  902. IF lot(21).own = look THEN
  903. LOCATE 5, 41
  904. lil 21
  905. IF lot(23).own = look THEN
  906. LOCATE 6, 41
  907. lil 23
  908. IF lot(24).own = look THEN
  909. LOCATE 7, 41
  910. lil 24
  911. IF lot(25).own = look THEN
  912. LOCATE 8, 41
  913. lil 25
  914. IF lot(26).own = look THEN
  915. LOCATE 9, 41
  916. lil 26
  917. IF lot(27).own = look THEN
  918. LOCATE 10, 41
  919. lil 27
  920. IF lot(28).own = look THEN
  921. LOCATE 11, 41
  922. lil 28
  923. IF lot(29).own = look THEN
  924. LOCATE 12, 41
  925. lil 29
  926. IF lot(31).own = look THEN
  927. LOCATE 5, 56
  928. lil 31
  929. IF lot(32).own = look THEN
  930. LOCATE 6, 56
  931. lil 32
  932. IF lot(34).own = look THEN
  933. LOCATE 7, 56
  934. lil 34
  935. IF lot(35).own = look THEN
  936. LOCATE 8, 56
  937. lil 35
  938. IF lot(37).own = look THEN
  939. LOCATE 9, 56
  940. lil 37
  941. IF lot(39).own = look THEN
  942. LOCATE 10, 56
  943. lil 39
  944. ce 14, "unowned properties"
  945. IF j THEN ce 16, "Free Parking has $" + ltsb(fr&)
  946. CASE 1, 2
  947. IF st(look).chag THEN
  948. LOCATE 12, 11
  949. PRINT "GOOJF";
  950. PRINT " Chance"
  951. IF st(look).cheg THEN
  952. LOCATE 12, 56
  953. PRINT "GOOJF";
  954. PRINT " Cm Chst"
  955. ce 14, RTRIM$(st(look).ft) + ", your properties"
  956. ce 15, "you are the " + st(look).tk
  957. IF st(look).c >= 0 THEN ce 16, "you have $" + ltsb(st(look).c) ELSE ce 16, "you need to raise $" + lts(ABS(st(look).c))
  958. p
  959.  
  960. SUB lil (wt)
  961. COLOR lot(wt).hue
  962. PRINT lot(wt).ab;
  963. IF lot(wt).hk THEN
  964. PRINT " mort"
  965. IF lot(wt).own > 0 THEN
  966. SELECT CASE lot(wt).stat
  967. IF lot(wt).mop THEN PRINT " doubl" ELSE PRINT " plain"
  968. SELECT CASE lot(wt).sty
  969. CASE "b"
  970. PRINT " 1 hse"
  971. CASE "r"
  972. PRINT " 1 rr"
  973. CASE "u"
  974. PRINT " 1 utl"
  975. SELECT CASE lot(wt).sty
  976. CASE "b"
  977. PRINT " 2 hses"
  978. CASE "r"
  979. PRINT " 2 rrs"
  980. CASE "u"
  981. PRINT " 2 utls"
  982. SELECT CASE lot(wt).sty
  983. CASE "b"
  984. PRINT " 3 hses"
  985. CASE "r"
  986. PRINT " 3 rrs"
  987. SELECT CASE lot(wt).sty
  988. CASE "b"
  989. PRINT " 4 hses"
  990. CASE "r"
  991. PRINT " 4 rrs"
  992. PRINT " hotel"
  993.  
  994. SUB lop (rl, t)
  995. IF lot(st(t).whr).own = 0 THEN
  996. noo t
  997. IF lot(st(t).whr).own = t THEN
  998. COLOR lot(st(t).whr).hue
  999. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1000. ce 13, "is yours."
  1001. p
  1002. IF lot(st(t).whr).hk THEN
  1003. COLOR lot(st(t).whr).hue
  1004. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1005. ce 13, "is mortgaged."
  1006. p
  1007. SELECT CASE lot(st(t).whr).stat
  1008. IF lot(st(t).whr).mop THEN popp t, lot(st(t).whr).r * 2 ELSE popp t, lot(st(t).whr).r
  1009. IF lot(st(t).whr).sty = "u" THEN popp t, 4 * rl ELSE popp t, lot(st(t).whr).r1
  1010. IF lot(st(t).whr).sty = "u" THEN popp t, 10 * rl ELSE popp t, lot(st(t).whr).r2
  1011. popp t, lot(st(t).whr).r3
  1012. popp t, lot(st(t).whr).r4
  1013. popp t, lot(st(t).whr).rhot
  1014.  
  1015. FUNCTION lts$ (nu)
  1016. lts = LTRIM$(STR$(nu))
  1017.  
  1018. FUNCTION ltsb$ (nu&)
  1019. ltsb = LTRIM$(STR$(nu&))
  1020.  
  1021. SUB mb
  1022. FOR sq = 0 TO 39
  1023. READ lot(sq).ttl
  1024. READ lot(sq).ab
  1025. READ lot(sq).sty
  1026. READ lot(sq).c
  1027. READ lot(sq).r
  1028. READ lot(sq).r1
  1029. READ lot(sq).r2
  1030. READ lot(sq).r3
  1031. READ lot(sq).r4
  1032. READ lot(sq).rhot
  1033. READ lot(sq).bc
  1034. READ lot(sq).hue
  1035. READ lot(sq).od
  1036. READ lot(sq).oa
  1037. READ lot(sq).id
  1038. READ lot(sq).ia
  1039. READ lot(sq).bdn
  1040. READ lot(sq).bac
  1041.  
  1042. SUB md
  1043. p0$ = CHR$(179) + SPACE$(5) + CHR$(179)
  1044. p1a$ = CHR$(179) + "@" + SPACE$(4) + CHR$(179)
  1045. p1b$ = CHR$(179) + SPACE$(2) + "@" + SPACE$(2) + CHR$(179)
  1046. p1c$ = CHR$(179) + SPACE$(4) + "@" + CHR$(179)
  1047. p2$ = CHR$(179) + "@" + SPACE$(3) + "@" + CHR$(179)
  1048. top(1) = p0$
  1049. mdd(1) = p1b$
  1050. bot(1) = p0$
  1051. top(2) = p1a$
  1052. mdd(2) = p0$
  1053. bot(2) = p1c$
  1054. top(3) = p1a$
  1055. mdd(3) = p1b$
  1056. bot(3) = p1c$
  1057. top(4) = p2$
  1058. mdd(4) = p0$
  1059. bot(4) = p2$
  1060. top(5) = p2$
  1061. mdd(5) = p1b$
  1062. bot(5) = p2$
  1063. top(6) = p2$
  1064. mdd(6) = p2$
  1065. bot(6) = p2$
  1066.  
  1067. SUB mini (gr)
  1068. dn = 5
  1069. ac = 11
  1070. mophue = 5
  1071. mopstr$ = "MEDIT/BALTI"
  1072. dn = 6
  1073. ac = 11
  1074. mophue = 11
  1075. mopstr$ = "OREIN/VERMO/CONNE"
  1076. dn = 7
  1077. ac = 11
  1078. mophue = 13
  1079. mopstr$ = "STCHA/STATE/VIRGI"
  1080. dn = 8
  1081. ac = 11
  1082. mophue = 12
  1083. mopstr$ = "STJAM/TENNE/NEWYO"
  1084. dn = 5
  1085. ac = 41
  1086. mophue = 4
  1087. mopstr$ = "KENTU/INDIA/ILLIN"
  1088. dn = 6
  1089. ac = 41
  1090. mophue = 14
  1091. mopstr$ = "ATLAN/VENTN/MARVI"
  1092. dn = 7
  1093. ac = 41
  1094. mophue = 10
  1095. mopstr$ = "PACIF/NORTH/PENAV"
  1096. dn = 8
  1097. ac = 41
  1098. mophue = 9
  1099. mopstr$ = "PARKP/BOARD"
  1100. LOCATE dn, ac
  1101. PRINT gr;
  1102. COLOR mophue
  1103. PRINT mopstr$
  1104.  
  1105. SUB mob (t)
  1106. FOR sq = 0 TO 2
  1107. IF t = 1 THEN LOCATE lot(st(1).whr - sq).od, lot(st(1).whr - sq).oa ELSE LOCATE lot(st(2).whr - sq).id, lot(st(2).whr - sq).ia
  1108. PRINT " "
  1109. IF t = 1 THEN LOCATE lot(st(1).whr - sq - 1).od, lot(st(1).whr - sq - 1).oa ELSE LOCATE lot(st(2).whr - sq - 1).id, lot(st(2).whr - sq - 1).ia
  1110. PRINT st(t).tk
  1111. clk .1
  1112. st(t).whr = (st(t).whr - 3)
  1113.  
  1114. SUB more (t)
  1115. box
  1116. ce 5, RTRIM$(st(t).ft) + ", you have $" + ltsb(st(t).c)
  1117. ce 6, "press 1 to unmortgage properties"
  1118. ce 7, "press 2 to buy houses"
  1119. ce 8, "press 3 to buy hotels"
  1120. ce 9, "press 4 to mortgage properties"
  1121. ce 10, "press 5 to sell houses"
  1122. ce 11, "press 6 to sell hotels"
  1123. ce 12, "press 7 to trade"
  1124. ce 13, "press 8 to see inventories"
  1125. ce 14, "press 9 to view deeds"
  1126. ce 15, "press any other key to continue"
  1127. wtn = VAL(ak)
  1128. unm t
  1129. buhou t
  1130. swbs
  1131. buhot t
  1132. swbs
  1133. mort t
  1134. shou t
  1135. swbs
  1136. shot t
  1137. swbs
  1138. trade
  1139. upd
  1140. inv
  1141. vwd
  1142. LOOP UNTIL wtn = 0
  1143.  
  1144. SUB mort (t)
  1145. DIM gp(39)
  1146. gp(0) = -1
  1147. box
  1148. IF lot(1).own = t AND (NOT lot(1).hk) AND lot(3).stat = 0 THEN
  1149. LOCATE 5, 11
  1150. dy 1
  1151. gp(1) = -1
  1152. IF lot(3).own = t AND (NOT lot(3).hk) AND lot(3).stat = 0 THEN
  1153. LOCATE 6, 11
  1154. dy 3
  1155. gp(3) = -1
  1156. IF lot(5).own = t AND (NOT lot(5).hk) THEN
  1157. LOCATE 7, 11
  1158. dy 5
  1159. gp(5) = -1
  1160. IF lot(6).own = t AND (NOT lot(6).hk) AND lot(9).stat = 0 THEN
  1161. LOCATE 8, 11
  1162. dy 6
  1163. gp(6) = -1
  1164. IF lot(8).own = t AND (NOT lot(8).hk) AND lot(9).stat = 0 THEN
  1165. LOCATE 9, 11
  1166. dy 8
  1167. gp(8) = -1
  1168. IF lot(9).own = t AND (NOT lot(9).hk) AND lot(9).stat = 0 THEN
  1169. LOCATE 10, 11
  1170. dy 9
  1171. gp(9) = -1
  1172. IF lot(11).own = t AND (NOT lot(11).hk) AND lot(14).stat = 0 THEN
  1173. LOCATE 5, 26
  1174. dy 11
  1175. gp(11) = -1
  1176. IF lot(12).own = t AND (NOT lot(12).hk) THEN
  1177. LOCATE 6, 26
  1178. dy 12
  1179. gp(12) = -1
  1180. IF lot(13).own = t AND (NOT lot(13).hk) AND lot(14).stat = 0 THEN
  1181. LOCATE 7, 26
  1182. dy 13
  1183. gp(13) = -1
  1184. IF lot(14).own = t AND (NOT lot(14).hk) AND lot(14).stat = 0 THEN
  1185. LOCATE 8, 26
  1186. dy 14
  1187. gp(14) = -1
  1188. IF lot(15).own = t AND (NOT lot(15).hk) THEN
  1189. LOCATE 9, 26
  1190. dy 15
  1191. gp(15) = -1
  1192. IF lot(16).own = t AND (NOT lot(16).hk) AND lot(19).stat = 0 THEN
  1193. LOCATE 10, 26
  1194. dy 16
  1195. gp(16) = -1
  1196. IF lot(18).own = t AND (NOT lot(18).hk) AND lot(19).stat = 0 THEN
  1197. LOCATE 11, 26
  1198. dy 18
  1199. gp(18) = -1
  1200. IF lot(19).own = t AND (NOT lot(19).hk) AND lot(19).stat = 0 THEN
  1201. LOCATE 12, 26
  1202. dy 19
  1203. gp(19) = -1
  1204. IF lot(21).own = t AND (NOT lot(21).hk) AND lot(24).stat = 0 THEN
  1205. LOCATE 5, 41
  1206. dy 21
  1207. gp(21) = -1
  1208. IF lot(23).own = t AND (NOT lot(23).hk) AND lot(24).stat = 0 THEN
  1209. LOCATE 6, 41
  1210. dy 23
  1211. gp(23) = -1
  1212. IF lot(24).own = t AND (NOT lot(24).hk) AND lot(24).stat = 0 THEN
  1213. LOCATE 7, 41
  1214. dy 24
  1215. gp(24) = -1
  1216. IF lot(25).own = t AND (NOT lot(25).hk) THEN
  1217. LOCATE 8, 41
  1218. dy 25
  1219. gp(25) = -1
  1220. IF lot(26).own = t AND (NOT lot(26).hk) AND lot(29).stat = 0 THEN
  1221. LOCATE 9, 41
  1222. dy 26
  1223. gp(26) = -1
  1224. IF lot(27).own = t AND (NOT lot(27).hk) AND lot(29).stat = 0 THEN
  1225. LOCATE 10, 41
  1226. dy 27
  1227. gp(27) = -1
  1228. IF lot(28).own = t AND (NOT lot(28).hk) THEN
  1229. LOCATE 11, 41
  1230. dy 28
  1231. gp(28) = -1
  1232. IF lot(29).own = t AND (NOT lot(29).hk) AND lot(29).stat = 0 THEN
  1233. LOCATE 12, 41
  1234. dy 29
  1235. gp(29) = -1
  1236. IF lot(31).own = t AND (NOT lot(31).hk) AND lot(34).stat = 0 THEN
  1237. LOCATE 5, 56
  1238. dy 31
  1239. gp(31) = -1
  1240. IF lot(32).own = t AND (NOT lot(32).hk) AND lot(34).stat = 0 THEN
  1241. LOCATE 6, 56
  1242. dy 32
  1243. gp(32) = -1
  1244. IF lot(34).own = t AND (NOT lot(34).hk) AND lot(34).stat = 0 THEN
  1245. LOCATE 7, 56
  1246. dy 34
  1247. gp(34) = -1
  1248. IF lot(35).own = t AND (NOT lot(35).hk) THEN
  1249. LOCATE 8, 56
  1250. dy 35
  1251. gp(35) = -1
  1252. IF lot(37).own = t AND (NOT lot(37).hk) AND lot(39).stat = 0 THEN
  1253. LOCATE 9, 56
  1254. dy 37
  1255. gp(37) = -1
  1256. IF lot(39).own = t AND (NOT lot(39).hk) AND lot(39).stat = 0 THEN
  1257. LOCATE 10, 56
  1258. dy 39
  1259. gp(39) = -1
  1260. ce 13, RTRIM$(st(t).ft)
  1261. ce 14, "Choose a deed to mortgage or 0 to continue"
  1262. IF st(t).c >= 0 THEN ce 17, "you have $" + ltsb(st(t).c) ELSE ce 17, "you need to raise $" + lts(-st(t).c)
  1263. IF (NOT gp(pick)) AND (NOT q) THEN b
  1264. pick = ner(15, 39)
  1265. LOOP UNTIL gp(pick)
  1266. IF pick = 0 THEN EXIT SUB
  1267. lot(pick).hk = -1
  1268. st(t).c = st(t).c + lot(pick).c / 2
  1269.  
  1270. SUB move (dist, t)
  1271. FOR sq = 0 TO dist - 1
  1272. IF t = 1 THEN LOCATE lot((st(1).whr + sq) MOD 40).od, lot((st(1).whr + sq) MOD 40).oa ELSE LOCATE lot((st(2).whr + sq) MOD 40).id, lot((st(2).whr + sq) MOD 40).ia
  1273. PRINT " "
  1274. IF t = 1 THEN LOCATE lot((st(1).whr + sq + 1) MOD 40).od, lot((st(1).whr + sq + 1) MOD 40).oa ELSE LOCATE lot((st(2).whr + sq + 1) MOD 40).id, lot((st(2).whr + sq + 1) MOD 40).ia
  1275. PRINT st(t).tk
  1276. clk .1
  1277. IF st(t).whr + dist >= 40 THEN st(t).c = st(t).c + 200
  1278. IF st(t).whr + dist > 40 THEN
  1279. box
  1280. ce 5, RTRIM$(st(t).ft) + ", you collect $200 for passing Go."
  1281. clk .9
  1282. st(t).whr = (st(t).whr + dist) MOD 40
  1283.  
  1284. FUNCTION ner (dn, max)
  1285. IF max = 0 THEN mk = 2 ELSE mk = INT(LOG(max) / LOG(10)) + 2
  1286. ce dn, SPACE$(10)
  1287. IF num > 0 AND (NOT q) THEN b
  1288. num = 0
  1289. num$ = ""
  1290. numk$ = nerk
  1291. IF numk$ = CHR$(8) AND LEN(num$) > 0 THEN
  1292. num$ = LEFT$(num$, (LEN(num$) - 1))
  1293. IF numk$ <> CHR$(13) AND numk$ <> CHR$(8) THEN num$ = num$ + numk$
  1294. IF LEN(num$) < mk THEN
  1295. ce dn, SPACE$(10)
  1296. ce dn, num$
  1297. LOOP UNTIL numk$ = CHR$(13) OR LEN(num$) = mk
  1298. num = VAL(num$)
  1299. LOOP UNTIL num <= max
  1300. ner = num
  1301.  
  1302. FUNCTION nerb& (dn, max&)
  1303. IF max& = 0 THEN mk = 2 ELSE mk = INT(LOG(max&) / LOG(10)) + 2
  1304. ce dn, SPACE$(10)
  1305. IF num& > 0 AND (NOT q) THEN b
  1306. num& = 0
  1307. num$ = ""
  1308. numk$ = nerk
  1309. IF numk$ = CHR$(8) AND LEN(num$) > 0 THEN
  1310. num$ = LEFT$(num$, (LEN(num$) - 1))
  1311. IF numk$ <> CHR$(13) AND numk$ <> CHR$(8) THEN num$ = num$ + numk$
  1312. IF LEN(num$) < mk THEN
  1313. ce dn, SPACE$(10)
  1314. ce dn, num$
  1315. LOOP UNTIL numk$ = CHR$(13) OR LEN(num$) = mk
  1316. num& = VAL(num$)
  1317. LOOP UNTIL num& <= max&
  1318. nerb& = num&
  1319.  
  1320. FUNCTION nerk$
  1321. tx$ = INKEY$
  1322. LOOP UNTIL tx$ > ""
  1323. CASE "0" TO "9", CHR$(13), CHR$(8)
  1324. valid = -1
  1325. valid = 0
  1326. IF (NOT q) THEN b
  1327. LOOP UNTIL valid
  1328. nerk = tx$
  1329.  
  1330. SUB noo (t)
  1331. box
  1332. COLOR lot(st(t).whr).hue
  1333. ce 5, RTRIM$(lot(st(t).whr).ttl)
  1334. ce 6, "cost $" + lts(lot(st(t).whr).c)
  1335. ce 7, "mortgage value $" + lts(lot(st(t).whr).c / 2)
  1336. SELECT CASE lot(st(t).whr).sty
  1337. CASE "b"
  1338. ce 8, "rent $" + lts(lot(st(t).whr).r)
  1339. ce 9, "rent with one house $" + lts(lot(st(t).whr).r1)
  1340. ce 10, "rent with two houses $" + lts(lot(st(t).whr).r2)
  1341. ce 11, "rent with three houses $" + lts(lot(st(t).whr).r3)
  1342. ce 12, "rent with four houses $" + lts(lot(st(t).whr).r4)
  1343. ce 13, "rent with hotel $" + lts(lot(st(t).whr).rhot)
  1344. ce 14, "houses cost $" + lts(lot(st(t).whr).bc) + " each"
  1345. ce 15, "hotel costs $" + lts(lot(st(t).whr).bc) + " plus 4 houses"
  1346. CASE "u"
  1347. ce 8, "rent with one Utility, four times dice"
  1348. ce 9, "rent with two Utilities, ten times dice"
  1349. CASE "r"
  1350. ce 8, "rent with one Railroad $25"
  1351. ce 9, "rent with two Railroads $50"
  1352. ce 10, "rent with three Railroads $100"
  1353. ce 11, "rent with four Railroads $200"
  1354. ce 16, RTRIM$(st(t).ft) + ", you have $" + ltsb(st(t).c)
  1355. IF cr(t) + st(t).c >= lot(st(t).whr).c THEN ce 17, "press B to Buy"
  1356. ce 18, "press A to Auction"
  1357. wt$ = LCASE$(INKEY$)
  1358. LOOP UNTIL wt$ = "a" OR (wt$ = "b" AND cr(t) + st(t).c >= lot(st(t).whr).c)
  1359. box
  1360. IF wt$ = "b" THEN
  1361. pay t, lot(st(t).whr).c
  1362. COLOR lot(st(t).whr).hue
  1363. ce 10, RTRIM$(lot(st(t).whr).ttl)
  1364. lot(st(t).whr).own = t
  1365. p
  1366. auc t
  1367. upd
  1368.  
  1369. SUB opt (t)
  1370. box
  1371. ce 5, RTRIM$(st(t).ft) + ", you have $" + ltsb(st(t).c)
  1372. ce 6, "press P for Property options"
  1373. ce 7, "press S to Save and exit"
  1374. ce 8, "press Q to Quit game early"
  1375. ce 9, "press any other key to continue"
  1376. wt$ = ak
  1377. CASE "s"
  1378. save t
  1379. CASE "p"
  1380. more t
  1381. CASE "q"
  1382. quit
  1383. done = -1
  1384. LOOP UNTIL done
  1385.  
  1386. SUB p
  1387. ce 19, "press any key."
  1388. ce 19, SPACE$(14)
  1389.  
  1390. SUB pay (t, cge)
  1391. st(t).c = st(t).c - cge
  1392. IF st(t).c < 0 THEN broke t
  1393. ce 12, RTRIM$(st(t).ft) + " paid $" + lts(cge)
  1394.  
  1395. SUB pim (gr, l, m, h)
  1396. l = 1
  1397. m = 2
  1398. h = 3
  1399. ce 6, "MEDIT/BALTI"
  1400. l = 6
  1401. m = 8
  1402. h = 9
  1403. ce 6, "OREIN/VERMO/CONNE"
  1404. l = 11
  1405. m = 13
  1406. h = 14
  1407. ce 6, "STCHA/STATE/VIRGI"
  1408. l = 16
  1409. m = 18
  1410. h = 19
  1411. ce 6, "STJAM/TENNE/NEWYO"
  1412. l = 21
  1413. m = 23
  1414. h = 24
  1415. ce 6, "KENTU/INDIA/ILLIN"
  1416. l = 26
  1417. m = 27
  1418. h = 29
  1419. ce 6, "ATLAN/VENTN/MARVI"
  1420. l = 31
  1421. m = 32
  1422. h = 34
  1423. ce 6, "PACIF/NORTH/PENAV"
  1424. l = 37
  1425. m = 2
  1426. h = 39
  1427. ce 6, "PARKP/BOARD"
  1428.  
  1429. SUB popp (t, cge)
  1430. pay t, cge
  1431. st(3 - t).c = st(3 - t).c + cge
  1432. ce 13, " to " + RTRIM$(st(3 - t).ft)
  1433. p
  1434.  
  1435. SUB quit
  1436. quithue = ((quithue + 1) AND 15) OR 8
  1437. COLOR quithue
  1438. ce 17, "ARE YOU SURE YOU WANT TO QUIT? (Y/N)"
  1439. clk .09
  1440. yn$ = LCASE$(INKEY$)
  1441. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1442. IF yn$ = "y" THEN
  1443. IF st(1).c < 0 THEN gov 2
  1444. IF st(2).c < 0 THEN gov 1
  1445. worth1 = cw(1)
  1446. worth2 = cw(2)
  1447. IF worth1 > worth2 THEN gov 1
  1448. IF worth2 > worth1 THEN gov 2
  1449. gov 0
  1450.  
  1451. SUB rlc (t)
  1452. IF lot(st(t).whr).own = 0 THEN
  1453. noo t
  1454. IF lot(st(t).whr).own = t THEN
  1455. COLOR lot(st(t).whr).hue
  1456. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1457. ce 13, "is yours."
  1458. p
  1459. IF lot(st(t).whr).hk THEN
  1460. COLOR lot(st(t).whr).hue
  1461. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1462. ce 13, "is mortgaged."
  1463. p
  1464. SELECT CASE lot(st(t).whr).stat
  1465. popp t, 50
  1466. popp t, 100
  1467. popp t, 200
  1468. popp t, 400
  1469.  
  1470. SUB rules
  1471. x = -1
  1472. box
  1473. ce 5, "I will start a new game."
  1474. ce 7, "Do you want the Free Parking jackpot? (Y/N)"
  1475. yn$ = LCASE$(INKEY$)
  1476. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1477. ce 8, UCASE$(yn$)
  1478. IF yn$ = "y" THEN
  1479. j = -1
  1480. fr& = 500
  1481. ce 9, "Do you want the land on Go bonus? (Y/N)"
  1482. yn$ = LCASE$(INKEY$)
  1483. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1484. ce 10, UCASE$(yn$)
  1485. IF yn$ = "y" THEN bn = -1
  1486. ce 11, "Do you want unlimited buildings in the bank? (Y/N)"
  1487. yn$ = LCASE$(INKEY$)
  1488. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1489. ce 12, UCASE$(yn$)
  1490. IF yn$ = "n" THEN x = 0
  1491. ce 13, "Do you want to suspend mortgage interest? (Y/N)"
  1492. yn$ = LCASE$(INKEY$)
  1493. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1494. ce 14, UCASE$(yn$)
  1495. IF yn$ = "y" THEN uf! = .5 ELSE uf! = .55
  1496. ce 15, "Should builings sell back at full price? (Y/N)"
  1497. yn$ = LCASE$(INKEY$)
  1498. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1499. ce 16, UCASE$(yn$)
  1500. IF yn$ = "y" THEN sf! = 1 ELSE sf! = .5
  1501. ce 17, "Do you want quiet mode? (Y/N)"
  1502. yn$ = LCASE$(INKEY$)
  1503. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1504. ce 18, UCASE$(yn$)
  1505. IF yn$ = "y" THEN q = -1
  1506. p
  1507.  
  1508. SUB save (t)
  1509. ce 10, "to be continued."
  1510. OPEN "monopoly.dat" FOR OUTPUT AS #1
  1511. PRINT #1, sf!
  1512. PRINT #1, uf!
  1513. PRINT #1, t
  1514. PRINT #1, fr&
  1515. PRINT #1, bhu
  1516. PRINT #1, bht
  1517. PRINT #1, j
  1518. PRINT #1, bn
  1519. PRINT #1, x
  1520. PRINT #1, q
  1521. FOR sq = 0 TO 39
  1522. PRINT #1, lot(sq).own
  1523. PRINT #1, lot(sq).stat
  1524. PRINT #1, lot(sq).mop
  1525. PRINT #1, lot(sq).hk
  1526. FOR sq = 1 TO 2
  1527. PRINT #1, st(sq).ft
  1528. PRINT #1, st(sq).tk
  1529. PRINT #1, st(sq).c
  1530. PRINT #1, st(sq).whr
  1531. PRINT #1, st(sq).jc
  1532. PRINT #1, st(sq).dc
  1533. PRINT #1, st(sq).chag
  1534. PRINT #1, st(sq).cheg
  1535. FOR sq = 1 TO 16
  1536. PRINT #1, cha(sq)
  1537. PRINT #1, che(sq)
  1538. crd
  1539.  
  1540. SUB scha
  1541. box
  1542. ce 5, "Shuffling Chance cards."
  1543. ce 6, "Please wait."
  1544. clk 2
  1545. IF cha(8) = 2 THEN goojfflag = -1
  1546. FOR flip = 1 TO 16
  1547. cha(flip) = 0
  1548. IF goojfflag THEN cha(8) = 2
  1549.  
  1550. SUB sche
  1551. box
  1552. ce 5, "Shuffling Community Chest cards."
  1553. ce 6, "Please wait."
  1554. clk 2
  1555. IF che(6) = 2 THEN goojfflag = -1
  1556. FOR flip = 1 TO 16
  1557. che(flip) = 0
  1558. IF goojfflag THEN che(6) = 2
  1559.  
  1560. SUB short (t, l, m, h)
  1561. IF lot(h).stat = 5 THEN
  1562. lot(h).stat = 4
  1563. bht = bht + 1
  1564. st(t).c = st(t).c + lot(l).bc * sf!
  1565. IF lot(m).stat = 5 THEN
  1566. lot(m).stat = 4
  1567. bht = bht + 1
  1568. st(t).c = st(t).c + lot(l).bc * sf!
  1569. IF lot(l).stat = 5 THEN
  1570. lot(l).stat = 4
  1571. bht = bht + 1
  1572. st(t).c = st(t).c + lot(l).bc * sf!
  1573. quan = chou(1) + chou(2) - 32
  1574. tot = lot(l).stat + lot(m).stat + lot(h).stat - quan
  1575. lot(h).stat = INT(tot / 2)
  1576. lot(l).stat = INT(tot / 2)
  1577. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1578. lot(h).stat = INT(tot / 3)
  1579. lot(m).stat = INT(tot / 3)
  1580. lot(l).stat = INT(tot / 3)
  1581. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1582. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  1583. st(t).c = st(t).c + lot(l).bc * quan * sf!
  1584. bhu = 0
  1585. box
  1586. ce 5, RTRIM$(st(t).ft)
  1587. ce 7, "a housing shortage sale taken place."
  1588. p
  1589.  
  1590. SUB shot (t)
  1591. DIM gm(9)
  1592. gm(0) = -1
  1593. box
  1594. IF lot(3).own = t AND lot(3).stat = 5 THEN
  1595. gm(1) = -1
  1596. mini 1
  1597. IF lot(9).own = t AND lot(9).stat = 5 THEN
  1598. gm(2) = -1
  1599. mini 2
  1600. IF lot(14).own = t AND lot(14).stat = 5 THEN
  1601. gm(3) = -1
  1602. mini 3
  1603. IF lot(19).own = t AND lot(19).stat = 5 THEN
  1604. gm(4) = -1
  1605. mini 4
  1606. IF lot(24).own = t AND lot(24).stat = 5 THEN
  1607. gm(5) = -1
  1608. mini 5
  1609. IF lot(29).own = t AND lot(29).stat = 5 THEN
  1610. gm(6) = -1
  1611. mini 6
  1612. IF lot(34).own = t AND lot(34).stat = 5 THEN
  1613. gm(7) = -1
  1614. mini 7
  1615. IF lot(39).own = t AND lot(39).stat = 5 THEN
  1616. gm(8) = -1
  1617. mini 8
  1618. ce 9, RTRIM$(st(t).ft)
  1619. ce 10, "Choose a monopoly to sell hotels from"
  1620. ce 11, "or 0 to continue"
  1621. IF ws > 0 AND (NOT q) THEN b
  1622. ws$ = INKEY$
  1623. IF ws$ = CHR$(13) THEN ws$ = "0"
  1624. LOOP UNTIL ws$ > ""
  1625. IF ws$ >= "0" AND ws$ <= "8" THEN ws = VAL(ws$) ELSE ws = 9
  1626. LOOP UNTIL gm(ws)
  1627. IF ws = 0 THEN EXIT SUB
  1628. box
  1629. ce 5, RTRIM$(st(t).ft)
  1630. pim ws, l, m, h
  1631. IF lot(l).stat = 5 THEN max = 2 ELSE max = 1
  1632. max = 1
  1633. IF lot(m).stat = 5 THEN max = 2
  1634. IF lot(l).stat = 5 THEN max = 3
  1635. ce 7, "you can sell up to " + lts(max) + " hotel(s)."
  1636. ce 8, "or 0 to continue"
  1637. IF st(t).c >= 0 THEN ce 11, "you have $" + ltsb(st(t).c) ELSE ce 11, "you need to raise $" + lts(-st(t).c)
  1638. ce 12, "hotels sell for $" + lts(lot(l).bc * sf!) + " (minus four houses) each."
  1639. quan = ner(9, max)
  1640. IF quan = 0 THEN EXIT SUB
  1641. tot = lot(l).stat + lot(m).stat + lot(h).stat - quan
  1642. lot(h).stat = INT(tot / 2)
  1643. lot(l).stat = INT(tot / 2)
  1644. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1645. lot(h).stat = INT(tot / 3)
  1646. lot(m).stat = INT(tot / 3)
  1647. lot(l).stat = INT(tot / 3)
  1648. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1649. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  1650. st(t).c = st(t).c + lot(l).bc * quan * sf!
  1651. IF (NOT x) THEN
  1652. bht = bht + quan
  1653. bhu = bhu - 4 * quan
  1654. IF bhu < 0 THEN short t, l, m, h
  1655.  
  1656. SUB shou (t)
  1657. DIM gm(9)
  1658. gm(0) = -1
  1659. box
  1660. IF lot(3).own = t AND lot(3).stat > 0 AND lot(3).stat < 5 THEN
  1661. gm(1) = -1
  1662. mini 1
  1663. IF lot(9).own = t AND lot(9).stat > 0 AND lot(9).stat < 5 THEN
  1664. gm(2) = -1
  1665. mini 2
  1666. IF lot(14).own = t AND lot(14).stat > 0 AND lot(14).stat < 5 THEN
  1667. gm(3) = -1
  1668. mini 3
  1669. IF lot(19).own = t AND lot(19).stat > 0 AND lot(19).stat < 5 THEN
  1670. gm(4) = -1
  1671. mini 4
  1672. IF lot(24).own = t AND lot(24).stat > 0 AND lot(24).stat < 5 THEN
  1673. gm(5) = -1
  1674. mini 5
  1675. IF lot(29).own = t AND lot(29).stat > 0 AND lot(29).stat < 5 THEN
  1676. gm(6) = -1
  1677. mini 6
  1678. IF lot(34).own = t AND lot(34).stat > 0 AND lot(34).stat < 5 THEN
  1679. gm(7) = -1
  1680. mini 7
  1681. IF lot(39).own = t AND lot(39).stat > 0 AND lot(39).stat < 5 THEN
  1682. gm(8) = -1
  1683. mini 8
  1684. ce 9, RTRIM$(st(t).ft)
  1685. ce 10, "Choose a monopoly to sell houses from"
  1686. ce 11, "or 0 to continue"
  1687. IF ws > 0 AND (NOT q) THEN b
  1688. ws$ = INKEY$
  1689. IF ws$ = CHR$(13) THEN ws$ = "0"
  1690. LOOP UNTIL ws$ > ""
  1691. IF ws$ >= "0" AND ws$ <= "8" THEN ws = VAL(ws$) ELSE ws = 9
  1692. LOOP UNTIL gm(ws)
  1693. IF ws = 0 THEN EXIT SUB
  1694. box
  1695. ce 5, RTRIM$(st(t).ft)
  1696. pim ws, l, m, h
  1697. max = lot(l).stat + lot(h).stat
  1698. max = lot(l).stat + lot(m).stat + lot(h).stat
  1699. ce 7, "you can sell up to " + lts(max) + " house(s)."
  1700. ce 8, "or 0 to continue"
  1701. IF st(t).c >= 0 THEN ce 11, "you have $" + ltsb(st(t).c) ELSE ce 11, "you need to raise $" + lts(-st(t).c)
  1702. ce 12, "houses sell for $" + lts(lot(l).bc * sf!) + " each."
  1703. quan = ner(9, max)
  1704. IF quan = 0 THEN EXIT SUB
  1705. tot = lot(l).stat + lot(m).stat + lot(h).stat - quan
  1706. lot(h).stat = INT(tot / 2)
  1707. lot(l).stat = INT(tot / 2)
  1708. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1709. lot(h).stat = INT(tot / 3)
  1710. lot(m).stat = INT(tot / 3)
  1711. lot(l).stat = INT(tot / 3)
  1712. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1713. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  1714. st(t).c = st(t).c + lot(l).bc * quan * sf!
  1715. IF (NOT x) THEN bhu = bhu + quan
  1716.  
  1717. SUB sml (wt)
  1718. PRINT wt;
  1719. lil wt
  1720.  
  1721. SUB swbd
  1722. box
  1723. LOCATE 22, 66
  1724. PRINT "MEDIT"
  1725. LOCATE 22, 52
  1726. PRINT "BALTI"
  1727. LOCATE 22, 31
  1728. PRINT "ORIEN"
  1729. LOCATE 22, 17
  1730. PRINT "VERMO"
  1731. LOCATE 22, 10
  1732. PRINT "CONNE"
  1733. LOCATE 20, 3
  1734. PRINT "STCHA"
  1735. LOCATE 16, 3
  1736. PRINT "STATE"
  1737. LOCATE 14, 3
  1738. PRINT "VIRGI"
  1739. LOCATE 10, 3
  1740. PRINT "STJAM"
  1741. LOCATE 6, 3
  1742. PRINT "TENNE"
  1743. LOCATE 4, 3
  1744. PRINT "NEWYO"
  1745. LOCATE 2, 10
  1746. PRINT "KENTU"
  1747. LOCATE 2, 24
  1748. PRINT "INDIA"
  1749. LOCATE 2, 31
  1750. PRINT "ILLIN"
  1751. LOCATE 2, 45
  1752. PRINT "ATLAN"
  1753. LOCATE 2, 52
  1754. PRINT "VENTN"
  1755. LOCATE 2, 66
  1756. PRINT "MARVI"
  1757. LOCATE 4, 73
  1758. PRINT "PACIF"
  1759. LOCATE 6, 73
  1760. PRINT "NORTH"
  1761. LOCATE 10, 73
  1762. PRINT "PENAV"
  1763. LOCATE 16, 73
  1764. PRINT "PARKP"
  1765. LOCATE 20, 73
  1766. PRINT "BOARD"
  1767. LOCATE 22, 38
  1768. PRINT "READR"
  1769. LOCATE 18, 3
  1770. PRINT "ELECT"
  1771. LOCATE 12, 3
  1772. PRINT "PENRR"
  1773. LOCATE 2, 38
  1774. PRINT "B&ORR"
  1775. LOCATE 2, 59
  1776. PRINT "WATER"
  1777. LOCATE 12, 73
  1778. PRINT "SHORT"
  1779. LOCATE 22, 73
  1780. PRINT "<-GO<"
  1781. LOCATE 22, 59
  1782. PRINT "COMMU"
  1783. LOCATE 22, 45
  1784. PRINT "INCTX"
  1785. LOCATE 22, 24
  1786. PRINT "CHANC"
  1787. LOCATE 22, 3
  1788. PRINT "JUSTV"
  1789. LOCATE 8, 3
  1790. PRINT "COMMU"
  1791. LOCATE 2, 3
  1792. PRINT "FREEP"
  1793. LOCATE 2, 17
  1794. PRINT "CHANC"
  1795. LOCATE 2, 73
  1796. PRINT "GOTOJ"
  1797. LOCATE 8, 73
  1798. PRINT "COMMU"
  1799. LOCATE 14, 73
  1800. PRINT "CHANC"
  1801. LOCATE 18, 73
  1802. PRINT "LUXTX"
  1803.  
  1804. SUB swbs
  1805. FOR sq = 1 TO 39
  1806. IF lot(sq).sty = "b" THEN
  1807. LOCATE lot(sq).bdn, lot(sq).bac
  1808. IF (NOT lot(sq).mop) THEN
  1809. PRINT " "
  1810. SELECT CASE lot(sq).stat
  1811. CASE 0 TO 4
  1812. COLOR 0, 10
  1813. PRINT USING "#"; lot(sq).stat
  1814. COLOR 0, 4
  1815. PRINT "H"
  1816. COLOR 15, 0
  1817.  
  1818. SUB tiny (wt)
  1819. PRINT wt;
  1820. COLOR lot(wt).hue
  1821. PRINT lot(wt).ab
  1822.  
  1823. SUB tj (t)
  1824. st(t).jc = st(t).jc + 1
  1825. box
  1826. ce 5, RTRIM$(st(t).ft) + ", in Jail, turn " + lts(st(t).jc) + " with $" + ltsb(st(t).c)
  1827. IF cr(t) + st(t).c >= 50 THEN ce 6, "press M to Make bail (pay $50)"
  1828. IF st(t).chag OR st(t).cheg THEN ce 7, "press C to use 'get out of jail free' Card"
  1829. ce 8, "press R to Roll dice"
  1830. how$ = LCASE$(INKEY$)
  1831. LOOP UNTIL how$ = "r" OR (how$ = "m" AND cr(t) + st(t).c >= 50) OR (how$ = "c" AND (st(t).chag OR st(t).cheg))
  1832. box
  1833. CASE "r"
  1834. ce 5, RTRIM$(st(t).ft) + ", roll " + lts(st(t).jc) + " done, with $" + ltsb(st(t).c)
  1835. rlout = di(d1, d2)
  1836. ce 10, lts(d1) + " + " + lts(d2) + " = " + lts(rlout)
  1837. p
  1838. IF d1 = d2 THEN
  1839. st(t).jc = 0
  1840. st(t).whr = 10
  1841. box
  1842. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1843. PRINT st(t).tk
  1844. move rlout, t
  1845. act rlout, t
  1846. IF st(t).jc = 3 THEN
  1847. IF st(t).chag OR st(t).cheg THEN
  1848. ce 6, "press M to Make bail (pay $50)"
  1849. ce 7, "press C to use 'get out of jail free' Card"
  1850. payout$ = LCASE$(INKEY$)
  1851. IF (NOT st(t).chag) AND (NOT st(t).cheg) THEN payout$ = "m"
  1852. LOOP UNTIL payout$ = "m" OR payout$ = "c"
  1853. SELECT CASE payout$
  1854. CASE "m"
  1855. pay t, 50
  1856. IF j THEN fr& = fr& + 50
  1857. CASE "c"
  1858. IF st(t).chag AND st(t).cheg THEN
  1859. ce 10, "Pick a card."
  1860. ce 11, "Press A for chAnce"
  1861. ce 12, "press O for cOmmunity che"
  1862. wtc$ = LCASE$(INKEY$)
  1863. IF (NOT st(t).chag) THEN wtc$ = "o"
  1864. IF (NOT st(t).cheg) THEN wtc$ = "a"
  1865. LOOP UNTIL wtc$ = "a" OR wtc$ = "o"
  1866. IF wtc$ = "a" THEN
  1867. ce 13, "Chance card used."
  1868. st(t).chag = 0
  1869. cha(8) = 1
  1870. ce 13, "Community Chest card used."
  1871. st(t).cheg = 0
  1872. che(6) = 1
  1873. p
  1874. st(t).jc = 0
  1875. st(t).whr = 10
  1876. box
  1877. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1878. PRINT st(t).tk
  1879. move rlout, t
  1880. act rlout, t
  1881. opt t
  1882. CASE "m"
  1883. pay t, 50
  1884. IF j THEN fr& = fr& + 50
  1885. st(t).jc = 0
  1886. p
  1887. box
  1888. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1889. PRINT st(t).tk
  1890. st(t).whr = 10
  1891. tn t
  1892. CASE "c"
  1893. IF st(t).chag AND st(t).cheg THEN
  1894. ce 10, "Pick a card."
  1895. ce 11, "Press A for chAnce"
  1896. ce 12, "press O for cOmmunity che"
  1897. wtc$ = LCASE$(INKEY$)
  1898. IF (NOT st(t).chag) THEN wtc$ = "o"
  1899. IF (NOT st(t).cheg) THEN wtc$ = "a"
  1900. LOOP UNTIL wtc$ = "a" OR wtc$ = "o"
  1901. IF wtc$ = "a" THEN
  1902. ce 13, "Chance card used."
  1903. st(t).chag = 0
  1904. cha(8) = 1
  1905. ce 13, "Community Chest card used."
  1906. st(t).cheg = 0
  1907. che(6) = 1
  1908. p
  1909. box
  1910. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1911. PRINT st(t).tk
  1912. st(t).jc = 0
  1913. st(t).whr = 10
  1914. tn t
  1915.  
  1916. SUB tn (t)
  1917. box
  1918. ce 5, RTRIM$(st(t).ft) + " press any key to roll the dice."
  1919. p
  1920. box
  1921. ce 5, RTRIM$(st(t).ft)
  1922. rl = di(d1, d2)
  1923. ce 7, lts(d1) + " + " + lts(d2) + " = " + lts(rl)
  1924. IF d1 = d2 THEN st(t).dc = st(t).dc + 1 ELSE st(t).dc = 0
  1925. SELECT CASE st(t).dc
  1926. clk 1.5
  1927. ce 8, "first doubles"
  1928. clk 1.5
  1929. ce 8, "second doubles"
  1930. clk 1.5
  1931. ce 8, "Third doubles"
  1932. ar t
  1933. IF st(t).whr > -10 THEN
  1934. move rl, t
  1935. act rl, t
  1936. opt t
  1937. LOOP UNTIL st(t).dc = 0
  1938.  
  1939. SUB trade
  1940. DIM wit(41), cg(1 TO 2)
  1941. FOR gvr = 1 TO 2
  1942. REDIM mt(41)
  1943. mt(0) = -1
  1944. box
  1945. IF lot(1).own = gvr AND lot(3).stat = 0 THEN
  1946. LOCATE 5, 11
  1947. sml 1
  1948. mt(1) = -1
  1949. IF lot(3).own = gvr AND lot(3).stat = 0 THEN
  1950. LOCATE 6, 11
  1951. sml 3
  1952. mt(3) = -1
  1953. IF lot(5).own = gvr THEN
  1954. LOCATE 7, 11
  1955. sml 5
  1956. mt(5) = -1
  1957. IF lot(6).own = gvr AND lot(9).stat = 0 THEN
  1958. LOCATE 8, 11
  1959. sml 6
  1960. mt(6) = -1
  1961. IF lot(8).own = gvr AND lot(9).stat = 0 THEN
  1962. LOCATE 9, 11
  1963. sml 8
  1964. mt(8) = -1
  1965. IF lot(9).own = gvr AND lot(9).stat = 0 THEN
  1966. LOCATE 10, 11
  1967. sml 9
  1968. mt(9) = -1
  1969. IF lot(11).own = gvr AND lot(14).stat = 0 THEN
  1970. LOCATE 5, 25
  1971. sml 11
  1972. mt(11) = -1
  1973. IF lot(12).own = gvr THEN
  1974. LOCATE 6, 25
  1975. sml 12
  1976. mt(12) = -1
  1977. IF lot(13).own = gvr AND lot(14).stat = 0 THEN
  1978. LOCATE 7, 25
  1979. sml 13
  1980. mt(13) = -1
  1981. IF lot(14).own = gvr AND lot(14).stat = 0 THEN
  1982. LOCATE 8, 25
  1983. sml 14
  1984. mt(14) = -1
  1985. IF lot(15).own = gvr THEN
  1986. LOCATE 9, 25
  1987. sml 15
  1988. mt(15) = -1
  1989. IF lot(16).own = gvr AND lot(19).stat = 0 THEN
  1990. LOCATE 10, 25
  1991. sml 16
  1992. mt(16) = -1
  1993. IF lot(18).own = gvr AND lot(19).stat = 0 THEN
  1994. LOCATE 11, 25
  1995. sml 18
  1996. mt(18) = -1
  1997. IF lot(19).own = gvr AND lot(19).stat = 0 THEN
  1998. LOCATE 12, 25
  1999. sml 19
  2000. mt(19) = -1
  2001. IF lot(21).own = gvr AND lot(24).stat = 0 THEN
  2002. LOCATE 5, 40
  2003. sml 21
  2004. mt(21) = -1
  2005. IF lot(23).own = gvr AND lot(24).stat = 0 THEN
  2006. LOCATE 6, 40
  2007. sml 23
  2008. mt(23) = -1
  2009. IF lot(24).own = gvr AND lot(24).stat = 0 THEN
  2010. LOCATE 7, 40
  2011. sml 24
  2012. mt(24) = -1
  2013. IF lot(25).own = gvr THEN
  2014. LOCATE 8, 40
  2015. sml 25
  2016. mt(25) = -1
  2017. IF lot(26).own = gvr AND lot(29).stat = 0 THEN
  2018. LOCATE 9, 40
  2019. sml 26
  2020. mt(26) = -1
  2021. IF lot(27).own = gvr AND lot(29).stat = 0 THEN
  2022. LOCATE 10, 40
  2023. sml 27
  2024. mt(27) = -1
  2025. IF lot(28).own = gvr THEN
  2026. LOCATE 11, 40
  2027. sml 28
  2028. mt(28) = -1
  2029. IF lot(29).own = gvr AND lot(29).stat = 0 THEN
  2030. LOCATE 12, 40
  2031. sml 29
  2032. mt(29) = -1
  2033. IF lot(31).own = gvr AND lot(34).stat = 0 THEN
  2034. LOCATE 5, 55
  2035. sml 31
  2036. mt(31) = -1
  2037. IF lot(32).own = gvr AND lot(34).stat = 0 THEN
  2038. LOCATE 6, 55
  2039. sml 32
  2040. mt(32) = -1
  2041. IF lot(34).own = gvr AND lot(34).stat = 0 THEN
  2042. LOCATE 7, 55
  2043. sml 34
  2044. mt(34) = -1
  2045. IF lot(35).own = gvr THEN
  2046. LOCATE 8, 55
  2047. sml 35
  2048. mt(35) = -1
  2049. IF lot(37).own = gvr AND lot(39).stat = 0 THEN
  2050. LOCATE 9, 55
  2051. sml 37
  2052. mt(37) = -1
  2053. IF lot(39).own = gvr AND lot(39).stat = 0 THEN
  2054. LOCATE 10, 55
  2055. sml 39
  2056. mt(39) = -1
  2057. IF st(gvr).chag THEN
  2058. LOCATE 12, 11
  2059. PRINT 40;
  2060. PRINT "GOOJF"
  2061. mt(40) = -1
  2062. IF st(gvr).cheg THEN
  2063. LOCATE 12, 55
  2064. PRINT 41;
  2065. PRINT "GOOJF"
  2066. mt(41) = -1
  2067. ce 13, RTRIM$(st(gvr).ft) + ", you have $" + ltsb(st(gvr).c)
  2068. ce 14, "Choose a deed to trade or 0 to continue"
  2069. pick = 0
  2070. IF (NOT mt(pick)) AND (NOT q) THEN b
  2071. pick = ner(15, 41)
  2072. LOOP UNTIL mt(pick)
  2073. CASE 1 TO 39
  2074. lot(pick).own = 0
  2075. CASE 40
  2076. st(gvr).chag = 0
  2077. CASE 41
  2078. st(gvr).cheg = 0
  2079. wit(pick) = gvr
  2080. LOOP UNTIL pick = 0
  2081. ce 16, "cash to give"
  2082. cg(gvr) = nerb(17, st(gvr).c)
  2083. IF cg(1) > cg(2) THEN
  2084. box
  2085. popp 1, cg(1) - cg(2)
  2086. IF cg(2) > cg(1) THEN
  2087. box
  2088. popp 2, cg(2) - cg(1)
  2089. IF wit(40) > 0 THEN st(3 - wit(40)).chag = -1
  2090. IF wit(41) > 0 THEN st(3 - wit(41)).cheg = -1
  2091. FOR flip = 1 TO 39
  2092. IF wit(flip) > 0 AND (NOT lot(flip).hk) THEN
  2093. lot(flip).own = 3 - wit(flip)
  2094. wit(flip) = 0
  2095. FOR flip = 1 TO 39
  2096. IF wit(flip) > 0 THEN
  2097. lot(flip).own = 3 - wit(flip)
  2098. box
  2099. ce 5, RTRIM$(st(3 - wit(flip)).ft) + ", you have $" + ltsb(st(3 - wit(flip)).c)
  2100. COLOR lot(flip).hue
  2101. ce 6, RTRIM$(lot(flip).ttl)
  2102. ce 7, "is mortgaged."
  2103. IF st(3 - wit(flip)).c >= INT(.5 + lot(flip).c * uf!) THEN
  2104. ce 8, "Do you want to unmortgage it now? (Y/N)"
  2105. y = INT(.5 + lot(flip).c * uf!)
  2106. n = INT(.5 + lot(flip).c * (uf! - .5))
  2107. ce 9, "Y will cost $" + lts(y)
  2108. IF n > 0 THEN ce 10, "N will cost $" + lts(n)
  2109. yn$ = LCASE$(INKEY$)
  2110. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  2111. yn$ = "n"
  2112. IF yn$ = "y" THEN
  2113. pay 3 - wit(flip), y
  2114. lot(flip).hk = 0
  2115. IF n > 0 THEN
  2116. pay 3 - wit(flip), n
  2117. ce 14, "mortgaged property fee."
  2118. p
  2119.  
  2120. tx$ = INKEY$
  2121. LOOP UNTIL tx$ > ""
  2122. CASE "a" TO "z", CHR$(13), CHR$(8)
  2123. valid = -1
  2124. valid = 0
  2125. IF (NOT q) THEN b
  2126. LOOP UNTIL valid
  2127. txk = tx$
  2128.  
  2129. SUB unm (t)
  2130. DIM gp(39)
  2131. gp(0) = -1
  2132. box
  2133. IF lot(1).own = t AND lot(1).hk AND st(t).c >= INT(.5 + lot(1).c * uf!) THEN
  2134. LOCATE 5, 11
  2135. dy 1
  2136. gp(1) = -1
  2137. IF lot(3).own = t AND lot(3).hk AND st(t).c >= INT(.5 + lot(3).c * uf!) THEN
  2138. LOCATE 6, 11
  2139. dy 3
  2140. gp(3) = -1
  2141. IF lot(5).own = t AND lot(5).hk AND st(t).c >= INT(.5 + lot(5).c * uf!) THEN
  2142. LOCATE 7, 11
  2143. dy 5
  2144. gp(5) = -1
  2145. IF lot(6).own = t AND lot(6).hk AND st(t).c >= INT(.5 + lot(6).c * uf!) THEN
  2146. LOCATE 8, 11
  2147. dy 6
  2148. gp(6) = -1
  2149. IF lot(8).own = t AND lot(8).hk AND st(t).c >= INT(.5 + lot(8).c * uf!) THEN
  2150. LOCATE 9, 11
  2151. dy 8
  2152. gp(8) = -1
  2153. IF lot(9).own = t AND lot(9).hk AND st(t).c >= INT(.5 + lot(9).c * uf!) THEN
  2154. LOCATE 10, 11
  2155. dy 9
  2156. gp(9) = -1
  2157. IF lot(11).own = t AND lot(11).hk AND st(t).c >= INT(.5 + lot(11).c * uf!) THEN
  2158. LOCATE 5, 26
  2159. dy 11
  2160. gp(11) = -1
  2161. IF lot(12).own = t AND lot(12).hk AND st(t).c >= INT(.5 + lot(12).c * uf!) THEN
  2162. LOCATE 6, 26
  2163. dy 12
  2164. gp(12) = -1
  2165. IF lot(13).own = t AND lot(13).hk AND st(t).c >= INT(.5 + lot(13).c * uf!) THEN
  2166. LOCATE 7, 26
  2167. dy 13
  2168. gp(13) = -1
  2169. IF lot(14).own = t AND lot(14).hk AND st(t).c >= INT(.5 + lot(14).c * uf!) THEN
  2170. LOCATE 8, 26
  2171. dy 14
  2172. gp(14) = -1
  2173. IF lot(15).own = t AND lot(15).hk AND st(t).c >= INT(.5 + lot(15).c * uf!) THEN
  2174. LOCATE 9, 26
  2175. dy 15
  2176. gp(15) = -1
  2177. IF lot(16).own = t AND lot(16).hk AND st(t).c >= INT(.5 + lot(16).c * uf!) THEN
  2178. LOCATE 10, 26
  2179. dy 16
  2180. gp(16) = -1
  2181. IF lot(18).own = t AND lot(18).hk AND st(t).c >= INT(.5 + lot(18).c * uf!) THEN
  2182. LOCATE 11, 26
  2183. dy 18
  2184. gp(18) = -1
  2185. IF lot(19).own = t AND lot(19).hk AND st(t).c >= INT(.5 + lot(19).c * uf!) THEN
  2186. LOCATE 12, 26
  2187. dy 19
  2188. gp(19) = -1
  2189. IF lot(21).own = t AND lot(21).hk AND st(t).c >= INT(.5 + lot(21).c * uf!) THEN
  2190. LOCATE 5, 41
  2191. dy 21
  2192. gp(21) = -1
  2193. IF lot(23).own = t AND lot(23).hk AND st(t).c >= INT(.5 + lot(23).c * uf!) THEN
  2194. LOCATE 6, 41
  2195. dy 23
  2196. gp(23) = -1
  2197. IF lot(24).own = t AND lot(24).hk AND st(t).c >= INT(.5 + lot(24).c * uf!) THEN
  2198. LOCATE 7, 41
  2199. dy 24
  2200. gp(24) = -1
  2201. IF lot(25).own = t AND lot(25).hk AND st(t).c >= INT(.5 + lot(25).c * uf!) THEN
  2202. LOCATE 8, 41
  2203. dy 25
  2204. gp(25) = -1
  2205. IF lot(26).own = t AND lot(26).hk AND st(t).c >= INT(.5 + lot(26).c * uf!) THEN
  2206. LOCATE 9, 41
  2207. dy 26
  2208. gp(26) = -1
  2209. IF lot(27).own = t AND lot(27).hk AND st(t).c >= INT(.5 + lot(27).c * uf!) THEN
  2210. LOCATE 10, 41
  2211. dy 27
  2212. gp(27) = -1
  2213. IF lot(28).own = t AND lot(28).hk AND st(t).c >= INT(.5 + lot(28).c * uf!) THEN
  2214. LOCATE 11, 41
  2215. dy 28
  2216. gp(28) = -1
  2217. IF lot(29).own = t AND lot(29).hk AND st(t).c >= INT(.5 + lot(29).c * uf!) THEN
  2218. LOCATE 12, 41
  2219. dy 29
  2220. gp(29) = -1
  2221. IF lot(31).own = t AND lot(31).hk AND st(t).c >= INT(.5 + lot(31).c * uf!) THEN
  2222. LOCATE 5, 56
  2223. dy 31
  2224. gp(31) = -1
  2225. IF lot(32).own = t AND lot(32).hk AND st(t).c >= INT(.5 + lot(32).c * uf!) THEN
  2226. LOCATE 6, 56
  2227. dy 32
  2228. gp(32) = -1
  2229. IF lot(34).own = t AND lot(34).hk AND st(t).c >= INT(.5 + lot(34).c * uf!) THEN
  2230. LOCATE 7, 56
  2231. dy 34
  2232. gp(34) = -1
  2233. IF lot(35).own = t AND lot(35).hk AND st(t).c >= INT(.5 + lot(35).c * uf!) THEN
  2234. LOCATE 8, 56
  2235. dy 35
  2236. gp(35) = -1
  2237. IF lot(37).own = t AND lot(37).hk AND st(t).c >= INT(.5 + lot(37).c * uf!) THEN
  2238. LOCATE 9, 56
  2239. dy 37
  2240. gp(37) = -1
  2241. IF lot(39).own = t AND lot(39).hk AND st(t).c >= INT(.5 + lot(39).c * uf!) THEN
  2242. LOCATE 10, 56
  2243. dy 39
  2244. gp(39) = -1
  2245. ce 13, RTRIM$(st(t).ft)
  2246. ce 14, "Choose a deed to unmortgage or 0 to continue"
  2247. ce 17, "you have $" + ltsb(st(t).c)
  2248. IF (NOT gp(pick)) AND (NOT q) THEN b
  2249. pick = ner(15, 39)
  2250. LOOP UNTIL gp(pick)
  2251. IF pick = 0 THEN EXIT SUB
  2252. lot(pick).hk = 0
  2253. box
  2254. pay t, INT(.5 + lot(pick).c * uf!)
  2255. p
  2256.  
  2257. SUB upd
  2258. chk 1, 1, 3
  2259. chk 6, 8, 9
  2260. chk 11, 13, 14
  2261. chk 16, 18, 19
  2262. chk 21, 23, 24
  2263. chk 26, 27, 29
  2264. chk 31, 32, 34
  2265. chk 37, 37, 39
  2266. IF lot(12).own = lot(28).own AND lot(12).own > 0 THEN
  2267. lot(12).stat = 2
  2268. lot(28).stat = 2
  2269. lot(12).stat = SGN(lot(12).own)
  2270. lot(28).stat = SGN(lot(28).own)
  2271. FOR rtt = 5 TO 35 STEP 10
  2272. rro = rro * 10 + lot(rtt).own
  2273. lot(rtt).stat = 0
  2274. CASE 1111, 2222
  2275. lot(5).stat = 4
  2276. lot(15).stat = 4
  2277. lot(25).stat = 4
  2278. lot(35).stat = 4
  2279. CASE 111, 222, 1222, 2111
  2280. lot(15).stat = 3
  2281. lot(25).stat = 3
  2282. lot(35).stat = 3
  2283. CASE 1011, 1211, 2022, 2122
  2284. lot(5).stat = 3
  2285. lot(25).stat = 3
  2286. lot(35).stat = 3
  2287. CASE 1101, 1121, 2202, 2212
  2288. lot(5).stat = 3
  2289. lot(15).stat = 3
  2290. lot(35).stat = 3
  2291. CASE 1110, 1112, 2220, 2221
  2292. lot(5).stat = 3
  2293. lot(15).stat = 3
  2294. lot(25).stat = 3
  2295. IF lot(5).own = lot(15).own AND lot(5).own > 0 THEN
  2296. lot(5).stat = 2
  2297. lot(15).stat = 2
  2298. IF lot(5).own = lot(25).own AND lot(5).own > 0 THEN
  2299. lot(5).stat = 2
  2300. lot(25).stat = 2
  2301. IF lot(5).own = lot(35).own AND lot(5).own > 0 THEN
  2302. lot(5).stat = 2
  2303. lot(35).stat = 2
  2304. IF lot(15).own = lot(25).own AND lot(15).own > 0 THEN
  2305. lot(15).stat = 2
  2306. lot(25).stat = 2
  2307. IF lot(15).own = lot(35).own AND lot(15).own > 0 THEN
  2308. lot(15).stat = 2
  2309. lot(35).stat = 2
  2310. IF lot(25).own = lot(35).own AND lot(25).own > 0 THEN
  2311. lot(25).stat = 2
  2312. lot(35).stat = 2
  2313. FOR rtt = 5 TO 35 STEP 10
  2314. IF lot(rtt).stat = 0 THEN lot(rtt).stat = SGN(lot(rtt).own)
  2315. swbs
  2316.  
  2317. SUB utc (t)
  2318. IF lot(st(t).whr).own = 0 THEN
  2319. noo t
  2320. IF lot(st(t).whr).own = t THEN
  2321. COLOR lot(st(t).whr).hue
  2322. ce 12, RTRIM$(lot(st(t).whr).ttl)
  2323. ce 13, "is yours."
  2324. p
  2325. IF lot(st(t).whr).hk THEN
  2326. COLOR lot(st(t).whr).hue
  2327. ce 12, RTRIM$(lot(st(t).whr).ttl)
  2328. ce 13, "is mortgaged."
  2329. p
  2330. crl = di(d1, d2)
  2331. ce 11, lts(d1) + " + " + lts(d2) + " = " + lts(crl) + ", $" + lts(10 * crl) + " due."
  2332. p
  2333. popp t, 10 * crl
  2334.  
  2335. SUB vwd
  2336. box
  2337. LOCATE 5, 11
  2338. tiny 1
  2339. LOCATE 6, 11
  2340. tiny 3
  2341. LOCATE 7, 11
  2342. tiny 5
  2343. LOCATE 8, 11
  2344. tiny 6
  2345. LOCATE 9, 11
  2346. tiny 8
  2347. LOCATE 10, 11
  2348. tiny 9
  2349. LOCATE 5, 25
  2350. tiny 11
  2351. LOCATE 6, 25
  2352. tiny 12
  2353. LOCATE 7, 25
  2354. tiny 13
  2355. LOCATE 8, 25
  2356. tiny 14
  2357. LOCATE 9, 25
  2358. tiny 15
  2359. LOCATE 10, 25
  2360. tiny 16
  2361. LOCATE 11, 25
  2362. tiny 18
  2363. LOCATE 12, 25
  2364. tiny 19
  2365. LOCATE 5, 40
  2366. tiny 21
  2367. LOCATE 6, 40
  2368. tiny 23
  2369. LOCATE 7, 40
  2370. tiny 24
  2371. LOCATE 8, 40
  2372. tiny 25
  2373. LOCATE 9, 40
  2374. tiny 26
  2375. LOCATE 10, 40
  2376. tiny 27
  2377. LOCATE 11, 40
  2378. tiny 28
  2379. LOCATE 12, 40
  2380. tiny 29
  2381. LOCATE 5, 55
  2382. tiny 31
  2383. LOCATE 6, 55
  2384. tiny 32
  2385. LOCATE 7, 55
  2386. tiny 34
  2387. LOCATE 8, 55
  2388. tiny 35
  2389. LOCATE 9, 55
  2390. tiny 37
  2391. LOCATE 10, 55
  2392. tiny 39
  2393. ce 13, "choose a deed to view or 0 to continue"
  2394. wt = ner(14, 39)
  2395. IF wt = 0 THEN EXIT DO
  2396. SELECT CASE lot(wt).sty
  2397. CASE "b"
  2398. box
  2399. COLOR lot(wt).hue
  2400. ce 5, RTRIM$(lot(wt).ttl)
  2401. ce 6, "cost $" + lts(lot(wt).c)
  2402. ce 7, "mortgage value $" + lts(lot(wt).c / 2)
  2403. ce 8, "rent $" + lts(lot(wt).r)
  2404. ce 9, "rent with one house $" + lts(lot(wt).r1)
  2405. ce 10, "rent with two houses $" + lts(lot(wt).r2)
  2406. ce 11, "rent with three houses $" + lts(lot(wt).r3)
  2407. ce 12, "rent with four houses $" + lts(lot(wt).r4)
  2408. ce 13, "rent with hotel $" + lts(lot(wt).rhot)
  2409. ce 14, "houses cost $" + lts(lot(wt).bc) + " each"
  2410. ce 15, "hotel costs $" + lts(lot(wt).bc) + " plus 4 houses"
  2411. IF lot(wt).own = 0 THEN
  2412. ce 16, "unowned"
  2413. ce 16, "owned by " + RTRIM$(st(lot(wt).own).ft)
  2414. IF lot(wt).hk THEN
  2415. ce 17, "mortgaged, $" + lts(INT(.5 + lot(wt).c * uf!)) + " to unmortgage."
  2416. SELECT CASE lot(wt).stat
  2417. ce 17, "with no buildings"
  2418. ce 17, "with one house"
  2419. ce 17, "with two houses"
  2420. ce 17, "with three houses"
  2421. ce 17, "with four houses"
  2422. ce 17, "with hotel"
  2423. p
  2424. CASE "u"
  2425. box
  2426. COLOR lot(wt).hue
  2427. ce 5, RTRIM$(lot(wt).ttl)
  2428. ce 6, "cost $150"
  2429. ce 7, "mortgage value $75"
  2430. ce 8, "rent with one Utility, four times dice"
  2431. ce 9, "rent with two Utilities, ten times dice"
  2432. IF lot(wt).own = 0 THEN
  2433. ce 16, "unowned"
  2434. ce 16, "owned by " + RTRIM$(st(lot(wt).own).ft)
  2435. IF lot(wt).hk THEN ce 17, "mortgaged, $" + lts(INT(.5 + lot(wt).c * uf!)) + " to unmortgage."
  2436. SELECT CASE lot(wt).stat
  2437. ce 18, "one Utility"
  2438. ce 18, "two utlities"
  2439. p
  2440. CASE "r"
  2441. box
  2442. COLOR lot(wt).hue
  2443. ce 5, RTRIM$(lot(wt).ttl)
  2444. ce 6, "cost $200"
  2445. ce 7, "mortgage value $100"
  2446. ce 8, "rent with one Railroad $25"
  2447. ce 9, "rent with two Railroads $50"
  2448. ce 10, "rent with three Railroads $100"
  2449. ce 11, "rent with four Railroads $200"
  2450. IF lot(wt).own = 0 THEN
  2451. ce 16, "unowned"
  2452. ce 16, "owned by " + RTRIM$(st(lot(wt).own).ft)
  2453. IF lot(wt).hk THEN ce 17, "mortgaged, $" + lts(INT(.5 + lot(wt).c * uf!)) + " to unmortgage."
  2454. SELECT CASE lot(wt).stat
  2455. ce 18, "one Railroad"
  2456. ce 18, "two Railroads"
  2457. ce 18, "three Railroads"
  2458. ce 18, "four Railroads"
  2459. p
  2460. CASE "o"
  2461. IF (NOT q) THEN b
  2462. LOOP UNTIL wt = 0
  2463.  
  2464.  
I apologise with all QB64 coders not mentioned here, I preferred to use code taken from sample folder of QB64.
Hey I must apologise also with curator of the QB64 website! I have posted a code more than 1000 lines and you can find fun that linecode's number restarts from 1 after 1000!
Thanks to read
Programming isn't difficult, only it's  consuming time and coffee

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #11 on: November 07, 2020, 02:23:21 pm »
Code from here: "CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY"

Uses GOTO because they did not have ELSE not to mention SUBs and FUNCTIONs, that code is very tame spaghetti-O's and worth study.

Offline Kiara87

  • Forum Regular
  • Posts: 164
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #12 on: November 07, 2020, 03:54:59 pm »
Hi
from my point of view
this is an old style of coding a program
Code: QB64: [Select]
  1. 10 PRINT TAB(32);"ANIMAL"
  2. 20 PRINT TAB(15);"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY"
  3. 40 PRINT "PLAY 'GUESS THE ANIMAL'"
  4. 50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT."
  5. 70 DIM A$(200)
  6. 80 FOR I=0 TO 3
  7. 90 READ A$(I)
  8. 100 NEXT I
  9. 110 N=VAL(A$(0))
  10. 120 REM          MAIN CONTROL SECTION
  11. 130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$
  12. 140 IF A$="LIST" THEN 600
  13. 150 IF LEFT$(A$,1)<>"Y" THEN 120
  14. 160 K=1
  15. 170 GOSUB 390
  16. 180 IF LEN(A$(K))=0 THEN 999
  17. 190 IF LEFT$(A$(K),2)="\Q" THEN 170
  18. 200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2);
  19. 210 INPUT A$
  20. 220 A$=LEFT$(A$,1)
  21. 230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120
  22. 240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$
  23. 250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A"
  24. 260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2)
  25. 270 INPUT X$
  26. 280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE ";
  27. 290 INPUT A$
  28. 300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280
  29. 310 IF A$="Y" THEN B$="N"
  30. 320 IF A$="N" THEN B$="Y"
  31. 330 Z1=VAL(A$(0))
  32. 340 A$(0)=STR$(Z1+2)
  33. 350 A$(Z1)=A$(K)
  34. 360 A$(Z1+1)="\A"+V$
  35. 370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\"
  36. 380 GOTO 120
  37. 390 REM     SUBROUTINE TO PRINT QUESTIONS
  38. 400 Q$=A$(K)
  39. 410 FOR Z=3 TO LEN(Q$)
  40. 415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);
  41. 417 NEXT Z
  42. 420 INPUT C$
  43. 430 C$=LEFT$(C$,1)
  44. 440 IF C$<>"Y" AND C$<>"N" THEN 410
  45. 450 T$="\"+C$
  46. 455 FOR X=3 TO LEN(Q$)-1
  47. 460 IF MID$(Q$,X,2)=T$ THEN 480
  48. 470 NEXT X
  49. 475 STOP
  50. 480 FOR Y=X+1 TO LEN(Q$)
  51. 490 IF MID$(Q$,Y,1)="\" THEN 510
  52. 500 NEXT Y
  53. 505 STOP
  54. 510 K=VAL(MID$(Q$,X+2,Y-X-2))
  55. 520 RETURN
  56. 530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD"
  57. 600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:"
  58. 605 X=0
  59. 610 FOR I=1 TO 200
  60. 620 IF LEFT$(A$(I),2)<>"\A" THEN 650
  61. 624 PRINT TAB(15*X);
  62. 630 FOR Z=3 TO LEN(A$(I))
  63. 640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);
  64. 642 NEXT Z
  65. 645 X=X+1: IF X=4 THEN X=0: PRINT
  66. 650 NEXT I
  67. 660 PRINT
  68. 670 PRINT
  69. 680 GOTO 120
  70. 999 END
  71.  
that we can call "spaghetti code"... the program runs ok... but its readableness is very poor, now think how  you work to modify this code to guess a number at the place of an animal...the maintenance is harder than a program with code written using the structured technique

this one also using GOTO has a more readableness
Code: QB64: [Select]
  1. 5 CLS
  2. PRINT "1) ADD"
  3. PRINT "2) MULTIPLY"
  4. PRINT "3) DIVIDE"
  5. PRINT "4) SQUARE ROOT"
  6. PRINT "5) EXIT"
  7. IF I = 1 GOTO 10
  8. IF I = 2 GOTO 20
  9. IF I = 3 GOTO 30
  10. IF I = 4 GOTO 40
  11. IF I = 5 GOTO 50
  12. 10 CLS : PRINT "INPUT NUMBER"
  13. PRINT "INPUT NEXT NUMBER"
  14. PRINT A + B
  15. PRINT "PRESS SPACE TO RUN"
  16. 20 CLS : PRINT "INPUT NUMBER"
  17. PRINT "INPUT NEXT NUMBER"
  18. PRINT C * D
  19. PRINT "PRESS SPACE TO RUN"
  20. 30 CLS : PRINT "INPUT NUMBER"
  21. PRINT "INPUT NEXT NUMBER"
  22. PRINT E / F
  23. PRINT "PRESS SPACE TO RUN"
  24. 40 CLS : PRINT "INPUT NUMBER"
  25. PRINT "PRESS SPACE TO RUN"
  26. 50 END
  27.  

Today we can avoid this kind of GOTOing, here the same code structured
Code: QB64: [Select]
  1.     Info
  2.     INPUT I
  3.     SELECT CASE I
  4.         CASE 1
  5.             CLS: PRINT "INPUT NUMBER"
  6.             INPUT A
  7.             CLS
  8.             PRINT "INPUT NEXT NUMBER"
  9.             INPUT B
  10.             CLS
  11.             PRINT A + B
  12.             PRINT "PRESS SPACE TO RUN"
  13.             SLEEP 0
  14.  
  15.         CASE 2
  16.             CLS: PRINT "INPUT NUMBER"
  17.             INPUT C
  18.             CLS
  19.             PRINT "INPUT NEXT NUMBER"
  20.             INPUT D
  21.             CLS
  22.             PRINT C * D
  23.             PRINT "PRESS SPACE TO RUN"
  24.             SLEEP 0
  25.  
  26.         CASE 3
  27.             CLS: PRINT "INPUT NUMBER"
  28.             INPUT E
  29.             CLS
  30.             PRINT "INPUT NEXT NUMBER"
  31.             INPUT F
  32.             CLS
  33.             PRINT E / F
  34.             PRINT "PRESS SPACE TO RUN"
  35.             SLEEP 0
  36.  
  37.         CASE 4
  38.             CLS: PRINT "INPUT NUMBER"
  39.             INPUT G
  40.             CLS
  41.             PRINT SQR(G)
  42.             PRINT "PRESS SPACE TO RUN"
  43.             SLEEP 0
  44.  
  45.         CASE 5
  46.             END
  47.     END SELECT
  48.  
  49.  
  50.  
  51. SUB Info
  52.     CLS
  53.     PRINT "1) ADD"
  54.     PRINT "2) MULTIPLY"
  55.     PRINT "3) DIVIDE"
  56.     PRINT "4) SQUARE ROOT"
  57.     PRINT "5) EXIT"

Here for the coder is easier to modify the instruction if he must add a new function to the calculator for example Substraction! :-)
but using the structured technique you can reach more complex code without loose its readableness
this is an example
Code: QB64: [Select]
  1. DEFINT A-Z
  2. DECLARE FUNCTION chot (t)
  3. DECLARE FUNCTION chou (t)
  4. DECLARE FUNCTION di (d1, d2)
  5. DECLARE FUNCTION lts$ (nu)
  6. DECLARE FUNCTION ltsb$ (nu&)
  7. DECLARE FUNCTION ner (dn, max)
  8. DECLARE FUNCTION nerb& (dn, max&)
  9. DECLARE FUNCTION nerk$ ()
  10. DECLARE SUB act (rl, t)
  11. DECLARE SUB ar (t)
  12. DECLARE SUB auc (t)
  13. DECLARE SUB bca (t, houf, hotf)
  14. DECLARE SUB box ()
  15. DECLARE SUB broke (t)
  16. DECLARE SUB buhot (t)
  17. DECLARE SUB buhou (t)
  18. DECLARE SUB ce (dn, tx$)
  19. DECLARE SUB chk (l, m, h)
  20. DECLARE SUB clk (se!)
  21. DECLARE SUB cont (t, nos)
  22. DECLARE SUB crd ()
  23. DECLARE SUB dcha (t)
  24. DECLARE SUB dche (t)
  25. DECLARE SUB dy (wt)
  26. DECLARE SUB fd (rl1, rl2, d1, d2, d3, d4)
  27. DECLARE SUB gov (t)
  28. DECLARE SUB inc (t)
  29. DECLARE SUB init ()
  30. DECLARE SUB inv ()
  31. DECLARE SUB lil (wt)
  32. DECLARE SUB lop (rl, t)
  33. DECLARE SUB mb ()
  34. DECLARE SUB md ()
  35. DECLARE SUB mini (gr)
  36. DECLARE SUB mob (t)
  37. DECLARE SUB more (t)
  38. DECLARE SUB mort (t)
  39. DECLARE SUB move (dist, t)
  40. DECLARE SUB noo (t)
  41. DECLARE SUB opt (t)
  42. DECLARE SUB pay (t, cge)
  43. DECLARE SUB pim (gr, l, m, h)
  44. DECLARE SUB popp (t, cge)
  45. DECLARE SUB quit ()
  46. DECLARE SUB rlc (t)
  47. DECLARE SUB rules ()
  48. DECLARE SUB save (t)
  49. DECLARE SUB scha ()
  50. DECLARE SUB sche ()
  51. DECLARE SUB short (t, l, m, h)
  52. DECLARE SUB shot (t)
  53. DECLARE SUB shou (t)
  54. DECLARE SUB sml (wt)
  55. DECLARE SUB swbd ()
  56. DECLARE SUB swbs ()
  57. DECLARE SUB tiny (wt)
  58. DECLARE SUB tj (t)
  59. DECLARE SUB tn (t)
  60. DECLARE SUB trade ()
  61. DECLARE SUB unm (t)
  62. DECLARE SUB upd ()
  63. DECLARE SUB utc (t)
  64. DECLARE SUB vwd ()
  65. TYPE dd
  66. ttl AS STRING * 21
  67. ab AS STRING * 5
  68. sty AS STRING * 1
  69. rhot AS INTEGER
  70. stat AS INTEGER
  71. TYPE pl
  72. ft AS STRING * 8
  73. tk AS STRING * 1
  74. chag AS INTEGER
  75. cheg AS INTEGER
  76. DIM SHARED sf!, uf!, j, bn, x, q, fr&, bhu, bht, top(1 TO 6) AS STRING * 7, mdd(1 TO 6) AS STRING * 7, bot(1 TO 6) AS STRING * 7, cha(1 TO 16), che(1 TO 16), lot(39) AS dd, st(1 TO 2) AS pl
  77. mb
  78. md
  79. swbd
  80. cont t, nos
  81. IF nos THEN
  82. rules
  83. bhu = 32
  84. bht = 12
  85. init
  86. t = 1
  87. IF st(1).whr > -10 THEN
  88. LOCATE lot(st(1).whr).od, lot(st(1).whr).oa
  89. PRINT st(1).tk
  90. IF st(2).whr > -10 THEN
  91. LOCATE lot(st(2).whr).id, lot(st(2).whr).ia
  92. PRINT st(2).tk
  93. IF st(t).whr > -10 THEN tn t ELSE tj t
  94. t = 3 - t
  95. 1
  96. CASE 53
  97. nos = -1
  98. CASE 255
  99. ce 10, "The save is faulty."
  100. ce 11, "I will delete it."
  101. p
  102. nos = -1
  103. KILL "monopoly.dat"
  104. box
  105. ce 5, "Crash " + lts(ERR) + " has happened."
  106. ce 7, "Take note of what was going on just before the crash."
  107. ce 9, "Contact me at grahambhg@yahoo.com,"
  108. ce 10, "and I will see what I can do."
  109. crd
  110. DATA ,,o,,,,,,,,,,23,78,21,72,,
  111. DATA Mediterranean Avenue,MEDIT,b,60,2,10,30,90,160,250,50,5,23,68,21,68,22,65
  112. DATA ,,o,,,,,,,,,,23,61,21,61,,
  113. DATA Baltic Avenue,BALTI,b,60,4,20,60,180,320,450,50,5,23,54,21,54,22,51
  114. DATA ,,o,,,,,,,,,,23,47,21,47,,
  115. DATA Reading Railroad,READR,r,200,,25,50,100,200,,,7,23,40,21,40,,
  116. DATA Oriental Avenue,ORIEN,b,100,6,30,90,270,400,550,50,11,23,33,21,33,22,30
  117. DATA ,,o,,,,,,,,,,23,26,21,26,,
  118. DATA Vermont Avenue,VERMO,b,100,6,30,90,270,400,550,50,11,23,19,21,19,22,16
  119. DATA Conneticut Avenue,CONNE,b,120,8,40,100,300,450,600,50,11,23,12,21,12,22,9
  120. DATA ,,o,,,,,,,,,,23,2,21,8,,
  121. DATA Saint Charles Place,STCHA,b,140,10,50,150,450,625,750,100,13,20,2,20,9,20,8
  122. DATA Electric Company,ELECT,u,150,,,,,,,,7,18,2,18,9,,
  123. DATA States Avenue,STATE,b,140,10,50,150,450,625,750,100,13,16,2,16,9,16,8
  124. DATA Virginia Avenue,VIRGI,b,160,12,60,180,500,700,900,100,13,14,2,14,9,14,8
  125. DATA Pennsylvania Railroad,PENRR,r,200,,25,50,100,200,,,7,12,2,12,9,,
  126. DATA Saint James Place,STJAM,b,180,14,70,200,550,750,950,100,12,10,2,10,9,10,8
  127. DATA ,,o,,,,,,,,,,8,2,8,9,,
  128. DATA Tennessee Avenue,TENNE,b,180,14,70,200,550,750,950,100,12,6,2,6,9,6,8
  129. DATA New York Avenue,NEWYO,b,200,16,80,220,600,800,1000,100,12,4,2,4,9,4,8
  130. DATA ,,o,,,,,,,,,,1,2,3,8,,
  131. DATA Kentucky Avenue,KENTU,b,220,18,90,250,700,875,1050,150,4,1,12,3,12,2,15
  132. DATA ,,o,,,,,,,,,,1,19,3,19,,
  133. DATA Indiana Avenue,INDIA,b,220,18,90,250,700,875,1050,150,4,1,26,3,26,2,29
  134. DATA Illinois Avenue,ILLIN,b,240,20,100,300,750,925,1100,150,4,1,33,3,33,2,36
  135. DATA B. & O. Railroad,B&ORR,r,200,,25,50,100,200,,,7,1,40,3,40,,
  136. DATA Atlantic Avenue,ATLAN,b,260,22,110,330,800,975,1150,150,14,1,47,3,47,2,50
  137. DATA Ventnor Avenue,VENTN,b,260,22,110,330,800,975,1150,150,14,1,54,3,54,2,57
  138. DATA Water Works,WATER,u,150,,,,,,,,7,1,61,3,61,,
  139. DATA Marvin Gardens,MARVI,b,280,24,120,360,850,1025,1200,150,14,1,68,3,68,2,71
  140. DATA ,,o,,,,,,,,,,1,78,3,72,,
  141. DATA Pacific Avenue,PACIF,b,300,26,130,390,900,1100,1275,200,10,4,78,4,71,4,72
  142. DATA North Carolina Avenue,NORTH,b,300,26,130,390,900,1100,1275,200,10,6,78,6,71,6,72
  143. DATA ,,o,,,,,,,,,,8,78,8,71,,
  144. DATA Pennsylvania Avenue,PENAV,b,320,28,150,450,1000,1200,1400,200,10,10,78,10,71,10,72
  145. DATA Short Line,SHORT,r,200,,25,50,100,200,,,7,12,78,12,71,,
  146. DATA ,,o,,,,,,,,,,14,78,14,71,,
  147. DATA Park Place,PARKP,b,350,35,175,500,1100,1300,1500,200,9,16,78,16,71,16,72
  148. DATA ,,o,,,,,,,,,,18,78,18,71,,
  149. DATA Boardwalk,BOARD,b,400,50,200,600,1400,1700,2000,200,9,20,78,20,71,20,72
  150.  
  151. SUB act (rl, t)
  152. SELECT CASE st(t).whr
  153. ce 10, "You landed on Go."
  154. IF bn THEN
  155. st(t).c = st(t).c + 200
  156. ce 11, "Collect $400."
  157. ce 11, "Collect $200."
  158. p
  159. CASE 2, 17, 33
  160. dche t
  161. inc t
  162. CASE 7, 22, 36
  163. dcha t
  164. CASE 10
  165. ce 10, "Just visiting"
  166. p
  167. CASE 20
  168. ce 10, "Free Parking"
  169. ce 11, "You get $" + ltsb(fr&)
  170. st(t).c = st(t).c + fr&
  171. fr& = 500
  172. p
  173. CASE 30
  174. ar t
  175. CASE 38
  176. ce 10, "Luxury Tax. Pay $75."
  177. p
  178. pay t, 75
  179. IF j THEN fr& = fr& + 75
  180. p
  181. lop rl, t
  182.  
  183. tx$ = LCASE$(INKEY$)
  184. LOOP UNTIL tx$ > ""
  185. ak = tx$
  186.  
  187. SUB ar (t)
  188. ce 9, RTRIM$(st(t).ft) + " will be sent directly to Jail."
  189. p
  190. IF t = 1 THEN LOCATE lot(st(1).whr).od, lot(st(1).whr).oa ELSE LOCATE lot(st(2).whr).id, lot(st(2).whr).ia
  191. PRINT " "
  192. st(t).whr = -10
  193. st(t).dc = 0
  194. box
  195.  
  196. SUB auc (t)
  197. lwst = INT(.5 + lot(st(t).whr).c / 10)
  198. bj = INT(.5 + lwst / 2)
  199. nw = lwst
  200. box
  201. COLOR lot(st(t).whr).hue
  202. ce 5, RTRIM$(lot(st(t).whr).ttl)
  203. ce 6, RTRIM$(st(1).ft) + ", you have $" + ltsb(st(1).c)
  204. ce 7, "Do I hear $" + lts(nw) + "?"
  205. IF cr(1) + st(1).c >= nw THEN ce 8, "(Y/N)" ELSE ce 8, "press N to Not bid."
  206. yn$ = LCASE$(INKEY$)
  207. LOOP UNTIL yn$ = "n" OR (yn$ = "y" AND cr(1) + st(1).c >= nw)
  208. IF yn$ = "y" THEN
  209. ce 10, " I hear $" + lts(nw)
  210. nw = nw + bj
  211. bidder = 1
  212. ce 10, RTRIM$(st(1).ft) + " passes first bid."
  213. clk .5
  214. box
  215. COLOR lot(st(t).whr).hue
  216. ce 5, RTRIM$(lot(st(t).whr).ttl)
  217. ce 6, RTRIM$(st(2).ft) + ", you have $" + ltsb(st(2).c)
  218. ce 7, "Do I hear $" + lts(nw) + "?"
  219. IF cr(2) + st(2).c >= nw THEN ce 8, "(Y/N)" ELSE ce 8, "press N to Not bid."
  220. yn$ = LCASE$(INKEY$)
  221. LOOP UNTIL yn$ = "n" OR (yn$ = "y" AND cr(2) + st(2).c >= nw)
  222. IF yn$ = "y" THEN
  223. ce 10, " I hear $" + lts(nw)
  224. nw = nw + bj
  225. bidder = 2
  226. ce 9, "Going, going, going..."
  227. clk .5
  228. SELECT CASE bidder
  229. ce 11, "No sale!"
  230. p
  231. pay 1, lwst
  232. COLOR lot(st(t).whr).hue
  233. ce 10, RTRIM$(lot(st(t).whr).ttl)
  234. lot(st(t).whr).own = 1
  235. p
  236. who = 1
  237. box
  238. COLOR lot(st(t).whr).hue
  239. ce 5, RTRIM$(lot(st(t).whr).ttl)
  240. ce 6, RTRIM$(st(who).ft) + ", you have $" + ltsb(st(who).c)
  241. ce 7, "Do I hear $" + lts(nw) + "?"
  242. IF cr(who) + st(who).c >= nw THEN ce 8, "(Y/N)" ELSE ce 8, "press N to Not bid."
  243. yn$ = LCASE$(INKEY$)
  244. LOOP UNTIL yn$ = "n" OR (yn$ = "y" AND cr(who) + st(who).c >= nw)
  245. IF yn$ = "y" THEN
  246. ce 10, " I hear $" + lts(nw)
  247. nw = nw + bj
  248. bidder = who
  249. ce 9, "Going, going, going..."
  250. done = -1
  251. clk .5
  252. who = 3 - who
  253. LOOP UNTIL done
  254. COLOR lot(st(t).whr).hue
  255. ce 10, RTRIM$(lot(st(t).whr).ttl)
  256. pay bidder, nw - bj
  257. lot(st(t).whr).own = bidder
  258. p
  259.  
  260. SUB b
  261. FOR al = 300 TO 500 STEP 100
  262. SOUND al, 2
  263.  
  264. SUB bca (t, houf, hotf)
  265. hss = chou(t)
  266. hts = chot(t)
  267. ce 8, RTRIM$(st(t).ft) + ", you have " + lts(hss) + " house(s) and " + lts(hts) + " hotel(s)."
  268. fee = hss * houf + hts * hotf
  269. ce 9, "$" + lts(fee) + " due."
  270. p
  271. IF fee = 0 THEN EXIT SUB
  272. pay t, fee
  273. p
  274. IF j THEN fr& = fr& + fee
  275.  
  276. SUB box
  277. ce 4, CHR$(201) + STRING$(59, 205) + CHR$(187)
  278. FOR sides = 5 TO 17
  279. ce sides, CHR$(186) + SPACE$(59) + CHR$(186)
  280. ce 18, CHR$(204) + STRING$(8, 205) + CHR$(187) + SPACE$(50) + CHR$(186)
  281. ce 19, CHR$(186) + SPACE$(8) + CHR$(186) + SPACE$(50) + CHR$(186)
  282. ce 20, CHR$(200) + STRING$(8, 205) + CHR$(202) + STRING$(50, 205) + CHR$(188)
  283. LOCATE 19, 11
  284. PRINT "JAIL:"
  285. IF st(1).whr = -10 THEN
  286. LOCATE 19, 16
  287. PRINT st(1).tk
  288. IF st(2).whr = -10 THEN
  289. LOCATE 19, 18
  290. PRINT st(2).tk
  291. IF (NOT x) THEN
  292. LOCATE 18, 61
  293. PRINT USING "houses:##"; bhu
  294. IF (NOT x) THEN
  295. LOCATE 19, 61
  296. PRINT USING "hotels:##"; bht
  297.  
  298. SUB broke (t)
  299. box
  300. owe = ABS(st(t).c)
  301. v = cr(t)
  302. ce 5, RTRIM$(st(t).ft) + ", you need to raise $" + lts(ABS(owe))
  303. ce 6, "You can raise $" + lts(v)
  304. IF owe > v THEN
  305. ce 12, "YOU ARE BROKE!!"
  306. ce 16, "press Q to Quit game"
  307. done$ = LCASE$(INKEY$)
  308. LOOP UNTIL done$ = "q"
  309. gov 3 - t
  310. ce 9, "press 4 to mortgage properties"
  311. ce 10, "press 5 to sell houses"
  312. ce 11, "press 6 to sell hotels"
  313. ce 13, "press 8 to see inventories"
  314. ce 14, "press 9 to view deeds"
  315. ce 16, "press Q to Quit game"
  316. wtn$ = LCASE$(INKEY$)
  317. wtn = VAL(wtn$)
  318. LOOP UNTIL wtn$ > ""
  319. IF wtn$ = "q" THEN quit
  320. mort t
  321. shou t
  322. swbs
  323. shot t
  324. swbs
  325. inv
  326. vwd
  327. LOOP UNTIL st(t).c >= 0
  328. box
  329.  
  330. SUB buhot (t)
  331. DIM gm(9)
  332. gm(0) = -1
  333. box
  334. IF lot(1).own = t AND lot(1).stat = 4 AND st(t).c >= 50 AND bht > 0 THEN
  335. gm(1) = -1
  336. mini 1
  337. IF lot(6).own = t AND lot(6).stat = 4 AND st(t).c >= 50 AND bht > 0 THEN
  338. gm(2) = -1
  339. mini 2
  340. IF lot(11).own = t AND lot(11).stat = 4 AND st(t).c >= 100 AND bht > 0 THEN
  341. gm(3) = -1
  342. mini 3
  343. IF lot(16).own = t AND lot(16).stat = 4 AND st(t).c >= 100 AND bht > 0 THEN
  344. gm(4) = -1
  345. mini 4
  346. IF lot(21).own = t AND lot(21).stat = 4 AND st(t).c >= 150 AND bht > 0 THEN
  347. gm(5) = -1
  348. mini 5
  349. IF lot(26).own = t AND lot(26).stat = 4 AND st(t).c >= 150 AND bht > 0 THEN
  350. gm(6) = -1
  351. mini 6
  352. IF lot(31).own = t AND lot(31).stat = 4 AND st(t).c >= 200 AND bht > 0 THEN
  353. gm(7) = -1
  354. mini 7
  355. IF lot(37).own = t AND lot(37).stat = 4 AND st(t).c >= 200 AND bht > 0 THEN
  356. gm(8) = -1
  357. mini 8
  358. ce 9, RTRIM$(st(t).ft)
  359. ce 10, "Choose a monopoly to buy hotels for"
  360. ce 11, "or 0 to continue"
  361. IF wlb > 0 AND (NOT q) THEN b
  362. wlb$ = INKEY$
  363. IF wlb$ = CHR$(13) THEN wlb$ = "0"
  364. LOOP UNTIL wlb$ > ""
  365. IF wlb$ >= "0" AND wlb$ <= "8" THEN wlb = VAL(wlb$) ELSE wlb = 9
  366. LOOP UNTIL gm(wlb)
  367. IF wlb = 0 THEN EXIT SUB
  368. box
  369. ce 5, RTRIM$(st(t).ft)
  370. pim wlb, l, m, h
  371. IF lot(h).stat = 5 THEN max = 1 ELSE max = 2
  372. max = 3
  373. IF lot(h).stat = 5 THEN max = 2
  374. IF lot(m).stat = 5 THEN max = 1
  375. IF max > bht THEN max = bht
  376. IF max > INT(st(t).c / lot(l).bc) THEN max = INT(st(t).c / lot(l).bc)
  377. ce 7, "you can buy up to " + lts(max) + " hotel(s)."
  378. ce 8, "or 0 to continue"
  379. ce 10, "you have $" + ltsb(st(t).c)
  380. ce 11, "hotels cost $" + lts(lot(l).bc) + " (plus four houses) each."
  381. quan = ner(9, max)
  382. IF quan = 0 THEN EXIT SUB
  383. tot = lot(l).stat + lot(m).stat + lot(h).stat + quan
  384. lot(h).stat = INT(tot / 2)
  385. lot(l).stat = INT(tot / 2)
  386. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  387. lot(h).stat = INT(tot / 3)
  388. lot(m).stat = INT(tot / 3)
  389. lot(l).stat = INT(tot / 3)
  390. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  391. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  392. pay t, lot(l).bc * quan
  393. p
  394. IF (NOT x) THEN
  395. bht = bht - quan
  396. bhu = bhu + quan * 4
  397.  
  398. SUB buhou (t)
  399. DIM gm(9)
  400. gm(0) = -1
  401. box
  402. IF lot(1).own = t AND lot(1).mop AND (NOT lot(1).hk) AND (NOT lot(3).hk) AND lot(1).stat < 4 AND st(t).c >= 50 AND bhu > 0 THEN
  403. gm(1) = -1
  404. mini 1
  405. IF lot(6).own = t AND lot(6).mop AND (NOT lot(6).hk) AND (NOT lot(8).hk) AND (NOT lot(9).hk) AND lot(6).stat < 4 AND st(t).c >= 50 AND bhu > 0 THEN
  406. gm(2) = -1
  407. mini 2
  408. IF lot(11).own = t AND lot(11).mop AND (NOT lot(11).hk) AND (NOT lot(13).hk) AND (NOT lot(14).hk) AND lot(11).stat < 4 AND st(t).c >= 100 AND bhu > 0 THEN
  409. gm(3) = -1
  410. mini 3
  411. IF lot(16).own = t AND lot(16).mop AND (NOT lot(16).hk) AND (NOT lot(18).hk) AND (NOT lot(19).hk) AND lot(16).stat < 4 AND st(t).c >= 100 AND bhu > 0 THEN
  412. gm(4) = -1
  413. mini 4
  414. IF lot(21).own = t AND lot(21).mop AND (NOT lot(21).hk) AND (NOT lot(23).hk) AND (NOT lot(24).hk) AND lot(21).stat < 4 AND st(t).c >= 150 AND bhu > 0 THEN
  415. gm(5) = -1
  416. mini 5
  417. IF lot(26).own = t AND lot(26).mop AND (NOT lot(26).hk) AND (NOT lot(27).hk) AND (NOT lot(29).hk) AND lot(26).stat < 4 AND st(t).c >= 150 AND bhu > 0 THEN
  418. gm(6) = -1
  419. mini 6
  420. IF lot(31).own = t AND lot(31).mop AND (NOT lot(31).hk) AND (NOT lot(32).hk) AND (NOT lot(34).hk) AND lot(31).stat < 4 AND st(t).c >= 200 AND bhu > 0 THEN
  421. gm(7) = -1
  422. mini 7
  423. IF lot(37).own = t AND lot(37).mop AND (NOT lot(37).hk) AND (NOT lot(39).hk) AND lot(37).stat < 4 AND st(t).c >= 200 AND bhu > 0 THEN
  424. gm(8) = -1
  425. mini 8
  426. ce 9, RTRIM$(st(t).ft)
  427. ce 10, "Choose a monopoly to buy houses for"
  428. ce 11, "or 0 to continue"
  429. IF wlb > 0 AND (NOT q) THEN b
  430. wlb$ = INKEY$
  431. IF wlb$ = CHR$(13) THEN wlb$ = "0"
  432. LOOP UNTIL wlb$ > ""
  433. IF wlb$ >= "0" AND wlb$ <= "8" THEN wlb = VAL(wlb$) ELSE wlb = 9
  434. LOOP UNTIL gm(wlb)
  435. IF wlb = 0 THEN EXIT SUB
  436. box
  437. ce 5, RTRIM$(st(t).ft)
  438. pim wlb, l, m, h
  439. max = 8 - lot(l).stat - lot(h).stat
  440. max = 12 - lot(l).stat - lot(m).stat - lot(h).stat
  441. IF max > bhu THEN max = bhu
  442. IF max > INT(st(t).c / lot(l).bc) THEN max = INT(st(t).c / lot(l).bc)
  443. ce 7, "you can buy up to " + lts(max) + " house(s)."
  444. ce 8, "or 0 to continue"
  445. ce 10, "you have $" + ltsb(st(t).c)
  446. ce 11, "houses cost $" + lts(lot(l).bc) + " each."
  447. quan = ner(9, max)
  448. IF quan = 0 THEN EXIT SUB
  449. tot = lot(l).stat + lot(m).stat + lot(h).stat + quan
  450. lot(h).stat = INT(tot / 2)
  451. lot(l).stat = INT(tot / 2)
  452. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  453. lot(h).stat = INT(tot / 3)
  454. lot(m).stat = INT(tot / 3)
  455. lot(l).stat = INT(tot / 3)
  456. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  457. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  458. pay t, lot(l).bc * quan
  459. p
  460. IF (NOT x) THEN bhu = bhu - quan
  461.  
  462. SUB ce (dn, tx$)
  463. LOCATE dn, 40 - INT(LEN(tx$) / 2)
  464. PRINT tx$
  465.  
  466. SUB chk (l, m, h)
  467. IF lot(l).own = lot(m).own AND lot(m).own = lot(h).own AND lot(l).own > 0 THEN
  468. lot(l).mop = -1
  469. lot(m).mop = -1
  470. lot(h).mop = -1
  471. lot(l).mop = 0
  472. lot(m).mop = 0
  473. lot(h).mop = 0
  474.  
  475. FUNCTION chot (t)
  476. FOR sq = 1 TO 39
  477. IF lot(sq).sty = "b" AND lot(sq).own = t AND lot(sq).stat = 5 THEN ced = ced + 1
  478. chot = ced
  479.  
  480. FUNCTION chou (t)
  481. FOR sq = 1 TO 39
  482. IF lot(sq).sty = "b" AND lot(sq).own = t AND lot(sq).stat < 5 THEN ced = ced + lot(sq).stat
  483. chou = ced
  484.  
  485. SUB clk (se!)
  486. start# = TIMER
  487. IF se! >= .1 THEN
  488. LOOP UNTIL TIMER < start# OR TIMER - start# >= se!
  489.  
  490. SUB cont (t, nos)
  491. OPEN "monopoly.dat" FOR INPUT AS #1
  492. IF (NOT nos) THEN
  493. ce 5, "I found a save."
  494. ce 7, "Do you want to continue prior game? (Y/N)"
  495. yn$ = LCASE$(INKEY$)
  496. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  497. ce 8, UCASE$(yn$)
  498. p
  499. IF yn$ = "n" THEN
  500. nos = -1
  501. INPUT #1, sf!
  502. IF sf! <> 1 AND sf! <> .5 THEN GOTO oops
  503. INPUT #1, uf!
  504. IF uf! <> .5 AND uf! <> .55 THEN GOTO oops
  505. INPUT #1, t
  506. IF t < 1 OR t > 2 THEN GOTO oops
  507. INPUT #1, fr&
  508. IF fr& < 0 THEN GOTO oops
  509. INPUT #1, bhu
  510. IF bhu < 0 OR bhu > 32 THEN GOTO oops
  511. INPUT #1, bht
  512. IF bht < 0 OR bht > 12 THEN GOTO oops
  513. INPUT #1, j
  514. IF j < -1 OR j > 0 THEN GOTO oops
  515. INPUT #1, bn
  516. IF bn < -1 OR bn > 0 THEN GOTO oops
  517. INPUT #1, x
  518. IF x < -1 OR x > 0 THEN GOTO oops
  519. INPUT #1, q
  520. IF q < -1 OR q > 0 THEN GOTO oops
  521. FOR sq = 0 TO 39
  522. INPUT #1, lot(sq).own
  523. IF lot(sq).own < 0 OR lot(sq).own > 2 THEN GOTO oops
  524. INPUT #1, lot(sq).stat
  525. IF lot(sq).stat < 0 OR lot(sq).stat > 5 THEN GOTO oops
  526. INPUT #1, lot(sq).mop
  527. IF lot(sq).mop < -1 OR lot(sq).mop > 0 THEN GOTO oops
  528. INPUT #1, lot(sq).hk
  529. IF lot(sq).hk < -1 OR lot(sq).hk > 0 THEN GOTO oops
  530. FOR sq = 1 TO 2
  531. INPUT #1, st(sq).ft
  532. INPUT #1, st(sq).tk
  533. INPUT #1, st(sq).c
  534. IF st(sq).c < 0 THEN GOTO oops
  535. INPUT #1, st(sq).whr
  536. IF (st(sq).whr < 0 OR st(sq).whr > 39) AND st(sq).whr <> -10 THEN GOTO oops
  537. INPUT #1, st(sq).jc
  538. IF st(sq).jc < 0 OR st(sq).jc > 2 THEN GOTO oops
  539. INPUT #1, st(sq).dc
  540. IF st(sq).dc < 0 OR st(sq).dc > 2 THEN GOTO oops
  541. INPUT #1, st(sq).chag
  542. IF st(sq).chag < -1 OR st(sq).chag > 0 THEN GOTO oops
  543. INPUT #1, st(sq).cheg
  544. IF st(sq).cheg < -1 OR st(sq).cheg > 0 THEN GOTO oops
  545. FOR sq = 1 TO 16
  546. INPUT #1, cha(sq)
  547. IF cha(sq) < 0 OR cha(sq) > 2 THEN GOTO oops
  548. INPUT #1, che(sq)
  549. IF che(sq) < 0 OR che(sq) > 2 THEN GOTO oops
  550. KILL "monopoly.dat"
  551. upd
  552. oops:
  553. ERROR 255
  554.  
  555. FUNCTION cr (t)
  556. FOR sq = 1 TO 39
  557. IF lot(sq).own = t THEN
  558. IF (NOT lot(sq).hk) THEN current = current + lot(sq).c / 2
  559. IF lot(sq).sty = "b" THEN current = current + lot(sq).bc * lot(sq).stat * sf!
  560. cr = current
  561.  
  562. SUB crd
  563. ce 12, "Program written by Brian H. Graham."
  564. ce 13, "Based on the board game 'Monopoly' by Parker Brothers."
  565. p
  566. LOCATE 25, 1
  567.  
  568. FUNCTION cw (t)
  569. FOR sq = 1 TO 39
  570. IF lot(sq).own = t THEN
  571. IF lot(sq).hk THEN current = current + lot(sq).c / 2 ELSE current = current + lot(sq).c
  572. IF lot(sq).sty = "b" THEN current = current + lot(sq).bc * lot(sq).stat
  573. cw = current + st(t).c
  574.  
  575. SUB dcha (t)
  576. FOR look = 1 TO 16
  577. IF cha(look) > 0 THEN ucha = ucha + 1
  578. IF ucha = 16 THEN scha
  579. box
  580. ce 5, RTRIM$(st(t).ft)
  581. cd = INT(RND * 16) + 1
  582. LOOP UNTIL cha(cd) = 0
  583. cha(cd) = 1
  584. ce 6, "Chance"
  585. ce 7, "Advance to Go. (Collect $200.)"
  586. p
  587. move 40 - st(t).whr, t
  588. p
  589. ce 7, "Advance to Illinois Avenue."
  590. p
  591. IF st(t).whr < 24 THEN move 24 - st(t).whr, t ELSE move 64 - st(t).whr, t
  592. lop rl, t
  593. ce 7, "Advance to the nearest Utility."
  594. ce 8, "If it is owned, roll the dice,"
  595. ce 9, "and pay the own ten times the amount shown."
  596. ce 10, "If it is not owned, you may buy it."
  597. p
  598. SELECT CASE st(t).whr
  599. move 12 - st(t).whr, t
  600. CASE 22
  601. move 28 - st(t).whr, t
  602. CASE 36
  603. move 52 - st(t).whr, t
  604. utc t
  605. CASE 4, 5
  606. ce 7, "Advance to the next Railroad."
  607. ce 8, "If it is owned, pay the own double"
  608. ce 9, "the rent he/she is usually entitled."
  609. ce 10, "If it is not owned, you may buy it."
  610. p
  611. SELECT CASE st(t).whr
  612. move 15 - st(t).whr, t
  613. CASE 22
  614. move 25 - st(t).whr, t
  615. CASE 36
  616. move 45 - st(t).whr, t
  617. rlc t
  618. ce 7, "Advance to Saint Charles Place."
  619. ce 8, "If you pass Go, collect $200."
  620. p
  621. IF st(t).whr < 11 THEN move 11 - st(t).whr, t ELSE move 51 - st(t).whr, t
  622. lop rl, t
  623. ce 7, "Bank pays you dividend of $50."
  624. st(t).c = st(t).c + 50
  625. p
  626. ce 7, "Get out of Jail free."
  627. ce 8, "This card may be kept until used or traded."
  628. cha(8) = 2
  629. st(t).chag = -1
  630. p
  631. ce 7, "Go back three spaces."
  632. p
  633. mob t
  634. act rl, t
  635. CASE 10
  636. ce 7, "Go directly to Jail."
  637. ce 8, "Do not pass Go, Do not collect $200."
  638. p
  639. ar t
  640. CASE 11
  641. ce 7, "Make general repairs on all you properties."
  642. ce 8, "Pay $25 per house, $100 per hotel."
  643. bca t, 25, 100
  644. CASE 12
  645. ce 7, "Pay poor tax of $15."
  646. p
  647. pay t, 15
  648. IF j THEN fr& = fr& + 15
  649. p
  650. CASE 13
  651. ce 7, "Take a ride on the Reading."
  652. ce 8, "Advance to Reading Railroad."
  653. ce 9, "Collect $200 if you pass Go."
  654. p
  655. move 45 - st(t).whr, t
  656. lop rl, t
  657. CASE 14
  658. ce 7, "Take a walk on the boardwalk."
  659. ce 8, "Advance to Boardwalk."
  660. p
  661. move 39 - st(t).whr, t
  662. lop rl, t
  663. CASE 15
  664. ce 7, "You have been elected chairman of the board."
  665. ce 8, "Pay each player $50."
  666. p
  667. popp t, 50
  668. CASE 16
  669. ce 7, "Your building and loan matures. Collect $150."
  670. st(t).c = st(t).c + 150
  671. p
  672.  
  673. SUB dche (t)
  674. FOR look = 1 TO 16
  675. IF che(look) > 0 THEN uche = uche + 1
  676. IF uche = 16 THEN sche
  677. box
  678. ce 5, RTRIM$(st(t).ft)
  679. cd = INT(RND * 16) + 1
  680. LOOP UNTIL che(cd) = 0
  681. che(cd) = 1
  682. ce 6, "Community Chest"
  683. ce 7, "Advance to Go. (Collect $200.)"
  684. p
  685. move 40 - st(t).whr, t
  686. p
  687. ce 7, "Bank error in your favor. Collect $200."
  688. p
  689. st(t).c = st(t).c + 200
  690. ce 7, "Christmas fund matures. Collect $100."
  691. p
  692. st(t).c = st(t).c + 100
  693. ce 7, "Doctor's fee. Pay $50."
  694. p
  695. pay t, 50
  696. p
  697. IF j THEN fr& = fr& + 50
  698. ce 7, "From sale of stock you get $45."
  699. p
  700. st(t).c = st(t).c + 45
  701. ce 7, "Get out of Jail free."
  702. ce 8, "This card may be kept until used or traded."
  703. che(6) = 2
  704. st(t).cheg = -1
  705. p
  706. ce 7, "Go directly to Jail."
  707. ce 8, "Do not pass Go, Do not collect $200."
  708. p
  709. ar t
  710. ce 7, "Grand opera opening. Collect $50 from every player."
  711. p
  712. popp 3 - t, 50
  713. ce 7, "Income tax refund. Collect $20."
  714. p
  715. st(t).c = st(t).c + 20
  716. CASE 10
  717. ce 7, "Life insurance matures. Collect $100."
  718. p
  719. st(t).c = st(t).c + 100
  720. CASE 11
  721. ce 7, "Pay hospital $100."
  722. p
  723. pay t, 100
  724. p
  725. IF j THEN fr& = fr& + 100
  726. CASE 12
  727. ce 7, "Pay school tax of $150."
  728. p
  729. pay t, 150
  730. p
  731. IF j THEN fr& = fr& + 150
  732. CASE 13
  733. ce 7, "Recieve for services $25."
  734. p
  735. st(t).c = st(t).c + 25
  736. CASE 14
  737. ce 7, "You are assesed for street repairs."
  738. ce 8, "$40 per house, $115 per hotel."
  739. bca t, 40, 115
  740. CASE 15
  741. ce 7, "You have won second prize in a beauty contest."
  742. ce 8, "Collect $10."
  743. p
  744. st(t).c = st(t).c + 10
  745. CASE 16
  746. ce 7, "You inherit $100."
  747. p
  748. st(t).c = st(t).c + 100
  749.  
  750. FUNCTION di (d1, d2)
  751. d1 = INT(RND * 6) + 1
  752. d2 = INT(RND * 6) + 1
  753. di = d1 + d2
  754. ce 14, CHR$(218) + STRING$(5, 196) + CHR$(191) + CHR$(218) + STRING$(5, 196) + CHR$(191)
  755. ce 15, top(d1) + top(d2)
  756. ce 16, mdd(d1) + mdd(d2)
  757. ce 17, bot(d1) + bot(d2)
  758. ce 18, CHR$(192) + STRING$(5, 196) + CHR$(217) + CHR$(192) + STRING$(5, 196) + CHR$(217)
  759.  
  760. SUB dy (wt)
  761. PRINT wt;
  762. COLOR lot(wt).hue
  763. PRINT lot(wt).ab;
  764. PRINT " $";
  765. IF lot(wt).hk THEN PRINT lts(INT(.5 + lot(wt).c * uf!)) ELSE PRINT lts(lot(wt).c / 2)
  766.  
  767. SUB fd (rl1, rl2, d1, d2, d3, d4)
  768. d1 = INT(RND * 6) + 1
  769. d2 = INT(RND * 6) + 1
  770. d3 = INT(RND * 6) + 1
  771. d4 = INT(RND * 6) + 1
  772. rl1 = d1 + d2
  773. rl2 = d3 + d4
  774. ce 13, RTRIM$(st(1).ft) + SPACE$(6) + RTRIM$(st(2).ft)
  775. ce 14, CHR$(218) + STRING$(5, 196) + CHR$(191) + CHR$(218) + STRING$(5, 196) + CHR$(191) + SPACE$(6) + CHR$(218) + STRING$(5, 196) + CHR$(191) + CHR$(218) + STRING$(5, 196) + CHR$(191)
  776. ce 15, top(d1) + top(d2) + SPACE$(6) + top(d3) + top(d4)
  777. ce 16, mdd(d1) + mdd(d2) + SPACE$(6) + mdd(d3) + mdd(d4)
  778. ce 17, bot(d1) + bot(d2) + SPACE$(6) + bot(d3) + bot(d4)
  779. ce 18, CHR$(192) + STRING$(5, 196) + CHR$(217) + CHR$(192) + STRING$(5, 196) + CHR$(217) + SPACE$(6) + CHR$(192) + STRING$(5, 196) + CHR$(217) + CHR$(192) + STRING$(5, 196) + CHR$(217)
  780.  
  781. SUB gov (t)
  782. st(1).whr = 0
  783. st(2).whr = 0
  784. x = -1
  785. swbd
  786. IF t = 0 THEN
  787. ce 5, "This game was a tie!"
  788. ce 7, "Thank you for playing " + RTRIM$(st(1).ft) + " and " + RTRIM$(st(2).ft)
  789. ce 5, RTRIM$(st(t).ft) + " has won!!!"
  790. ce 8, "Better luck next time " + RTRIM$(st(3 - t).ft)
  791. crd
  792.  
  793. SUB inc (t)
  794. box
  795. ce 5, RTRIM$(st(t).ft)
  796. ce 6, "Income Tax"
  797. ce 8, "press W to pay 10% of your Worth"
  798. ce 9, "press F to pay $200 Flat rate"
  799. taxopt$ = LCASE$(INKEY$)
  800. LOOP UNTIL taxopt$ = "f" OR taxopt$ = "w"
  801. IF taxopt$ = "f" THEN fee = 200 ELSE fee = INT(.5 + cw(t) / 10)
  802. ce 10, UCASE$(taxopt$) + ", $" + lts(fee) + " due."
  803. p
  804. pay t, fee
  805. p
  806. IF j THEN fr& = fr& + fee
  807.  
  808. SUB init
  809. alto$ = CHR$(2) + CHR$(3) + CHR$(4) + CHR$(5) + CHR$(6) + CHR$(21) + CHR$(157) + CHR$(232) + CHR$(233) + CHR$(236)
  810. FOR wide = 1 TO 10
  811. wide$ = wide$ + MID$(alto$, wide, 1) + " "
  812. wide$ = RTRIM$(wide$)
  813. FOR sq = 1 TO 2
  814. box
  815. ce 5, "Player " + lts(sq) + " first name"
  816. who$ = ""
  817. ltr$ = txk
  818. IF ltr$ = CHR$(8) AND LEN(who$) > 0 THEN
  819. who$ = LEFT$(who$, (LEN(who$) - 1))
  820. IF ltr$ <> CHR$(13) AND ltr$ <> CHR$(8) THEN who$ = who$ + ltr$
  821. IF LEN(who$) < 9 THEN
  822. ce 6, SPACE$(10)
  823. ce 6, who$
  824. LOOP UNTIL ltr$ = CHR$(13) OR LEN(who$) = 10
  825. st(sq).ft = who$
  826. LOOP UNTIL st(1).ft <> st(2).ft AND st(sq).ft <> SPACE$(8)
  827. ce 7, "pick a token"
  828. ce 8, wide$
  829. ce 9, "1 2 3 4 5 6 7 8 9 0"
  830. IF hide > 0 THEN
  831. LOCATE 8, hide * 2 + 29
  832. PRINT " "
  833. LOCATE 9, hide * 2 + 29
  834. PRINT " "
  835. pick$ = INKEY$
  836. pick = VAL(pick$)
  837. IF pick = 0 THEN pick = 10
  838. LOOP UNTIL pick$ >= "0" AND pick$ <= "9" AND pick <> hide
  839. hide = pick
  840. st(sq).tk = MID$(alto$, hide, 1)
  841. st(sq).c = 1500
  842. ce 11, lts(pick) + ", " + st(sq).tk
  843. p
  844. box
  845. fd rl1, rl2, d1, d2, d3, d4
  846. ce 5, "Determining who goes first:"
  847. ce 7, RTRIM$(st(1).ft) + " rolls " + lts(d1) + " + " + lts(d2) + " = " + lts(rl1)
  848. ce 8, RTRIM$(st(2).ft) + " rolls " + lts(d3) + " + " + lts(d4) + " + " + lts(rl2)
  849. IF rl1 = rl2 THEN
  850. ce 10, "No decision. I will try again."
  851. p
  852. LOOP UNTIL rl1 <> rl2
  853. IF rl2 > rl1 THEN SWAP st(1), st(2)
  854. ce 10, "This means " + RTRIM$(st(1).ft) + " goes first."
  855. p
  856.  
  857. SUB inv
  858. FOR look = 0 TO 2
  859. box
  860. IF lot(1).own = look THEN
  861. LOCATE 5, 11
  862. lil 1
  863. IF lot(3).own = look THEN
  864. LOCATE 6, 11
  865. lil 3
  866. IF lot(5).own = look THEN
  867. LOCATE 7, 11
  868. lil 5
  869. IF lot(6).own = look THEN
  870. LOCATE 8, 11
  871. lil 6
  872. IF lot(8).own = look THEN
  873. LOCATE 9, 11
  874. lil 8
  875. IF lot(9).own = look THEN
  876. LOCATE 10, 11
  877. lil 9
  878. IF lot(11).own = look THEN
  879. LOCATE 5, 26
  880. lil 11
  881. IF lot(12).own = look THEN
  882. LOCATE 6, 26
  883. lil 12
  884. IF lot(13).own = look THEN
  885. LOCATE 7, 26
  886. lil 13
  887. IF lot(14).own = look THEN
  888. LOCATE 8, 26
  889. lil 14
  890. IF lot(15).own = look THEN
  891. LOCATE 9, 26
  892. lil 15
  893. IF lot(16).own = look THEN
  894. LOCATE 10, 26
  895. lil 16
  896. IF lot(18).own = look THEN
  897. LOCATE 11, 26
  898. lil 18
  899. IF lot(19).own = look THEN
  900. LOCATE 12, 26
  901. lil 19
  902. IF lot(21).own = look THEN
  903. LOCATE 5, 41
  904. lil 21
  905. IF lot(23).own = look THEN
  906. LOCATE 6, 41
  907. lil 23
  908. IF lot(24).own = look THEN
  909. LOCATE 7, 41
  910. lil 24
  911. IF lot(25).own = look THEN
  912. LOCATE 8, 41
  913. lil 25
  914. IF lot(26).own = look THEN
  915. LOCATE 9, 41
  916. lil 26
  917. IF lot(27).own = look THEN
  918. LOCATE 10, 41
  919. lil 27
  920. IF lot(28).own = look THEN
  921. LOCATE 11, 41
  922. lil 28
  923. IF lot(29).own = look THEN
  924. LOCATE 12, 41
  925. lil 29
  926. IF lot(31).own = look THEN
  927. LOCATE 5, 56
  928. lil 31
  929. IF lot(32).own = look THEN
  930. LOCATE 6, 56
  931. lil 32
  932. IF lot(34).own = look THEN
  933. LOCATE 7, 56
  934. lil 34
  935. IF lot(35).own = look THEN
  936. LOCATE 8, 56
  937. lil 35
  938. IF lot(37).own = look THEN
  939. LOCATE 9, 56
  940. lil 37
  941. IF lot(39).own = look THEN
  942. LOCATE 10, 56
  943. lil 39
  944. ce 14, "unowned properties"
  945. IF j THEN ce 16, "Free Parking has $" + ltsb(fr&)
  946. CASE 1, 2
  947. IF st(look).chag THEN
  948. LOCATE 12, 11
  949. PRINT "GOOJF";
  950. PRINT " Chance"
  951. IF st(look).cheg THEN
  952. LOCATE 12, 56
  953. PRINT "GOOJF";
  954. PRINT " Cm Chst"
  955. ce 14, RTRIM$(st(look).ft) + ", your properties"
  956. ce 15, "you are the " + st(look).tk
  957. IF st(look).c >= 0 THEN ce 16, "you have $" + ltsb(st(look).c) ELSE ce 16, "you need to raise $" + lts(ABS(st(look).c))
  958. p
  959.  
  960. SUB lil (wt)
  961. COLOR lot(wt).hue
  962. PRINT lot(wt).ab;
  963. IF lot(wt).hk THEN
  964. PRINT " mort"
  965. IF lot(wt).own > 0 THEN
  966. SELECT CASE lot(wt).stat
  967. IF lot(wt).mop THEN PRINT " doubl" ELSE PRINT " plain"
  968. SELECT CASE lot(wt).sty
  969. CASE "b"
  970. PRINT " 1 hse"
  971. CASE "r"
  972. PRINT " 1 rr"
  973. CASE "u"
  974. PRINT " 1 utl"
  975. SELECT CASE lot(wt).sty
  976. CASE "b"
  977. PRINT " 2 hses"
  978. CASE "r"
  979. PRINT " 2 rrs"
  980. CASE "u"
  981. PRINT " 2 utls"
  982. SELECT CASE lot(wt).sty
  983. CASE "b"
  984. PRINT " 3 hses"
  985. CASE "r"
  986. PRINT " 3 rrs"
  987. SELECT CASE lot(wt).sty
  988. CASE "b"
  989. PRINT " 4 hses"
  990. CASE "r"
  991. PRINT " 4 rrs"
  992. PRINT " hotel"
  993.  
  994. SUB lop (rl, t)
  995. IF lot(st(t).whr).own = 0 THEN
  996. noo t
  997. IF lot(st(t).whr).own = t THEN
  998. COLOR lot(st(t).whr).hue
  999. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1000. ce 13, "is yours."
  1001. p
  1002. IF lot(st(t).whr).hk THEN
  1003. COLOR lot(st(t).whr).hue
  1004. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1005. ce 13, "is mortgaged."
  1006. p
  1007. SELECT CASE lot(st(t).whr).stat
  1008. IF lot(st(t).whr).mop THEN popp t, lot(st(t).whr).r * 2 ELSE popp t, lot(st(t).whr).r
  1009. IF lot(st(t).whr).sty = "u" THEN popp t, 4 * rl ELSE popp t, lot(st(t).whr).r1
  1010. IF lot(st(t).whr).sty = "u" THEN popp t, 10 * rl ELSE popp t, lot(st(t).whr).r2
  1011. popp t, lot(st(t).whr).r3
  1012. popp t, lot(st(t).whr).r4
  1013. popp t, lot(st(t).whr).rhot
  1014.  
  1015. FUNCTION lts$ (nu)
  1016. lts = LTRIM$(STR$(nu))
  1017.  
  1018. FUNCTION ltsb$ (nu&)
  1019. ltsb = LTRIM$(STR$(nu&))
  1020.  
  1021. SUB mb
  1022. FOR sq = 0 TO 39
  1023. READ lot(sq).ttl
  1024. READ lot(sq).ab
  1025. READ lot(sq).sty
  1026. READ lot(sq).c
  1027. READ lot(sq).r
  1028. READ lot(sq).r1
  1029. READ lot(sq).r2
  1030. READ lot(sq).r3
  1031. READ lot(sq).r4
  1032. READ lot(sq).rhot
  1033. READ lot(sq).bc
  1034. READ lot(sq).hue
  1035. READ lot(sq).od
  1036. READ lot(sq).oa
  1037. READ lot(sq).id
  1038. READ lot(sq).ia
  1039. READ lot(sq).bdn
  1040. READ lot(sq).bac
  1041.  
  1042. SUB md
  1043. p0$ = CHR$(179) + SPACE$(5) + CHR$(179)
  1044. p1a$ = CHR$(179) + "@" + SPACE$(4) + CHR$(179)
  1045. p1b$ = CHR$(179) + SPACE$(2) + "@" + SPACE$(2) + CHR$(179)
  1046. p1c$ = CHR$(179) + SPACE$(4) + "@" + CHR$(179)
  1047. p2$ = CHR$(179) + "@" + SPACE$(3) + "@" + CHR$(179)
  1048. top(1) = p0$
  1049. mdd(1) = p1b$
  1050. bot(1) = p0$
  1051. top(2) = p1a$
  1052. mdd(2) = p0$
  1053. bot(2) = p1c$
  1054. top(3) = p1a$
  1055. mdd(3) = p1b$
  1056. bot(3) = p1c$
  1057. top(4) = p2$
  1058. mdd(4) = p0$
  1059. bot(4) = p2$
  1060. top(5) = p2$
  1061. mdd(5) = p1b$
  1062. bot(5) = p2$
  1063. top(6) = p2$
  1064. mdd(6) = p2$
  1065. bot(6) = p2$
  1066.  
  1067. SUB mini (gr)
  1068. dn = 5
  1069. ac = 11
  1070. mophue = 5
  1071. mopstr$ = "MEDIT/BALTI"
  1072. dn = 6
  1073. ac = 11
  1074. mophue = 11
  1075. mopstr$ = "OREIN/VERMO/CONNE"
  1076. dn = 7
  1077. ac = 11
  1078. mophue = 13
  1079. mopstr$ = "STCHA/STATE/VIRGI"
  1080. dn = 8
  1081. ac = 11
  1082. mophue = 12
  1083. mopstr$ = "STJAM/TENNE/NEWYO"
  1084. dn = 5
  1085. ac = 41
  1086. mophue = 4
  1087. mopstr$ = "KENTU/INDIA/ILLIN"
  1088. dn = 6
  1089. ac = 41
  1090. mophue = 14
  1091. mopstr$ = "ATLAN/VENTN/MARVI"
  1092. dn = 7
  1093. ac = 41
  1094. mophue = 10
  1095. mopstr$ = "PACIF/NORTH/PENAV"
  1096. dn = 8
  1097. ac = 41
  1098. mophue = 9
  1099. mopstr$ = "PARKP/BOARD"
  1100. LOCATE dn, ac
  1101. PRINT gr;
  1102. COLOR mophue
  1103. PRINT mopstr$
  1104.  
  1105. SUB mob (t)
  1106. FOR sq = 0 TO 2
  1107. IF t = 1 THEN LOCATE lot(st(1).whr - sq).od, lot(st(1).whr - sq).oa ELSE LOCATE lot(st(2).whr - sq).id, lot(st(2).whr - sq).ia
  1108. PRINT " "
  1109. IF t = 1 THEN LOCATE lot(st(1).whr - sq - 1).od, lot(st(1).whr - sq - 1).oa ELSE LOCATE lot(st(2).whr - sq - 1).id, lot(st(2).whr - sq - 1).ia
  1110. PRINT st(t).tk
  1111. clk .1
  1112. st(t).whr = (st(t).whr - 3)
  1113.  
  1114. SUB more (t)
  1115. box
  1116. ce 5, RTRIM$(st(t).ft) + ", you have $" + ltsb(st(t).c)
  1117. ce 6, "press 1 to unmortgage properties"
  1118. ce 7, "press 2 to buy houses"
  1119. ce 8, "press 3 to buy hotels"
  1120. ce 9, "press 4 to mortgage properties"
  1121. ce 10, "press 5 to sell houses"
  1122. ce 11, "press 6 to sell hotels"
  1123. ce 12, "press 7 to trade"
  1124. ce 13, "press 8 to see inventories"
  1125. ce 14, "press 9 to view deeds"
  1126. ce 15, "press any other key to continue"
  1127. wtn = VAL(ak)
  1128. unm t
  1129. buhou t
  1130. swbs
  1131. buhot t
  1132. swbs
  1133. mort t
  1134. shou t
  1135. swbs
  1136. shot t
  1137. swbs
  1138. trade
  1139. upd
  1140. inv
  1141. vwd
  1142. LOOP UNTIL wtn = 0
  1143.  
  1144. SUB mort (t)
  1145. DIM gp(39)
  1146. gp(0) = -1
  1147. box
  1148. IF lot(1).own = t AND (NOT lot(1).hk) AND lot(3).stat = 0 THEN
  1149. LOCATE 5, 11
  1150. dy 1
  1151. gp(1) = -1
  1152. IF lot(3).own = t AND (NOT lot(3).hk) AND lot(3).stat = 0 THEN
  1153. LOCATE 6, 11
  1154. dy 3
  1155. gp(3) = -1
  1156. IF lot(5).own = t AND (NOT lot(5).hk) THEN
  1157. LOCATE 7, 11
  1158. dy 5
  1159. gp(5) = -1
  1160. IF lot(6).own = t AND (NOT lot(6).hk) AND lot(9).stat = 0 THEN
  1161. LOCATE 8, 11
  1162. dy 6
  1163. gp(6) = -1
  1164. IF lot(8).own = t AND (NOT lot(8).hk) AND lot(9).stat = 0 THEN
  1165. LOCATE 9, 11
  1166. dy 8
  1167. gp(8) = -1
  1168. IF lot(9).own = t AND (NOT lot(9).hk) AND lot(9).stat = 0 THEN
  1169. LOCATE 10, 11
  1170. dy 9
  1171. gp(9) = -1
  1172. IF lot(11).own = t AND (NOT lot(11).hk) AND lot(14).stat = 0 THEN
  1173. LOCATE 5, 26
  1174. dy 11
  1175. gp(11) = -1
  1176. IF lot(12).own = t AND (NOT lot(12).hk) THEN
  1177. LOCATE 6, 26
  1178. dy 12
  1179. gp(12) = -1
  1180. IF lot(13).own = t AND (NOT lot(13).hk) AND lot(14).stat = 0 THEN
  1181. LOCATE 7, 26
  1182. dy 13
  1183. gp(13) = -1
  1184. IF lot(14).own = t AND (NOT lot(14).hk) AND lot(14).stat = 0 THEN
  1185. LOCATE 8, 26
  1186. dy 14
  1187. gp(14) = -1
  1188. IF lot(15).own = t AND (NOT lot(15).hk) THEN
  1189. LOCATE 9, 26
  1190. dy 15
  1191. gp(15) = -1
  1192. IF lot(16).own = t AND (NOT lot(16).hk) AND lot(19).stat = 0 THEN
  1193. LOCATE 10, 26
  1194. dy 16
  1195. gp(16) = -1
  1196. IF lot(18).own = t AND (NOT lot(18).hk) AND lot(19).stat = 0 THEN
  1197. LOCATE 11, 26
  1198. dy 18
  1199. gp(18) = -1
  1200. IF lot(19).own = t AND (NOT lot(19).hk) AND lot(19).stat = 0 THEN
  1201. LOCATE 12, 26
  1202. dy 19
  1203. gp(19) = -1
  1204. IF lot(21).own = t AND (NOT lot(21).hk) AND lot(24).stat = 0 THEN
  1205. LOCATE 5, 41
  1206. dy 21
  1207. gp(21) = -1
  1208. IF lot(23).own = t AND (NOT lot(23).hk) AND lot(24).stat = 0 THEN
  1209. LOCATE 6, 41
  1210. dy 23
  1211. gp(23) = -1
  1212. IF lot(24).own = t AND (NOT lot(24).hk) AND lot(24).stat = 0 THEN
  1213. LOCATE 7, 41
  1214. dy 24
  1215. gp(24) = -1
  1216. IF lot(25).own = t AND (NOT lot(25).hk) THEN
  1217. LOCATE 8, 41
  1218. dy 25
  1219. gp(25) = -1
  1220. IF lot(26).own = t AND (NOT lot(26).hk) AND lot(29).stat = 0 THEN
  1221. LOCATE 9, 41
  1222. dy 26
  1223. gp(26) = -1
  1224. IF lot(27).own = t AND (NOT lot(27).hk) AND lot(29).stat = 0 THEN
  1225. LOCATE 10, 41
  1226. dy 27
  1227. gp(27) = -1
  1228. IF lot(28).own = t AND (NOT lot(28).hk) THEN
  1229. LOCATE 11, 41
  1230. dy 28
  1231. gp(28) = -1
  1232. IF lot(29).own = t AND (NOT lot(29).hk) AND lot(29).stat = 0 THEN
  1233. LOCATE 12, 41
  1234. dy 29
  1235. gp(29) = -1
  1236. IF lot(31).own = t AND (NOT lot(31).hk) AND lot(34).stat = 0 THEN
  1237. LOCATE 5, 56
  1238. dy 31
  1239. gp(31) = -1
  1240. IF lot(32).own = t AND (NOT lot(32).hk) AND lot(34).stat = 0 THEN
  1241. LOCATE 6, 56
  1242. dy 32
  1243. gp(32) = -1
  1244. IF lot(34).own = t AND (NOT lot(34).hk) AND lot(34).stat = 0 THEN
  1245. LOCATE 7, 56
  1246. dy 34
  1247. gp(34) = -1
  1248. IF lot(35).own = t AND (NOT lot(35).hk) THEN
  1249. LOCATE 8, 56
  1250. dy 35
  1251. gp(35) = -1
  1252. IF lot(37).own = t AND (NOT lot(37).hk) AND lot(39).stat = 0 THEN
  1253. LOCATE 9, 56
  1254. dy 37
  1255. gp(37) = -1
  1256. IF lot(39).own = t AND (NOT lot(39).hk) AND lot(39).stat = 0 THEN
  1257. LOCATE 10, 56
  1258. dy 39
  1259. gp(39) = -1
  1260. ce 13, RTRIM$(st(t).ft)
  1261. ce 14, "Choose a deed to mortgage or 0 to continue"
  1262. IF st(t).c >= 0 THEN ce 17, "you have $" + ltsb(st(t).c) ELSE ce 17, "you need to raise $" + lts(-st(t).c)
  1263. IF (NOT gp(pick)) AND (NOT q) THEN b
  1264. pick = ner(15, 39)
  1265. LOOP UNTIL gp(pick)
  1266. IF pick = 0 THEN EXIT SUB
  1267. lot(pick).hk = -1
  1268. st(t).c = st(t).c + lot(pick).c / 2
  1269.  
  1270. SUB move (dist, t)
  1271. FOR sq = 0 TO dist - 1
  1272. IF t = 1 THEN LOCATE lot((st(1).whr + sq) MOD 40).od, lot((st(1).whr + sq) MOD 40).oa ELSE LOCATE lot((st(2).whr + sq) MOD 40).id, lot((st(2).whr + sq) MOD 40).ia
  1273. PRINT " "
  1274. IF t = 1 THEN LOCATE lot((st(1).whr + sq + 1) MOD 40).od, lot((st(1).whr + sq + 1) MOD 40).oa ELSE LOCATE lot((st(2).whr + sq + 1) MOD 40).id, lot((st(2).whr + sq + 1) MOD 40).ia
  1275. PRINT st(t).tk
  1276. clk .1
  1277. IF st(t).whr + dist >= 40 THEN st(t).c = st(t).c + 200
  1278. IF st(t).whr + dist > 40 THEN
  1279. box
  1280. ce 5, RTRIM$(st(t).ft) + ", you collect $200 for passing Go."
  1281. clk .9
  1282. st(t).whr = (st(t).whr + dist) MOD 40
  1283.  
  1284. FUNCTION ner (dn, max)
  1285. IF max = 0 THEN mk = 2 ELSE mk = INT(LOG(max) / LOG(10)) + 2
  1286. ce dn, SPACE$(10)
  1287. IF num > 0 AND (NOT q) THEN b
  1288. num = 0
  1289. num$ = ""
  1290. numk$ = nerk
  1291. IF numk$ = CHR$(8) AND LEN(num$) > 0 THEN
  1292. num$ = LEFT$(num$, (LEN(num$) - 1))
  1293. IF numk$ <> CHR$(13) AND numk$ <> CHR$(8) THEN num$ = num$ + numk$
  1294. IF LEN(num$) < mk THEN
  1295. ce dn, SPACE$(10)
  1296. ce dn, num$
  1297. LOOP UNTIL numk$ = CHR$(13) OR LEN(num$) = mk
  1298. num = VAL(num$)
  1299. LOOP UNTIL num <= max
  1300. ner = num
  1301.  
  1302. FUNCTION nerb& (dn, max&)
  1303. IF max& = 0 THEN mk = 2 ELSE mk = INT(LOG(max&) / LOG(10)) + 2
  1304. ce dn, SPACE$(10)
  1305. IF num& > 0 AND (NOT q) THEN b
  1306. num& = 0
  1307. num$ = ""
  1308. numk$ = nerk
  1309. IF numk$ = CHR$(8) AND LEN(num$) > 0 THEN
  1310. num$ = LEFT$(num$, (LEN(num$) - 1))
  1311. IF numk$ <> CHR$(13) AND numk$ <> CHR$(8) THEN num$ = num$ + numk$
  1312. IF LEN(num$) < mk THEN
  1313. ce dn, SPACE$(10)
  1314. ce dn, num$
  1315. LOOP UNTIL numk$ = CHR$(13) OR LEN(num$) = mk
  1316. num& = VAL(num$)
  1317. LOOP UNTIL num& <= max&
  1318. nerb& = num&
  1319.  
  1320. FUNCTION nerk$
  1321. tx$ = INKEY$
  1322. LOOP UNTIL tx$ > ""
  1323. CASE "0" TO "9", CHR$(13), CHR$(8)
  1324. valid = -1
  1325. valid = 0
  1326. IF (NOT q) THEN b
  1327. LOOP UNTIL valid
  1328. nerk = tx$
  1329.  
  1330. SUB noo (t)
  1331. box
  1332. COLOR lot(st(t).whr).hue
  1333. ce 5, RTRIM$(lot(st(t).whr).ttl)
  1334. ce 6, "cost $" + lts(lot(st(t).whr).c)
  1335. ce 7, "mortgage value $" + lts(lot(st(t).whr).c / 2)
  1336. SELECT CASE lot(st(t).whr).sty
  1337. CASE "b"
  1338. ce 8, "rent $" + lts(lot(st(t).whr).r)
  1339. ce 9, "rent with one house $" + lts(lot(st(t).whr).r1)
  1340. ce 10, "rent with two houses $" + lts(lot(st(t).whr).r2)
  1341. ce 11, "rent with three houses $" + lts(lot(st(t).whr).r3)
  1342. ce 12, "rent with four houses $" + lts(lot(st(t).whr).r4)
  1343. ce 13, "rent with hotel $" + lts(lot(st(t).whr).rhot)
  1344. ce 14, "houses cost $" + lts(lot(st(t).whr).bc) + " each"
  1345. ce 15, "hotel costs $" + lts(lot(st(t).whr).bc) + " plus 4 houses"
  1346. CASE "u"
  1347. ce 8, "rent with one Utility, four times dice"
  1348. ce 9, "rent with two Utilities, ten times dice"
  1349. CASE "r"
  1350. ce 8, "rent with one Railroad $25"
  1351. ce 9, "rent with two Railroads $50"
  1352. ce 10, "rent with three Railroads $100"
  1353. ce 11, "rent with four Railroads $200"
  1354. ce 16, RTRIM$(st(t).ft) + ", you have $" + ltsb(st(t).c)
  1355. IF cr(t) + st(t).c >= lot(st(t).whr).c THEN ce 17, "press B to Buy"
  1356. ce 18, "press A to Auction"
  1357. wt$ = LCASE$(INKEY$)
  1358. LOOP UNTIL wt$ = "a" OR (wt$ = "b" AND cr(t) + st(t).c >= lot(st(t).whr).c)
  1359. box
  1360. IF wt$ = "b" THEN
  1361. pay t, lot(st(t).whr).c
  1362. COLOR lot(st(t).whr).hue
  1363. ce 10, RTRIM$(lot(st(t).whr).ttl)
  1364. lot(st(t).whr).own = t
  1365. p
  1366. auc t
  1367. upd
  1368.  
  1369. SUB opt (t)
  1370. box
  1371. ce 5, RTRIM$(st(t).ft) + ", you have $" + ltsb(st(t).c)
  1372. ce 6, "press P for Property options"
  1373. ce 7, "press S to Save and exit"
  1374. ce 8, "press Q to Quit game early"
  1375. ce 9, "press any other key to continue"
  1376. wt$ = ak
  1377. CASE "s"
  1378. save t
  1379. CASE "p"
  1380. more t
  1381. CASE "q"
  1382. quit
  1383. done = -1
  1384. LOOP UNTIL done
  1385.  
  1386. SUB p
  1387. ce 19, "press any key."
  1388. ce 19, SPACE$(14)
  1389.  
  1390. SUB pay (t, cge)
  1391. st(t).c = st(t).c - cge
  1392. IF st(t).c < 0 THEN broke t
  1393. ce 12, RTRIM$(st(t).ft) + " paid $" + lts(cge)
  1394.  
  1395. SUB pim (gr, l, m, h)
  1396. l = 1
  1397. m = 2
  1398. h = 3
  1399. ce 6, "MEDIT/BALTI"
  1400. l = 6
  1401. m = 8
  1402. h = 9
  1403. ce 6, "OREIN/VERMO/CONNE"
  1404. l = 11
  1405. m = 13
  1406. h = 14
  1407. ce 6, "STCHA/STATE/VIRGI"
  1408. l = 16
  1409. m = 18
  1410. h = 19
  1411. ce 6, "STJAM/TENNE/NEWYO"
  1412. l = 21
  1413. m = 23
  1414. h = 24
  1415. ce 6, "KENTU/INDIA/ILLIN"
  1416. l = 26
  1417. m = 27
  1418. h = 29
  1419. ce 6, "ATLAN/VENTN/MARVI"
  1420. l = 31
  1421. m = 32
  1422. h = 34
  1423. ce 6, "PACIF/NORTH/PENAV"
  1424. l = 37
  1425. m = 2
  1426. h = 39
  1427. ce 6, "PARKP/BOARD"
  1428.  
  1429. SUB popp (t, cge)
  1430. pay t, cge
  1431. st(3 - t).c = st(3 - t).c + cge
  1432. ce 13, " to " + RTRIM$(st(3 - t).ft)
  1433. p
  1434.  
  1435. SUB quit
  1436. quithue = ((quithue + 1) AND 15) OR 8
  1437. COLOR quithue
  1438. ce 17, "ARE YOU SURE YOU WANT TO QUIT? (Y/N)"
  1439. clk .09
  1440. yn$ = LCASE$(INKEY$)
  1441. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1442. IF yn$ = "y" THEN
  1443. IF st(1).c < 0 THEN gov 2
  1444. IF st(2).c < 0 THEN gov 1
  1445. worth1 = cw(1)
  1446. worth2 = cw(2)
  1447. IF worth1 > worth2 THEN gov 1
  1448. IF worth2 > worth1 THEN gov 2
  1449. gov 0
  1450.  
  1451. SUB rlc (t)
  1452. IF lot(st(t).whr).own = 0 THEN
  1453. noo t
  1454. IF lot(st(t).whr).own = t THEN
  1455. COLOR lot(st(t).whr).hue
  1456. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1457. ce 13, "is yours."
  1458. p
  1459. IF lot(st(t).whr).hk THEN
  1460. COLOR lot(st(t).whr).hue
  1461. ce 12, RTRIM$(lot(st(t).whr).ttl)
  1462. ce 13, "is mortgaged."
  1463. p
  1464. SELECT CASE lot(st(t).whr).stat
  1465. popp t, 50
  1466. popp t, 100
  1467. popp t, 200
  1468. popp t, 400
  1469.  
  1470. SUB rules
  1471. x = -1
  1472. box
  1473. ce 5, "I will start a new game."
  1474. ce 7, "Do you want the Free Parking jackpot? (Y/N)"
  1475. yn$ = LCASE$(INKEY$)
  1476. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1477. ce 8, UCASE$(yn$)
  1478. IF yn$ = "y" THEN
  1479. j = -1
  1480. fr& = 500
  1481. ce 9, "Do you want the land on Go bonus? (Y/N)"
  1482. yn$ = LCASE$(INKEY$)
  1483. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1484. ce 10, UCASE$(yn$)
  1485. IF yn$ = "y" THEN bn = -1
  1486. ce 11, "Do you want unlimited buildings in the bank? (Y/N)"
  1487. yn$ = LCASE$(INKEY$)
  1488. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1489. ce 12, UCASE$(yn$)
  1490. IF yn$ = "n" THEN x = 0
  1491. ce 13, "Do you want to suspend mortgage interest? (Y/N)"
  1492. yn$ = LCASE$(INKEY$)
  1493. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1494. ce 14, UCASE$(yn$)
  1495. IF yn$ = "y" THEN uf! = .5 ELSE uf! = .55
  1496. ce 15, "Should builings sell back at full price? (Y/N)"
  1497. yn$ = LCASE$(INKEY$)
  1498. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1499. ce 16, UCASE$(yn$)
  1500. IF yn$ = "y" THEN sf! = 1 ELSE sf! = .5
  1501. ce 17, "Do you want quiet mode? (Y/N)"
  1502. yn$ = LCASE$(INKEY$)
  1503. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  1504. ce 18, UCASE$(yn$)
  1505. IF yn$ = "y" THEN q = -1
  1506. p
  1507.  
  1508. SUB save (t)
  1509. ce 10, "to be continued."
  1510. OPEN "monopoly.dat" FOR OUTPUT AS #1
  1511. PRINT #1, sf!
  1512. PRINT #1, uf!
  1513. PRINT #1, t
  1514. PRINT #1, fr&
  1515. PRINT #1, bhu
  1516. PRINT #1, bht
  1517. PRINT #1, j
  1518. PRINT #1, bn
  1519. PRINT #1, x
  1520. PRINT #1, q
  1521. FOR sq = 0 TO 39
  1522. PRINT #1, lot(sq).own
  1523. PRINT #1, lot(sq).stat
  1524. PRINT #1, lot(sq).mop
  1525. PRINT #1, lot(sq).hk
  1526. FOR sq = 1 TO 2
  1527. PRINT #1, st(sq).ft
  1528. PRINT #1, st(sq).tk
  1529. PRINT #1, st(sq).c
  1530. PRINT #1, st(sq).whr
  1531. PRINT #1, st(sq).jc
  1532. PRINT #1, st(sq).dc
  1533. PRINT #1, st(sq).chag
  1534. PRINT #1, st(sq).cheg
  1535. FOR sq = 1 TO 16
  1536. PRINT #1, cha(sq)
  1537. PRINT #1, che(sq)
  1538. crd
  1539.  
  1540. SUB scha
  1541. box
  1542. ce 5, "Shuffling Chance cards."
  1543. ce 6, "Please wait."
  1544. clk 2
  1545. IF cha(8) = 2 THEN goojfflag = -1
  1546. FOR flip = 1 TO 16
  1547. cha(flip) = 0
  1548. IF goojfflag THEN cha(8) = 2
  1549.  
  1550. SUB sche
  1551. box
  1552. ce 5, "Shuffling Community Chest cards."
  1553. ce 6, "Please wait."
  1554. clk 2
  1555. IF che(6) = 2 THEN goojfflag = -1
  1556. FOR flip = 1 TO 16
  1557. che(flip) = 0
  1558. IF goojfflag THEN che(6) = 2
  1559.  
  1560. SUB short (t, l, m, h)
  1561. IF lot(h).stat = 5 THEN
  1562. lot(h).stat = 4
  1563. bht = bht + 1
  1564. st(t).c = st(t).c + lot(l).bc * sf!
  1565. IF lot(m).stat = 5 THEN
  1566. lot(m).stat = 4
  1567. bht = bht + 1
  1568. st(t).c = st(t).c + lot(l).bc * sf!
  1569. IF lot(l).stat = 5 THEN
  1570. lot(l).stat = 4
  1571. bht = bht + 1
  1572. st(t).c = st(t).c + lot(l).bc * sf!
  1573. quan = chou(1) + chou(2) - 32
  1574. tot = lot(l).stat + lot(m).stat + lot(h).stat - quan
  1575. lot(h).stat = INT(tot / 2)
  1576. lot(l).stat = INT(tot / 2)
  1577. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1578. lot(h).stat = INT(tot / 3)
  1579. lot(m).stat = INT(tot / 3)
  1580. lot(l).stat = INT(tot / 3)
  1581. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1582. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  1583. st(t).c = st(t).c + lot(l).bc * quan * sf!
  1584. bhu = 0
  1585. box
  1586. ce 5, RTRIM$(st(t).ft)
  1587. ce 7, "a housing shortage sale taken place."
  1588. p
  1589.  
  1590. SUB shot (t)
  1591. DIM gm(9)
  1592. gm(0) = -1
  1593. box
  1594. IF lot(3).own = t AND lot(3).stat = 5 THEN
  1595. gm(1) = -1
  1596. mini 1
  1597. IF lot(9).own = t AND lot(9).stat = 5 THEN
  1598. gm(2) = -1
  1599. mini 2
  1600. IF lot(14).own = t AND lot(14).stat = 5 THEN
  1601. gm(3) = -1
  1602. mini 3
  1603. IF lot(19).own = t AND lot(19).stat = 5 THEN
  1604. gm(4) = -1
  1605. mini 4
  1606. IF lot(24).own = t AND lot(24).stat = 5 THEN
  1607. gm(5) = -1
  1608. mini 5
  1609. IF lot(29).own = t AND lot(29).stat = 5 THEN
  1610. gm(6) = -1
  1611. mini 6
  1612. IF lot(34).own = t AND lot(34).stat = 5 THEN
  1613. gm(7) = -1
  1614. mini 7
  1615. IF lot(39).own = t AND lot(39).stat = 5 THEN
  1616. gm(8) = -1
  1617. mini 8
  1618. ce 9, RTRIM$(st(t).ft)
  1619. ce 10, "Choose a monopoly to sell hotels from"
  1620. ce 11, "or 0 to continue"
  1621. IF ws > 0 AND (NOT q) THEN b
  1622. ws$ = INKEY$
  1623. IF ws$ = CHR$(13) THEN ws$ = "0"
  1624. LOOP UNTIL ws$ > ""
  1625. IF ws$ >= "0" AND ws$ <= "8" THEN ws = VAL(ws$) ELSE ws = 9
  1626. LOOP UNTIL gm(ws)
  1627. IF ws = 0 THEN EXIT SUB
  1628. box
  1629. ce 5, RTRIM$(st(t).ft)
  1630. pim ws, l, m, h
  1631. IF lot(l).stat = 5 THEN max = 2 ELSE max = 1
  1632. max = 1
  1633. IF lot(m).stat = 5 THEN max = 2
  1634. IF lot(l).stat = 5 THEN max = 3
  1635. ce 7, "you can sell up to " + lts(max) + " hotel(s)."
  1636. ce 8, "or 0 to continue"
  1637. IF st(t).c >= 0 THEN ce 11, "you have $" + ltsb(st(t).c) ELSE ce 11, "you need to raise $" + lts(-st(t).c)
  1638. ce 12, "hotels sell for $" + lts(lot(l).bc * sf!) + " (minus four houses) each."
  1639. quan = ner(9, max)
  1640. IF quan = 0 THEN EXIT SUB
  1641. tot = lot(l).stat + lot(m).stat + lot(h).stat - quan
  1642. lot(h).stat = INT(tot / 2)
  1643. lot(l).stat = INT(tot / 2)
  1644. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1645. lot(h).stat = INT(tot / 3)
  1646. lot(m).stat = INT(tot / 3)
  1647. lot(l).stat = INT(tot / 3)
  1648. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1649. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  1650. st(t).c = st(t).c + lot(l).bc * quan * sf!
  1651. IF (NOT x) THEN
  1652. bht = bht + quan
  1653. bhu = bhu - 4 * quan
  1654. IF bhu < 0 THEN short t, l, m, h
  1655.  
  1656. SUB shou (t)
  1657. DIM gm(9)
  1658. gm(0) = -1
  1659. box
  1660. IF lot(3).own = t AND lot(3).stat > 0 AND lot(3).stat < 5 THEN
  1661. gm(1) = -1
  1662. mini 1
  1663. IF lot(9).own = t AND lot(9).stat > 0 AND lot(9).stat < 5 THEN
  1664. gm(2) = -1
  1665. mini 2
  1666. IF lot(14).own = t AND lot(14).stat > 0 AND lot(14).stat < 5 THEN
  1667. gm(3) = -1
  1668. mini 3
  1669. IF lot(19).own = t AND lot(19).stat > 0 AND lot(19).stat < 5 THEN
  1670. gm(4) = -1
  1671. mini 4
  1672. IF lot(24).own = t AND lot(24).stat > 0 AND lot(24).stat < 5 THEN
  1673. gm(5) = -1
  1674. mini 5
  1675. IF lot(29).own = t AND lot(29).stat > 0 AND lot(29).stat < 5 THEN
  1676. gm(6) = -1
  1677. mini 6
  1678. IF lot(34).own = t AND lot(34).stat > 0 AND lot(34).stat < 5 THEN
  1679. gm(7) = -1
  1680. mini 7
  1681. IF lot(39).own = t AND lot(39).stat > 0 AND lot(39).stat < 5 THEN
  1682. gm(8) = -1
  1683. mini 8
  1684. ce 9, RTRIM$(st(t).ft)
  1685. ce 10, "Choose a monopoly to sell houses from"
  1686. ce 11, "or 0 to continue"
  1687. IF ws > 0 AND (NOT q) THEN b
  1688. ws$ = INKEY$
  1689. IF ws$ = CHR$(13) THEN ws$ = "0"
  1690. LOOP UNTIL ws$ > ""
  1691. IF ws$ >= "0" AND ws$ <= "8" THEN ws = VAL(ws$) ELSE ws = 9
  1692. LOOP UNTIL gm(ws)
  1693. IF ws = 0 THEN EXIT SUB
  1694. box
  1695. ce 5, RTRIM$(st(t).ft)
  1696. pim ws, l, m, h
  1697. max = lot(l).stat + lot(h).stat
  1698. max = lot(l).stat + lot(m).stat + lot(h).stat
  1699. ce 7, "you can sell up to " + lts(max) + " house(s)."
  1700. ce 8, "or 0 to continue"
  1701. IF st(t).c >= 0 THEN ce 11, "you have $" + ltsb(st(t).c) ELSE ce 11, "you need to raise $" + lts(-st(t).c)
  1702. ce 12, "houses sell for $" + lts(lot(l).bc * sf!) + " each."
  1703. quan = ner(9, max)
  1704. IF quan = 0 THEN EXIT SUB
  1705. tot = lot(l).stat + lot(m).stat + lot(h).stat - quan
  1706. lot(h).stat = INT(tot / 2)
  1707. lot(l).stat = INT(tot / 2)
  1708. IF lot(h).stat + lot(l).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1709. lot(h).stat = INT(tot / 3)
  1710. lot(m).stat = INT(tot / 3)
  1711. lot(l).stat = INT(tot / 3)
  1712. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(h).stat = lot(h).stat + 1
  1713. IF lot(h).stat + lot(l).stat + lot(m).stat < tot THEN lot(m).stat = lot(m).stat + 1
  1714. st(t).c = st(t).c + lot(l).bc * quan * sf!
  1715. IF (NOT x) THEN bhu = bhu + quan
  1716.  
  1717. SUB sml (wt)
  1718. PRINT wt;
  1719. lil wt
  1720.  
  1721. SUB swbd
  1722. box
  1723. LOCATE 22, 66
  1724. PRINT "MEDIT"
  1725. LOCATE 22, 52
  1726. PRINT "BALTI"
  1727. LOCATE 22, 31
  1728. PRINT "ORIEN"
  1729. LOCATE 22, 17
  1730. PRINT "VERMO"
  1731. LOCATE 22, 10
  1732. PRINT "CONNE"
  1733. LOCATE 20, 3
  1734. PRINT "STCHA"
  1735. LOCATE 16, 3
  1736. PRINT "STATE"
  1737. LOCATE 14, 3
  1738. PRINT "VIRGI"
  1739. LOCATE 10, 3
  1740. PRINT "STJAM"
  1741. LOCATE 6, 3
  1742. PRINT "TENNE"
  1743. LOCATE 4, 3
  1744. PRINT "NEWYO"
  1745. LOCATE 2, 10
  1746. PRINT "KENTU"
  1747. LOCATE 2, 24
  1748. PRINT "INDIA"
  1749. LOCATE 2, 31
  1750. PRINT "ILLIN"
  1751. LOCATE 2, 45
  1752. PRINT "ATLAN"
  1753. LOCATE 2, 52
  1754. PRINT "VENTN"
  1755. LOCATE 2, 66
  1756. PRINT "MARVI"
  1757. LOCATE 4, 73
  1758. PRINT "PACIF"
  1759. LOCATE 6, 73
  1760. PRINT "NORTH"
  1761. LOCATE 10, 73
  1762. PRINT "PENAV"
  1763. LOCATE 16, 73
  1764. PRINT "PARKP"
  1765. LOCATE 20, 73
  1766. PRINT "BOARD"
  1767. LOCATE 22, 38
  1768. PRINT "READR"
  1769. LOCATE 18, 3
  1770. PRINT "ELECT"
  1771. LOCATE 12, 3
  1772. PRINT "PENRR"
  1773. LOCATE 2, 38
  1774. PRINT "B&ORR"
  1775. LOCATE 2, 59
  1776. PRINT "WATER"
  1777. LOCATE 12, 73
  1778. PRINT "SHORT"
  1779. LOCATE 22, 73
  1780. PRINT "<-GO<"
  1781. LOCATE 22, 59
  1782. PRINT "COMMU"
  1783. LOCATE 22, 45
  1784. PRINT "INCTX"
  1785. LOCATE 22, 24
  1786. PRINT "CHANC"
  1787. LOCATE 22, 3
  1788. PRINT "JUSTV"
  1789. LOCATE 8, 3
  1790. PRINT "COMMU"
  1791. LOCATE 2, 3
  1792. PRINT "FREEP"
  1793. LOCATE 2, 17
  1794. PRINT "CHANC"
  1795. LOCATE 2, 73
  1796. PRINT "GOTOJ"
  1797. LOCATE 8, 73
  1798. PRINT "COMMU"
  1799. LOCATE 14, 73
  1800. PRINT "CHANC"
  1801. LOCATE 18, 73
  1802. PRINT "LUXTX"
  1803.  
  1804. SUB swbs
  1805. FOR sq = 1 TO 39
  1806. IF lot(sq).sty = "b" THEN
  1807. LOCATE lot(sq).bdn, lot(sq).bac
  1808. IF (NOT lot(sq).mop) THEN
  1809. PRINT " "
  1810. SELECT CASE lot(sq).stat
  1811. CASE 0 TO 4
  1812. COLOR 0, 10
  1813. PRINT USING "#"; lot(sq).stat
  1814. COLOR 0, 4
  1815. PRINT "H"
  1816. COLOR 15, 0
  1817.  
  1818. SUB tiny (wt)
  1819. PRINT wt;
  1820. COLOR lot(wt).hue
  1821. PRINT lot(wt).ab
  1822.  
  1823. SUB tj (t)
  1824. st(t).jc = st(t).jc + 1
  1825. box
  1826. ce 5, RTRIM$(st(t).ft) + ", in Jail, turn " + lts(st(t).jc) + " with $" + ltsb(st(t).c)
  1827. IF cr(t) + st(t).c >= 50 THEN ce 6, "press M to Make bail (pay $50)"
  1828. IF st(t).chag OR st(t).cheg THEN ce 7, "press C to use 'get out of jail free' Card"
  1829. ce 8, "press R to Roll dice"
  1830. how$ = LCASE$(INKEY$)
  1831. LOOP UNTIL how$ = "r" OR (how$ = "m" AND cr(t) + st(t).c >= 50) OR (how$ = "c" AND (st(t).chag OR st(t).cheg))
  1832. box
  1833. CASE "r"
  1834. ce 5, RTRIM$(st(t).ft) + ", roll " + lts(st(t).jc) + " done, with $" + ltsb(st(t).c)
  1835. rlout = di(d1, d2)
  1836. ce 10, lts(d1) + " + " + lts(d2) + " = " + lts(rlout)
  1837. p
  1838. IF d1 = d2 THEN
  1839. st(t).jc = 0
  1840. st(t).whr = 10
  1841. box
  1842. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1843. PRINT st(t).tk
  1844. move rlout, t
  1845. act rlout, t
  1846. IF st(t).jc = 3 THEN
  1847. IF st(t).chag OR st(t).cheg THEN
  1848. ce 6, "press M to Make bail (pay $50)"
  1849. ce 7, "press C to use 'get out of jail free' Card"
  1850. payout$ = LCASE$(INKEY$)
  1851. IF (NOT st(t).chag) AND (NOT st(t).cheg) THEN payout$ = "m"
  1852. LOOP UNTIL payout$ = "m" OR payout$ = "c"
  1853. SELECT CASE payout$
  1854. CASE "m"
  1855. pay t, 50
  1856. IF j THEN fr& = fr& + 50
  1857. CASE "c"
  1858. IF st(t).chag AND st(t).cheg THEN
  1859. ce 10, "Pick a card."
  1860. ce 11, "Press A for chAnce"
  1861. ce 12, "press O for cOmmunity che"
  1862. wtc$ = LCASE$(INKEY$)
  1863. IF (NOT st(t).chag) THEN wtc$ = "o"
  1864. IF (NOT st(t).cheg) THEN wtc$ = "a"
  1865. LOOP UNTIL wtc$ = "a" OR wtc$ = "o"
  1866. IF wtc$ = "a" THEN
  1867. ce 13, "Chance card used."
  1868. st(t).chag = 0
  1869. cha(8) = 1
  1870. ce 13, "Community Chest card used."
  1871. st(t).cheg = 0
  1872. che(6) = 1
  1873. p
  1874. st(t).jc = 0
  1875. st(t).whr = 10
  1876. box
  1877. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1878. PRINT st(t).tk
  1879. move rlout, t
  1880. act rlout, t
  1881. opt t
  1882. CASE "m"
  1883. pay t, 50
  1884. IF j THEN fr& = fr& + 50
  1885. st(t).jc = 0
  1886. p
  1887. box
  1888. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1889. PRINT st(t).tk
  1890. st(t).whr = 10
  1891. tn t
  1892. CASE "c"
  1893. IF st(t).chag AND st(t).cheg THEN
  1894. ce 10, "Pick a card."
  1895. ce 11, "Press A for chAnce"
  1896. ce 12, "press O for cOmmunity che"
  1897. wtc$ = LCASE$(INKEY$)
  1898. IF (NOT st(t).chag) THEN wtc$ = "o"
  1899. IF (NOT st(t).cheg) THEN wtc$ = "a"
  1900. LOOP UNTIL wtc$ = "a" OR wtc$ = "o"
  1901. IF wtc$ = "a" THEN
  1902. ce 13, "Chance card used."
  1903. st(t).chag = 0
  1904. cha(8) = 1
  1905. ce 13, "Community Chest card used."
  1906. st(t).cheg = 0
  1907. che(6) = 1
  1908. p
  1909. box
  1910. IF t = 1 THEN LOCATE lot(10).od, lot(10).oa ELSE LOCATE lot(10).id, lot(10).ia
  1911. PRINT st(t).tk
  1912. st(t).jc = 0
  1913. st(t).whr = 10
  1914. tn t
  1915.  
  1916. SUB tn (t)
  1917. box
  1918. ce 5, RTRIM$(st(t).ft) + " press any key to roll the dice."
  1919. p
  1920. box
  1921. ce 5, RTRIM$(st(t).ft)
  1922. rl = di(d1, d2)
  1923. ce 7, lts(d1) + " + " + lts(d2) + " = " + lts(rl)
  1924. IF d1 = d2 THEN st(t).dc = st(t).dc + 1 ELSE st(t).dc = 0
  1925. SELECT CASE st(t).dc
  1926. clk 1.5
  1927. ce 8, "first doubles"
  1928. clk 1.5
  1929. ce 8, "second doubles"
  1930. clk 1.5
  1931. ce 8, "Third doubles"
  1932. ar t
  1933. IF st(t).whr > -10 THEN
  1934. move rl, t
  1935. act rl, t
  1936. opt t
  1937. LOOP UNTIL st(t).dc = 0
  1938.  
  1939. SUB trade
  1940. DIM wit(41), cg(1 TO 2)
  1941. FOR gvr = 1 TO 2
  1942. REDIM mt(41)
  1943. mt(0) = -1
  1944. box
  1945. IF lot(1).own = gvr AND lot(3).stat = 0 THEN
  1946. LOCATE 5, 11
  1947. sml 1
  1948. mt(1) = -1
  1949. IF lot(3).own = gvr AND lot(3).stat = 0 THEN
  1950. LOCATE 6, 11
  1951. sml 3
  1952. mt(3) = -1
  1953. IF lot(5).own = gvr THEN
  1954. LOCATE 7, 11
  1955. sml 5
  1956. mt(5) = -1
  1957. IF lot(6).own = gvr AND lot(9).stat = 0 THEN
  1958. LOCATE 8, 11
  1959. sml 6
  1960. mt(6) = -1
  1961. IF lot(8).own = gvr AND lot(9).stat = 0 THEN
  1962. LOCATE 9, 11
  1963. sml 8
  1964. mt(8) = -1
  1965. IF lot(9).own = gvr AND lot(9).stat = 0 THEN
  1966. LOCATE 10, 11
  1967. sml 9
  1968. mt(9) = -1
  1969. IF lot(11).own = gvr AND lot(14).stat = 0 THEN
  1970. LOCATE 5, 25
  1971. sml 11
  1972. mt(11) = -1
  1973. IF lot(12).own = gvr THEN
  1974. LOCATE 6, 25
  1975. sml 12
  1976. mt(12) = -1
  1977. IF lot(13).own = gvr AND lot(14).stat = 0 THEN
  1978. LOCATE 7, 25
  1979. sml 13
  1980. mt(13) = -1
  1981. IF lot(14).own = gvr AND lot(14).stat = 0 THEN
  1982. LOCATE 8, 25
  1983. sml 14
  1984. mt(14) = -1
  1985. IF lot(15).own = gvr THEN
  1986. LOCATE 9, 25
  1987. sml 15
  1988. mt(15) = -1
  1989. IF lot(16).own = gvr AND lot(19).stat = 0 THEN
  1990. LOCATE 10, 25
  1991. sml 16
  1992. mt(16) = -1
  1993. IF lot(18).own = gvr AND lot(19).stat = 0 THEN
  1994. LOCATE 11, 25
  1995. sml 18
  1996. mt(18) = -1
  1997. IF lot(19).own = gvr AND lot(19).stat = 0 THEN
  1998. LOCATE 12, 25
  1999. sml 19
  2000. mt(19) = -1
  2001. IF lot(21).own = gvr AND lot(24).stat = 0 THEN
  2002. LOCATE 5, 40
  2003. sml 21
  2004. mt(21) = -1
  2005. IF lot(23).own = gvr AND lot(24).stat = 0 THEN
  2006. LOCATE 6, 40
  2007. sml 23
  2008. mt(23) = -1
  2009. IF lot(24).own = gvr AND lot(24).stat = 0 THEN
  2010. LOCATE 7, 40
  2011. sml 24
  2012. mt(24) = -1
  2013. IF lot(25).own = gvr THEN
  2014. LOCATE 8, 40
  2015. sml 25
  2016. mt(25) = -1
  2017. IF lot(26).own = gvr AND lot(29).stat = 0 THEN
  2018. LOCATE 9, 40
  2019. sml 26
  2020. mt(26) = -1
  2021. IF lot(27).own = gvr AND lot(29).stat = 0 THEN
  2022. LOCATE 10, 40
  2023. sml 27
  2024. mt(27) = -1
  2025. IF lot(28).own = gvr THEN
  2026. LOCATE 11, 40
  2027. sml 28
  2028. mt(28) = -1
  2029. IF lot(29).own = gvr AND lot(29).stat = 0 THEN
  2030. LOCATE 12, 40
  2031. sml 29
  2032. mt(29) = -1
  2033. IF lot(31).own = gvr AND lot(34).stat = 0 THEN
  2034. LOCATE 5, 55
  2035. sml 31
  2036. mt(31) = -1
  2037. IF lot(32).own = gvr AND lot(34).stat = 0 THEN
  2038. LOCATE 6, 55
  2039. sml 32
  2040. mt(32) = -1
  2041. IF lot(34).own = gvr AND lot(34).stat = 0 THEN
  2042. LOCATE 7, 55
  2043. sml 34
  2044. mt(34) = -1
  2045. IF lot(35).own = gvr THEN
  2046. LOCATE 8, 55
  2047. sml 35
  2048. mt(35) = -1
  2049. IF lot(37).own = gvr AND lot(39).stat = 0 THEN
  2050. LOCATE 9, 55
  2051. sml 37
  2052. mt(37) = -1
  2053. IF lot(39).own = gvr AND lot(39).stat = 0 THEN
  2054. LOCATE 10, 55
  2055. sml 39
  2056. mt(39) = -1
  2057. IF st(gvr).chag THEN
  2058. LOCATE 12, 11
  2059. PRINT 40;
  2060. PRINT "GOOJF"
  2061. mt(40) = -1
  2062. IF st(gvr).cheg THEN
  2063. LOCATE 12, 55
  2064. PRINT 41;
  2065. PRINT "GOOJF"
  2066. mt(41) = -1
  2067. ce 13, RTRIM$(st(gvr).ft) + ", you have $" + ltsb(st(gvr).c)
  2068. ce 14, "Choose a deed to trade or 0 to continue"
  2069. pick = 0
  2070. IF (NOT mt(pick)) AND (NOT q) THEN b
  2071. pick = ner(15, 41)
  2072. LOOP UNTIL mt(pick)
  2073. CASE 1 TO 39
  2074. lot(pick).own = 0
  2075. CASE 40
  2076. st(gvr).chag = 0
  2077. CASE 41
  2078. st(gvr).cheg = 0
  2079. wit(pick) = gvr
  2080. LOOP UNTIL pick = 0
  2081. ce 16, "cash to give"
  2082. cg(gvr) = nerb(17, st(gvr).c)
  2083. IF cg(1) > cg(2) THEN
  2084. box
  2085. popp 1, cg(1) - cg(2)
  2086. IF cg(2) > cg(1) THEN
  2087. box
  2088. popp 2, cg(2) - cg(1)
  2089. IF wit(40) > 0 THEN st(3 - wit(40)).chag = -1
  2090. IF wit(41) > 0 THEN st(3 - wit(41)).cheg = -1
  2091. FOR flip = 1 TO 39
  2092. IF wit(flip) > 0 AND (NOT lot(flip).hk) THEN
  2093. lot(flip).own = 3 - wit(flip)
  2094. wit(flip) = 0
  2095. FOR flip = 1 TO 39
  2096. IF wit(flip) > 0 THEN
  2097. lot(flip).own = 3 - wit(flip)
  2098. box
  2099. ce 5, RTRIM$(st(3 - wit(flip)).ft) + ", you have $" + ltsb(st(3 - wit(flip)).c)
  2100. COLOR lot(flip).hue
  2101. ce 6, RTRIM$(lot(flip).ttl)
  2102. ce 7, "is mortgaged."
  2103. IF st(3 - wit(flip)).c >= INT(.5 + lot(flip).c * uf!) THEN
  2104. ce 8, "Do you want to unmortgage it now? (Y/N)"
  2105. y = INT(.5 + lot(flip).c * uf!)
  2106. n = INT(.5 + lot(flip).c * (uf! - .5))
  2107. ce 9, "Y will cost $" + lts(y)
  2108. IF n > 0 THEN ce 10, "N will cost $" + lts(n)
  2109. yn$ = LCASE$(INKEY$)
  2110. LOOP UNTIL yn$ = "y" OR yn$ = "n"
  2111. yn$ = "n"
  2112. IF yn$ = "y" THEN
  2113. pay 3 - wit(flip), y
  2114. lot(flip).hk = 0
  2115. IF n > 0 THEN
  2116. pay 3 - wit(flip), n
  2117. ce 14, "mortgaged property fee."
  2118. p
  2119.  
  2120. tx$ = INKEY$
  2121. LOOP UNTIL tx$ > ""
  2122. CASE "a" TO "z", CHR$(13), CHR$(8)
  2123. valid = -1
  2124. valid = 0
  2125. IF (NOT q) THEN b
  2126. LOOP UNTIL valid
  2127. txk = tx$
  2128.  
  2129. SUB unm (t)
  2130. DIM gp(39)
  2131. gp(0) = -1
  2132. box
  2133. IF lot(1).own = t AND lot(1).hk AND st(t).c >= INT(.5 + lot(1).c * uf!) THEN
  2134. LOCATE 5, 11
  2135. dy 1
  2136. gp(1) = -1
  2137. IF lot(3).own = t AND lot(3).hk AND st(t).c >= INT(.5 + lot(3).c * uf!) THEN
  2138. LOCATE 6, 11
  2139. dy 3
  2140. gp(3) = -1
  2141. IF lot(5).own = t AND lot(5).hk AND st(t).c >= INT(.5 + lot(5).c * uf!) THEN
  2142. LOCATE 7, 11
  2143. dy 5
  2144. gp(5) = -1
  2145. IF lot(6).own = t AND lot(6).hk AND st(t).c >= INT(.5 + lot(6).c * uf!) THEN
  2146. LOCATE 8, 11
  2147. dy 6
  2148. gp(6) = -1
  2149. IF lot(8).own = t AND lot(8).hk AND st(t).c >= INT(.5 + lot(8).c * uf!) THEN
  2150. LOCATE 9, 11
  2151. dy 8
  2152. gp(8) = -1
  2153. IF lot(9).own = t AND lot(9).hk AND st(t).c >= INT(.5 + lot(9).c * uf!) THEN
  2154. LOCATE 10, 11
  2155. dy 9
  2156. gp(9) = -1
  2157. IF lot(11).own = t AND lot(11).hk AND st(t).c >= INT(.5 + lot(11).c * uf!) THEN
  2158. LOCATE 5, 26
  2159. dy 11
  2160. gp(11) = -1
  2161. IF lot(12).own = t AND lot(12).hk AND st(t).c >= INT(.5 + lot(12).c * uf!) THEN
  2162. LOCATE 6, 26
  2163. dy 12
  2164. gp(12) = -1
  2165. IF lot(13).own = t AND lot(13).hk AND st(t).c >= INT(.5 + lot(13).c * uf!) THEN
  2166. LOCATE 7, 26
  2167. dy 13
  2168. gp(13) = -1
  2169. IF lot(14).own = t AND lot(14).hk AND st(t).c >= INT(.5 + lot(14).c * uf!) THEN
  2170. LOCATE 8, 26
  2171. dy 14
  2172. gp(14) = -1
  2173. IF lot(15).own = t AND lot(15).hk AND st(t).c >= INT(.5 + lot(15).c * uf!) THEN
  2174. LOCATE 9, 26
  2175. dy 15
  2176. gp(15) = -1
  2177. IF lot(16).own = t AND lot(16).hk AND st(t).c >= INT(.5 + lot(16).c * uf!) THEN
  2178. LOCATE 10, 26
  2179. dy 16
  2180. gp(16) = -1
  2181. IF lot(18).own = t AND lot(18).hk AND st(t).c >= INT(.5 + lot(18).c * uf!) THEN
  2182. LOCATE 11, 26
  2183. dy 18
  2184. gp(18) = -1
  2185. IF lot(19).own = t AND lot(19).hk AND st(t).c >= INT(.5 + lot(19).c * uf!) THEN
  2186. LOCATE 12, 26
  2187. dy 19
  2188. gp(19) = -1
  2189. IF lot(21).own = t AND lot(21).hk AND st(t).c >= INT(.5 + lot(21).c * uf!) THEN
  2190. LOCATE 5, 41
  2191. dy 21
  2192. gp(21) = -1
  2193. IF lot(23).own = t AND lot(23).hk AND st(t).c >= INT(.5 + lot(23).c * uf!) THEN
  2194. LOCATE 6, 41
  2195. dy 23
  2196. gp(23) = -1
  2197. IF lot(24).own = t AND lot(24).hk AND st(t).c >= INT(.5 + lot(24).c * uf!) THEN
  2198. LOCATE 7, 41
  2199. dy 24
  2200. gp(24) = -1
  2201. IF lot(25).own = t AND lot(25).hk AND st(t).c >= INT(.5 + lot(25).c * uf!) THEN
  2202. LOCATE 8, 41
  2203. dy 25
  2204. gp(25) = -1
  2205. IF lot(26).own = t AND lot(26).hk AND st(t).c >= INT(.5 + lot(26).c * uf!) THEN
  2206. LOCATE 9, 41
  2207. dy 26
  2208. gp(26) = -1
  2209. IF lot(27).own = t AND lot(27).hk AND st(t).c >= INT(.5 + lot(27).c * uf!) THEN
  2210. LOCATE 10, 41
  2211. dy 27
  2212. gp(27) = -1
  2213. IF lot(28).own = t AND lot(28).hk AND st(t).c >= INT(.5 + lot(28).c * uf!) THEN
  2214. LOCATE 11, 41
  2215. dy 28
  2216. gp(28) = -1
  2217. IF lot(29).own = t AND lot(29).hk AND st(t).c >= INT(.5 + lot(29).c * uf!) THEN
  2218. LOCATE 12, 41
  2219. dy 29
  2220. gp(29) = -1
  2221. IF lot(31).own = t AND lot(31).hk AND st(t).c >= INT(.5 + lot(31).c * uf!) THEN
  2222. LOCATE 5, 56
  2223. dy 31
  2224. gp(31) = -1
  2225. IF lot(32).own = t AND lot(32).hk AND st(t).c >= INT(.5 + lot(32).c * uf!) THEN
  2226. LOCATE 6, 56
  2227. dy 32
  2228. gp(32) = -1
  2229. IF lot(34).own = t AND lot(34).hk AND st(t).c >= INT(.5 + lot(34).c * uf!) THEN
  2230. LOCATE 7, 56
  2231. dy 34
  2232. gp(34) = -1
  2233. IF lot(35).own = t AND lot(35).hk AND st(t).c >= INT(.5 + lot(35).c * uf!) THEN
  2234. LOCATE 8, 56
  2235. dy 35
  2236. gp(35) = -1
  2237. IF lot(37).own = t AND lot(37).hk AND st(t).c >= INT(.5 + lot(37).c * uf!) THEN
  2238. LOCATE 9, 56
  2239. dy 37
  2240. gp(37) = -1
  2241. IF lot(39).own = t AND lot(39).hk AND st(t).c >= INT(.5 + lot(39).c * uf!) THEN
  2242. LOCATE 10, 56
  2243. dy 39
  2244. gp(39) = -1
  2245. ce 13, RTRIM$(st(t).ft)
  2246. ce 14, "Choose a deed to unmortgage or 0 to continue"
  2247. ce 17, "you have $" + ltsb(st(t).c)
  2248. IF (NOT gp(pick)) AND (NOT q) THEN b
  2249. pick = ner(15, 39)
  2250. LOOP UNTIL gp(pick)
  2251. IF pick = 0 THEN EXIT SUB
  2252. lot(pick).hk = 0
  2253. box
  2254. pay t, INT(.5 + lot(pick).c * uf!)
  2255. p
  2256.  
  2257. SUB upd
  2258. chk 1, 1, 3
  2259. chk 6, 8, 9
  2260. chk 11, 13, 14
  2261. chk 16, 18, 19
  2262. chk 21, 23, 24
  2263. chk 26, 27, 29
  2264. chk 31, 32, 34
  2265. chk 37, 37, 39
  2266. IF lot(12).own = lot(28).own AND lot(12).own > 0 THEN
  2267. lot(12).stat = 2
  2268. lot(28).stat = 2
  2269. lot(12).stat = SGN(lot(12).own)
  2270. lot(28).stat = SGN(lot(28).own)
  2271. FOR rtt = 5 TO 35 STEP 10
  2272. rro = rro * 10 + lot(rtt).own
  2273. lot(rtt).stat = 0
  2274. CASE 1111, 2222
  2275. lot(5).stat = 4
  2276. lot(15).stat = 4
  2277. lot(25).stat = 4
  2278. lot(35).stat = 4
  2279. CASE 111, 222, 1222, 2111
  2280. lot(15).stat = 3
  2281. lot(25).stat = 3
  2282. lot(35).stat = 3
  2283. CASE 1011, 1211, 2022, 2122
  2284. lot(5).stat = 3
  2285. lot(25).stat = 3
  2286. lot(35).stat = 3
  2287. CASE 1101, 1121, 2202, 2212
  2288. lot(5).stat = 3
  2289. lot(15).stat = 3
  2290. lot(35).stat = 3
  2291. CASE 1110, 1112, 2220, 2221
  2292. lot(5).stat = 3
  2293. lot(15).stat = 3
  2294. lot(25).stat = 3
  2295. IF lot(5).own = lot(15).own AND lot(5).own > 0 THEN
  2296. lot(5).stat = 2
  2297. lot(15).stat = 2
  2298. IF lot(5).own = lot(25).own AND lot(5).own > 0 THEN
  2299. lot(5).stat = 2
  2300. lot(25).stat = 2
  2301. IF lot(5).own = lot(35).own AND lot(5).own > 0 THEN
  2302. lot(5).stat = 2
  2303. lot(35).stat = 2
  2304. IF lot(15).own = lot(25).own AND lot(15).own > 0 THEN
  2305. lot(15).stat = 2
  2306. lot(25).stat = 2
  2307. IF lot(15).own = lot(35).own AND lot(15).own > 0 THEN
  2308. lot(15).stat = 2
  2309. lot(35).stat = 2
  2310. IF lot(25).own = lot(35).own AND lot(25).own > 0 THEN
  2311. lot(25).stat = 2
  2312. lot(35).stat = 2
  2313. FOR rtt = 5 TO 35 STEP 10
  2314. IF lot(rtt).stat = 0 THEN lot(rtt).stat = SGN(lot(rtt).own)
  2315. swbs
  2316.  
  2317. SUB utc (t)
  2318. IF lot(st(t).whr).own = 0 THEN
  2319. noo t
  2320. IF lot(st(t).whr).own = t THEN
  2321. COLOR lot(st(t).whr).hue
  2322. ce 12, RTRIM$(lot(st(t).whr).ttl)
  2323. ce 13, "is yours."
  2324. p
  2325. IF lot(st(t).whr).hk THEN
  2326. COLOR lot(st(t).whr).hue
  2327. ce 12, RTRIM$(lot(st(t).whr).ttl)
  2328. ce 13, "is mortgaged."
  2329. p
  2330. crl = di(d1, d2)
  2331. ce 11, lts(d1) + " + " + lts(d2) + " = " + lts(crl) + ", $" + lts(10 * crl) + " due."
  2332. p
  2333. popp t, 10 * crl
  2334.  
  2335. SUB vwd
  2336. box
  2337. LOCATE 5, 11
  2338. tiny 1
  2339. LOCATE 6, 11
  2340. tiny 3
  2341. LOCATE 7, 11
  2342. tiny 5
  2343. LOCATE 8, 11
  2344. tiny 6
  2345. LOCATE 9, 11
  2346. tiny 8
  2347. LOCATE 10, 11
  2348. tiny 9
  2349. LOCATE 5, 25
  2350. tiny 11
  2351. LOCATE 6, 25
  2352. tiny 12
  2353. LOCATE 7, 25
  2354. tiny 13
  2355. LOCATE 8, 25
  2356. tiny 14
  2357. LOCATE 9, 25
  2358. tiny 15
  2359. LOCATE 10, 25
  2360. tiny 16
  2361. LOCATE 11, 25
  2362. tiny 18
  2363. LOCATE 12, 25
  2364. tiny 19
  2365. LOCATE 5, 40
  2366. tiny 21
  2367. LOCATE 6, 40
  2368. tiny 23
  2369. LOCATE 7, 40
  2370. tiny 24
  2371. LOCATE 8, 40
  2372. tiny 25
  2373. LOCATE 9, 40
  2374. tiny 26
  2375. LOCATE 10, 40
  2376. tiny 27
  2377. LOCATE 11, 40
  2378. tiny 28
  2379. LOCATE 12, 40
  2380. tiny 29
  2381. LOCATE 5, 55
  2382. tiny 31
  2383. LOCATE 6, 55
  2384. tiny 32
  2385. LOCATE 7, 55
  2386. tiny 34
  2387. LOCATE 8, 55
  2388. tiny 35
  2389. LOCATE 9, 55
  2390. tiny 37
  2391. LOCATE 10, 55
  2392. tiny 39
  2393. ce 13, "choose a deed to view or 0 to continue"
  2394. wt = ner(14, 39)
  2395. IF wt = 0 THEN EXIT DO
  2396. SELECT CASE lot(wt).sty
  2397. CASE "b"
  2398. box
  2399. COLOR lot(wt).hue
  2400. ce 5, RTRIM$(lot(wt).ttl)
  2401. ce 6, "cost $" + lts(lot(wt).c)
  2402. ce 7, "mortgage value $" + lts(lot(wt).c / 2)
  2403. ce 8, "rent $" + lts(lot(wt).r)
  2404. ce 9, "rent with one house $" + lts(lot(wt).r1)
  2405. ce 10, "rent with two houses $" + lts(lot(wt).r2)
  2406. ce 11, "rent with three houses $" + lts(lot(wt).r3)
  2407. ce 12, "rent with four houses $" + lts(lot(wt).r4)
  2408. ce 13, "rent with hotel $" + lts(lot(wt).rhot)
  2409. ce 14, "houses cost $" + lts(lot(wt).bc) + " each"
  2410. ce 15, "hotel costs $" + lts(lot(wt).bc) + " plus 4 houses"
  2411. IF lot(wt).own = 0 THEN
  2412. ce 16, "unowned"
  2413. ce 16, "owned by " + RTRIM$(st(lot(wt).own).ft)
  2414. IF lot(wt).hk THEN
  2415. ce 17, "mortgaged, $" + lts(INT(.5 + lot(wt).c * uf!)) + " to unmortgage."
  2416. SELECT CASE lot(wt).stat
  2417. ce 17, "with no buildings"
  2418. ce 17, "with one house"
  2419. ce 17, "with two houses"
  2420. ce 17, "with three houses"
  2421. ce 17, "with four houses"
  2422. ce 17, "with hotel"
  2423. p
  2424. CASE "u"
  2425. box
  2426. COLOR lot(wt).hue
  2427. ce 5, RTRIM$(lot(wt).ttl)
  2428. ce 6, "cost $150"
  2429. ce 7, "mortgage value $75"
  2430. ce 8, "rent with one Utility, four times dice"
  2431. ce 9, "rent with two Utilities, ten times dice"
  2432. IF lot(wt).own = 0 THEN
  2433. ce 16, "unowned"
  2434. ce 16, "owned by " + RTRIM$(st(lot(wt).own).ft)
  2435. IF lot(wt).hk THEN ce 17, "mortgaged, $" + lts(INT(.5 + lot(wt).c * uf!)) + " to unmortgage."
  2436. SELECT CASE lot(wt).stat
  2437. ce 18, "one Utility"
  2438. ce 18, "two utlities"
  2439. p
  2440. CASE "r"
  2441. box
  2442. COLOR lot(wt).hue
  2443. ce 5, RTRIM$(lot(wt).ttl)
  2444. ce 6, "cost $200"
  2445. ce 7, "mortgage value $100"
  2446. ce 8, "rent with one Railroad $25"
  2447. ce 9, "rent with two Railroads $50"
  2448. ce 10, "rent with three Railroads $100"
  2449. ce 11, "rent with four Railroads $200"
  2450. IF lot(wt).own = 0 THEN
  2451. ce 16, "unowned"
  2452. ce 16, "owned by " + RTRIM$(st(lot(wt).own).ft)
  2453. IF lot(wt).hk THEN ce 17, "mortgaged, $" + lts(INT(.5 + lot(wt).c * uf!)) + " to unmortgage."
  2454. SELECT CASE lot(wt).stat
  2455. ce 18, "one Railroad"
  2456. ce 18, "two Railroads"
  2457. ce 18, "three Railroads"
  2458. ce 18, "four Railroads"
  2459. p
  2460. CASE "o"
  2461. IF (NOT q) THEN b
  2462. LOOP UNTIL wt = 0
  2463.  
  2464.  
I apologise with all QB64 coders not mentioned here, I preferred to use code taken from sample folder of QB64.
Hey I must apologise also with curator of the QB64 website! I have posted a code more than 1000 lines and you can find fun that linecode's number restarts from 1 after 1000!
Thanks to read

ciao @TempodiBasic

si ho visto esempi della calcolatrice se usi il goto dal alto verso il basso il codice è piu leggibile come ha fatto notare  SMcNeill
effettivamente a ragione
pero usando la tecnica strutturata è ancora meglio come nell esempio della seconda calcolatrice
poi i programmi di  CREATIVE COMPUTING MORRISTOWN, NEW JERSEY sono illeggibili
ed a ragione bplus  che dice che usano troppi goto perche non avevano altro
magari adesso la programmazione si è evoluta è in questi tempi usano tutti la programmazione strutturata
e anche consigliato mettere i commenti nel codice anche questo passaggio non veniva applicato i programmatori del passato
almeno da come mi sono documentato io ho capito questo poi può darsi che mi sbaglio ma sono qui per imparare e giusto che
se non è cosi qualcuno mi corregge
se avessi solo un'ora per salvare il mondo, passerei 55 minuti per definire bene il problema e 5 a trovare la soluzione

Offline Kernelpanic

  • Newbie
  • Posts: 94
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #13 on: November 07, 2020, 07:13:44 pm »
@Kiara - Ce ne può essere solo uno! Kiara, comprati per un libro per QBasic e "Code Complete" in italiano. Davvero! :-;

https://www.youtube.com/watch?v=XfjJzL6yWfU
« Last Edit: November 07, 2020, 07:15:31 pm by Kernelpanic »
Mark Twain
"Als wir das Ziel endgültig aus den Augen verloren hatten, verdoppelten wir unsere Anstrengungen."
„Having lost sight of our goals, we redoubled our efforts.“

Offline Kiara87

  • Forum Regular
  • Posts: 164
    • View Profile
Re: WHILE AND DO LOOP CYCLES
« Reply #14 on: November 07, 2020, 07:44:48 pm »
@Kiara - Ce ne può essere solo uno! Kiara, comprati per un libro per QBasic e "Code Complete" in italiano. Davvero! :-;

https://www.youtube.com/watch?v=XfjJzL6yWfU

beautiful song i didn't think she was so famous
se avessi solo un'ora per salvare il mondo, passerei 55 minuti per definire bene il problema e 5 a trovare la soluzione