5748456 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n stocks.bas
   1: DECLARE FUNCTION CHN$ (vl!)
   2: '$compile exe "STOCKSIM.EXE"
   3: '$OPTIMIZE speed
   4: DECLARE FUNCTION DES$ (ln$)
   5: DECLARE FUNCTION SCRMBL$ (ln$)
   6: DIM PLAYN(1 TO 10) AS STRING
   7: DIM STOCKS(1 TO 10) AS STRING
   8: DIM StockC(1 TO 10) AS LONG
   9: DIM MONEY(1 TO 10) AS LONG
  10: DIM STOCKY(1 TO 10, 1 TO 10) AS LONG
  11: DIM GraphStocks(1 TO 1638, 1 TO 10) AS LONG
  12: DIM CHNG(1 TO 10) AS INTEGER
  13: DIM crash(1 TO 10) AS INTEGER
  14: DIM Distance AS DOUBLE
  15: Day = 1
  16: FOR m = 1 TO 10
  17: StockC(m) = INT(RND * 40) + 10
  18: MONEY(m) = 5000
  19: NEXT m
  20: COLOR 15, 1
  21: CLS
  22: PRINT "Enter the players names and press enter on a blank line to begin."
  23: DO
  24: nt = nt + 1
  25: LINE INPUT ":"; PLAYN(nt)
  26: LOOP UNTIL PLAYN(nt) = "" OR nt = 10
  27: nt = nt - 1
  28: IF nt = 0 THEN END
  29: CLS : PALETTE 3, 63
  30: OPEN "STOCKS.FIL" FOR INPUT AS #1
  31: DO UNTIL EOF(1) OR Stck = 10
  32: Stck = Stck + 1
  33: LINE INPUT #1, STOCKS(Stck)
  34: LOOP
  35: CLOSE 1
  36: pl = 1
  37: Top:
  38: PRINT "       Name                     Price        Change   Yours  "; : COLOR 1, 3: PRINT " STOCKS V1.2 ": COLOR 15, 1
  39: PRINT "  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
  40: FOR q = 1 TO Stck
  41: PRINT "  ³"; q; STOCKS(q)
  42: IF StockC(q) < 1 THEN LOCATE q + 2, 1: PRINT "*": StockC(q) = 0: CHNG(q) = 0: FOR j = 1 TO nt: STOCKY(j, q) = 0: NEXT j
  43: LOCATE q + 2, 77: PRINT "³"
  44: LOCATE q + 2, 31: PRINT "³"; StockC(q)
  45: nn = CHNG(q)
  46: LOCATE q + 2, 45: PRINT "³"; CHN$(nn)
  47: LOCATE q + 2, 52: PRINT "³"; STOCKY(pl, q)
  48: IF crash(q) = 1 OR StockC(q) > 0 THEN  ELSE ct = ct + 1: crash(q) = 1
  49: IF STOCKY(pl, q) > 0 THEN LOCATE q + 2, 2: PRINT "û"
  50: NEXT q
  51: PRINT "  ÃÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
  52: PRINT "  ³(B)uy  ³       ³   Player Name: "; PLAYN(pl)
  53: PRINT "  ³(S)ell ³¯      ³   Money Left: "; MONEY(pl)
  54: PRINT "  ³(L)oad ³       ³   Day:        "; Day
  55: PRINT "  ³S(a)ve ÃÄÄÄÄÄÄÄÙ   Crashed:    "; ct
  56: PRINT "  ³(G)raph³"
  57: PRINT "  ³(Q)uit ³"
  58: PRINT "  ÀÄÄÄÄÄÄÄÙ"
  59: 'IF CRASH(t) = 1 THEN  ELSE ct = ct + 1: CRASH(t) = 1
  60: LOCATE q + 4, 14, 1: ch$ = INPUT$(1)
  61: IF UCASE$(ch$) = "B" THEN GOTO Buye
  62: IF UCASE$(ch$) = "S" THEN GOTO Slel
  63: IF UCASE$(ch$) = "Q" THEN END
  64: IF UCASE$(ch$) = "L" THEN GOTO Ldgme
  65: IF UCASE$(ch$) = "A" THEN GOTO Svgme
  66: IF UCASE$(ch$) = "G" THEN GOTO GraphIt
  67: IF UCASE$(ch$) = "C" AND (PLAYN(pl) = "The Creater" OR PLAYN(pl) = "Dracula") THEN GOTO Cht
  68: IF UCASE$(ch$) = "$" AND (PLAYN(pl) = "The Creater" OR PLAYN(pl) = "Dracula") THEN GOTO Mny
  69: Chngr:
  70: IF pl = nt THEN pl = 1: Day = Day + 1 ELSE pl = pl + 1: CLS : GOTO Top
  71: FOR t = 1 TO Stck
  72: GraphStocks(Day, t) = StockC(t)
  73: IF StockC(t) > 0 THEN CHNG(t) = INT(RND * 20) - 10: StockC(t) = StockC(t) + CHNG(t) 'ELSE
  74: NEXT t
  75: IF ct = Stck THEN GOTO Ind
  76: CLS
  77: GOTO Top
  78: 
  79: Buye:
  80: LOCATE q + 10, 1: INPUT "Stock #"; st$
  81: st = VAL(st$)
  82: IF st > Stck OR st < 1 THEN CLS : GOTO Top
  83: INPUT "How many shares"; shr$
  84: shr = VAL(shr$)
  85: IF StockC(st) * shr > MONEY(pl) THEN CLS : GOTO Top
  86: MONEY(pl) = MONEY(pl) - (StockC(st) * shr)
  87: STOCKY(pl, st) = STOCKY(pl, st) + shr
  88: CLS : GOTO Top
  89: 
  90: Slel:
  91: LOCATE q + 10, 1: INPUT "Stock #"; st$
  92: st = VAL(st$)
  93: IF st > Stck OR st < 1 THEN CLS : GOTO Top
  94: INPUT "How many shares"; shr$
  95: shr = VAL(shr$)
  96: IF STOCKY(pl, st) < 1 OR shr > STOCKY(pl, st) THEN CLS : GOTO Top
  97: MONEY(pl) = MONEY(pl) + (StockC(st) * shr)
  98: STOCKY(pl, st) = STOCKY(pl, st) - shr
  99: CLS : GOTO Top
 100: 
 101: Ldgme:
 102: LOCATE q + 10, 1: INPUT "Filename"; f$
 103: OPEN f$ FOR INPUT AS #1
 104: LINE INPUT #1, l1$: MONEY(pl) = VAL(DES$(l1$))
 105: LINE INPUT #1, l2$: PLAYN(pl) = DES$(l2$)
 106: LINE INPUT #1, l3$: Day = VAL(DES$(l3$))
 107: Stck = 0
 108: DO UNTIL EOF(1)
 109: Stck = Stck + 1
 110: LINE INPUT #1, g$: STOCKS(Stck) = DES$(g$)
 111: LINE INPUT #1, g1$: StockC(Stck) = VAL(DES$(g1$))
 112: LINE INPUT #1, g2$: CHNG(Stck) = VAL(DES$(g2$))
 113: LINE INPUT #1, g3$: STOCKY(pl, Stck) = VAL(DES$(g3$))
 114: LOOP
 115: CLOSE 1
 116: CLS : GOTO Top
 117: 
 118: 
 119: Svgme:
 120: LOCATE q + 10, 1: INPUT "Filename"; f$
 121: OPEN f$ FOR OUTPUT AS #1
 122: PRINT #1, SCRMBL$(STR$(MONEY(pl)))
 123: PRINT #1, SCRMBL$(PLAYN(pl))
 124: PRINT #1, SCRMBL$(STR$(Day))
 125: FOR r = 1 TO Stck
 126: PRINT #1, SCRMBL$(STOCKS(r))
 127: PRINT #1, SCRMBL$(STR$(StockC(r)))
 128: PRINT #1, SCRMBL$(STR$(CHNG(r)))
 129: PRINT #1, SCRMBL$(STR$(STOCKY(pl, r)))
 130: NEXT r
 131: CLOSE 1
 132: CLS : GOTO Top
 133: 
 134: Cht:
 135: LOCATE q + 10, 1: INPUT "Stock #"; stk$
 136: st = VAL(stk$)
 137: IF st > Stck OR st <= 0 THEN CLS : GOTO Top
 138: INPUT "New price"; StockC(st)
 139: CLS : GOTO Top
 140: 
 141: Mny:
 142: LOCATE q + 10, 1
 143: INPUT "New amount"; MONEY(pl)
 144: CLS : GOTO Top
 145: 
 146: Ind:
 147: CLS : PRINT "All stocks have crashed!  DAY:"; Day
 148: FOR ww = 1 TO nt
 149: PRINT "Player "; PLAYN(ww); " has $"; RTRIM$(LTRIM$(STR$(MONEY(ww)))); " and averaged $"; RTRIM$(LTRIM$(STR$(MONEY(ww) / Day))); " a day."
 150: NEXT ww
 151: END
 152: 
 153: GraphIt:
 154: CLS : SCREEN 12
 155: Height = POINT(1) * 2: Widths = POINT(0) * 2
 156: IF StockC(1) >= Height / 2 THEN Mem = Height / 2 ELSE Mem = StockC(1)
 157: Distance = INT((Height - ((Height) / Mem)) / Mem)
 158: LINE (10, (Mem * Distance))-(Widths, (Mem * Distance)), 2
 159: LINE (10, (Mem * Distance))-(10, 0), 2
 160: 
 161: FOR Stx = (Mem * Distance) - Distance TO 0 STEP -Distance
 162: LINE (10, Stx)-(Widths, Stx)
 163: NEXT Stx
 164: 
 165: FOR q = 1 TO Day
 166: FOR Stx = (Mem * Distance) - Distance TO 0 STEP -Distance
 167: NEXT Stx
 168: NEXT q
 169: 
 170: SLEEP
 171: SCREEN 0: WIDTH 80: COLOR 15, 1: CLS : PALETTE 3, 63: GOTO Top
 172: 
 173: FUNCTION CHN$ (vl)
 174: IF vl < 0 THEN op$ = CHR$(25) ELSE op$ = CHR$(24)
 175: IF vl = 0 THEN op$ = " "
 176: mm$ = LTRIM$(RTRIM$(STR$(ABS(vl))))
 177: IF LEN(mm$) = 1 THEN mm$ = " " + mm$
 178: CHN$ = op$ + " " + mm$
 179: END FUNCTION
 180: 
 181: FUNCTION DES$ (ln$)
 182: IF ln$ = "" THEN EXIT FUNCTION
 183: q = ASC(RIGHT$(ln$, 1))
 184: ln$ = LEFT$(ln$, LEN(ln$) - 1)
 185: FOR m = 1 TO LEN(ln$)
 186: tt$ = tt$ + CHR$(ASC(MID$(ln$, m, 1)) - q)
 187: 'PRINT q; ASC(MID$(ln$, m, 1)); ASC(MID$(ln$, m, 1)) - q
 188: NEXT m
 189: DES$ = tt$
 190: END FUNCTION
 191: 
 192: FUNCTION SCRMBL$ (ln$)
 193: ln$ = LTRIM$(RTRIM$(ln$))
 194: FOR o = 1 TO LEN(ln$)
 195: c = ASC(MID$(ln$, o, 1))
 196: IF c = 255 THEN c = 32: MID$(ln$, o, 1) = " "
 197: IF c > mx THEN mx = c
 198: 'PRINT c; b; mx; ln$
 199: b = c
 200: NEXT o
 201: RANDOMIZE TIMER
 202: q = INT(RND * (254 - mx)) + 1
 203: IF q < 32 THEN q = q + 32
 204: FOR m = 1 TO LEN(ln$)
 205: tt$ = tt$ + CHR$(ASC(MID$(ln$, m, 1)) + q)
 206: NEXT m
 207: SCRMBL$ = tt$ + CHR$(q)
 208: END FUNCTION
 209: 
5748457 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:09:56