├── .gitignore ├── LICENSE ├── README-windows.md ├── README.md ├── basc └── main.go ├── basgo-build ├── build_test.go └── main.go ├── basgo-run ├── basgo_run_test.go └── main.go ├── basgo ├── basgo.go └── command.go ├── baslex-run └── main.go ├── baslex-samples ├── a.bas ├── arith.bas ├── brackets.bas ├── equal.bas ├── if.bas ├── logical.bas ├── loop.bas ├── marks.bas └── rem.bas ├── baslex ├── baslex.go ├── baslex_test.go ├── input.go └── match.go ├── basparser-run └── main.go ├── basparser-samples ├── birth.bas ├── bubble.bas ├── draw16.bas ├── empty.bas ├── end.bas ├── exp.bas ├── factorial.bas ├── float.bas ├── gosub.bas ├── goto.bas ├── len.bas ├── lines.bas ├── logical.bas ├── logical2.bas ├── logical3.bas ├── logical4.bas ├── mod.bas ├── next.bas ├── ongoto.bas ├── print.bas ├── read-data.bas ├── rnd.bas └── sort.bas ├── basparser ├── generate.go ├── lex.go ├── misc.go ├── parser.y ├── run.go ├── token.go └── token_test.go ├── build-new.sh ├── build-old.sh ├── examples ├── animal.bas ├── bench1.bas ├── bench2.bas ├── cat.bas ├── classicbasicgames │ └── bagels.bas ├── codepage.bas ├── colony │ └── colony.bas ├── color.bas ├── combat.bas ├── combat_go.bas ├── copy.bas ├── csrlin.bas ├── cursor.bas ├── datnoids │ ├── datnoids.bas │ └── datnoidsorig.bas ├── eddiesegoura │ ├── ADVNTURE.BAS │ └── ALIEN.BAS ├── environ.bas ├── fn.bas ├── game.bas ├── goto.bas ├── gqgames │ ├── 23-match.bas │ ├── 3dplot.bas │ ├── aceyducy.bas │ ├── amazing.bas │ ├── animal.bas │ ├── awari.bas │ ├── bagels.bas │ ├── banner.bas │ ├── basketbl.bas │ ├── batnum.bas │ ├── battle.bas │ ├── blackjck.bas │ ├── bombard.bas │ ├── bombsawy.bas │ ├── bounce.bas │ ├── bowling.bas │ ├── boxing.bas │ ├── bug.bas │ ├── bullfght.bas │ ├── bullseye.bas │ ├── bunny.bas │ ├── buzzword.bas │ ├── calendar.bas │ ├── change.bas │ ├── changes.txt │ ├── checkers.bas │ ├── chemist.bas │ ├── chief.bas │ ├── chomp.bas │ ├── combat.bas │ ├── craps.bas │ ├── cube.bas │ ├── depthchg.bas │ ├── diamond.bas │ ├── dice.bas │ ├── digits.bas │ ├── evenwin1.bas │ ├── evenwin2.bas │ ├── flipflop.bas │ ├── footbal1.bas │ ├── footbal2.bas │ ├── furtradr.bas │ ├── golf.bas │ ├── gomoko.bas │ ├── guess.bas │ ├── gunner.bas │ ├── hamurabi.bas │ ├── hangman.bas │ ├── hello.bas │ ├── hexapawn.bas │ ├── hi-q.bas │ ├── hilo.bas │ ├── hockey.bas │ ├── horsrace.bas │ ├── hurkle.bas │ ├── kinema.bas │ ├── king.bas │ ├── lem.bas │ ├── letter.bas │ ├── life.bas │ ├── life2.bas │ ├── litquiz.bas │ ├── love.bas │ ├── lunar.bas │ ├── mastrmnd.bas │ ├── mathdice.bas │ ├── mine.bas │ ├── mugwump.bas │ ├── name.bas │ ├── nicoma.bas │ ├── nim.bas │ ├── number.bas │ ├── onecheck.bas │ ├── orbit.bas │ ├── pizza.bas │ ├── poetry.bas │ ├── poker.bas │ ├── qubic.bas │ ├── queen.bas │ ├── reverse.bas │ ├── rocket.bas │ ├── rocksp.bas │ ├── roulette.bas │ ├── rusrou.bas │ ├── salvo.bas │ ├── sinewave.bas │ ├── slalom.bas │ ├── slots.bas │ ├── splat.bas │ ├── stars.bas │ ├── stock.bas │ ├── suite.bas │ ├── synonym.bas │ ├── target.bas │ ├── test.bas │ ├── test1.bas │ ├── tictac1.bas │ ├── tictac2.bas │ ├── towers.bas │ ├── train.bas │ ├── trap.bas │ ├── war.bas │ ├── weekday.bas │ └── word.bas ├── graphics.bas ├── gw-basic.com │ └── spacesc.bas ├── hangman.bas ├── ifarchive │ ├── ORIGWIZ.BAS │ ├── droganya │ │ ├── DROGANYA.BAS │ │ ├── DROGANYA.DOC │ │ ├── FILE1074.TXT │ │ ├── NEWDROG.BAS │ │ ├── NEWDROG.QBS │ │ └── README │ ├── pirate │ │ ├── PIRATE.BAS │ │ └── PIRATE.TXT │ ├── quest.bas │ ├── tower.bas │ ├── towerorig.bas │ └── wumpus.bas ├── king.bas ├── lanes │ └── lanes.bas ├── leon │ ├── quad.bas │ └── quadorig.bas ├── locate.bas ├── mathdice.bas ├── prime.bas ├── question.bas ├── screen.bas ├── screenfunc.bas ├── sparcie │ ├── digger.bas │ ├── guzzler.bas │ ├── ski.bas │ └── skiorig.bas ├── startrader │ ├── README.md │ ├── origstartrader1.bas │ ├── origstartrader2.bas │ └── startrader-mbasic │ │ ├── trade-downloaded.bas │ │ ├── trade-orig.bas │ │ └── trade.bas ├── trek │ ├── sttr1 │ │ ├── README.md │ │ └── sttr1.bas │ ├── superstartrek.bas │ └── superstartrekins.bas ├── viewprint.bas ├── vintage_bcg │ ├── 23matches.bas │ ├── 3dplot.bas │ ├── aceyducey.bas │ ├── amazing.bas │ ├── animal.bas │ ├── awari.bas │ ├── bagels.bas │ ├── banner.bas │ ├── basketball.bas │ ├── batnum.bas │ ├── battle.bas │ ├── blackjack.bas │ ├── bombardment.bas │ ├── bombsaway.bas │ ├── bounce.bas │ ├── bowling.bas │ ├── boxing.bas │ ├── bug.bas │ ├── bullfight.bas │ ├── bullseye.bas │ ├── bunny.bas │ ├── buzzword.bas │ ├── calendar.bas │ ├── change.bas │ ├── checkers.bas │ ├── chemist.bas │ ├── chief.bas │ ├── chomp.bas │ ├── civilwar.bas │ ├── combat.bas │ ├── craps.bas │ ├── cube.bas │ ├── depthcharge.bas │ ├── diamond.bas │ ├── dice.bas │ ├── digits.bas │ ├── evenwins.bas │ ├── flipflop.bas │ ├── football.bas │ ├── ftball.bas │ ├── furtrader.bas │ ├── gameofevenwins.bas │ ├── golf.bas │ ├── gomoko.bas │ ├── guess.bas │ ├── gunner.bas │ ├── hammurabi.bas │ ├── hangman.bas │ ├── hello.bas │ ├── hexapawn.bas │ ├── hi-lo.bas │ ├── highiq.bas │ ├── hockey.bas │ ├── horserace.bas │ ├── hurkle.bas │ ├── kinema.bas │ ├── king.bas │ ├── lem.bas │ ├── letter.bas │ ├── life.bas │ ├── lifefortwo.bas │ ├── litquiz.bas │ ├── love.bas │ ├── lunar.bas │ ├── mastermind.bas │ ├── mathdice.bas │ ├── mine.bas │ ├── mugwump.bas │ ├── name.bas │ ├── nicomachus.bas │ ├── nim.bas │ ├── number.bas │ ├── onecheck.bas │ ├── orbit.bas │ ├── pizza.bas │ ├── poetry.bas │ ├── poker.bas │ ├── qubit.bas │ ├── queen.bas │ ├── reverse.bas │ ├── rocket.bas │ ├── rockscissors.bas │ ├── roulette.bas │ ├── russianroulette.bas │ ├── salvo.bas │ ├── sinewave.bas │ ├── slalom.bas │ ├── slots.bas │ ├── splat.bas │ ├── stars.bas │ ├── stockmarket.bas │ ├── suite.bas │ ├── superstartrek.bas │ ├── superstartrekins.bas │ ├── synonym.bas │ ├── target.bas │ ├── test.bas │ ├── test1.bas │ ├── tictactoe1.bas │ ├── tictactoe2.bas │ ├── tower.bas │ ├── train.bas │ ├── trap.bas │ ├── war.bas │ ├── weekday.bas │ └── word.bas └── width.bas ├── go.mod ├── go.sum ├── gofunc ├── README.md ├── gofunc.bas ├── gofunc.go ├── rad.bas └── run-gofunc-test.sh ├── lint.sh ├── node ├── exp.go └── node.go └── tmp-graphics └── a2.go /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, build with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 udhos 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /basgo-run/basgo_run_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | //"bytes" 5 | //"os" 6 | //"testing" 7 | 8 | // "github.com/udhos/basgo/basgo" 9 | ) 10 | 11 | /* 12 | func TestListRun(t *testing.T) { 13 | loadListRun(t, program1, list1, output1) 14 | loadListRun(t, program2, list2, output2) 15 | loadListRun(t, program3, list3, output3) 16 | } 17 | 18 | func loadListRun(t *testing.T, source, expectedList, expectedOutput string) { 19 | 20 | verbose := testing.Verbose() || os.Getenv("DEBUG") != "" 21 | 22 | b := basgo.New() 23 | 24 | b.ExecuteString(source) // Load 25 | 26 | // redirect stdout to buf 27 | bufList := make([]byte, 1000) 28 | outList := bytes.NewBuffer(bufList) 29 | b.Out = outList 30 | 31 | b.ExecuteLine("LIST") 32 | 33 | resultList := outList.String() 34 | if expectedList != resultList { 35 | t.Errorf("LIST MISMATCH") 36 | if verbose { 37 | t.Errorf(" LIST expected: [%v]\n LIST result: [%v]", expectedList, resultList) 38 | } 39 | } 40 | 41 | // redirect stdout to buf 42 | bufRun := make([]byte, 1000) 43 | outRun := bytes.NewBuffer(bufRun) 44 | b.Out = outRun 45 | 46 | b.ExecuteLine("RUN") 47 | 48 | resultRun := outRun.String() 49 | if expectedOutput != resultRun { 50 | t.Errorf("RUN MISMATCH") 51 | if verbose { 52 | t.Errorf(" RUN expected: [%v]\n RUN result: [%v]", expectedOutput, resultRun) 53 | } 54 | } 55 | } 56 | 57 | const program1 = `10cls 58 | 20 print "hi" 59 | 30 a$="world" 60 | 40 print a$ 61 | 50 end 62 | 60 print "world" 63 | 70 print "bad" 64 | 80 print "spaces" 65 | ` 66 | 67 | const list1 = `10 CLS 68 | 20 PRINT "hi" 69 | 30 A$="world" 70 | 40 PRINT A$ 71 | 50 END 72 | 60 PRINT "world" 73 | 70 PRINT "bad" 74 | 80 PRINT "spaces" 75 | ` 76 | 77 | const output1 = `hi 78 | world 79 | ` 80 | 81 | const program2 = `1000 PRINT:PRINT : : PRINT 82 | 2000 : : : : : : 83 | 3000 PRINT ":" :: PRINT ":::" 84 | ` 85 | 86 | const list2 = `1000 PRINT:PRINT : : PRINT 87 | 2000 : : : : : : 88 | 3000 PRINT ":" :: PRINT ":::" 89 | ` 90 | 91 | const output2 = ` 92 | 93 | 94 | : 95 | ::: 96 | ` 97 | 98 | const program3 = `10a=1 99 | 20a!=2 100 | 30print a a! 101 | ` 102 | 103 | const list3 = `10 A=1 104 | 20 A!=2 105 | 30 PRINT A A! 106 | ` 107 | 108 | const output3 = ` 2 2 109 | ` 110 | 111 | */ 112 | -------------------------------------------------------------------------------- /basgo-run/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | //"fmt" 5 | //"io" 6 | "log" 7 | //"os" 8 | //"runtime" 9 | 10 | "github.com/udhos/basgo/basgo" 11 | ) 12 | 13 | const ( 14 | basgoLabel = "basgo-run" 15 | ) 16 | 17 | func main() { 18 | basgo.ShowVersion(basgoLabel) 19 | 20 | b := basgo.New() 21 | 22 | errCount := b.REPL() 23 | 24 | log.Printf("%s: syntax errors: %d", basgoLabel, errCount) 25 | } 26 | -------------------------------------------------------------------------------- /basgo/command.go: -------------------------------------------------------------------------------- 1 | package basgo 2 | 3 | import ( 4 | "fmt" 5 | 6 | "github.com/udhos/basgo/node" 7 | ) 8 | 9 | type command interface { 10 | exec(b *Basgo, printf funcPrintf) (stop bool) 11 | } 12 | 13 | func commandNew(n node.Node) (command, error) { 14 | switch nn := n.(type) { 15 | case *node.NodeEmpty: 16 | return &commandEmpty{}, nil 17 | case *node.NodeEnd: 18 | return &commandEnd{}, nil 19 | case *node.NodeList: 20 | return &commandList{}, nil 21 | case *node.NodePrint: 22 | return &commandPrint{expressions: nn.Expressions}, nil 23 | default: 24 | return nil, fmt.Errorf("commandNew: unknown command: %v", nn.Name()) 25 | } 26 | } 27 | 28 | type commandEmpty struct{} 29 | 30 | func (c *commandEmpty) exec(b *Basgo, printf funcPrintf) (stop bool) { 31 | return 32 | } 33 | 34 | type commandEnd struct{} 35 | 36 | func (c *commandEnd) exec(b *Basgo, printf funcPrintf) (stop bool) { 37 | stop = true 38 | return 39 | } 40 | 41 | type commandList struct{} 42 | 43 | func (c *commandList) exec(b *Basgo, printf funcPrintf) (stop bool) { 44 | for _, line := range b.lines { 45 | printf(line.raw + "\n") 46 | } 47 | 48 | return 49 | } 50 | 51 | type commandPrint struct { 52 | expressions []node.NodeExp 53 | } 54 | 55 | func (c *commandPrint) exec(b *Basgo, printf funcPrintf) (stop bool) { 56 | for _, e := range c.expressions { 57 | printf("command.exec: FIXME WRITEME: evaluate exp: %s\n", e.String()) 58 | } 59 | printf("\n") 60 | return 61 | } 62 | -------------------------------------------------------------------------------- /baslex-run/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | //"bufio" 5 | "fmt" 6 | "log" 7 | "os" 8 | 9 | "github.com/udhos/basgo/basgo" 10 | "github.com/udhos/basgo/baslex" 11 | ) 12 | 13 | func main() { 14 | me := os.Args[0] 15 | 16 | basgo.ShowVersion(me) 17 | 18 | input := baslex.NewInput(me, os.Stdin) 19 | 20 | log.Printf("%s: reading BASIC code from stdin...", me) 21 | 22 | lex := baslex.New(input, false) 23 | for lex.HasToken() { 24 | t := lex.Next() 25 | s := baslex.TokenString("", t, lex.Offset()) 26 | fmt.Println(s) 27 | } 28 | 29 | log.Printf("%s: reading BASIC code from stdin...done", me) 30 | 31 | log.Printf("%s: stopped at line=%d column=%d offset=%d", me, lex.Line(), lex.Column(), lex.Offset()) 32 | } 33 | -------------------------------------------------------------------------------- /baslex-samples/a.bas: -------------------------------------------------------------------------------- 1 | 10 CLS 2 | 20 PRINT "hi" 3 | 30 A$="world" 4 | 40 PRINT A$ 5 | 50 END 6 | 60 PRINT "world" 7 | 70 PRINT "bad" 8 | 80 PRINT "spaces" 9 | 90 print : end : ' end of program 10 | -------------------------------------------------------------------------------- /baslex-samples/arith.bas: -------------------------------------------------------------------------------- 1 | 10 print a + b, a - b, a * b, a / b, a \ b : end 2 | -------------------------------------------------------------------------------- /baslex-samples/brackets.bas: -------------------------------------------------------------------------------- 1 | 10 let a[b]=b(c.2+1) 2 | -------------------------------------------------------------------------------- /baslex-samples/equal.bas: -------------------------------------------------------------------------------- 1 | 10 a < b 2 | 20 a <= b 3 | 30 a <> b 4 | 40 a >= b 5 | 50 a > b 6 | 60 a = b 7 | -------------------------------------------------------------------------------- /baslex-samples/if.bas: -------------------------------------------------------------------------------- 1 | 10 INPUT "number "; A 2 | 20 IF A>10 THEN print "big" else print "small" 3 | -------------------------------------------------------------------------------- /baslex-samples/logical.bas: -------------------------------------------------------------------------------- 1 | 10 print 2 2 | 20 print 3.3 3 | 30 print not 2 4 | 40 print not 3.3 5 | -------------------------------------------------------------------------------- /baslex-samples/loop.bas: -------------------------------------------------------------------------------- 1 | 2 | 10 for a = 1 to 10 step 2 3 | 20 gosub 100 4 | 30 next a 5 | 40 end 6 | 100 print a 7 | 110 return 8 | -------------------------------------------------------------------------------- /baslex-samples/marks.bas: -------------------------------------------------------------------------------- 1 | 10 print (),; 2 | -------------------------------------------------------------------------------- /baslex-samples/rem.bas: -------------------------------------------------------------------------------- 1 | 10 rem rem run : print "hi" 2 | -------------------------------------------------------------------------------- /baslex/input.go: -------------------------------------------------------------------------------- 1 | package baslex 2 | 3 | import ( 4 | "bufio" 5 | "io" 6 | "log" 7 | "os" 8 | "strconv" 9 | ) 10 | 11 | func NewInput(label string, reader io.Reader) *bufio.Reader { 12 | var size int 13 | 14 | sz := os.Getenv("INPUTSZ") 15 | if sz != "" { 16 | v, err := strconv.Atoi(sz) 17 | if err == nil { 18 | size = v 19 | } 20 | } 21 | 22 | log.Printf("%s: INPUTSZ=[%s] size=%d", label, sz, size) 23 | 24 | var input *bufio.Reader 25 | 26 | if size > 0 { 27 | input = bufio.NewReaderSize(reader, size) 28 | } else { 29 | input = bufio.NewReader(reader) 30 | } 31 | 32 | log.Printf("%s: input buffer size: %d", label, input.Size()) 33 | 34 | return input 35 | } 36 | -------------------------------------------------------------------------------- /basparser-run/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | //"bufio" 5 | "fmt" 6 | "log" 7 | "os" 8 | 9 | "github.com/udhos/basgo/basgo" 10 | "github.com/udhos/basgo/basparser" 11 | ) 12 | 13 | func main() { 14 | me := os.Args[0] 15 | basgo.ShowVersion(me) 16 | 17 | log.Printf("%s: reading BASIC code from stdin...", me) 18 | 19 | result, status, errors := basparser.Run(me, os.Stdin) 20 | 21 | nodes := result.Root 22 | 23 | log.Printf("%s: reading BASIC code from stdin...done", me) 24 | 25 | log.Printf("%s: status=%d errors=%d", me, status, errors) 26 | 27 | log.Printf("%s: FOR count=%d NEXT count=%d", me, result.CountFor, result.CountNext) 28 | log.Printf("%s: WHILE count=%d WEND count=%d", me, result.CountWhile, result.CountWend) 29 | 30 | log.Printf("%s: syntax tree lines=%d:", me, len(nodes)) 31 | 32 | for i, n := range nodes { 33 | fmt.Printf("%s: input line %d: ", me, i+1) 34 | n.Show(fmt.Printf) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /basparser-samples/birth.bas: -------------------------------------------------------------------------------- 1 | 10 read n$, birth$ 2 | 20 gosub 100 3 | 30 print string$(20, "-"); " "; string$(20, "-") 4 | 40 for i=1 to 3 5 | 50 read n$, birth$ 6 | 60 gosub 100 7 | 70 next 8 | 80 end 9 | 100 print n$; space$(20-len(n$)); " "; birth$ 10 | 110 return 11 | 1000 data "NAME", "BIRTHDAY" 12 | 1010 data "smith, john", "January 27, 2019" 13 | 1020 data "denvers, carol", "February 10, 2018" 14 | 1030 data "wayne, bruce", "March 30, 2017" 15 | -------------------------------------------------------------------------------- /basparser-samples/bubble.bas: -------------------------------------------------------------------------------- 1 | 100 DATA "HELLO", "WORLD", "BASIC", "BUBBLE", "SORT", "DEMO", "GO" 2 | 110 LET J=7 3 | 120 FOR N=1 TO J 4 | 130 READ A$(N) 5 | 140 NEXT 6 | 150 PRINT "SORTING ARRAY" 7 | 160 GOSUB 1000 8 | 170 PRINT "SORTING ARRAY - DONE" 9 | 180 PRINT 10 | 190 FOR N=1 TO J 11 | 200 PRINT A$(N) 12 | 210 NEXT 13 | 220 END 14 | 1000 REM BUBBLE SORT ARRAY 15 | 1010 REM INPUT: A$()=ARRAY J=ARRAY_SIZE 16 | 1020 REM OUTPUT: A$()=SORTED_ARRAY 17 | 1030 REM OTHER VARIABLES USED: FLIPS, N 18 | 1040 REM 19 | 1050 LET FLIPS=1 20 | 1060 WHILE FLIPS 21 | 1070 LET FLIPS=0 22 | 1080 FOR N=1 TO J-1 23 | 1090 IF A$(N)>A$(N+1) THEN SWAP A$(N), A$(N+1): LET FLIPS=1 24 | 1100 NEXT N 25 | 1110 WEND 26 | 1120 RETURN 27 | -------------------------------------------------------------------------------- /basparser-samples/draw16.bas: -------------------------------------------------------------------------------- 1 | 10 dim t(16):size=16 2 | 20 print "creating deck with "size" cards" 3 | 30 for i=1 to size 4 | 40 t(i)=i 5 | 50 next 6 | 60 print "drawing "size" cards from deck" 7 | 70 n=size 8 | 80 j=1 9 | 90 while n>0 10 | 100 i=int(rnd * n) + 1 11 | 110 print "removed card "j" from deck, its value was: " t(i) 12 | 120 t(i)=t(n) 13 | 130 j=j+1 14 | 140 n=n-1 15 | 150 wend 16 | 160 end 17 | -------------------------------------------------------------------------------- /basparser-samples/empty.bas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udhos/basgo/728c5f8962b4c58f777d0c1c561ec71acadfe023/basparser-samples/empty.bas -------------------------------------------------------------------------------- /basparser-samples/end.bas: -------------------------------------------------------------------------------- 1 | 2 | end 3 | 4 | -------------------------------------------------------------------------------- /basparser-samples/exp.bas: -------------------------------------------------------------------------------- 1 | 2 | 10 print 3 * (4 - 1) / 2 "...(string)..." 9.9 \ 3.9 3 | -------------------------------------------------------------------------------- /basparser-samples/factorial.bas: -------------------------------------------------------------------------------- 1 | 10 print "This program calculates factorial recursively using GOSUB" 2 | 20 print "Enter number: "; 3 | 30 input x 4 | 40 print "Calculating factorial for ", x, "!" 5 | 50 gosub 100 6 | 60 print "Done: ", x, "! = ", y 7 | 70 end 8 | 100 rem Factorial for x is returned in y 9 | 110 rem Input: x 10 | 120 rem Output: y 11 | 130 if x < 2 then y = 1: return 12 | 140 x = x - 1 13 | 150 gosub 100 14 | 160 x = x + 1 15 | 170 y = y * x 16 | 180 return 17 | 18 | -------------------------------------------------------------------------------- /basparser-samples/float.bas: -------------------------------------------------------------------------------- 1 | 10 print . 2 | 20 print 1. 3 | 30 print .2 4 | 40 print 3.0 5 | -------------------------------------------------------------------------------- /basparser-samples/gosub.bas: -------------------------------------------------------------------------------- 1 | 10 print 1 2 | 20 gosub 100 3 | 30 print 5 4 | 40 end 5 | 6 | 100 print 2 7 | 110 gosub 1000 8 | 120 print 4 9 | 130 return 10 | 11 | 1000 print 3 12 | 1010 return 13 | -------------------------------------------------------------------------------- /basparser-samples/goto.bas: -------------------------------------------------------------------------------- 1 | 10 goto 900 2 | 700 print 3 3 | 710 end 4 | 800 print 2 5 | 810 goto 700 6 | 900 print 1 7 | 910 goto 800 8 | -------------------------------------------------------------------------------- /basparser-samples/len.bas: -------------------------------------------------------------------------------- 1 | 10 let a=1 2 | 20 b$="hello" 3 | 30 print len a, " ", len b$ 4 | -------------------------------------------------------------------------------- /basparser-samples/lines.bas: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /basparser-samples/logical.bas: -------------------------------------------------------------------------------- 1 | 10 print 2 2 | 20 print 3.3 3 | 30 print not 2 4 | 40 print not 3.3 5 | 50 print 2 and 3.3 6 | 60 print 2 or 3.3 7 | 70 print 2 xor 3.3 8 | 80 print 2 eqv 3.3 9 | -------------------------------------------------------------------------------- /basparser-samples/logical2.bas: -------------------------------------------------------------------------------- 1 | 10 a=2 : b=3.3 2 | 20 print a 3 | 30 print b 4 | 40 print not a 5 | 50 print not b 6 | 60 print a and b 7 | 70 print a or b 8 | 80 print a xor b 9 | 90 print a eqv b 10 | -------------------------------------------------------------------------------- /basparser-samples/logical3.bas: -------------------------------------------------------------------------------- 1 | 10 print 1 < 2 2 | -------------------------------------------------------------------------------- /basparser-samples/logical4.bas: -------------------------------------------------------------------------------- 1 | 10 print (1 < 2) and (1 > 2) 2 | 20 print (1 < 2) or (1 > 2) 3 | -------------------------------------------------------------------------------- /basparser-samples/mod.bas: -------------------------------------------------------------------------------- 1 | 10 print 9 MOD 4 2 | 20 print 8.8 MOD 3.1 3 | 30 print 9 ^ .5 4 | 40 print . MOD 2 5 | -------------------------------------------------------------------------------- /basparser-samples/next.bas: -------------------------------------------------------------------------------- 1 | 10 for a = 1 to 2 2 | 20 for b = 1 to 3 3 | 30 x=x+1 : print "loop1:" x 4 | 40 next b,a 5 | 6 | 50 s = 2 7 | 60 for b% = 1 to 4 step s 8 | 70 x=x+1 : print "loop2:" x 9 | 80 next 10 | -------------------------------------------------------------------------------- /basparser-samples/ongoto.bas: -------------------------------------------------------------------------------- 1 | 10 on 1 goto 100,200,300 2 | 20 a=2:on a goto 100,200,300 3 | 30 on a+1 goto 100,300,300 4 | 5 | 100 print 100 : goto 20 6 | 200 print 200 : goto 30 7 | 300 print 300 8 | -------------------------------------------------------------------------------- /basparser-samples/print.bas: -------------------------------------------------------------------------------- 1 | 10 print 2 | 40 print "a" . "b" 1.2 "c" , "d" .3 "e" ; "f" 4. 3 | 50 print : end 4 | print 5 | -------------------------------------------------------------------------------- /basparser-samples/read-data.bas: -------------------------------------------------------------------------------- 1 | 10 read a, b$, c, d% 2 | 20 print a: print b$: print c: print d% 3 | 30 data 1, "2", 3.3, 4 4 | -------------------------------------------------------------------------------- /basparser-samples/rnd.bas: -------------------------------------------------------------------------------- 1 | 10 print "rnd:" rnd 2 | 20 print "rnd:" rnd 3 | 30 print "rnd(-1):" rnd(-1) 4 | 40 print "rnd(0):" rnd(0) 5 | 50 print "rnd(1):" rnd(1) 6 | -------------------------------------------------------------------------------- /basparser-samples/sort.bas: -------------------------------------------------------------------------------- 1 | 2 | rem unnumbered line 1 3 | 10 print 10 4 | 100 print 100 5 | 20 print 20 6 | 90 print 90 7 | 30 print 30 8 | rem unnumbered line 2 9 | 80 print 80 10 | 40 print 40 11 | 70 print 70 12 | 50 print 50 13 | 60 print 60 14 | rem unnumbered line 3 15 | -------------------------------------------------------------------------------- /basparser/generate.go: -------------------------------------------------------------------------------- 1 | //go:generate goyacc -o parser.go -p Input parser.y 2 | 3 | package basparser 4 | -------------------------------------------------------------------------------- /basparser/run.go: -------------------------------------------------------------------------------- 1 | package basparser 2 | 3 | import ( 4 | //"bufio" 5 | "io" 6 | "log" 7 | "os" 8 | "strconv" 9 | 10 | //"github.com/udhos/basgo/node" 11 | "github.com/udhos/basgo/baslex" 12 | ) 13 | 14 | func Run(label string, input io.Reader) (ParserResult, int, int) { 15 | d := os.Getenv("DEBUG") 16 | debug := d != "" 17 | if debug { 18 | level, err := strconv.Atoi(d) 19 | if err == nil { 20 | InputDebug = level 21 | } 22 | } 23 | log.Printf("%s: DEBUG=[%s] debug=%v level=%d", label, d, debug, InputDebug) 24 | 25 | inputBuf := baslex.NewInput(label, input) 26 | lex := NewInputLex(inputBuf, debug) 27 | Reset() 28 | status := InputParse(lex) 29 | 30 | return Result, status, lex.Errors() 31 | } 32 | -------------------------------------------------------------------------------- /basparser/token.go: -------------------------------------------------------------------------------- 1 | package basparser 2 | 3 | import ( 4 | "github.com/udhos/basgo/baslex" 5 | ) 6 | 7 | const ( 8 | parserTokenIDFirst = TkNull 9 | parserTokenIDLast = TkIdentifier 10 | ) 11 | 12 | func parserToken(lexToken int) int { 13 | if lexToken < baslex.TokenIDFirst || lexToken > baslex.TokenIDLast { 14 | return 0 15 | } 16 | return lexToken + parserTokenIDFirst 17 | } 18 | -------------------------------------------------------------------------------- /basparser/token_test.go: -------------------------------------------------------------------------------- 1 | package basparser 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/udhos/basgo/baslex" 7 | ) 8 | 9 | func TestTokenTable(t *testing.T) { 10 | 11 | parserTokenFirst := parserToken(baslex.TokenIDFirst) 12 | if parserTokenFirst != parserTokenIDFirst { 13 | t.Errorf("bad first parser token: lexIndex=%d found=%d expected=%d", baslex.TokenIDFirst, parserTokenFirst, parserTokenIDFirst) 14 | } 15 | 16 | parserTokenLast := parserToken(baslex.TokenIDLast) 17 | if parserTokenLast != parserTokenIDLast { 18 | t.Errorf("bad last parser token: lexIndex=%d found=%d expected=%d", baslex.TokenIDLast, parserTokenLast, parserTokenIDLast) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /build-new.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | gofmt -s -w . 4 | 5 | #revive ./... 6 | 7 | go mod tidy 8 | 9 | #go get golang.org/x/tools/cmd/goyacc 10 | go install modernc.org/goyacc@latest ;# supports %precedence 11 | #goyacc -o ./basparser/parser.go -p Input ./basparser/parser.y 12 | go generate ./basparser ;# see ./basparser/generate.go 13 | 14 | go test -failfast ./... 15 | 16 | go install ./... 17 | -------------------------------------------------------------------------------- /build-old.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | msg() { 4 | echo 2>&1 "$0": $@ 5 | } 6 | 7 | build() { 8 | local pkg="$1" 9 | 10 | gofmt -s -w "$pkg" 11 | go fix "$pkg" 12 | go vet "$pkg" 13 | 14 | #hash gosimple >/dev/null && gosimple "$pkg" 15 | #hash golint >/dev/null && golint "$pkg" 16 | #hash staticcheck >/dev/null && staticcheck "$pkg" 17 | 18 | go test -failfast "$pkg" 19 | go install -v "$pkg" 20 | } 21 | 22 | #go get golang.org/x/tools/cmd/goyacc 23 | go install modernc.org/goyacc@latest ;# supports %precedence 24 | #goyacc -o ./basparser/parser.go -p Input ./basparser/parser.y 25 | go generate ./basparser ;# see ./basparser/generate.go 26 | 27 | build ./basc 28 | build ./baslex 29 | build ./baslex-run 30 | build ./node 31 | build ./basparser 32 | build ./basparser-run 33 | build ./basgo 34 | build ./basgo-run 35 | build ./baslib/codepage 36 | build ./baslib/file 37 | build ./baslib 38 | 39 | msg "PLEASE STAND BY: tests for basgo-build may take some minutes" 40 | msg " for full testing output, run the command below:" 41 | msg " go test -test.v -failfast ./basgo-build" 42 | build ./basgo-build 43 | 44 | -------------------------------------------------------------------------------- /examples/animal.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(32);"ANIMAL" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT: PRINT: PRINT 4 | 40 PRINT "PLAY 'GUESS THE ANIMAL'" 5 | 45 PRINT 6 | 50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT." 7 | 60 PRINT 8 | 70 DIM A$(200) 9 | 80 FOR I=0 TO 3 10 | 90 READ A$(I) 11 | 100 NEXT I 12 | 110 N=VAL(A$(0)) 13 | 120 REM MAIN CONTROL SECTION 14 | 130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$ 15 | 140 IF A$="LIST" THEN 600 16 | 150 IF LEFT$(A$,1)<>"Y" THEN 120 17 | 160 K=1 18 | 170 GOSUB 390 19 | 180 IF LEN(A$(K))=0 THEN 999 20 | 190 IF LEFT$(A$(K),2)="\Q" THEN 170 21 | 200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2); 22 | 210 INPUT A$ 23 | 220 A$=LEFT$(A$,1) 24 | 230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120 25 | 240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$ 26 | 250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A" 27 | 260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2) 28 | 270 INPUT X$ 29 | 280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE "; 30 | 290 INPUT A$ 31 | 300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280 32 | 310 IF A$="Y" THEN B$="N" 33 | 320 IF A$="N" THEN B$="Y" 34 | 330 Z1=VAL(A$(0)) 35 | 340 A$(0)=STR$(Z1+2) 36 | 350 A$(Z1)=A$(K) 37 | 360 A$(Z1+1)="\A"+V$ 38 | 370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\" 39 | 380 GOTO 120 40 | 390 REM SUBROUTINE TO PRINT QUESTIONS 41 | 400 Q$=A$(K) 42 | 410 FOR Z=3 TO LEN(Q$) 43 | 415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);: NEXT Z 44 | 420 INPUT C$ 45 | 430 C$=LEFT$(C$,1) 46 | 440 IF C$<>"Y" AND C$<>"N" THEN 410 47 | 450 T$="\"+C$ 48 | 455 FOR X=3 TO LEN(Q$)-1 49 | 460 IF MID$(Q$,X,2)=T$ THEN 480 50 | 470 NEXT X 51 | 475 STOP 52 | 480 FOR Y=X+1 TO LEN(Q$) 53 | 490 IF MID$(Q$,Y,1)="\" THEN 510 54 | 500 NEXT Y 55 | 505 STOP 56 | 510 K=VAL(MID$(Q$,X+2,Y-X-2)) 57 | 520 RETURN 58 | 530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD" 59 | 600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:" 60 | 605 X=0 61 | 610 FOR I=1 TO 200 62 | 620 IF LEFT$(A$(I),2)<>"\A" THEN 650 63 | 624 PRINT TAB(15*X); 64 | 630 FOR Z=3 TO LEN(A$(I)) 65 | 640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);: NEXT Z 66 | 645 X=X+1: IF X=4 THEN X=0: PRINT 67 | 650 NEXT I 68 | 660 PRINT 69 | 670 PRINT 70 | 680 GOTO 120 71 | 999 END 72 | -------------------------------------------------------------------------------- /examples/bench1.bas: -------------------------------------------------------------------------------- 1 | 10 FOR A=1 TO 10 2 | 20 T1=TIMER 3 | 30 FOR X=1 TO 100000:NEXT 4 | 40 T2=TIMER 5 | 50 T(A)=T2-T1:?T(A) 6 | 60 NEXT:?"Average="(T(1)+T(2)+T(3)+T(4)+T(5)+T(6)+T(7)+T(8)+T(9)+T(10))/10 7 | -------------------------------------------------------------------------------- /examples/bench2.bas: -------------------------------------------------------------------------------- 1 | 5 screen 0 2 | 10 FOR A=1 TO 10 3 | 20 T1=TIMER 4 | 30 FOR YD=1 TO 23:FOR XD=1 TO 80:LOCATE YD,XD:?CHR$(asc("0")+A);:NEXT:NEXT 5 | 40 T2=TIMER 6 | 50 T(A)=T2-T1 7 | 60 NEXT:?"Average="(T(1)+T(2)+T(3)+T(4)+T(5)+T(6)+T(7)+T(8)+T(9)+T(10))/10 8 | 1000 print "hit q to exit" 9 | 1010 i$=input$(1) 10 | 1020 while i$<>"q" 11 | 1030 print "key:";i$;" asc:";asc(i$) 12 | 1040 print "hit q to exit" 13 | 1050 i$=input$(1) 14 | 1060 wend 15 | -------------------------------------------------------------------------------- /examples/cat.bas: -------------------------------------------------------------------------------- 1 | 100 c$=environ$("CAT") 2 | 110 print "will output contents of text file CAT=";c$ 3 | 120 if len(c$)<1 then print "please set the env var CAT": end 4 | 130 print "output:" 5 | 140 open c$ for input as 1 6 | 150 while not eof(1) 7 | 160 input #1, row$ 8 | 170 print row$ 9 | 180 count=count+1 10 | 190 wend 11 | 200 print count;"lines" 12 | -------------------------------------------------------------------------------- /examples/classicbasicgames/bagels.bas: -------------------------------------------------------------------------------- 1 | 5 PRINT TAB(33);"BAGELS" 2 | 10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY":PRINT:PRINT 3 | 15 REM *** BAGLES NUMBER GUESSING GAME 4 | 20 REM *** ORIGINAL SOURCE UNKNOWN BUT SUSPECTED TO BE 5 | 25 REM *** LAWRENCE HALL OF SCIENCE, U.C. BERKELY 6 | 30 DIM A1(6),A(3),B(3) 7 | 40 Y=0:T=255 8 | 50 PRINT:PRINT:PRINT 9 | 70 INPUT "WOULD YOU LIKE THE RULES (YES OR NO)";A$ 10 | 90 IF LEFT$(A$,1)="N" THEN 150 11 | 100 PRINT:PRINT "I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS" 12 | 110 PRINT "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:" 13 | 120 PRINT " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION" 14 | 130 PRINT " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION" 15 | 140 PRINT " BAGELS - NO DIGITS CORRECT" 16 | 150 FOR I=1 TO 3 17 | 160 A(I)=INT(10*RND(1)) 18 | 165 IF I-1=0 THEN 200 19 | 170 FOR J=1 TO I-1 20 | 180 IF A(I)=A(J) THEN 160 21 | 190 NEXT J 22 | 200 NEXT I 23 | 210 PRINT:PRINT "O.K. I HAVE A NUMBER IN MIND." 24 | 220 FOR I=1 TO 20 25 | 230 PRINT "GUESS #";I, 26 | 240 INPUT A$ 27 | 245 IF LEN(A$)<>3 THEN 630 28 | 250 FOR Z=1 TO 3:A1(Z)=ASC(MID$(A$,Z,1)):NEXT Z 29 | 260 FOR J=1 TO 3 30 | 270 IF A1(J)<48 THEN 300 31 | 280 IF A1(J)>57 THEN 300 32 | 285 B(J)=A1(J)-48 33 | 290 NEXT J 34 | 295 GOTO 320 35 | 300 PRINT "WHAT?" 36 | 310 GOTO 230 37 | 320 IF B(1)=B(2) THEN 650 38 | 330 IF B(2)=B(3) THEN 650 39 | 340 IF B(3)=B(1) THEN 650 40 | 350 C=0:D=0 41 | 360 FOR J=1 TO 2 42 | 370 IF A(J)<>B(J+1) THEN 390 43 | 380 C=C+1 44 | 390 IF A(J+1)<>B(J) THEN 410 45 | 400 C=C+1 46 | 410 NEXT J 47 | 420 IF A(1)<>B(3) THEN 440 48 | 430 C=C+1 49 | 440 IF A(3)<>B(1) THEN 460 50 | 450 C=C+1 51 | 460 FOR J=1 TO 3 52 | 470 IF A(J)<>B(J) THEN 490 53 | 480 D=D+1 54 | 490 NEXT J 55 | 500 IF D=3 THEN 680 56 | 505 IF C=0 THEN 545 57 | 520 FOR J=1 TO C 58 | 530 PRINT "PICO "; 59 | 540 NEXT J 60 | 545 IF D=0 THEN 580 61 | 550 FOR J=1 TO D 62 | 560 PRINT "FERMI "; 63 | 570 NEXT J 64 | 580 IF C+D<>0 THEN 600 65 | 590 PRINT "BAGELS"; 66 | 600 PRINT 67 | 605 NEXT I 68 | 610 PRINT "OH WELL." 69 | 615 PRINT "THAT'S TWNETY GUESSES. MY NUMBER WAS";100*A(1)+10*A(2)+A(3) 70 | 620 GOTO 700 71 | 630 PRINT "TRY GUESSING A THREE-DIGIT NUMBER.":GOTO 230 72 | 650 PRINT "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND" 73 | 660 PRINT "HAS NO TWO DIGITS THE SAME.":GOTO 230 74 | 680 PRINT "YOU GOT IT!!!":PRINT 75 | 690 Y=Y+1 76 | 700 INPUT "PLAY AGAIN (YES OR NO)";A$ 77 | 720 IF LEFT$(A$,1)="YES" THEN 150 78 | 730 IF Y=0 THEN 750 79 | 740 PRINT:PRINT "A";Y;"POINT BAGELS BUFF!!" 80 | 750 PRINT "HOPE YOU HAD FUN. BYE." 81 | 999 END 82 | -------------------------------------------------------------------------------- /examples/codepage.bas: -------------------------------------------------------------------------------- 1 | 100 screen 0 2 | 110 cls 3 | 120 print "printing all characters in current codepage" 4 | 130 for i=0 to 255 5 | 140 rem locate 23,1: print i;" " 6 | 150 locate i\16+3, 2*(i MOD 16)+1 7 | 160 if i<>12 then print chr$(i); 8 | 170 rem locate 22,1: print "hit any key -- or q to exit":i$=input$(1): locate 22,1: print space$(20); 9 | 180 rem if i$="q" then end 10 | 190 next 11 | 300 print:print 12 | 310 print "hit any key" 13 | 320 print input$(1) 14 | -------------------------------------------------------------------------------- /examples/colony/colony.bas: -------------------------------------------------------------------------------- 1 | 1000 screen 0 2 | 1010 key off 3 | 1100 planetmax=20 4 | 1110 dim planetx(20), planety(20) 5 | 1120 banditmax=20 6 | 1130 dim banditx(20), bandity(20), banditd(20), banditt(20) 7 | 1200 planets=5 8 | 1210 bandits=5 9 | 1300 fieldsizex=80 10 | 1310 fieldsizey=23 11 | 1400 for i=1 to planets 12 | 1410 gosub 30000 13 | 1420 next 14 | 1500 for i=1 to bandits 15 | 1510 gosub 30100 16 | 1520 next 17 | 9000 h=1:hd=.1:h1=1 18 | 10000 rem main game loop 19 | 10010 playerx=int(fieldsizex / 2) 20 | 10020 playery=fieldsizey - 2 21 | 10030 while cmd$<>"q" 22 | 10040 cmd$=inkey$ 23 | 10050 gosub 30200 24 | 10060 gosub 30300 25 | 10070 locate playery,playerx: print "T"; 26 | 10080 gosub 30400 27 | 10090 gosub 30500 28 | 10900 wend 29 | 10999 end 30 | 30000 planetx(i) = int(rnd * fieldsizex) + 1 31 | 30010 planety(i) = int(rnd * fieldsizey) + 1 32 | 30020 return 33 | 30100 banditx(i) = int(rnd * fieldsizex) + 1 34 | 30110 bandity(i) = int(rnd * fieldsizey) + 1 35 | 30120 banditd(i) = i/2 : rem lower is faster 36 | 30190 return 37 | 30200 for i=1 to planets 38 | 30210 locate planety(i), planetx(i): print "O"; 39 | 30220 next 40 | 30230 return 41 | 30300 for i=1 to bandits 42 | 30310 gosub 30800 43 | 30320 next 44 | 30330 return 45 | 30400 locate 24,20: print timer-t;" "; 46 | 30403 if timer-t79 then h1=-1 52 | 30450 h=h+h1 53 | 30455 locate 24,10: print h;" "; 54 | 30460 return 55 | 30500 for i=1 to bandits 56 | 30503 if timer-banditt(i)banditx(i) then gosub 30700:banditx(i)=banditx(i)+1:gosub 30800:goto 30590 62 | 30550 if planety(p)>bandity(i) then gosub 30700:bandity(i)=bandity(i)+1:gosub 30800:goto 30590 63 | 30590 next 64 | 30599 return 65 | 30600 min=1000 66 | 30610 for j=1 to planets 67 | 30620 d=abs(planety(j)-bandity(i))+abs(planetx(j)-banditx(i)) 68 | 30630 if d"q" 5 | 30 input "hit q to quit"; i$ 6 | 40 print "input=[";i$;"]" 7 | 50 wend 8 | -------------------------------------------------------------------------------- /examples/environ.bas: -------------------------------------------------------------------------------- 1 | 100 print "display environment table:" 2 | 110 n=1 3 | 120 e$=environ$(n) 4 | 130 if len(e$) < 1 then end 5 | 140 print "[";n;"]: ";e$ 6 | 150 n=n+1 7 | 160 goto 120 8 | -------------------------------------------------------------------------------- /examples/fn.bas: -------------------------------------------------------------------------------- 1 | 10 DEF FNA(X)=X*X 2 | 20 DEF FN B(X)=X*X*X 3 | 30 PRINT "fna(2)=";FNA(2) 4 | 40 PRINT "fn b(2)=";FN B(2) 5 | -------------------------------------------------------------------------------- /examples/game.bas: -------------------------------------------------------------------------------- 1 | 10 REM ** Number guessing game ** 2 | 20 REM 3 | 30 REM Adapted from: 4 | 40 REM https://github.com/skx/gobasic/blob/master/examples/99-game.bas 5 | 6 | 100 max = 200 7 | 110 b = RND * max 8 | 120 c% = b : b = c% : rem Drop decimal portion from random number 9 | 130 LET count=1 10 | 140 PRINT "I have picked a random number between 0 and "max", please guess it!" 11 | 12 | 200 REM -- Main Game Loop -- 13 | 210 PRINT "Enter your choice: "; 14 | 220 INPUT a 15 | 230 PRINT 16 | 240 IF b = a THEN 2000 ELSE PRINT "You were wrong: "; 17 | 250 IF a < b THEN PRINT "too low" 18 | 260 IF a > b THEN PRINT "too high" 19 | 270 LET count = count + 1 20 | 280 GOTO 200 21 | 22 | 2000 REM -- The End -- 23 | 2010 PRINT "You guessed my number!" 24 | 2020 PRINT "You took ", count, " attempts" 25 | 2030 END 26 | -------------------------------------------------------------------------------- /examples/goto.bas: -------------------------------------------------------------------------------- 1 | 10 goto 30 2 | 20 def fna(x)=x*x:print fna(2) 3 | 30 print 3 4 | -------------------------------------------------------------------------------- /examples/gqgames/23-match.bas: -------------------------------------------------------------------------------- 1 | 20 PRINT TAB(31);"23 MATCHES" 2 | 30 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 40 PRINT:PRINT:PRINT 4 | 80 PRINT " THIS IS A GAME CALLED '23 MATCHES'." 5 | 90 PRINT 6 | 100 PRINT "WHEN IT IS YOUR TURN, YOU MAY TAKE ONE, TWO, OR THREE" 7 | 110 PRINT "MATCHES. THE OBJECT OF THE GAME IS NOT TO HAVE TO TAKE" 8 | 120 PRINT "THE LAST MATCH." 9 | 130 PRINT 10 | 140 PRINT "LET'S FLIP A COIN TO SEE WHO GOES FIRST." 11 | 150 PRINT "IF IT COMES UP HEADS, I WILL WIN THE TOSS." 12 | 155 PRINT 13 | 160 REM 14 | 165 N = 23 15 | 170 Q = INT(2*RND(5)) 16 | 180 IF Q = 1 THEN 210 17 | 190 PRINT "TAILS! YOU GO FIRST. " 18 | 195 PRINT 19 | 200 GOTO 300 20 | 210 PRINT "HEADS! I WIN! HA! HA!" 21 | 220 PRINT "PREPARE TO LOSE, MEATBALL-NOSE!!" 22 | 230 PRINT 23 | 250 PRINT "I TAKE 2 MATCHES" 24 | 260 N = N -2 25 | 270 PRINT "THE NUMBER OF MATCHES IS NOW" N 26 | 280 PRINT 27 | 290 PRINT "YOUR TURN -- YOU MAY TAKE 1, 2 OR 3 MATCHES." 28 | 300 PRINT "HOW MANY DO YOU WISH TO REMOVE", 29 | 310 INPUT K 30 | 320 IF K > 3 THEN 430 31 | 330 IF K <= 0 THEN 430 32 | 340 N = N - K 33 | 350 PRINT "THERE ARE NOW";N;"MATCHES REMAINING." 34 | 351 IF N = 4 THEN 381 35 | 352 IF N = 3 THEN 383 36 | 353 IF N = 2 THEN 385 37 | 360 IF N <= 1 THEN 530 38 | 370 Z = 4 - K 39 | 372 GOTO 390 40 | 380 PRINT 41 | 381 Z = 3 42 | 382 GOTO 390 43 | 383 Z = 2 44 | 384 GOTO 390 45 | 385 Z = 1 46 | 390 PRINT "MY TURN ! I REMOVE" Z "MATCHES" 47 | 400 N = N - Z 48 | 410 IF N < = 1 THEN 470 49 | 420 GOTO 270 50 | 430 PRINT "VERY FUNNY! DUMMY!" 51 | 440 PRINT "DO YOU WANT TO PLAY OR GOOF AROUND?" 52 | 450 PRINT "NOW, HOW MANY MATCHES DO YOU WANT", 53 | 460 GOTO 310 54 | 470 PRINT 55 | 480 PRINT"YOU POOR BOOB! YOU TOOK THE LAST MATCH! I GOTCHA!!" 56 | 490 PRINT "HA ! HA ! I BEAT YOU !!!" 57 | 500 PRINT 58 | 510 PRINT "GOOD BYE LOSER!" 59 | 520 GOTO 560 60 | 530 PRINT "YOU WON, FLOPPY EARS !" 61 | 540 PRINT "THINK YOU'RE PRETTY SMART !" 62 | 550 PRINT "LETS PLAY AGAIN AND I'LL BLOW YOUR SHOES OFF !!" 63 | 560 STOP 64 | 570 END 65 | -------------------------------------------------------------------------------- /examples/gqgames/3dplot.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(30);"SLOTS" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT: PRINT: PRINT 4 | 5 DEF FNA(Z)=30*EXP(-Z*Z/100) 5 | 100 PRINT 6 | 110 FOR X=-30 TO 30 STEP 1.5 7 | 120 L=0 8 | 130 Y1=5*INT(SQR(900-X*X)/5) 9 | 140 FOR Y=Y1 TO -Y1 STEP -5 10 | 150 Z=INT(25+FNA(SQR(X*X+Y*Y))-.7*Y) 11 | 160 IF Z<=L THEN 190 12 | 170 L=Z 13 | 180 PRINT TAB(Z);"*"; 14 | 190 NEXT Y 15 | 200 PRINT 16 | 210 NEXT X 17 | 300 END -------------------------------------------------------------------------------- /examples/gqgames/animal.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(32);"ANIMAL" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT: PRINT: PRINT 4 | 40 PRINT "PLAY 'GUESS THE ANIMAL'" 5 | 45 PRINT 6 | 50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT." 7 | 60 PRINT 8 | 70 DIM A$(200) 9 | 80 FOR I=0 TO 3 10 | 90 READ A$(I) 11 | 100 NEXT I 12 | 110 N=VAL(A$(0)) 13 | 120 REM MAIN CONTROL SECTION 14 | 130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$ 15 | 140 IF A$="LIST" THEN 600 16 | 150 IF LEFT$(A$,1)<>"Y" THEN 120 17 | 160 K=1 18 | 170 GOSUB 390 19 | 180 IF LEN(A$(K))=0 THEN 999 20 | 190 IF LEFT$(A$(K),2)="\Q" THEN 170 21 | 200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2); 22 | 210 INPUT A$ 23 | 220 A$=LEFT$(A$,1) 24 | 230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120 25 | 240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$ 26 | 250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A" 27 | 260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2) 28 | 270 INPUT X$ 29 | 280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE "; 30 | 290 INPUT A$ 31 | 300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280 32 | 310 IF A$="Y" THEN B$="N" 33 | 320 IF A$="N" THEN B$="Y" 34 | 330 Z1=VAL(A$(0)) 35 | 340 A$(0)=STR$(Z1+2) 36 | 350 A$(Z1)=A$(K) 37 | 360 A$(Z1+1)="\A"+V$ 38 | 370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\" 39 | 380 GOTO 120 40 | 390 REM SUBROUTINE TO PRINT QUESTIONS 41 | 400 Q$=A$(K) 42 | 410 FOR Z=3 TO LEN(Q$) 43 | 415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1); 44 | 417 NEXT Z 45 | 420 INPUT C$ 46 | 430 C$=LEFT$(C$,1) 47 | 440 IF C$<>"Y" AND C$<>"N" THEN 410 48 | 450 T$="\"+C$ 49 | 455 FOR X=3 TO LEN(Q$)-1 50 | 460 IF MID$(Q$,X,2)=T$ THEN 480 51 | 470 NEXT X 52 | 475 STOP 53 | 480 FOR Y=X+1 TO LEN(Q$) 54 | 490 IF MID$(Q$,Y,1)="\" THEN 510 55 | 500 NEXT Y 56 | 505 STOP 57 | 510 K=VAL(MID$(Q$,X+2,Y-X-2)) 58 | 520 RETURN 59 | 530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD" 60 | 600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:" 61 | 605 X=0 62 | 610 FOR I=1 TO 200 63 | 620 IF LEFT$(A$(I),2)<>"\A" THEN 650 64 | 624 PRINT TAB(15*X); 65 | 630 FOR Z=3 TO LEN(A$(I)) 66 | 640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1); 67 | 642 NEXT Z 68 | 645 X=X+1: IF X=4 THEN X=0: PRINT 69 | 650 NEXT I 70 | 660 PRINT 71 | 670 PRINT 72 | 680 GOTO 120 73 | 999 END 74 | -------------------------------------------------------------------------------- /examples/gqgames/awari.bas: -------------------------------------------------------------------------------- 1 | 5 PRINT TAB(34);"AWARI" 2 | 7 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 10 DATA 0 4 | 15 DIM B(13),G(13),F(50):READ N 5 | 20 PRINT:PRINT:E=0 6 | 25 FOR I=0 TO 12:B(I)=3:NEXT I 7 | 30 C=0:F(N)=0:B(13)=0:B(6)=0 8 | 35 GOSUB 500 9 | 40 PRINT "YOUR MOVE";:GOSUB 110 10 | 45 IF E=0 THEN 80 11 | 50 IF M=H THEN GOSUB 100 12 | 55 IF E=0 THEN 80 13 | 60 PRINT "MY MOVE IS ";:GOSUB 800 14 | 65 IF E=0 THEN 80 15 | 70 IF M=H THEN PRINT ",";:GOSUB 800 16 | 75 IF E>0 THEN 35 17 | 80 PRINT:PRINT"GAME OVER" 18 | 85 D=B(6)-B(13):IF D<0 THEN PRINT "I WIN BY";-D;"POINTS":GOTO 20 19 | 90 N=N+1:IF D=0 THEN PRINT "DRAWN GAME":GOTO 20 20 | 95 PRINT "YOU WIN BY";D;"POINTS":GOTO 20 21 | 100 PRINT "AGAIN"; 22 | 110 INPUT M:IF M<7 THEN IF M>0 THEN M=M-1:GOTO 130 23 | 120 PRINT "ILLEGAL MOVE":GOTO 100 24 | 130 IF B(M)=0 THEN 120 25 | 140 H=6:GOSUB 200 26 | 150 GOTO 500 27 | 200 K=M:GOSUB 600 28 | 205 E=0:IF K>6 THEN K=K-7 29 | 210 C=C+1:IF C<9 THEN F(N)=F(N)*6+K 30 | 215 FOR I=0 TO 5:IF B(I)<>0 THEN 230 31 | 220 NEXT I 32 | 225 RETURN 33 | 230 FOR I=7 TO 12:IF B(I)<>0 THEN E=1:RETURN 34 | 235 NEXT I 35 | 500 PRINT:PRINT" "; 36 | 505 FOR I=12 TO 7 STEP -1:GOSUB 580 37 | 510 NEXT I 38 | 515 PRINT:I=13:GOSUB 580 39 | 520 PRINT " ";:PRINT B(6):PRINT " "; 40 | 525 FOR I=0 TO 5:GOSUB 580 41 | 530 NEXT I 42 | 535 PRINT:PRINT:RETURN 43 | 580 IF B(I)<10 THEN PRINT " "; 44 | 585 PRINT B(I);:RETURN 45 | 600 P=B(M):B(M)=0 46 | 605 FOR P=P TO 1 STEP -1:M=M+1:IF M>13 THEN M=M-14 47 | 610 B(M)=B(M)+1:NEXT P 48 | 615 IF B(M)=1 THEN IF M<>6 THEN IF M<>13 THEN IF B(12-M)<>0 THEN 625 49 | 620 RETURN 50 | 625 B(H)=B(H)+B(12-M)+1:B(M)=0:B(12-M)=0:RETURN 51 | 800 D=-99:H=13 52 | 805 FOR I=0 TO 13:G(I)=B(I):NEXT I 53 | 810 FOR J=7 TO 12:IF B(J)=0 THEN 885 54 | 815 G=0:M=J:GOSUB 600 55 | 820 FOR I=0 TO 5:IF B(I)=0 THEN 845 56 | 825 L=B(I)+I:R=0 57 | 830 IF L>13 THEN L=L-14:R=1:GOTO 830 58 | 835 IF B(L)=0 THEN IF L<>6 THEN IF L<>13 THEN R=B(12-L)+R 59 | 840 IF R>Q THEN Q=R 60 | 845 NEXT I 61 | 850 Q=B(13)-B(6)-Q:IF C>8 THEN 875 62 | 855 K=J:IF K>6 THEN K=K-7 63 | 860 FOR I=0 TO N-1:IF F(N)*6+K=INT(F(I)/6^(7-C)+.1) THEN Q=Q-2 64 | 870 NEXT I 65 | 875 FOR I=0 TO 13:B(I)=G(I):NEXT I 66 | 880 IF Q>=D THEN A=J:D=Q 67 | 885 NEXT J 68 | 890 M=A:PRINT CHR$(42+M);:GOTO 200 69 | 900 FOR I=0 TO N-1:PRINT B(I):NEXT I 70 | 999 END 71 | -------------------------------------------------------------------------------- /examples/gqgames/bagels.bas: -------------------------------------------------------------------------------- 1 | 5 PRINT TAB(33);"BAGELS" 2 | 10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY":PRINT:PRINT 3 | 15 REM *** BAGLES NUMBER GUESSING GAME 4 | 20 REM *** ORIGINAL SOURCE UNKNOWN BUT SUSPECTED TO BE 5 | 25 REM *** LAWRENCE HALL OF SCIENCE, U.C. BERKELY 6 | 30 DIM A1(6),A(3),B(3) 7 | 40 Y=0:T=255 8 | 50 PRINT:PRINT:PRINT 9 | 70 INPUT "WOULD YOU LIKE THE RULES (YES OR NO)";A$ 10 | 90 IF LEFT$(A$,1)="N" THEN 150 11 | 100 PRINT:PRINT "I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS" 12 | 110 PRINT "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:" 13 | 120 PRINT " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION" 14 | 130 PRINT " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION" 15 | 140 PRINT " BAGELS - NO DIGITS CORRECT" 16 | 150 FOR I=1 TO 3 17 | 160 A(I)=INT(10*RND(1)) 18 | 165 IF I-1=0 THEN 200 19 | 170 FOR J=1 TO I-1 20 | 180 IF A(I)=A(J) THEN 160 21 | 190 NEXT J 22 | 200 NEXT I 23 | 210 PRINT:PRINT "O.K. I HAVE A NUMBER IN MIND." 24 | 220 FOR I=1 TO 20 25 | 230 PRINT "GUESS #";I, 26 | 240 INPUT A$ 27 | 245 IF LEN(A$)<>3 THEN 630 28 | 250 FOR Z=1 TO 3:A1(Z)=ASC(MID$(A$,Z,1)):NEXT Z 29 | 260 FOR J=1 TO 3 30 | 270 IF A1(J)<48 THEN 300 31 | 280 IF A1(J)>57 THEN 300 32 | 285 B(J)=A1(J)-48 33 | 290 NEXT J 34 | 295 GOTO 320 35 | 300 PRINT "WHAT?" 36 | 310 GOTO 230 37 | 320 IF B(1)=B(2) THEN 650 38 | 330 IF B(2)=B(3) THEN 650 39 | 340 IF B(3)=B(1) THEN 650 40 | 350 C=0:D=0 41 | 360 FOR J=1 TO 2 42 | 370 IF A(J)<>B(J+1) THEN 390 43 | 380 C=C+1 44 | 390 IF A(J+1)<>B(J) THEN 410 45 | 400 C=C+1 46 | 410 NEXT J 47 | 420 IF A(1)<>B(3) THEN 440 48 | 430 C=C+1 49 | 440 IF A(3)<>B(1) THEN 460 50 | 450 C=C+1 51 | 460 FOR J=1 TO 3 52 | 470 IF A(J)<>B(J) THEN 490 53 | 480 D=D+1 54 | 490 NEXT J 55 | 500 IF D=3 THEN 680 56 | 505 IF C=0 THEN 545 57 | 520 FOR J=1 TO C 58 | 530 PRINT "PICO "; 59 | 540 NEXT J 60 | 545 IF D=0 THEN 580 61 | 550 FOR J=1 TO D 62 | 560 PRINT "FERMI "; 63 | 570 NEXT J 64 | 580 IF C+D<>0 THEN 600 65 | 590 PRINT "BAGELS"; 66 | 600 PRINT 67 | 605 NEXT I 68 | 610 PRINT "OH WELL." 69 | 615 PRINT "THAT'S TWNETY GUESSES. MY NUMBER WAS";100*A(1)+10*A(2)+A(3) 70 | 620 GOTO 700 71 | 630 PRINT "TRY GUESSING A THREE-DIGIT NUMBER.":GOTO 230 72 | 650 PRINT "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND" 73 | 660 PRINT "HAS NO TWO DIGITS THE SAME.":GOTO 230 74 | 680 PRINT "YOU GOT IT!!!":PRINT 75 | 690 Y=Y+1 76 | 700 INPUT "PLAY AGAIN (YES OR NO)";A$ 77 | 720 IF LEFT$(A$,1)="YES" THEN 150 78 | 730 IF Y=0 THEN 750 79 | 740 PRINT:PRINT "A";Y;"POINT BAGELS BUFF!!" 80 | 750 PRINT "HOPE YOU HAD FUN. BYE." 81 | 999 END 82 | -------------------------------------------------------------------------------- /examples/gqgames/bounce.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"BOUNCE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 90 DIM T(20) 5 | 100 PRINT "THIS SIMULATION LETS YOU SPECIFY THE INITIAL VELOCITY" 6 | 110 PRINT "OF A BALL THROWN STRAIGHT UP, AND THE COEFFICIENT OF" 7 | 120 PRINT "ELASTICITY OF THE BALL. PLEASE USE A DECIMAL FRACTION" 8 | 130 PRINT "COEFFICIENCY (LESS THAN 1)." 9 | 131 PRINT 10 | 132 PRINT "YOU ALSO SPECIFY THE TIME INCREMENT TO BE USED IN" 11 | 133 PRINT "'STROBING' THE BALL'S FLIGHT (TRY .1 INITIALLY)." 12 | 134 PRINT 13 | 135 INPUT "TIME INCREMENT (SEC)";S2 14 | 140 PRINT 15 | 150 INPUT "VELOCITY (FPS)";V 16 | 160 PRINT 17 | 170 INPUT "COEFFICIENT";C 18 | 180 PRINT 19 | 182 PRINT "FEET" 20 | 184 PRINT 21 | 186 S1=INT(70/(V/(16*S2))) 22 | 190 FOR I=1 TO S1 23 | 200 T(I)=V*C^(I-1)/16 24 | 210 NEXT I 25 | 220 FOR H=INT(-16*(V/32)^2+V^2/32+.5) TO 0 STEP -.5 26 | 221 IF INT(H)<>H THEN 225 27 | 222 PRINT H; 28 | 225 L=0 29 | 230 FOR I=1 TO S1 30 | 240 FOR T=0 TO T(I) STEP S2 31 | 245 L=L+S2 32 | 250 IF ABS(H-(.5*(-32)*T^2+V*C^(I-1)*T))>.25 THEN 270 33 | 260 PRINT TAB(L/S2);"0"; 34 | 270 NEXT T 35 | 275 T=T(I+1)/2 36 | 276 IF -16*T^2+V*C^(I-1)*T3 THEN PRINT "INPUT 1, 2, OR 3!": GOTO 170 20 | 190 ON T GOTO 200, 210, 200 21 | 200 P1=.65: P2=.55: P3=.5: P4=.5: GOTO 230 22 | 210 P1=.99: P2=.77: P3=.43: P4=.01: GOTO 230 23 | 220 P1=.95: P2=.75: P3=.45: P4=.05 24 | 230 U=RND(1) 25 | 240 IF U>=P1 THEN PRINT "BULLSEYE!! 40 POINTS!":B=40: GOTO 290 26 | 250 IF U>=P2 THEN PRINT "30-POINT ZONE!":B=30: GOTO 290 27 | 260 IF U>=P3 THEN PRINT "20-POINT ZONE":B=20: GOTO 290 28 | 270 IF U>=P4 THEN PRINT "WHEW! 10 POINTS.":B=10: GOTO 290 29 | 280 PRINT "MISSED THE TARGET! TOO BAD.": B=0 30 | 290 S(I)=S(I)+B: PRINT "TOTAL SCORE =";S(I): NEXT I 31 | 300 FOR I=1 TO N 32 | 310 IF S(I)>=200 THEN M=M+1: W(M)=I 33 | 320 NEXT I 34 | 330 IF M=0 THEN 150 35 | 340 PRINT: PRINT "WE HAVE A WINNER!!": PRINT 36 | 350 FOR I=1 TO M: PRINT A$(W(I));" SCORED";S(W(I));"POINTS.": NEXT I 37 | 360 PRINT: PRINT "THANKS FOR THE GAME.": END 38 | -------------------------------------------------------------------------------- /examples/gqgames/bunny.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"BUNNY" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT: PRINT: PRINT 4 | 100 REM "BUNNY" FROM AHL'S 'BASIC COMPUTER GAMES' 5 | 110 REM 6 | 120 FOR I=0 TO 4: READ B(I): NEXT I 7 | 130 GOSUB 260 8 | 140 L=64: REM ASCII LETTER CODE... 9 | 150 REM 10 | 160 PRINT 11 | 170 READ X: IF X<0 THEN 160 12 | 175 IF X>128 THEN 240 13 | 180 PRINT TAB(X);: READ Y 14 | 190 FOR I=X TO Y: J=I-5*INT(I/5) 15 | 200 PRINT CHR$(L+B(J)); 16 | 210 NEXT I 17 | 220 GOTO 170 18 | 230 REM 19 | 240 GOSUB 260: GOTO 450 20 | 250 REM 21 | 260 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I 22 | 270 RETURN 23 | 280 REM 24 | 290 DATA 2,21,14,14,25 25 | 300 DATA 1,2,-1,0,2,45,50,-1,0,5,43,52,-1,0,7,41,52,-1 26 | 310 DATA 1,9,37,50,-1,2,11,36,50,-1,3,13,34,49,-1,4,14,32,48,-1 27 | 320 DATA 5,15,31,47,-1,6,16,30,45,-1,7,17,29,44,-1,8,19,28,43,-1 28 | 330 DATA 9,20,27,41,-1,10,21,26,40,-1,11,22,25,38,-1,12,22,24,36,-1 29 | 340 DATA 13,34,-1,14,33,-1,15,31,-1,17,29,-1,18,27,-1 30 | 350 DATA 19,26,-1,16,28,-1,13,30,-1,11,31,-1,10,32,-1 31 | 360 DATA 8,33,-1,7,34,-1,6,13,16,34,-1,5,12,16,35,-1 32 | 370 DATA 4,12,16,35,-1,3,12,15,35,-1,2,35,-1,1,35,-1 33 | 380 DATA 2,34,-1,3,34,-1,4,33,-1,6,33,-1,10,32,34,34,-1 34 | 390 DATA 14,17,19,25,28,31,35,35,-1,15,19,23,30,36,36,-1 35 | 400 DATA 14,18,21,21,24,30,37,37,-1,13,18,23,29,33,38,-1 36 | 410 DATA 12,29,31,33,-1,11,13,17,17,19,19,22,22,24,31,-1 37 | 420 DATA 10,11,17,18,22,22,24,24,29,29,-1 38 | 430 DATA 22,23,26,29,-1,27,29,-1,28,29,-1,4096 39 | 440 REM 40 | 450 END 41 | -------------------------------------------------------------------------------- /examples/gqgames/buzzword.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(26);"BUZZWORD GENERATOR" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 40 PRINT "THIS PROGRAM PRINTS HIGHLY ACCEPTABLE PHRASES IN" 5 | 50 PRINT "'EDUCATOR-SPEAK'THAT YOU CAN WORK INTO REPORTS" 6 | 60 PRINT "AND SPEECHES. WHENEVER A QUESTION MARK IS PRINTED," 7 | 70 PRINT "TYPE A 'Y' FOR ANOTHER PHRASE OR 'N' TO QUIT." 8 | 80 PRINT:PRINT:PRINT "HERE'S THE FIRST PHRASE:" 9 | 90 DIM A$(40) 10 | 100 FOR I=1 TO 39 : READ A$(I) : NEXT I 11 | 110 PRINT A$(INT(13*RND(1)+1));" "; 12 | 120 PRINT A$(INT(13*RND(1)+14));" "; 13 | 130 PRINT A$(INT(13*RND(1)+27)) : PRINT 14 | 150 INPUT Y$ : IF Y$="Y" THEN 110 ELSE GOTO 999 15 | 200 DATA "ABILITY","BASAL","BEHAVIORAL","CHILD-CENTERED" 16 | 210 DATA "DIFFERENTIATED","DISCOVERY","FLEXIBLE","HETEROGENEOUS" 17 | 220 DATA "HOMOGENEOUS","MANIPULATIVE","MODULAR","TAVISTOCK" 18 | 230 DATA "INDIVIDUALIZED","LEARNING","EVALUATIVE","OBJECTIVE" 19 | 240 DATA "COGNITIVE","ENRICHMENT","SCHEDULING","HUMANISTIC" 20 | 250 DATA "INTEGRATED","NON-GRADED","TRAINING","VERTICAL AGE" 21 | 260 DATA "MOTIVATIONAL","CREATIVE","GROUPING","MODIFICATION" 22 | 270 DATA "ACCOUNTABILITY","PROCESS","CORE CURRICULUM","ALGORITHM" 23 | 280 DATA "PERFORMANCE","REINFORCEMENT","OPEN CLASSROOM","RESOURCE" 24 | 290 DATA "STRUCTURE","FACILITY","ENVIRONMENT" 25 | 999 PRINT "COME BACK WHEN YOU NEED HELP WITH ANOTHER REPORT!":END 26 | -------------------------------------------------------------------------------- /examples/gqgames/calendar.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(32);"CALENDAR" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 REM VALUES FOR 1979 - SEE NOTES 5 | 110 DIM M(12) 6 | 120 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I 7 | 130 D=1: REM 1979 STARTS ON MONDAY (0=SUN, -1=MON, -2=TUES...) 8 | 140 S=0 9 | 150 REM READ DAYS OF EACH MONTH 10 | 160 FOR N=0 TO 12: READ M(N): NEXT N 11 | 170 REM 12 | 180 FOR N=1 TO 12 13 | 190 PRINT: PRINT: S=S+M(N-1) 14 | 200 PRINT "**";S;TAB(7); 15 | 210 FOR I=1 TO 18: PRINT "*";: NEXT I 16 | 220 ON N GOTO 230,240,250,260,270,280,290,300,310,320,330,340 17 | 230 PRINT " JANUARY ";: GOTO 350 18 | 240 PRINT " FEBRUARY";: GOTO 350 19 | 250 PRINT " MARCH ";: GOTO 350 20 | 260 PRINT " APRIL ";: GOTO 350 21 | 270 PRINT " MAY ";: GOTO 350 22 | 280 PRINT " JUNE ";: GOTO 350 23 | 290 PRINT " JULY ";: GOTO 350 24 | 300 PRINT " AUGUST ";: GOTO 350 25 | 310 PRINT "SEPTEMBER";: GOTO 350 26 | 320 PRINT " OCTOBER ";: GOTO 350 27 | 330 PRINT " NOVEMBER";: GOTO 350 28 | 340 PRINT " DECEMBER"; 29 | 350 FOR I=1 TO 18: PRINT "*";: NEXT I 30 | 360 PRINT 365-S;"**"; 31 | 370 REM 366-S; ON LEAP YEARS 32 | 380 PRINT CHR$(10): PRINT " S M T W"; 33 | 390 PRINT " T F S" 34 | 400 PRINT 35 | 410 FOR I=1 TO 59: PRINT "*";: NEXT I 36 | 420 REM 37 | 430 FOR W=1 TO 6 38 | 440 PRINT CHR$(10) 39 | 450 PRINT TAB(4) 40 | 460 REM 41 | 470 FOR G=1 TO 7 42 | 480 D=D+1 43 | 490 D2=D-S 44 | 500 IF D2>M(N) THEN 580 45 | 510 IF D2>0 THEN PRINT D2; 46 | 520 PRINT TAB(4+8*G); 47 | 530 NEXT G 48 | 540 REM 49 | 550 IF D2=M(N) THEN 590 50 | 560 NEXT W 51 | 570 REM 52 | 580 D=D-G 53 | 590 NEXT N 54 | 600 REM 55 | 610 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I 56 | 620 DATA 0,31,28,31,30,31,30,31,31,30,31,30,31 57 | 630 REM 0,31,29, ..., ON LEAP YEARS 58 | 640 END 59 | -------------------------------------------------------------------------------- /examples/gqgames/change.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"CHANGE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 5 PRINT:PRINT:PRINT 4 | 6 PRINT "I, YOUR FRIENDLY MICROCOMPUTER, WILL DETERMINE" 5 | 8 PRINT "THE CORRECT CHANGE FOR ITEMS COSTING UP TO $100." 6 | 9 PRINT:PRINT 7 | 10 PRINT "COST OF ITEM";:INPUT A:PRINT "AMOUNT OF PAYMENT";:INPUT P 8 | 20 C=P-A:M=C:IF C<>0 THEN 90 9 | 25 PRINT "CORRECT AMOUNT, THANK YOU." 10 | 30 GOTO 400 11 | 90 IF C>0 THEN 120 12 | 95 PRINT "SORRY, YOU HAVE SHORT-CHANGED ME $";A-P 13 | 100 GOTO 10 14 | 120 PRINT "YOUR CHANGE, $";C 15 | 130 D=INT(C/10) 16 | 140 IF D=0 THEN 155 17 | 150 PRINT D;"TEN DOLLAR BILL(S)" 18 | 155 C=M-(D*10) 19 | 160 E=INT(C/5) 20 | 170 IF E=0 THEN 185 21 | 180 PRINT E;"FIVE DOLLARS BILL(S)" 22 | 185 C=M-(D*10+E*5) 23 | 190 F=INT(C) 24 | 200 IF F=0 THEN 215 25 | 210 PRINT F;"ONE DOLLAR BILL(S)" 26 | 215 C=M-(D*10+E*5+F) 27 | 220 C=C*100 28 | 225 N=C 29 | 230 G=INT(C/50) 30 | 240 IF G=0 THEN 255 31 | 250 PRINT G;"ONE HALF DOLLAR(S)" 32 | 255 C=N-(G*50) 33 | 260 H=INT(C/25) 34 | 270 IF H=0 THEN 285 35 | 280 PRINT H;"QUARTER(S)" 36 | 285 C=N-(G*50+H*25) 37 | 290 I=INT(C/10) 38 | 300 IF I=0 THEN 315 39 | 310 PRINT I;"DIME(S)" 40 | 315 C=N-(G*50+H*25+I*10) 41 | 320 J=INT(C/5) 42 | 330 IF J=0 THEN 345 43 | 340 PRINT J;"NICKEL(S)" 44 | 345 C=N-(G*50+H*25+I*10+J*5) 45 | 350 K=INT(C+.5) 46 | 360 IF K=0 THEN 380 47 | 370 PRINT K;"PENNY(S)" 48 | 380 PRINT "THANK YOU, COME AGAIN." 49 | 390 PRINT:PRINT 50 | 400 GOTO 10 51 | 410 END 52 | -------------------------------------------------------------------------------- /examples/gqgames/chemist.bas: -------------------------------------------------------------------------------- 1 | 3 PRINT TAB(33);"CHEMIST" 2 | 6 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 8 PRINT:PRINT:PRINT 4 | 10 PRINT "THE FICTITIOUS CHECMICAL KRYPTOCYANIC ACID CAN ONLY BE" 5 | 20 PRINT "DILUTED BY THE RATIO OF 7 PARTS WATER TO 3 PARTS ACID." 6 | 30 PRINT "IF ANY OTHER RATIO IS ATTEMPTED, THE ACID BECOMES UNSTABLE" 7 | 40 PRINT "AND SOON EXPLODES. GIVEN THE AMOUNT OF ACID, YOU MUST" 8 | 50 PRINT "DECIDE WHO MUCH WATER TO ADD FOR DILUTION. IF YOU MISS" 9 | 60 PRINT "YOU FACE THE CONSEQUENCES." 10 | 100 A=INT(RND(1)*50) 11 | 110 W=7*A/3 12 | 120 PRINT A;"LITERS OF KRYPTOCYANIC ACID. HOW MUCH WATER"; 13 | 130 INPUT R 14 | 140 D=ABS(W-R) 15 | 150 IF D>W/20 THEN 200 16 | 160 PRINT " GOOD JOB! YOU MAY BREATHE NOW, BUT DON'T INHALE THE FUMES!" 17 | 170 PRINT 18 | 180 GOTO 100 19 | 200 PRINT " SIZZLE! YOU HAVE JUST BEEN DESALINATED INTO A BLOB" 20 | 210 PRINT " OF QUIVERING PROTOPLASM!" 21 | 220 T=T+1 22 | 230 IF T=9 THEN 260 23 | 240 PRINT " HOWEVER, YOU MAY TRY AGAIN WITH ANOTHER LIFE." 24 | 250 GOTO 100 25 | 260 PRINT " YOUR 9 LIVES ARE USED, BUT YOU WILL BE LONG REMEMBERED FOR" 26 | 270 PRINT " YOUR CONTRIBUTIONS TO THE FIELD OF COMIC BOOK CHEMISTRY." 27 | 280 END 28 | -------------------------------------------------------------------------------- /examples/gqgames/chief.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(30) "CHIEF" 2 | 4 PRINT TAB(15) "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT:PRINT:PRINT 4 | 10 PRINT "I AM CHIEF NUMBERS FREEK, THE GREAT INDIAN MATH GOD." 5 | 20 PRINT "ARE YOU READY TO TAKE THE TEST YOU CALLED ME OUT FOR"; 6 | 30 INPUT A$ 7 | 40 IF A$="YES" THEN 60 8 | 50 PRINT "SHUT UP, PALE FACE WITH WISE TONGUE." 9 | 60 PRINT " TAKE A NUMBER AND ADD 3. DIVIDE THIS NUMBER BY 5 AND" 10 | 70 PRINT "MULTIPLY BY 8. DIVIDE BY 5 AND ADD THE SAME. SUBTRACT 1." 11 | 80 PRINT " WHAT DO YOU HAVE"; 12 | 90 INPUT B 13 | 100 LET C = (B+1-5)*5/8*5-3 14 | 110 PRINT "I BET YOUR NUMBER WAS" C". AM I RIGHT"; 15 | 120 INPUT D$ 16 | 130 IF D$="YES" THEN 500 17 | 140 PRINT "WHAT WAS YOUR ORIGINAL NUMBER"; 18 | 150 INPUT K 19 | 155 LET F=K+3 20 | 160 LET G=F/5 21 | 170 LET H=G*8 22 | 180 LET I=H/5+5 23 | 190 LET J=I-1 24 | 200 PRINT "SO YOU THINK YOU'RE SO SMART, EH?" 25 | 210 PRINT "NOW WATCH." 26 | 230 PRINT K"PLUS 3 EQUALS"F". THIS DIVIDED BY 5 EQUALS"G";" 27 | 240 PRINT "THIS TIMES 8 EQUALS"H". IF WE DIVIDE BY 5 AND ADD 5," 28 | 250 PRINT "WE GET"I", WHICH, MINUS 1, EQUALS"J"." 29 | 260 PRINT "NOW DO YOU BELIEVE ME"; 30 | 270 INPUT Z$ 31 | 290 IF Z$="YES" THEN 500 32 | 295 PRINT "YOU HAVE MADE ME MAD!!!" 33 | 300 PRINT "THERE MUST BE A GREAT LIGHTNING BOLT!" 34 | 310 PRINT:PRINT 35 | 330 FOR X=30 TO 22 STEP -1 36 | 340 PRINT TAB(X) "X X" 37 | 350 NEXT X 38 | 360 PRINT TAB(21) "X XXX" 39 | 370 PRINT TAB(20) "X X" 40 | 380 PRINT TAB(19) "XX X" 41 | 390 FOR Y=20 TO 13 STEP -1 42 | 400 PRINT TAB(Y) "X X" 43 | 410 NEXT Y 44 | 420 PRINT TAB(12) "XX" 45 | 430 PRINT TAB(11) "X" 46 | 440 PRINT TAB(10) "*" 47 | 450 PRINT:PRINT"#########################":PRINT 48 | 470 PRINT "I HOPE YOU BELIEVE ME NOW, FOR YOUR SAKE!!" 49 | 480 GOTO 520 50 | 510 PRINT "BYE!!!" 51 | 520 END 52 | -------------------------------------------------------------------------------- /examples/gqgames/craps.bas: -------------------------------------------------------------------------------- 1 | 5 PRINT TAB(33);"CRAPS" 2 | 10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 12 PRINT:PRINT:PRINT 4 | 15 LET R=0 5 | 20 PRINT"2,3,12 ARE LOSERS; 4,5,6,8,9,10 ARE POINTS; 7,11 ARE NATURAL WINNERS." 6 | 21 LET T=1 7 | 22 PRINT "PICK A NUMBER AND INPUT TO ROLL DICE"; 8 | 23 INPUT Z 9 | 24 LET X=(RND(0)) 10 | 25 LET T =T+1 11 | 26 IF T<=Z GOTO 24 12 | 27 PRINT"INPUT THE AMOUNT OF YOUR WAGER."; 13 | 28 INPUT F 14 | 30 PRINT "I WILL NOW THROW THE DICE" 15 | 40 LET E=INT(7*RND(1)) 16 | 41 LET S=INT(7*RND(1)) 17 | 42 LET X=E+S 18 | 50 IF X=7 GOTO 180 19 | 55 IF X=11 GOTO 180 20 | 60 IF X=1 GOTO 40 21 | 62 IF X=2 GOTO 195 22 | 65 IF X=0 GOTO 40 23 | 70 IF X=2 GOTO 200 24 | 80 IF X=3 GOTO 200 25 | 90 IF X=12 GOTO 200 26 | 125 IF X=5 GOTO 220 27 | 130 IF X =6 GOTO 220 28 | 140 IF X=8 GOTO 220 29 | 150 IF X=9 GOTO 220 30 | 160 IF X =10 GOTO 220 31 | 170 IF X=4 GOTO 220 32 | 180 PRINT X "- NATURAL....A WINNER!!!!" 33 | 185 PRINT X"PAYS EVEN MONEY, YOU WIN"F"DOLLARS" 34 | 190 GOTO 210 35 | 195 PRINT X"- SNAKE EYES....YOU LOSE." 36 | 196 PRINT "YOU LOSE"F "DOLLARS." 37 | 197 LET F=0-F 38 | 198 GOTO 210 39 | 200 PRINT X " - CRAPS...YOU LOSE." 40 | 205 PRINT "YOU LOSE"F"DOLLARS." 41 | 206 LET F=0-F 42 | 210 LET R= R+F 43 | 211 GOTO 320 44 | 220 PRINT X "IS THE POINT. I WILL ROLL AGAIN" 45 | 230 LET H=INT(7*RND(1)) 46 | 231 LET Q=INT(7*RND(1)) 47 | 232 LET O=H+Q 48 | 240 IF O=1 GOTO 230 49 | 250 IF O=7 GOTO 290 50 | 255 IF O=0 GOTO 230 51 | 260 IF O=X GOTO 310 52 | 270 PRINT O " - NO POINT. I WILL ROLL AGAIN" 53 | 280 GOTO 230 54 | 290 PRINT O "- CRAPS. YOU LOSE." 55 | 291 PRINT "YOU LOSE $"F 56 | 292 F=0-F 57 | 293 GOTO 210 58 | 300 GOTO 320 59 | 310 PRINT X"- A WINNER.........CONGRATS!!!!!!!!" 60 | 311 PRINT X "AT 2 TO 1 ODDS PAYS YOU...LET ME SEE..."2*F"DOLLARS" 61 | 312 LET F=2*F 62 | 313 GOTO 210 63 | 320 PRINT " IF YOU WANT TO PLAY AGAIN PRINT 5 IF NOT PRINT 2"; 64 | 330 INPUT M 65 | 331 IF R<0 GOTO 334 66 | 332 IF R>0 GOTO 336 67 | 333 IF R=0 GOTO 338 68 | 334 PRINT "YOU ARE NOW UNDER $";-R 69 | 335 GOTO 340 70 | 336 PRINT "YOU ARE NOW AHEAD $";R 71 | 337 GOTO 340 72 | 338 PRINT "YOU ARE NOW EVEN AT 0" 73 | 340 IF M=5 GOTO 27 74 | 341 IF R<0 GOTO 350 75 | 342 IF R>0 GOTO 353 76 | 343 IF R=0 GOTO 355 77 | 350 PRINT"TOO BAD, YOU ARE IN THE HOLE. COME AGAIN." 78 | 351 GOTO 360 79 | 353 PRINT"CONGRATULATIONS---YOU CAME OUT A WINNER. COME AGAIN!" 80 | 354 GOTO 360 81 | 355 PRINT"CONGRATULATIONS---YOU CAME OUT EVEN, NOT BAD FOR AN AMATEUR" 82 | 360 END 83 | -------------------------------------------------------------------------------- /examples/gqgames/depthchg.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(30);"DEPTH CHARGE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 20 INPUT "DIMENSION OF SEARCH AREA";G: PRINT 5 | 30 N=INT(LOG(G)/LOG(2))+1 6 | 40 PRINT "YOU ARE THE CAPTAIN OF THE DESTROYER USS COMPUTER" 7 | 50 PRINT "AN ENEMY SUB HAS BEEN CAUSING YOU TROUBLE. YOUR" 8 | 60 PRINT "MISSION IS TO DESTROY IT. YOU HAVE";N;"SHOTS." 9 | 70 PRINT "SPECIFY DEPTH CHARGE EXPLOSION POINT WITH A" 10 | 80 PRINT "TRIO OF NUMBERS -- THE FIRST TWO ARE THE" 11 | 90 PRINT "SURFACE COORDINATES; THE THIRD IS THE DEPTH." 12 | 100 PRINT : PRINT "GOOD LUCK !": PRINT 13 | 110 A=INT(G*RND(1)) : B=INT(G*RND(1)) : C=INT(G*RND(1)) 14 | 120 FOR D=1 TO N : PRINT : PRINT "TRIAL #";D; : INPUT X,Y,Z 15 | 130 IF ABS(X-A)+ABS(Y-B)+ABS(Z-C)=0 THEN 300 16 | 140 GOSUB 500 : PRINT : NEXT D 17 | 200 PRINT : PRINT "YOU HAVE BEEN TORPEDOED! ABANDON SHIP!" 18 | 210 PRINT "THE SUBMARINE WAS AT";A;",";B;",";C : GOTO 400 19 | 300 PRINT : PRINT "B O O M ! ! YOU FOUND IT IN";D;"TRIES!" 20 | 400 PRINT : PRINT: INPUT "ANOTHER GAME (Y OR N)";A$ 21 | 410 IF A$="Y" THEN 100 22 | 420 PRINT "OK. HOPE YOU ENJOYED YOURSELF." : GOTO 600 23 | 500 PRINT "SONAR REPORTS SHOT WAS "; 24 | 510 IF Y>B THEN PRINT "NORTH"; 25 | 520 IF YA THEN PRINT "EAST"; 27 | 540 IF XB OR X<>A THEN PRINT " AND"; 29 | 560 IF Z>C THEN PRINT " TOO LOW." 30 | 570 IF ZLEN(A$) THEN PRINT "!";:GOTO 50 15 | 34 PRINT MID$(A$,C,1); 16 | 36 C=C+1 17 | 50 NEXT A 18 | 53 IF M=Q THEN 60 19 | 55 PRINT TAB(R*M+(R-N)/2); 20 | 56 NEXT M 21 | 60 PRINT 22 | 70 NEXT N 23 | 83 IF X<>1 THEN 95 24 | 85 X=R-2:Y=1:Z=-2 25 | 90 GOTO 20 26 | 95 NEXT L 27 | 99 END 28 | -------------------------------------------------------------------------------- /examples/gqgames/dice.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(34);"DICE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT:PRINT:PRINT 4 | 10 DIM F(12) 5 | 20 REM DANNY FREIDUS 6 | 30 PRINT "THIS PROGRAM SIMULATES THE ROLLING OF A" 7 | 40 PRINT "PAIR OF DICE." 8 | 50 PRINT "YOU ENTER THE NUMBER OF TIMES YOU WANT THE COMPUTER TO" 9 | 60 PRINT "'ROLL' THE DICE. WATCH OUT, VERY LARGE NUMBERS TAKE" 10 | 70 PRINT "A LONG TIME. IN PARTICULAR, NUMBERS OVER 5000." 11 | 80 FOR Q=1 TO 12 12 | 90 F(Q)=0 13 | 100 NEXT Q 14 | 110 PRINT:PRINT "HOW MANY ROLLS"; 15 | 120 INPUT X 16 | 130 FOR S=1 TO X 17 | 140 A=INT(6*RND(1)+1) 18 | 150 B=INT(6*RND(1)+1) 19 | 160 R=A+B 20 | 170 F(R)=F(R)+1 21 | 180 NEXT S 22 | 185 PRINT 23 | 190 PRINT "TOTAL SPOTS","NUMBER OF TIMES" 24 | 200 FOR V=2 TO 12 25 | 210 PRINT V,F(V) 26 | 220 NEXT V 27 | 221 PRINT 28 | 222 PRINT:PRINT "TRY AGAIN"; 29 | 223 INPUT Z$ 30 | 224 IF Z$="YES" THEN 80 31 | 240 END 32 | -------------------------------------------------------------------------------- /examples/gqgames/evenwin2.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(28);"GAME OF EVEN WINS" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT 4 | 4 INPUT "DO YOU WANT INSTRUCTIONS (YES OR NO)";A$:PRINT 5 | 5 IF A$="NO" THEN 20 6 | 6 PRINT "THE GAME IS PLAYED AS FOLLOWS:":PRINT 7 | 7 PRINT "AT THE BEGINNING OF THE GAME, A RANDOM NUMBER OF CHIPS ARE" 8 | 8 PRINT "PLACED ON THE BOARD. THE NUMBER OF CHIPS ALWAYS STARTS" 9 | 9 PRINT "AS AN ODD NUMBER. ON EACH TURN, A PLAYER MUST TAKE ONE," 10 | 10 PRINT "TWO, THREE, OR FOUR CHIPS. THE WINNER IS THE PLAYER WHO" 11 | 11 PRINT "FINISHES WITH A TOTAL NUMBER OF CHIPS THAT IS EVEN." 12 | 12 PRINT "THE COMPUTER STARTS OUT KNOWING ONLY THE RULES OF THE" 13 | 13 PRINT "GAME. IT GRADUALLY LEARNS TO PLAY WELL. IT SHOULD BE" 14 | 14 PRINT "DIFFICULT TO BEAT THE COMPUTER AFTER TWENTY GAMES IN A ROW." 15 | 15 PRINT "TRY IT!!!!": PRINT 16 | 16 PRINT "TO QUIT AT ANY TIME, TYPE A '0' AS YOUR MOVE.": PRINT 17 | 20 DIM R(1,5) 18 | 25 L=0: B=0 19 | 30 FOR I=0 TO 5 20 | 40 R(1,I)=4 21 | 50 R(0,I)=4 22 | 60 NEXT I 23 | 70 A=0: B=0 24 | 90 P=INT((13*RND(1)+9)/2)*2+1 25 | 100 IF P=1 THEN 530 26 | 110 PRINT "THERE ARE";P;"CHIPS ON THE BOARD." 27 | 120 E1=E 28 | 130 L1=L 29 | 140 E=(A/2-INT(A/2))*2 30 | 150 L=INT((P/6-INT(P/6))*6+.5) 31 | 160 IF R(E,L)>=P THEN 320 32 | 170 M=R(E,L) 33 | 180 IF M<=0 THEN 370 34 | 190 P=P-M 35 | 200 IF M=1 THEN 510 36 | 210 PRINT "COMPUTER TAKES";M;"CHIPS LEAVING";P;"... YOUR MOVE"; 37 | 220 B=B+M 38 | 230 INPUT M 39 | 240 M=INT(M) 40 | 250 IF M<1 THEN 450 41 | 260 IF M>4 THEN 460 42 | 270 IF M>P THEN 460 43 | 280 IF M=P THEN 360 44 | 290 P=P-M 45 | 300 A=A+M 46 | 310 GOTO 100 47 | 320 IF P=1 THEN 550 48 | 330 PRINT "COMPUTER TAKES";P;"CHIPS." 49 | 340 R(E,L)=P 50 | 350 B=B+P 51 | 360 IF B/2=INT(B/2) THEN 420 52 | 370 PRINT "GAME OVER ... YOU WIN!!!": PRINT 53 | 390 IF R(E,L)=1 THEN 480 54 | 400 R(E,L)=R(E,L)-1 55 | 410 GOTO 70 56 | 420 PRINT "GAME OVER ... I WIN!!!": PRINT 57 | 430 GOTO 70 58 | 450 IF M=0 THEN 570 59 | 460 PRINT M;"IS AN ILLEGAL MOVE ... YOUR MOVE"; 60 | 470 GOTO 230 61 | 480 IF R(E1,L1)=1 THEN 70 62 | 490 R(E1,L1)=R(E1,L1)-1 63 | 500 GOTO 70 64 | 510 PRINT "COMPUTER TAKES 1 CHIP LEAVING";P;"... YOUR MOVE"; 65 | 520 GOTO 220 66 | 530 PRINT "THERE IS 1 CHIP ON THE BOARD." 67 | 540 GOTO 120 68 | 550 PRINT "COMPUTER TAKES 1 CHIP." 69 | 560 GOTO 340 70 | 570 END 71 | -------------------------------------------------------------------------------- /examples/gqgames/flipflop.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(32);"FLIPFLOP" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT 4 | 10 REM *** CREATED BY MICHAEL CASS 5 | 15 DIM A$(20) 6 | 20 PRINT "THE OBJECT OF THIS PUZZLE IS TO CHANGE THIS:" 7 | 30 PRINT 8 | 40 PRINT "X X X X X X X X X X" 9 | 50 PRINT 10 | 60 PRINT "TO THIS:" 11 | 70 PRINT 12 | 80 PRINT "O O O O O O O O O O" 13 | 90 PRINT 14 | 100 PRINT "BY TYPING THE NUMBER CORRESPONDING TO THE POSITION OF THE" 15 | 110 PRINT "LETTER ON SOME NUMBERS, ONE POSITION WILL CHANGE, ON" 16 | 120 PRINT "OTHERS, TWO WILL CHANGE. TO RESET LINE TO ALL X'S, TYPE 0" 17 | 130 PRINT "(ZERO) AND TO START OVER IN THE MIDDLE OF A GAME, TYPE " 18 | 140 PRINT "11 (ELEVEN)." 19 | 170 PRINT 20 | 180 REM 21 | 190 Q=RND(1) 22 | 200 PRINT "HERE IS THE STARTING LINE OF X'S." 23 | 210 PRINT 24 | 220 C=0 25 | 230 PRINT "1 2 3 4 5 6 7 8 9 10" 26 | 240 PRINT "X X X X X X X X X X" 27 | 250 PRINT 28 | 260 REM 29 | 270 FOR X=1 TO 10 30 | 280 A$(X)="X" 31 | 290 NEXT X 32 | 300 GOTO 320 33 | 310 PRINT "ILLEGAL ENTRY--TRY AGAIN." 34 | 320 PRINT "INPUT THE NUMBER"; 35 | 330 INPUT N 36 | 340 IF N<>INT(N) THEN 310 37 | 350 IF N=11 THEN 180 38 | 360 IF N>11 THEN 310 39 | 370 IF N=0 THEN 230 40 | 380 IF M=N THEN 510 41 | 390 M=N 42 | 400 IF A$(N)="O" THEN 480 43 | 410 A$(N)="O" 44 | 420 R=TAN(Q+N/Q-N)-SIN(Q/N)+336*SIN(8*N) 45 | 430 N=R-INT(R) 46 | 440 N=INT(10*N) 47 | 450 IF A$(N)="O" THEN 480 48 | 460 A$(N)="O" 49 | 470 GOTO 610 50 | 480 A$(N)="X" 51 | 490 IF M=N THEN 420 52 | 500 GOTO 610 53 | 510 IF A$(N)="O" THEN 590 54 | 520 A$(N)="O" 55 | 530 R=.592*(1/TAN(Q/N+Q))/SIN(N*2+Q)-COS(N) 56 | 540 N=R-INT(R) 57 | 550 N=INT(10*N) 58 | 560 IF A$(N)="O" THEN 590 59 | 570 A$(N)="O" 60 | 580 GOTO 610 61 | 590 A$(N)="X" 62 | 600 IF M=N THEN 530 63 | 610 PRINT "1 2 3 4 5 6 7 8 9 10" 64 | 620 FOR Z=1 TO 10: PRINT A$(Z);" ";: NEXT Z 65 | 630 C=C+1 66 | 640 PRINT 67 | 650 FOR Z=1 TO 10 68 | 660 IF A$(Z)<>"O" THEN 320 69 | 670 NEXT Z 70 | 680 IF C>12 THEN 710 71 | 690 PRINT "VERY GOOD. YOU GUESSED IT IN ONLY";C;"GUESSES." 72 | 700 GOTO 720 73 | 710 PRINT "TRY HARDER NEXT TIME. IT TOOK YOU";C;"GUESSES." 74 | 720 PRINT "DO YOU WANT TO TRY ANOTHER PUZZLE"; 75 | 730 INPUT X$ 76 | 740 IF LEFT$(X$,1)="N" THEN 780 77 | 760 PRINT 78 | 770 GOTO 180 79 | 780 END 80 | -------------------------------------------------------------------------------- /examples/gqgames/gomoko.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"GOMOKO" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT:PRINT:PRINT 4 | 8 DIM A(19,19) 5 | 10 PRINT "WELCOME TO THE ORIENTAL GAME OF GOMOKO." 6 | 20 PRINT: PRINT "THE GAME IS PLAYED ON AN N BY N GRID OF A SIZE" 7 | 30 PRINT "THAT YOU SPECIFY. DURING YOUR PLAY, YOU MAY COVER ONE GRID" 8 | 40 PRINT "INTERSECTION WITH A MARKER. THE OBJECT OF THE GAME IS TO GET" 9 | 50 PRINT "5 ADJACENT MARKERS IN A ROW -- HORIZONTALLY, VERTICALLY, OR" 10 | 60 PRINT "DIAGONALLY. ON THE BOARD DIAGRAM, YOUR MOVES ARE MARKED" 11 | 70 PRINT "WITH A '1' AND THE COMPUTER MOVES WITH A '2'." 12 | 80 PRINT: PRINT "THE COMPUTER DOES NOT KEEP TRACK OF WHO HAS WON." 13 | 90 PRINT "TO END THE GAME, TYPE -1,-1 FOR YOUR MOVE.": PRINT 14 | 110 PRINT "WHAT IS YOUR BOARD SIZE (MIN 7/ MAX 19)";: INPUT N 15 | 115 IF N>6 THEN 117 16 | 116 GOTO 120 17 | 117 IF N<20 THEN 210 18 | 120 PRINT "I SAID, THE MINIMUM IS 7, THE MAXIMUM IS 19.": GOTO 110 19 | 210 FOR I=1 TO N:FOR J=1 TO N: A(I,J)=0: NEXT J: NEXT I 20 | 300 PRINT: PRINT "WE ALTERNATE MOVES. YOU GO FIRST...": PRINT 21 | 310 PRINT "YOUR PLAY (I,J)";: INPUT I,J 22 | 315 PRINT 23 | 320 IF I=-1 THEN 980 24 | 330 X=I: Y=J: GOSUB 910: IF L=1 THEN 410 25 | 340 PRINT "ILLEGAL MOVE. TRY AGAIN...": GOTO 310 26 | 410 IF A(I,J)=0 THEN 440 27 | 420 PRINT "SQUARE OCCUPIED. TRY AGAIN...": GOTO 310 28 | 440 A(I,J)=1 29 | 500 REM *** COMPUTER TRIES AN INTELLIGENT MOVE *** 30 | 510 FOR E=-1 TO 1: FOR F=-1 TO 1: IF E+F-E*F=0 THEN 590 31 | 540 X=I+F: Y=J+F: GOSUB 910 32 | 570 IF L=0 THEN 590 33 | 580 IF A(X,Y)=1 THEN 710 34 | 590 NEXT F: NEXT E 35 | 600 REM *** COMPUTER TRIES A RANDOM MOVE *** 36 | 610 X=INT(N*RND(1)+1): Y=INT(N*RND(1)+1): GOSUB 910: IF L=0 THEN 610 37 | 650 IF A(X,Y)<>0 THEN 610 38 | 660 A(X,Y)=2: GOSUB 810: GOTO 310 39 | 710 X=I-E: Y=J-F: GOSUB 910 40 | 750 IF L=0 THEN 610 41 | 760 GOTO 650 42 | 800 REM *** PRINT THE BOARD *** 43 | 810 FOR I=1 TO N: FOR J=1 TO N: PRINT A(I,J); 44 | 840 NEXT J: PRINT: NEXT I: PRINT: RETURN 45 | 910 L=1: IF X<1 THEN 970 46 | 920 IF X>N THEN 970 47 | 930 IF Y<1 THEN 970 48 | 940 IF Y>N THEN 970 49 | 950 RETURN 50 | 970 L=0: RETURN 51 | 980 PRINT: PRINT "THANKS FOR THE GAME!!" 52 | 985 PRINT "PLAY AGAIN (1 FOR YES, 0 FOR NO)";: INPUT Q 53 | 990 IF Q=1 THEN 110 54 | 999 END 55 | -------------------------------------------------------------------------------- /examples/gqgames/guess.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"GUESS" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 4 PRINT "THIS IS A NUMBER GUESSING GAME. I'LL THINK" 5 | 5 PRINT "OF A NUMBER BETWEEN 1 AND ANY LIMIT YOU WANT." 6 | 6 PRINT "THEN YOU HAVE TO GUESS WHAT IT IS." 7 | 7 PRINT 8 | 8 PRINT "WHAT LIMIT DO YOU WANT"; 9 | 9 INPUT L 10 | 10 PRINT 11 | 11 L1=INT(LOG(L)/LOG(2))+1 12 | 12 PRINT "I'M THINKING OF A NUMBER BETWEEN 1 AND";L 13 | 13 G=1 14 | 14 PRINT "NOW YOU TRY TO GUESS WHAT IT IS." 15 | 15 M=INT(L*RND(1)+1) 16 | 20 INPUT N 17 | 21 IF N>0 THEN 25 18 | 22 GOSUB 70 19 | 23 GOTO 1 20 | 25 IF N=M THEN 50 21 | 30 G=G+1 22 | 31 IF N>M THEN 40 23 | 32 PRINT "TOO LOW. TRY A BIGGER ANSWER." 24 | 33 GOTO 20 25 | 40 PRINT "TOO HIGH. TRY A SMALLER ANSWER." 26 | 42 GOTO 20 27 | 50 PRINT "THAT'S IT! YOU GOT IT IN";G;"TRIES." 28 | 52 IF G89 THEN 250 36 | 430 IF B<1 THEN 230 37 | 440 S=S+1 38 | 442 IF S<6 THEN 450 39 | 444 PRINT:PRINT "BOOM !!!! YOU HAVE JUST BEEN DESTROYED "; 40 | 446 PRINT "BY THE ENEMY." : PRINT : PRINT : PRINT : GOTO 495 41 | 450 B2=2*B/57.3 : I=R*SIN(B2) : X=T-I : E=INT(X) 42 | 460 IF ABS(E)<100 THEN 320 43 | 470 IF E>100 THEN 290 44 | 480 GOTO 270 45 | 490 PRINT : PRINT : PRINT "TOTAL ROUNDS EXPENDED WERE:";S1 46 | 492 IF S1>18 THEN 495 47 | 493 PRINT "NICE SHOOTING !!" : GOTO 500 48 | 495 PRINT "BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!" 49 | 500 PRINT : INPUT "TRY AGAIN (Y OR N)";Z$ 50 | 510 IF Z$="Y" THEN 170 51 | 520 PRINT:PRINT "OK. RETURN TO BASE CAMP." 52 | 999 END 53 | -------------------------------------------------------------------------------- /examples/gqgames/hilo.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(34);"HI LO" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 PRINT "THIS IS THE GAME OF HI LO.":PRINT 5 | 110 PRINT "YOU WILL HAVE 6 TRIES TO GUESS THE AMOUNT OF MONEY IN THE" 6 | 120 PRINT "HI LO JACKPOT, WHICH IS BETWEEN 1 AND 100 DOLLARS. IF YOU" 7 | 130 PRINT "GUESS THE AMOUNT, YOU WIN ALL THE MONEY IN THE JACKPOT!" 8 | 140 PRINT "THEN YOU GET ANOTHER CHANCE TO WIN MORE MONEY. HOWEVER," 9 | 150 PRINT "IF YOU DO NOT GUESS THE AMOUNT, THE GAME ENDS.":PRINT 10 | 160 R=0 11 | 170 B=0:PRINT 12 | 180 Y=INT(100*RND(1)+1) 13 | 200 PRINT "YOUR GUESS"; 14 | 210 INPUT A 15 | 220 B=B+1 16 | 230 IF A=Y THEN 300 17 | 240 IF A>Y THEN 270 18 | 250 PRINT "YOUR GUESS IS TOO LOW.":GOTO 280 19 | 270 PRINT "YOUR GUESS IS TOO HIGH." 20 | 280 PRINT:IF B<6 THEN 200 21 | 290 PRINT "YOU BLEW IT...TOO BAD...THE NUMBER WAS";Y 22 | 295 R=0:GOTO 350 23 | 300 PRINT "GOT IT!!!!!!!!!! YOU WIN";Y;"DOLLARS." 24 | 310 R=R+Y 25 | 320 PRINT "YOUR TOTAL WINNINGS ARE NOW";R;"DOLLARS." 26 | 350 PRINT:PRINT "PLAY AGAIN (YES OR NO)"; 27 | 360 INPUT A$:IF A$="YES" THEN 170 28 | 380 PRINT:PRINT "SO LONG. HOPE YOU ENJOYED YOURSELF!!!" 29 | 390 END 30 | -------------------------------------------------------------------------------- /examples/gqgames/hurkle.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"HURKLE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 110 N=5 5 | 120 G=10 6 | 210 PRINT 7 | 220 PRINT "A HURKLE IS HIDING ON A";G;"BY";G;"GRID. HOMEBASE" 8 | 230 PRINT "ON THE GRID IS POINT 0,0 IN THE SOUTHWEST CORNER," 9 | 235 PRINT "AND ANY POINT ON THE GRID IS DESIGNATED BY A" 10 | 240 PRINT "PAIR OF WHOLE NUMBERS SEPERATED BY A COMMA. THE FIRST" 11 | 245 PRINT "NUMBER IS THE HORIZONTAL POSITION AND THE SECOND NUMBER" 12 | 246 PRINT "IS THE VERTICAL POSITION. YOU MUST TRY TO" 13 | 250 PRINT "GUESS THE HURKLE'S GRIDPOINT. YOU GET";N;"TRIES." 14 | 260 PRINT "AFTER EACH TRY, I WILL TELL YOU THE APPROXIMATE" 15 | 270 PRINT "DIRECTION TO GO TO LOOK FOR THE HURKLE." 16 | 280 PRINT 17 | 285 A=INT(G*RND(1)) 18 | 286 B=INT(G*RND(1)) 19 | 310 FOR K=1 TO N 20 | 320 PRINT "GUESS #";K; 21 | 330 INPUT X,Y 22 | 340 IF ABS(X-A)+ABS(Y-B)=0 THEN 500 23 | 350 REM PRINT INFO 24 | 360 GOSUB 610 25 | 370 PRINT 26 | 380 NEXT K 27 | 410 PRINT 28 | 420 PRINT "SORRY, THAT'S";N;"GUESSES." 29 | 430 PRINT "THE HURKLE IS AT ";A;",";B 30 | 440 PRINT 31 | 450 PRINT "LET'S PLAY AGAIN, HURKLE IS HIDING." 32 | 460 PRINT 33 | 470 GOTO 285 34 | 500 REM 35 | 510 PRINT 36 | 520 PRINT "YOU FOUND HIM IN";K;"GUESSES!" 37 | 540 GOTO 440 38 | 610 PRINT "GO "; 39 | 620 IF Y=B THEN 670 40 | 630 IF YL THEN 480 16 | 460 PRINT "TOO LOW. TRY A HIGHER LETTER.": GOTO 410 17 | 480 PRINT "TOO HIGH. TRY A LOWER LETTER.": GOTO 410 18 | 500 PRINT: PRINT "YOU GOT IT IN";G;"GUESSES!!" 19 | 504 IF G<=5 THEN 508 20 | 506 PRINT "BUT IT SHOULDN'T TAKE MORE THAN 5 GUESSES!": GOTO 515 21 | 508 PRINT "GOOD JOB !!!!!" 22 | 510 FOR N=1 TO 15: PRINT CHR$(7);: NEXT N 23 | 515 PRINT 24 | 520 PRINT "LET'S PLAN AGAIN....." 25 | 530 GOTO 310 26 | 999 END 27 | -------------------------------------------------------------------------------- /examples/gqgames/life.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(34);"LIFE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 8 PRINT "ENTER YOUR PATTERN:" 5 | 9 X1=1: Y1=1: X2=24: Y2=70 6 | 10 DIM A(24,70),B$(24) 7 | 20 C=1 8 | 30 INPUT B$(C) 9 | 40 IF B$(C)="DONE" THEN B$(C)="": GOTO 80 10 | 50 IF LEFT$(B$(C),1)="." THEN B$(C)=" "+RIGHT$(B$(C),LEN(B$(C))-1) 11 | 60 C=C+1 12 | 70 GOTO 30 13 | 80 C=C-1: L=0 14 | 90 FOR X=1 TO C-1 15 | 100 IF LEN(B$(X))>L THEN L=LEN(B$(X)) 16 | 110 NEXT X 17 | 120 X1=11-C/2 18 | 130 Y1=33-L/2 19 | 140 FOR X=1 TO C 20 | 150 FOR Y=1 TO LEN(B$(X)) 21 | 160 IF MID$(B$(X),Y,1)<>" " THEN A(X1+X,Y1+Y)=1:P=P+1 22 | 170 NEXT Y 23 | 180 NEXT X 24 | 200 PRINT:PRINT:PRINT 25 | 210 PRINT "GENERATION:";G,"POPULATION:";P;: IF I9 THEN PRINT "INVALID!"; 26 | 215 X3=24:Y3=70:X4=1: Y4=1: P=0 27 | 220 G=G+1 28 | 225 FOR X=1 TO X1-1: PRINT: NEXT X 29 | 230 FOR X=X1 TO X2 30 | 240 PRINT 31 | 250 FOR Y=Y1 TO Y2 32 | 253 IF A(X,Y)=2 THEN A(X,Y)=0:GOTO 270 33 | 256 IF A(X,Y)=3 THEN A(X,Y)=1:GOTO 261 34 | 260 IF A(X,Y)<>1 THEN 270 35 | 261 PRINT TAB(Y);"*"; 36 | 262 IF XX4 THEN X4=X 38 | 266 IF YY4 THEN Y4=Y 40 | 270 NEXT Y 41 | 290 NEXT X 42 | 295 FOR X=X2+1 TO 24: PRINT: NEXT X 43 | 299 X1=X3: X2=X4: Y1=Y3: Y2=Y4 44 | 301 IF X1<3 THEN X1=3:I9=-1 45 | 303 IF X2>22 THEN X2=22:I9=-1 46 | 305 IF Y1<3 THEN Y1=3:I9=-1 47 | 307 IF Y2>68 THEN Y2=68:I9=-1 48 | 309 P=0 49 | 500 FOR X=X1-1 TO X2+1 50 | 510 FOR Y=Y1-1 TO Y2+1 51 | 520 C=0 52 | 530 FOR I=X-1 TO X+1 53 | 540 FOR J=Y-1 TO Y+1 54 | 550 IF A(I,J)=1 OR A(I,J)=2 THEN C=C+1 55 | 560 NEXT J 56 | 570 NEXT I 57 | 580 IF A(X,Y)=0 THEN 610 58 | 590 IF C<3 OR C>4 THEN A(X,Y)=2: GOTO 600 59 | 595 P=P+1 60 | 600 GOTO 620 61 | 610 IF C=3 THEN A(X,Y)=3:P=P+1 62 | 620 NEXT Y 63 | 630 NEXT X 64 | 635 X1=X1-1:Y1=Y1-1:X2=X2+1:Y2=Y2+1 65 | 637 INPUT "PRESS RETURN TO CONTINUE";A12 66 | 640 GOTO 210 67 | 650 END -------------------------------------------------------------------------------- /examples/gqgames/life2.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"LIFE2" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 7 DIM N(6,6),K(18),A(16),X(2),Y(2) 5 | 8 DATA 3,102,103,120,130,121,112,111,12 6 | 9 DATA 21,30,1020,1030,1011,1021,1003,1002,1012 7 | 10 FOR M=1 TO 18: READ K(M): NEXT M 8 | 13 DATA -1,0,1,0,0,-1,0,1,-1,-1,1,-1,-1,1,1,1 9 | 14 FOR O1= 1 TO 16: READ A(O1): NEXT O1 10 | 20 GOTO 500 11 | 50 FOR J=1 TO 5 12 | 51 FOR K=1 TO 5 13 | 55 IF N(J,K)>99 THEN GOSUB 200 14 | 60 NEXT K 15 | 65 NEXT J 16 | 90 K=0: M2=0: M3=0 17 | 99 FOR J=0 TO 6: PRINT 18 | 100 FOR K=0 TO 6 19 | 101 IF J<>0 THEN IF J<>6 THEN 105 20 | 102 IF K=6 THEN PRINT 0;: GOTO 125 21 | 103 PRINT K;: GOTO 120 22 | 105 IF K<>0 THEN IF K<>6 THEN 110 23 | 106 IF J=6 THEN PRINT 0: GOTO 126 24 | 107 PRINT J;: GOTO 120 25 | 110 GOSUB 300 26 | 120 NEXT K 27 | 125 NEXT J 28 | 126 RETURN 29 | 200 B=1: IF N(J,K)>999 THEN B=10 30 | 220 FOR O1= 1 TO 15 STEP 2 31 | 230 N(J+A(O1),K+A(O1+1))=N(J+A(O1),K+A(O1+1))+B 32 | 231 NEXT O1 33 | 239 RETURN 34 | 300 IF N(J,K)<3 THEN 399 35 | 305 FOR O1=1 TO 18 36 | 310 IF N(J,K)=K(O1) THEN 350 37 | 315 NEXT O1 38 | 320 GOTO 399 39 | 350 IF O1>9 THEN 360 40 | 351 N(J,K)=100: M2=M2+1: PRINT " * "; 41 | 355 RETURN 42 | 360 N(J,K)=1000: M3=M3+1: PRINT " # "; 43 | 365 RETURN 44 | 399 N(J,K)=0: PRINT " ";: RETURN 45 | 500 PRINT TAB(10);"U.B. LIFE GAME" 46 | 505 M2=0: M3=0 47 | 510 FOR J=1 TO 5 48 | 511 FOR K=1 TO 5 49 | 515 N(J,K)=0 50 | 516 NEXT K 51 | 517 NEXT J 52 | 519 FOR B=1 TO 2: P1=3: IF B=2 THEN P1=30 53 | 520 PRINT:PRINT "PLAYER";B;" - 3 LIVE PIECES." 54 | 535 FOR K1=1 TO 3: GOSUB 700 55 | 540 N(X(B),Y(B))=P1: NEXT K1 56 | 542 NEXT B 57 | 559 GOSUB 90 58 | 560 PRINT: GOSUB 50 59 | 570 IF M2=0 THEN IF M3=0 THEN 574 60 | 571 IF M3=0 THEN B=1: GOTO 575 61 | 572 IF M2=0 THEN B=2: GOTO 575 62 | 573 GOTO 580 63 | 574 PRINT: PRINT "A DRAW": STOP 64 | 575 PRINT: PRINT "PLAYER";B;"IS THE WINNER": STOP 65 | 580 FOR B=1 TO 2: PRINT: PRINT: PRINT "PLAYER";B;: GOSUB 700 66 | 581 IF B=99 THEN 560 67 | 582 NEXT B 68 | 586 N(X(1),Y(1))=100: N(X(2),Y(2))=1000 69 | 596 GOTO 560 70 | 700 PRINT "X,Y":PRINT"XXXXXX";CHR$(13);"$$$$$$";CHR$(13);"&&&&&&"; 71 | 701 PRINT CHR$(13);: INPUT Y(B),X(B) 72 | 705 IF X(B)<=5 THEN IF X(B)>0 THEN 708 73 | 706 GOTO 750 74 | 708 IF Y(B)<=5 THEN IF Y(B)>0 THEN 715 75 | 710 GOTO 750 76 | 715 IF N(X(B),Y(B))<>0 THEN 750 77 | 720 IF B=1 THEN RETURN 78 | 725 IF X(1)=X(2) THEN IF Y(1)=Y(2) THEN 740 79 | 730 RETURN 80 | 740 PRINT "SAME COORD. SET TO 0" 81 | 741 N(X(B)+1,Y(B)+1)=0: B=99: RETURN 82 | 750 PRINT "ILLEGAL COORDS. RETYPE": GOTO 700 83 | 999 END 84 | -------------------------------------------------------------------------------- /examples/gqgames/litquiz.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(25);"LITERATURE QUIZ" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 5 R=0 5 | 10 PRINT "TEST YOUR KNOWLEDGE OF CHILDREN'S LITERATURE." 6 | 12 PRINT: PRINT "THIS IS A MULTIPLE-CHOICE QUIZ." 7 | 13 PRINT "TYPE A 1, 2, 3, OR 4 AFTER THE QUESTION MARK." 8 | 15 PRINT: PRINT "GOOD LUCK!": PRINT: PRINT 9 | 40 PRINT "IN PINOCCHIO, WHAT WAS THE NAME OF THE CAT" 10 | 42 PRINT "1)TIGGER, 2)CICERO, 3)FIGARO, 4)GUIPETTO"; 11 | 43 INPUT A: IF A=3 THEN 46 12 | 44 PRINT "SORRY...FIGARO WAS HIS NAME.": GOTO 50 13 | 46 PRINT "VERY GOOD! HERE'S ANOTHER." 14 | 47 R=R+1 15 | 50 PRINT: PRINT 16 | 51 PRINT "FROM WHOSE GARDEN DID BUGS BUNNY STEAL THE CARROTS?" 17 | 52 PRINT "1)MR. NIXON'S, 2)ELMER FUDD'S, 3)CLEM JUDD'S, 4)STROMBOLI'S"; 18 | 53 INPUT A: IF A=2 THEN 56 19 | 54 PRINT "TOO BAD...IT WAS ELMER FUDD'S GARDEN.": GOTO 60 20 | 56 PRINT "PRETTY GOOD!" 21 | 57 R=R+1 22 | 60 PRINT: PRINT 23 | 61 PRINT "IN THE WIZARD OF OS, DOROTHY'S DOG WAS NAMED" 24 | 62 PRINT "1)CICERO, 2)TRIXIA, 3)KING, 4)TOTO"; 25 | 63 INPUT A: IF A=4 THEN 66 26 | 64 PRINT "BACK TO THE BOOKS,...TOTO WAS HIS NAME.": GOTO 70 27 | 66 PRINT "YEA! YOU'RE A REAL LITERATURE GIANT." 28 | 67 R=R+1 29 | 70 PRINT:PRINT 30 | 71 PRINT "WHO WAS THE FAIR MAIDEN WHO ATE THE POISON APPLE" 31 | 72 PRINT "1)SLEEPING BEAUTY, 2)CINDERELLA, 3)SNOW WHITE, 4)WENDY"; 32 | 73 INPUT A: IF A=3 THEN 76 33 | 74 PRINT "OH, COME ON NOW...IT WAS SNOW WHITE." 34 | 75 GOTO 80 35 | 76 PRINT "GOOD MEMORY!" 36 | 77 R=R+1 37 | 80 PRINT:PRINT 38 | 85 IF R=4 THEN 100 39 | 90 IF R<2 THEN 200 40 | 92 PRINT "NOT BAD, BUT YOU MIGHT SPEND A LITTLE MORE TIME" 41 | 94 PRINT "READING THE NURSERY GREATS." 42 | 96 STOP 43 | 100 PRINT "WOW! THAT'S SUPER! YOU REALLY KNOW YOUR NURSERY" 44 | 110 PRINT "YOUR NEXT QUIZ WILL BE ON 2ND CENTURY CHINESE" 45 | 120 PRINT "LITERATURE (HA, HA, HA)" 46 | 130 STOP 47 | 200 PRINT "UGH. THAT WAS DEFINITELY NOT TOO SWIFT. BACK TO" 48 | 205 PRINT "NURSERY SCHOOL FOR YOU, MY FRIEND." 49 | 999 END 50 | -------------------------------------------------------------------------------- /examples/gqgames/love.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"LOVE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 20 PRINT "A TRIBUTE TO THE GREAT AMERICAN ARTIST, ROBERT INDIANA." 5 | 30 PRINT "HIS GREATEST WORK WILL BE REPRODUCED WITH A MESSAGE OF" 6 | 40 PRINT "YOUR CHOICE UP TO 60 CHARACTERS. IF YOU CAN'T THINK OF" 7 | 50 PRINT "A MESSAGE, SIMPLE TYPE THE WORD 'LOVE'": PRINT 8 | 60 INPUT "YOUR MESSAGE, PLEASE";A$: L=LEN(A$) 9 | 70 DIM T$(120): FOR I=1 TO 10: PRINT: NEXT I 10 | 100 FOR J=0 TO INT(60/L) 11 | 110 FOR I=1 TO L 12 | 120 T$(J*L+I)=MID$(A$,I,1) 13 | 130 NEXT I: NEXT J 14 | 140 C=0 15 | 200 A1=1: P=1: C=C+1: IF C=37 THEN 999 16 | 205 PRINT 17 | 210 READ A: A1=A1+A: IF P=1 THEN 300 18 | 240 FOR I=1 TO A: PRINT " ";: NEXT I: P=1: GOTO 400 19 | 300 FOR I=A1-A TO A1-1: PRINT T$(I);: NEXT I: P=0 20 | 400 IF A1>60 THEN 200 21 | 410 GOTO 210 22 | 600 DATA 60,1,12,26,9,12,3,8,24,17,8,4,6,23,21,6,4,6,22,12,5,6,5 23 | 610 DATA 4,6,21,11,8,6,4,4,6,21,10,10,5,4,4,6,21,9,11,5,4 24 | 620 DATA 4,6,21,8,11,6,4,4,6,21,7,11,7,4,4,6,21,6,11,8,4 25 | 630 DATA 4,6,19,1,1,5,11,9,4,4,6,19,1,1,5,10,10,4,4,6,18,2,1,6,8,11,4 26 | 640 DATA 4,6,17,3,1,7,5,13,4,4,6,15,5,2,23,5,1,29,5,17,8 27 | 650 DATA 1,29,9,9,12,1,13,5,40,1,1,13,5,40,1,4,6,13,3,10,6,12,5,1 28 | 660 DATA 5,6,11,3,11,6,14,3,1,5,6,11,3,11,6,15,2,1 29 | 670 DATA 6,6,9,3,12,6,16,1,1,6,6,9,3,12,6,7,1,10 30 | 680 DATA 7,6,7,3,13,6,6,2,10,7,6,7,3,13,14,10,8,6,5,3,14,6,6,2,10 31 | 690 DATA 8,6,5,3,14,6,7,1,10,9,6,3,3,15,6,16,1,1 32 | 700 DATA 9,6,3,3,15,6,15,2,1,10,6,1,3,16,6,14,3,1,10,10,16,6,12,5,1 33 | 710 DATA 11,8,13,27,1,11,8,13,27,1,60 34 | 999 FOR I=1 TO 10: PRINT: NEXT I: END 35 | -------------------------------------------------------------------------------- /examples/gqgames/lunar.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"LUNAR" 2 | 20 PRINT TAB(l5);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 25 PRINT:PRINT:PRINT 4 | 30 PRINT "THIS IS A COMPUTER SIMULATION OF AN APOLLO LUNAR" 5 | 40 PRINT "LANDING CAPSULE.": PRINT: PRINT 6 | 50 PRINT "THE ON-BOARD COMPUTER HAS FAILED (IT WAS MADE BY" 7 | 60 PRINT "XEROX) SO YOU HAVE TO LAND THE CAPSULE MANUALLY." 8 | 70 PRINT: PRINT "SET BURN RATE OF RETRO ROCKETS TO ANY VALUE BETWEEN" 9 | 80 PRINT "0 (FREE FALL) AND 200 (MAXIMUM BURN) POUNDS PER SECOND." 10 | 90 PRINT "SET NEW BURN RATE EVERY 10 SECONDS.": PRINT 11 | 100 PRINT "CAPSULE WEIGHT 32,500 LBS; FUEL WEIGHT 16,500 LBS." 12 | 110 PRINT: PRINT: PRINT: PRINT "GOOD LUCK" 13 | 120 L=0 14 | 130 PRINT: PRINT "SEC","MI + FT","MPH","LB FUEL","BURN RATE":PRINT 15 | 140 A=120:V=1:M=33000!:N=16500:G=1E-03:Z=1.8 16 | 150 PRINT L,INT(A);INT(5280*(A-INT(A))),3600*V,M-N,:INPUT K:T=10 17 | 160 IF M-N<1E-03 THEN 240 18 | 170 IF T<1E-03 THEN 150 19 | 180 S=T: IF M>=N+S*K THEN 200 20 | 190 S=(M-N)/K 21 | 200 GOSUB 420: IF I<=O THEN 340 22 | 210 IF V<=0 THEN 230 23 | 220 IF J<0 THEN 370 24 | 230 GOSUB 330: GOTO 160 25 | 240 PRINT "FUEL OUT AT";L;"SECONDS":S=(-V+SQR(V*V+2*A*G))/G 26 | 250 V=V+G*S: L=L+S 27 | 260 W=3600*V: PRINT "ON MOON AT";L;"SECONDS - IMPACT VELOCITY";W;"MPH" 28 | 274 IF W<=1.2 THEN PRINT "PERFECT LANDING!": GOTO 440 29 | 280 IF W<=10 THEN PRINT "GOOD LANDING (COULD RE BETTER)":GOTO 440 30 | 282 IF W>60 THEN 300 31 | 284 PRINT "CRAFT DAMAGE... YOU'RE STRANDED HERE UNTIL A RESCUE" 32 | 286 PRINT "PARTY ARRIVES. HOPE YOU HAVE ENOUGH OXYGEN!" 33 | 288 GOTO 440 34 | 300 PRINT "SORRY THERE NERE NO SURVIVORS. YOU BLOW IT!" 35 | 310 PRINT "IN FACT, YOU BLASTED A NEW LUNAR CRATER";W*.227;"FEET DEEP!" 36 | 320 GOTO 440 37 | 330 L=L+S: T=T-S: M=M-S*K: A=I: V=J: RETURN 38 | 340 IF S<5E-03 THEN 260 39 | 350 D=V+SQR(V*V+2*A*(G-Z*K/M)):S=2*A/D 40 | 360 GOSUB 420: GOSUB 330: GOTO 340 41 | 370 W=(1-M*G/(Z*K))/2: S=M*V/(Z*K*(W+SQR(W*W+V/Z)))+.05:GOSUB 420 42 | 380 IF I<=0 THEN 340 43 | 390 GOSUB 330: IF J>0 THEN 160 44 | 400 IF V>0 THEN 370 45 | 410 GOTO 160 46 | 420 Q=S*K/M: J=V+G*S+Z*(-Q-Q*Q/2-Q^3/3-Q^4/4-Q^5/5) 47 | 430 I=A-G*S*S/2-V*S+Z*S*(Q/2+Q^2/6+Q^3/12+Q^4/20+Q^5/30):RETURN 48 | 440 PRINT:PRINT:PRINT:PRINT 'TRY AGAIN??": GOTO 70 49 | -------------------------------------------------------------------------------- /examples/gqgames/mathdice.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(31);"MATH DICE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 40 PRINT "THIS PROGRAM GENERATES SUCCESIVE PICTURES OF TWO DICE." 5 | 50 PRINT "WHEN TWO DICE AND AN EQUAL SIGN FOLLOWED BY A QUESTION" 6 | 60 PRINT "MARK HAVE BEEN PRINTED, TYPE YOUR ANSWER AND THE RETURN KEY." 7 | 70 PRINT "TO CONCLUDE THE LESSON, TYPE CONTROL-C AS YOUR ANSWER." 8 | 80 PRINT 9 | 90 PRINT 10 | 100 N=N+1 11 | 110 D=INT(6*RND(1)+1) 12 | 120 PRINT" ----- " 13 | 130 IF D=1 THEN 200 14 | 140 IF D=2 THEN 180 15 | 150 IF D=3 THEN 180 16 | 160 PRINT "I * * I" 17 | 170 GOTO 210 18 | 180 PRINT "I * I" 19 | 190 GOTO 210 20 | 200 PRINT "I I" 21 | 210 IF D=2 THEN 260 22 | 220 IF D=4 THEN 260 23 | 230 IF D=6 THEN 270 24 | 240 PRINT "I * I" 25 | 250 GOTO 280 26 | 260 PRINT "I I" 27 | 265 GOTO 280 28 | 270 PRINT "I * * I" 29 | 280 IF D=1 THEN 350 30 | 290 IF D=2 THEN 330 31 | 300 IF D=3 THEN 330 32 | 310 PRINT "I * * I" 33 | 320 GOTO 360 34 | 330 PRINT "I * I" 35 | 340 GOTO 360 36 | 350 PRINT "I I" 37 | 360 PRINT " ----- " 38 | 370 PRINT 39 | 375 IF N=2 THEN 500 40 | 380 PRINT " +" 41 | 381 PRINT 42 | 400 A=D 43 | 410 GOTO 100 44 | 500 T=D+A 45 | 510 PRINT " ="; 46 | 520 INPUT T1 47 | 530 IF T1=T THEN 590 48 | 540 PRINT "NO, COUNT THE SPOTS AND GIVE ANOTHER ANSWER." 49 | 541 PRINT " ="; 50 | 550 INPUT T2 51 | 560 IF T2=T THEN 590 52 | 570 PRINT "NO, THE ANSWER IS";T 53 | 580 GOTO 600 54 | 590 PRINT "RIGHT!" 55 | 600 PRINT 56 | 601 PRINT "THE DICE ROLL AGAIN..." 57 | 610 PRINT 58 | 615 N=0 59 | 620 GOTO 100 60 | 999 END 61 | -------------------------------------------------------------------------------- /examples/gqgames/mugwump.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"MUGWUMP" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 4 REM COURTESY PEOPLE'S COMPUTER COMPANY 5 | 10 DIM P(4,2) 6 | 20 PRINT "THE OBJECT OF THIS GAME IS TO FIND FOUR MUGWUMPS" 7 | 30 PRINT "HIDDEN ON A 10 BY 10 GRID. HOMEBASE IS POSITION 0,0." 8 | 40 PRINT "ANY GUESS YOU MAKE MUST BE TWO NUMBERS WITH EACH" 9 | 50 PRINT "NUMBER BETWEEN 0 AND 9, INCLUSIVE. FIRST NUMBER" 10 | 60 PRINT "IS DISTANCE TO RIGHT OF HOMEBASE AND SECOND NUMBER" 11 | 70 PRINT "IS DISTANCE ABOVE HOMEBASE." 12 | 80 PRINT 13 | 90 PRINT "YOU GET 10 TRIES. AFTER EACH TRY, I WILL TELL" 14 | 100 PRINT "YOU HOW FAR YOU ARE FROM EACH MUGWUMP." 15 | 110 PRINT 16 | 240 GOSUB 1000 17 | 250 T=0 18 | 260 T=T+1 19 | 270 PRINT 20 | 275 PRINT 21 | 290 PRINT "TURN NO.";T;"-- WHAT IS YOUR GUESS"; 22 | 300 INPUT M,N 23 | 310 FOR I=1 TO 4 24 | 320 IF P(I,1)=-1 THEN 400 25 | 330 IF P(I,1)<>M THEN 380 26 | 340 IF P(I,2)<>N THEN 380 27 | 350 P(I,1)=-1 28 | 360 PRINT "YOU HAVE FOUND MUGWUMP";I 29 | 370 GOTO 400 30 | 380 D=SQR((P(I,1)-M)^2+(P(I,2)-N)^2) 31 | 390 PRINT "YOU ARE";(INT(D*10))/10;"UNITS FROM MUGWUMP";I 32 | 400 NEXT I 33 | 410 FOR J=1 TO 4 34 | 420 IF P(J,1)<>-1 THEN 470 35 | 430 NEXT J 36 | 440 PRINT 37 | 450 PRINT "YOU GOT THEM ALL IN";T;"TURNS!" 38 | 460 GOTO 580 39 | 470 IF T<10 THEN 260 40 | 480 PRINT 41 | 490 PRINT "SORRY, THAT'S 10 TRIES. HERE IS WHERE THEY'RE HIDING:" 42 | 540 FOR I=1 TO 4 43 | 550 IF P(I,1)=-1 THEN 570 44 | 560 PRINT "MUGWUMP";I;"IS AT (";P(I,1);",";P(I,2);")" 45 | 570 NEXT I 46 | 580 PRINT 47 | 600 PRINT "THAT WAS FUN! LET'S PLAY AGAIN......." 48 | 610 PRINT "FOUR MORE MUGWUMPS ARE NOW IN HIDING." 49 | 630 GOTO 240 50 | 1000 FOR J=1 TO 2 51 | 1010 FOR I=1 TO 4 52 | 1020 P(I,J)=INT(10*RND(1)) 53 | 1030 NEXT I 54 | 1040 NEXT J 55 | 1050 RETURN 56 | 1099 END 57 | -------------------------------------------------------------------------------- /examples/gqgames/name.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(34);"NAME" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT: PRINT: PRINT 4 | 5 DIM B$(40) 5 | 10 PRINT "HELLO.": PRINT "MY NAME IS CREATIVE COMPUTER." 6 | 20 PRINT "WHAT'S YOUR NAME (FIRST AND LAST";: INPUT A$: L=LEN(A$) 7 | 30 PRINT: PRINT "THANK YOU, "; 8 | 40 FOR I=1 TO L: B$(I)=MID$(A$,I,1): NEXT I 9 | 50 FOR I=L TO 1 STEP -1: PRINT B$(I);: NEXT I 10 | 60 PRINT ".": PRINT "OOPS! I GUESS I GOT IT BACKWARDS. A SMART" 11 | 70 PRINT "COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!": PRINT 12 | 80 PRINT "BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER." 13 | 90 PRINT "LET'S PUT THEM IN ORDER LIKE THIS: "; 14 | 100 FOR J=2 TO L: I=J-1: T$=B$(J) 15 | 110 IF T$>B$(I) THEN 130 16 | 120 B$(I+1)=B$(I): I=I-1: IF I>0 THEN 110 17 | 130 B$(I+1)=T$: NEXT J 18 | 140 FOR I=1 TO L: PRINT B$(I);: NEXT I: PRINT: PRINT 19 | 150 PRINT "DON'T YOU LIKE THAT BETTER";: INPUT D$ 20 | 160 IF D$="YES" THEN 180 21 | 170 PRINT: PRINT "I'M SORRY YOU DON'T LIKE IT THAT WAY.": GOTO 200 22 | 180 PRINT: PRINT "I KNEW YOU'D AGREE!!" 23 | 200 PRINT: PRINT "I REALLY ENJOYED MEETING YOU ";A$;"." 24 | 210 PRINT "HAVE A NICE DAY!" 25 | 999 END 26 | -------------------------------------------------------------------------------- /examples/gqgames/nicoma.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"NICOMA" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 10 PRINT "BOOMERANG PUZZLE FROM ARITHMETICA OF NICOMACHUS -- A.D. 90!" 5 | 20 PRINT 6 | 30 PRINT "PLEASE THINK OF A NUMBER BETWEEN 1 AND 100." 7 | 40 PRINT "YOUR NUMBER DIVIDED BY 3 HAS A REMAINDER OF"; 8 | 45 INPUT A 9 | 50 PRINT "YOUR NUMBER DIVIDED BY 5 HAS A REMAINDER OF"; 10 | 55 INPUT B 11 | 60 PRINT "YOUR NUMBER DIVIDED BY 7 HAS A REMAINDER OF"; 12 | 65 INPUT C 13 | 70 PRINT 14 | 80 PRINT "LET ME THINK A MOMENT..." 15 | 85 PRINT 16 | 90 FOR I=1 TO 1500: NEXT I 17 | 100 D=70*A+21*B+15*C 18 | 110 IF D<=105 THEN 140 19 | 120 D=D-105 20 | 130 GOTO 110 21 | 140 PRINT "YOUR NUMBER WAS";D;", RIGHT"; 22 | 160 INPUT A$ 23 | 165 PRINT 24 | 170 IF A$="YES" THEN 220 25 | 180 IF A$="NO" THEN 240 26 | 190 PRINT "EH? I DON'T UNDERSTAND '";A$;"' TRY 'YES' OR 'NO'." 27 | 200 GOTO 160 28 | 220 PRINT "HOW ABOUT THAT!!" 29 | 230 GOTO 250 30 | 240 PRINT "I FEEL YOUR ARITHMETIC IS IN ERROR." 31 | 250 PRINT 32 | 260 PRINT "LET'S TRY ANOTHER." 33 | 270 GOTO 20 34 | 999 END 35 | -------------------------------------------------------------------------------- /examples/gqgames/number.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"NUMBER" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 4 PRINT "YOU HAVE 100 POINTS. BY GUESSING NUMBERS FROM 1 TO 5, YOU" 5 | 5 PRINT "CAN GAIN OR LOSE POINTS DEPENDING UPON HOW CLOSE YOU GET TO" 6 | 6 PRINT "A RANDOM NUMBER SELECTED BY THE COMPUTER.": PRINT 7 | 7 PRINT "YOU OCCASIONALLY WILL GET A JACKPOT WHICH WILL DOUBLE(!)" 8 | 8 PRINT "YOUR POINT COUNT. YOU WIN WHEN YOU GET 500 POINTS." 9 | 9 PRINT: P=100 10 | 10 DEF FNR(X)=INT(5*RND(1)+1) 11 | 12 INPUT "GUESS A NUMBER FROM 1 TO 5";G 12 | 15 R=FNR(1) 13 | 16 S=FNR(1) 14 | 17 T=FNR(1) 15 | 18 U=FNR(1) 16 | 19 V=FNR(1) 17 | 20 IF G=R THEN 30 18 | 21 IF G=S THEN 40 19 | 22 IF G=T THEN 50 20 | 23 IF G=U THEN 60 21 | 24 IF G=V THEN 70 22 | 25 IF G>5 THEN 12 23 | 30 P=P-5 24 | 35 GOTO 80 25 | 40 P=P+5 26 | 45 GOTO 80 27 | 50 P=P+P 28 | 53 PRINT "YOU HIT THE JACKPOT!!!" 29 | 55 GOTO 80 30 | 60 P=P+1 31 | 65 GOTO 80 32 | 70 P=P-(P*.5) 33 | 80 IF P>500 THEN 90 34 | 82 PRINT "YOU HAVE";P;"POINTS.":PRINT 35 | 85 GOTO 12 36 | 90 PRINT "!!!!YOU WIN!!!! WITH ";P;"POINTS." 37 | 99 END 38 | -------------------------------------------------------------------------------- /examples/gqgames/onecheck.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(30);"ONE CHECK" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 8 DIM A(64) 5 | 10 PRINT "SOLITAIRE CHECKER PUZZLE BY DAVID AHL" 6 | 15 PRINT 7 | 20 PRINT "48 CHECKERS ARE PLACED ON THE 2 OUTSIDE SPACES OF A" 8 | 25 PRINT "STANDARD 64-SQUARE CHECKERBOARD. THE OBJECT IS TO" 9 | 30 PRINT "REMOVE AS MANY CHECKERS AS POSSIBLE BY DIAGONAL JUMPS" 10 | 35 PRINT "(AS IN STANDARD CHECKERS). USE THE NUMBERED BOARD TO" 11 | 40 PRINT "INDICATE THE SQUARE YOU WISH TO JUMP FROM AND TO. ON" 12 | 45 PRINT "THE BOARD PRINTED OUT ON EACH TURN '1' INDICATES A" 13 | 50 PRINT "CHECKER AND '0' AN EMPTY SQUARE. WHEN YOU HAVE NO" 14 | 55 PRINT "POSSIBLE JUMPS REMAINING, INPUT A '0' IN RESPONSE TO" 15 | 60 PRINT "QUESTION 'JUMP FROM ?'" 16 | 62 PRINT 17 | 63 PRINT "HERE IS THE NUMERICAL BOARD:" 18 | 66 PRINT 19 | 70 FOR J=1 TO 57 STEP 8 20 | 74 PRINT J;TAB(4);J+1;TAB(8);J+2;TAB(12);J+3;TAB(16);J+4;TAB(20);J+5; 21 | 75 PRINT TAB(24);J+6;TAB(28);J+7 22 | 76 NEXT J 23 | 77 PRINT 24 | 78 PRINT "AND HERE IS THE OPENING POSITION OF THE CHECKERS." 25 | 79 PRINT 26 | 80 FOR J=1 TO 64 27 | 82 A(J)=1 28 | 84 NEXT J 29 | 86 FOR J=19 TO 43 STEP 8 30 | 88 FOR I=J TO J+3 31 | 90 A(I)=0 32 | 92 NEXT I 33 | 94 NEXT J 34 | 96 M=0 35 | 98 GOTO 340 36 | 100 INPUT "JUMP FROM";F 37 | 105 IF F=0 THEN 500 38 | 110 INPUT "TO";T 39 | 112 PRINT 40 | 118 REM *** CHECK LEGALITY OF MOVE 41 | 120 F1=INT((F-1)/8) 42 | 130 F2=F-8*F1 43 | 140 T1=INT((T-1)/8) 44 | 150 T2=T-8*T1 45 | 160 IF F1>7 THEN 230 46 | 170 IF T1>7 THEN 230 47 | 180 IF F2>8 THEN 230 48 | 190 IF T2>8 THEN 230 49 | 200 IF ABS(F1-T1)<>2 THEN 230 50 | 210 IF ABS(F2-T2)<>2 THEN 230 51 | 212 IF A((T+F)/2)=0 THEN 230 52 | 215 IF A(F)=0 THEN 230 53 | 220 IF A(T)=1 THEN 230 54 | 225 GOTO 250 55 | 230 PRINT "ILLEGAL MOVE. TRY AGAIN..." 56 | 240 GOTO 100 57 | 245 REM *** UPDATE BOARD 58 | 250 A(T)=1 59 | 260 A(F)=0 60 | 270 A((T+F)/2)=0 61 | 290 M=M+1 62 | 310 REM *** PRINT BOARD 63 | 340 FOR J=1 TO 57 STEP 8 64 | 350 FOR I=J TO J+7 65 | 360 PRINT A(I); 66 | 370 NEXT I 67 | 380 PRINT 68 | 390 NEXT J 69 | 400 PRINT 70 | 410 GOTO 100 71 | 490 REM *** END GAME SUMMARY 72 | 500 S=0 73 | 510 FOR I=1 TO 64 74 | 520 S=S+A(I) 75 | 530 NEXT I 76 | 540 PRINT:PRINT "YOU MADE";M;"JUMPS AND HAD";S;"PIECES" 77 | 550 PRINT "REMAINING ON THE BOARD." 78 | 560 PRINT 79 | 562 INPUT "TRY AGAIN";A$ 80 | 570 IF A$="YES" THEN 70 81 | 575 IF A$="NO" THEN 600 82 | 580 PRINT "PLEASE ANSWER 'YES' OR 'NO'." 83 | 590 GOTO 562 84 | 600 PRINT 85 | 610 PRINT "O.K. HOPE YOU HAD FUN!!" 86 | 999 END 87 | -------------------------------------------------------------------------------- /examples/gqgames/poetry.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(30);"POETRY" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 90 ON I GOTO 100,101,102,103,104 5 | 100 PRINT "MIDNIGHT DREARY";:GOTO 210 6 | 101 PRINT "FIERY EYES";:GOTO 210 7 | 102 PRINT "BIRD OR FIEND";:GOTO 210 8 | 103 PRINT "THING OF EVIL";:GOTO 210 9 | 104 PRINT "PROPHET";:GOTO 210 10 | 110 ON I GOTO 111,112,113,114,115 11 | 111 PRINT "BEGUILING ME";:U=2:GOTO 210 12 | 112 PRINT "THRILLED ME";:GOTO 210 13 | 113 PRINT "STILL SITTING....";:GOTO 212 14 | 114 PRINT "NEVER FLITTING";:U=2:GOTO 210 15 | 115 PRINT "BURNED";:GOTO 210 16 | 120 ON I GOTO 121,122,123,124,125 17 | 121 PRINT "AND MY SOUL";:GOTO 210 18 | 122 PRINT "DARKNESS THERE";:GOTO 210 19 | 123 PRINT "SHALL BE LIFTED";:GOTO 210 20 | 124 PRINT "QUOTH THE RAVEN";:GOTO 210 21 | 125 IF U=0 THEN 210 22 | 126 PRINT "SIGN OF PARTING";:GOTO 210 23 | 130 ON I GOTO 131,132,133,134,135 24 | 131 PRINT "NOTHING MORE";:GOTO 210 25 | 132 PRINT "YET AGAIN";:GOTO 210 26 | 133 PRINT "SLOWLY CREEPING";:GOTO 210 27 | 134 PRINT "...EVERMORE";:GOTO 210 28 | 135 PRINT "NEVERMORE"; 29 | 210 IF U=0 OR RND(1)>.19 THEN 212 30 | 211 PRINT ",";:U=2 31 | 212 IF RND(1)>.65 THEN 214 32 | 213 PRINT " ";:U=U+1:GOTO 215 33 | 214 PRINT : U=0 34 | 215 I=INT(INT(10*RND(1))/2)+1 35 | 220 J=J+1 : K=K+1 36 | 230 IF U>0 OR INT(J/2)<>J/2 THEN 240 37 | 235 PRINT " "; 38 | 237 INPUT "PRESS RETURN TO CONTINUE"; A12 39 | 240 ON J GOTO 90,110,120,130,250 40 | 250 J=0 : PRINT : IF K>20 THEN 270 41 | 260 GOTO 215 42 | 270 PRINT : U=0 : K=0 : GOTO 110 43 | 999 END 44 | -------------------------------------------------------------------------------- /examples/gqgames/reverse.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(32);"REVERSE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 PRINT "REVERSE -- A GAME OF SKILL": PRINT 5 | 130 DIM A(20) 6 | 140 REM *** N=NUMBER OF NUMBERS 7 | 150 N=9 8 | 160 PRINT "DO YOU WANT THE RULES"; 9 | 170 INPUT A$ 10 | 180 IF A$="NO" THEN 210 11 | 190 GOSUB 710 12 | 200 REM *** MAKE A RANDOM LIST A(1) TO A(N) 13 | 210 A(1)=INT((N-1)*RND(1)+2) 14 | 220 FOR K=2 TO N 15 | 230 A(K)=INT(N*RND(1)+1) 16 | 240 FOR J=1 TO K-1 17 | 250 IF A(K)=A(J) THEN 230 18 | 260 NEXT J:NEXT K 19 | 280 REM *** PRINT ORIGINAL LIST AND START GAME 20 | 290 PRINT: PRINT "HERE WE GO ... THE LIST IS:" 21 | 310 T=0 22 | 320 GOSUB 610 23 | 330 PRINT "HOW MANY SHALL I REVERSE"; 24 | 340 INPUT R 25 | 350 IF R=0 THEN 520 26 | 360 IF R<=N THEN 390 27 | 370 PRINT "OOPS! TOO MANY! I CAN REVERSE AT MOST";N:GOTO 330 28 | 390 T=T+1 29 | 400 REM *** REVERSE R NUMBERS AND PRINT NEW LIST 30 | 410 FOR K=1 TO INT(R/2) 31 | 420 Z=A(K) 32 | 430 A(K)=A(R-K+1) 33 | 440 A(R-K+1)=Z 34 | 450 NEXT K 35 | 460 GOSUB 610 36 | 470 REM *** CHECK FOR A WIN 37 | 480 FOR K=1 TO N 38 | 490 IF A(K)<>K THEN 330 39 | 500 NEXT K 40 | 510 PRINT "YOU WON IT IN";T;"MOVES!!!":PRINT 41 | 520 PRINT 42 | 530 PRINT "TRY AGAIN (YES OR NO)"; 43 | 540 INPUT A$ 44 | 550 IF A$="YES" THEN 210 45 | 560 PRINT: PRINT "O.K. HOPE YOU HAD FUN!!":GOTO 999 46 | 600 REM *** SUBROUTINE TO PRINT LIST 47 | 610 PRINT:FOR K=1 TO N:PRINT A(K);:NEXT K 48 | 650 PRINT:PRINT:RETURN 49 | 700 REM *** SUBROUTINE TO PRINT THE RULES 50 | 710 PRINT:PRINT "THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE" 51 | 720 PRINT "TO DO IS ARRANGE A LIST OF NUMBERS (1 THROUGH";N;")" 52 | 730 PRINT "IN NUMERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU" 53 | 740 PRINT "TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO" 54 | 750 PRINT "REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:" 55 | 760 PRINT:PRINT "2 3 4 5 1 6 7 8 9" 56 | 770 PRINT:PRINT "AND YOU REVERSE 4, THE RESULT WILL BE:" 57 | 780 PRINT:PRINT "5 4 3 2 1 6 7 8 9" 58 | 790 PRINT:PRINT "NOW IF YOU REVERSE 5, YOU WIN!" 59 | 800 PRINT:PRINT "1 2 3 4 5 6 7 8 9":PRINT 60 | 810 PRINT "NO DOUBT YOU WILL LIKE THIS GAME, BUT" 61 | 820 PRINT "IF YOU WANT TO QUIT, REVERSE 0 (ZERO).":PRINT: RETURN 62 | 999 END 63 | -------------------------------------------------------------------------------- /examples/gqgames/rocksp.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(21);"GAME OF ROCK, SCISSORS, PAPER" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 25 PRINT:PRINT:PRINT 4 | 30 INPUT "HOW MANY GAMES";Q 5 | 40 IF Q<11 THEN 60 6 | 50 PRINT "SORRY, BUT WE AREN'T ALLOWED TO PLAY THAT MANY.": GOTO 30 7 | 60 FOR G=1 TO Q 8 | 70 PRINT: PRINT "GAME NUMBER";G 9 | 80 X=INT(RND(1)*3+1) 10 | 90 PRINT "3=ROCK...2=SCISSORS...1=PAPER" 11 | 100 INPUT "1...2...3...WHAT'S YOUR CHOICE";K 12 | 110 IF (K-1)*(K-2)*(K-3)<>0 THEN PRINT "INVALID.": GOTO 90 13 | 120 PRINT "THIS IS MY CHOICE..." 14 | 130 ON X GOTO 140,150,160 15 | 140 PRINT "...PAPER": GOTO 170 16 | 150 PRINT "...SCISSORS": GOTO 170 17 | 160 PRINT "...ROCK" 18 | 170 IF X=K THEN 250 19 | 180 IF X>K THEN 230 20 | 190 IF X=1 THEN 210 21 | 200 PRINT "YOU WIN!!!":H=H+1: GOTO 260 22 | 210 IF K<>3 THEN 200 23 | 220 PRINT "WOW! I WIN!!!":C=C+1:GOTO 260 24 | 230 IF K<>1 OR X<>3 THEN 220 25 | 240 GOTO 200 26 | 250 PRINT "TIE GAME. NO WINNER." 27 | 260 NEXT G 28 | 270 PRINT: PRINT "HERE IS THE FINAL GAME SCORE:" 29 | 280 PRINT "I HAVE WON";C;"GAME(S)." 30 | 290 PRINT "YOU HAVE WON";H;"GAME(S)." 31 | 300 PRINT "AND";Q-(C+H);"GAME(S) ENDED IN A TIE." 32 | 310 PRINT: PRINT "THANKS FOR PLAYING!!" 33 | 320 END 34 | -------------------------------------------------------------------------------- /examples/gqgames/rusrou.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(28);"RUSSIAN ROULETTE" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 5 PRINT "THIS IS A GAME OF >>>>>>>>>>RUSSIAN ROULETTE." 5 | 10 PRINT:PRINT "HERE IS A REVOLVER." 6 | 20 PRINT "TYPE '1' TO SPIN CHAMBER AND PULL TRIGGER." 7 | 22 PRINT "TYPE '2' TO GIVE UP." 8 | 23 PRINT "GO"; 9 | 25 N=0 10 | 30 INPUT I 11 | 31 IF I<>2 THEN 35 12 | 32 PRINT " CHICKEN!!!!!" 13 | 33 GOTO 72 14 | 35 N=N+1 15 | 40 IF RND(1)>.833333 THEN 70 16 | 45 IF N>10 THEN 80 17 | 50 PRINT "- CLICK -" 18 | 60 PRINT: GOTO 30 19 | 70 PRINT " BANG!!!!! YOU'RE DEAD!" 20 | 71 PRINT "CONDOLENCES WILL BE SENT TO YOUR RELATIVES." 21 | 72 PRINT:PRINT:PRINT 22 | 75 PRINT "...NEXT VICTIM...":GOTO 20 23 | 80 PRINT "YOU WIN!!!!!" 24 | 85 PRINT "LET SOMEONE ELSE BLOW HIS BRAINS OUT." 25 | 90 GOTO 10 26 | 99 END 27 | -------------------------------------------------------------------------------- /examples/gqgames/sinewave.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(30);"SINE WAVE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT: PRINT: PRINT: PRINT: PRINT 4 | 40 REM ARKABLE PROGRAM BY DAVID AHL 5 | 50 B=0 6 | 100 REM START LONG LOOP 7 | 110 FOR T=0 TO 40 STEP .25 8 | 120 A=INT(26+25*SIN(T)) 9 | 130 PRINT TAB(A); 10 | 140 IF B=1 THEN 180 11 | 150 PRINT "CREATIVE" 12 | 160 B=1 13 | 170 GOTO 200 14 | 180 PRINT "COMPUTING" 15 | 190 B=0 16 | 200 NEXT T 17 | 999 END 18 | -------------------------------------------------------------------------------- /examples/gqgames/stars.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(34);"STARS" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 REM *** STARS - PEOPLE'S COMPUTER CENTER, MENLO PARK, CA 5 | 140 REM *** A IS LIMIT ON NUMBER, M IS NUMBER OF GUESSES 6 | 150 A=100:M=7 7 | 170 INPUT "DO YOU WANT INSTRUCTIONS";A$ 8 | 190 IF LEFT$(A$,1)="N" THEN 280 9 | 200 REM *** INSTRUCTIONS ON HOW TO PLAY 10 | 210 PRINT "I AM THINKING OF A WHOLE NUMBER FROM 1 TO";A 11 | 220 PRINT "TRY TO GUESS MY NUMBER. AFTER YOU GUESS, I" 12 | 230 PRINT "WILL TYPE ONE OR MORE STARS (*). THE MORE" 13 | 240 PRINT "STARS I TYPE, THE CLOSER YOU ARE TO MY NUMBER." 14 | 250 PRINT "ONE STAR (*) MEANS FAR AWAY, SEVEN STARS (*******)" 15 | 260 PRINT "MEANS REALLY CLOSE! YOU GET";M;"GUESSES." 16 | 270 REM *** COMPUTER THINKS OF A NUMBER 17 | 280 PRINT 18 | 290 PRINT 19 | 300 X=INT(A*RND(1)+1) 20 | 310 PRINT "OK, I AM THINKING OF A NUMBER, START GUESSING." 21 | 320 REM *** GUESSING BEGINS, HUMAN GETS M GUESSES 22 | 330 FOR K=1 TO M 23 | 340 PRINT 24 | 350 PRINT "YOUR GUESS"; 25 | 360 INPUT G 26 | 370 IF G=X THEN 600 27 | 380 D=ABS(G-X) 28 | 390 IF D>=64 THEN 510 29 | 400 IF D>=32 THEN 500 30 | 410 IF D>=16 THEN 490 31 | 420 IF D>=8 THEN 480 32 | 430 IF D>=4 THEN 470 33 | 440 IF D>=2 THEN 460 34 | 450 PRINT "*"; 35 | 460 PRINT "*"; 36 | 470 PRINT "*"; 37 | 480 PRINT "*"; 38 | 490 PRINT "*"; 39 | 500 PRINT "*"; 40 | 510 PRINT "*"; 41 | 520 PRINT 42 | 530 NEXT K 43 | 540 REM *** DID NOT GUESS IN M GUESSES 44 | 550 PRINT 45 | 560 PRINT "SORRY, THAT'S";M;"GUESSES. THE NUMBER WAS";X 46 | 580 GOTO 650 47 | 590 REM *** WE HAVE A WINNER 48 | 600 PRINT:FOR N=1 TO 79 49 | 610 PRINT "*"; 50 | 620 NEXT N 51 | 630 PRINT:PRINT 52 | 640 PRINT "YOU GOT IT IN";K;"GUESSES!!! LET'S PLAY AGAIN..." 53 | 650 GOTO 280 54 | 660 END 55 | -------------------------------------------------------------------------------- /examples/gqgames/synonym.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"SYNONYM" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 10 DIM R$(5),W$(10),L(30),R(30) 5 | 20 R$(1)="RIGHT": R$(2)="CORRECT": R$(3)="FINE": R$(4)="GOOD!" 6 | 30 R$(5)="CHECK" 7 | 70 C=0 8 | 90 PRINT "A SYNONYM OF A WORD MEANS ANOTHER WORD IN THE ENGLISH" 9 | 100 PRINT "LANGUAGE WHICH HAS THE SAME OR VERY NEARLY THE SAME"; 10 | 110 PRINT " MEANING." 11 | 130 PRINT "I CHOOSE A WORD -- YOU TYPE A SYNONYM." 12 | 140 PRINT "IF YOU CAN'T THINK OF A SYNONYM, TYPE THE WORD 'HELP'" 13 | 145 PRINT "AND I WILL TELL YOU A SYNONYM.": PRINT 14 | 150 RESTORE: C=C+1: READ N 15 | 160 IF C>N THEN 420 16 | 170 N1=INT(RND(1)*N+1) 17 | 174 IF R(N1)=1 THEN 170 18 | 176 R(N1)=1 19 | 180 FOR I=1 TO N1 20 | 190 READ N2 21 | 200 FOR J=1 TO N2 22 | 210 READ W$(J) 23 | 220 NEXT J 24 | 230 NEXT I 25 | 232 FOR J=1 TO N2: L(J)=J: NEXT J 26 | 235 L(0)=N2: G=1: PRINT 27 | 237 L(G)=L(L(0)): L(0)=N2-1: PRINT 28 | 240 PRINT " WHAT IS A SYNONYM OF ";W$(G);: INPUT A$ 29 | 250 IF A$="HELP" THEN 340 30 | 260 FOR K=1 TO N2 31 | 270 IF G=K THEN 290 32 | 280 IF A$=W$(K) THEN 320 33 | 290 NEXT K 34 | 300 PRINT " TRY AGAIN.": GOTO 240 35 | 320 PRINT R$(INT(RND(1)*5+1)): GOTO 150 36 | 340 G1=INT(RND(1)*L(0)+1) 37 | 360 PRINT "**** A SYNONYM OF ";W$(G);" IS ";W$(L(G1));".": PRINT 38 | 370 L(G1)=L(L(0)): L(0)=L(0)-1: GOTO 240 39 | 420 PRINT: PRINT "SYNONYM DRILL COMPLETED.": GOTO 999 40 | 500 DATA 10 41 | 510 DATA 5,"FIRST","START","BEGINNING","ONSET","INITIAL" 42 | 520 DATA 5,"SIMILAR","ALIKE","SAME","LIKE","RESEMBLING" 43 | 530 DATA 5,"MODEL","PATTERN","PROTOTYPE","STANDARD","CRITERION" 44 | 540 DATA 5,"SMALL","INSIGNIFICANT","LITTLE","TINY","MINUTE" 45 | 550 DATA 6,"STOP","HALT","STAY","ARREST","CHECK","STANDSTILL" 46 | 560 DATA 6,"HOUSE","DWELLING","RESIDENCE","DOMICILE","LODGING" 47 | 565 DATA "HABITATION" 48 | 570 DATA 7,"PIT","HOLE","HOLLOW","WELL","GULF","CHASM","ABYSS" 49 | 580 DATA 7,"PUSH","SHOVE","THRUST","PROD","POKE","BUTT","PRESS" 50 | 590 DATA 6,"RED","ROUGE","SCARLET","CRIMSON","FLAME","RUBY" 51 | 600 DATA 7,"PAIN","SUFFERING","HURT","MISERY","DISTRESS","ACHE" 52 | 605 DATA "DISCOMFORT" 53 | 999 END 54 | -------------------------------------------------------------------------------- /examples/gqgames/test.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(34);"LIFE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 8 PRINT "ENTER YOUR PATTERN:" 5 | 9 X1=1: Y1=1: X2=24: Y2=70 6 | 10 DIM A(24,70),B$(24) 7 | 20 C=1 8 | 30 INPUT B$(C) 9 | 40 IF B$(C)="DONE" THEN B$(C)="": GOTO 80 10 | 50 IF LEFT$(B$(C),1)="." THEN B$(C)=" "+RIGHT$(B$(C),LEN(B$(C))-1) 11 | 60 C=C+1 12 | 70 GOTO 30 13 | 80 C=C-1: L=0 14 | 90 FOR X=1 TO C-1 15 | 100 IF LEN(B$(X))>L THEN L=LEN(B$(X)) 16 | 110 NEXT X 17 | 120 X1=11-C/2 18 | 130 Y1=33-L/2 19 | 140 FOR X=1 TO C 20 | 150 FOR Y=1 TO LEN(B$(X)) 21 | 160 IF MID$(B$(X),Y,1)<>" " THEN A(X1+X,Y1+Y)=1:P=P+1 22 | 170 NEXT Y 23 | 180 NEXT X 24 | 200 PRINT:PRINT:PRINT 25 | 210 PRINT "GENERATION:";G,"POPULATION:";P;: IF I9 THEN PRINT "INVALID!"; 26 | 215 X3=24:Y3=70:X4=1: Y4=1: P=0 27 | 220 G=G+1 28 | 225 FOR X=1 TO X1-1: PRINT: NEXT X 29 | 230 FOR X=X1 TO X2 30 | 240 PRINT 31 | 250 FOR Y=Y1 TO Y2 32 | 261 PRINT A(X,Y);" "; 33 | 270 NEXT Y 34 | 290 NEXT X 35 | 295 FOR X=X2+1 TO 24: PRINT: NEXT X 36 | 299 X1=X3: X2=X4: Y1=Y3: Y2=Y4 37 | 301 IF X1<3 THEN X1=3:I9=-1 38 | 303 IF X2>22 THEN X2=22:I9=-1 39 | 305 IF Y1<3 THEN Y1=3:I9=-1 40 | 307 IF Y2>68 THEN Y2=68:I9=-1 41 | 309 P=0 42 | 500 FOR X=X1-1 TO X2+1 43 | 510 FOR Y=Y1-1 TO Y2+1 44 | 520 C=0 45 | 530 FOR I=X-1 TO X+1 46 | 540 FOR J=Y-1 TO Y+1 47 | 550 IF A(I,J)=1 OR A(I,J)=2 THEN C=C+1 48 | 560 NEXT J 49 | 570 NEXT I 50 | 580 IF A(X,Y)=0 THEN 610 51 | 590 IF C<3 OR C>4 THEN A(X,Y)=2: GOTO 600 52 | 595 P=P+1 53 | 600 GOTO 620 54 | 610 IF C=3 THEN A(X,Y)=3:P=P+1 55 | 620 NEXT Y 56 | 630 NEXT X 57 | 635 X1=X1-1:Y1=Y1-1:X2=X2+1:Y2=Y2+1 58 | 637 INPUT "PRESS RETURN TO CONTINUE";A12 59 | 640 GOTO 210 60 | 650 END -------------------------------------------------------------------------------- /examples/gqgames/test1.bas: -------------------------------------------------------------------------------- 1 | 10 print "I am test 1" 2 | 20 end 3 | -------------------------------------------------------------------------------- /examples/gqgames/tictac1.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(30);"TIC TAC TOE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 50 REM 5 | 100 REM THIS PROGRAM PLAYS TIC TAC TOE 6 | 110 REM THE MACHINE GOES FIRST 7 | 120 PRINT "THE GAME BOARD IS NUMBERED:": PRINT 8 | 130 PRINT "1 2 3": PRINT "8 9 4": PRINT "7 6 5" 9 | 140 PRINT 10 | 150 REM 11 | 160 REM 12 | 170 REM 13 | 180 DEF FNM(X)=X-8*INT((X-1)/8) 14 | 190 REM 15 | 200 REM MAIN PROGRAM 16 | 210 PRINT 17 | 220 PRINT 18 | 230 A=9 19 | 240 M=A 20 | 250 GOSUB 650 21 | 260 P=M 22 | 270 B=FNM(P+1) 23 | 280 M=B 24 | 290 GOSUB 650 25 | 300 Q=M 26 | 310 IF Q=FNM(B+4) THEN 360 27 | 320 C=FNM(B+4) 28 | 330 M=C 29 | 340 GOSUB 700 30 | 350 GOTO 730 31 | 360 C=FNM(B+2) 32 | 370 M=C 33 | 380 GOSUB 650 34 | 390 R=M 35 | 400 IF R=FNM(C+4) THEN 450 36 | 410 D=FNM(C+4) 37 | 420 M=D 38 | 430 GOSUB 700 39 | 440 GOTO 730 40 | 450 IF P/2<>INT(P/2) THEN 500 41 | 460 D=FNM(C+7) 42 | 470 M=D 43 | 480 GOSUB 700 44 | 490 GOTO 730 45 | 500 D=FNM(C+3) 46 | 510 M=D 47 | 520 GOSUB 650 48 | 530 S=M 49 | 540 IF S=FNM(D+4) THEN 590 50 | 550 E=FNM(D+4) 51 | 560 M=E 52 | 570 GOSUB 700 53 | 580 REM 54 | 590 E=FNM(D+6) 55 | 600 M=E 56 | 610 GOSUB 700 57 | 620 PRINT "THE GAME IS A DRAW." 58 | 630 GOTO 210 59 | 640 REM 60 | 650 GOSUB 700 61 | 660 PRINT "YOUR MOVE"; 62 | 670 INPUT M 63 | 680 RETURN 64 | 700 PRINT "COMPUTER MOVES";M 65 | 710 RETURN 66 | 720 REM 67 | 730 PRINT "AND WINS ********" 68 | 740 GOTO 210 69 | 750 END 70 | -------------------------------------------------------------------------------- /examples/gqgames/train.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"TRAIN" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT: PRINT: PRINT 4 | 4 PRINT "TIME - SPEED DISTANCE EXERCISE": PRINT 5 | 10 C=INT(25*RND(1))+40 6 | 15 D=INT(15*RND(1))+5 7 | 20 T=INT(19*RND(1))+20 8 | 25 PRINT " A CAR TRAVELING";C;"MPH CAN MAKE A CERTAIN TRIP IN" 9 | 30 PRINT D;"HOURS LESS THAN A TRAIN TRAVELING AT";T;"MPH." 10 | 35 PRINT "HOW LONG DOES THE TRIP TAKE BY CAR"; 11 | 40 INPUT A 12 | 45 V=D*T/(C-T) 13 | 50 E=INT(ABS((V-A)*100/A)+.5) 14 | 55 IF E>5 THEN 70 15 | 60 PRINT "GOOD! ANSWER WITHIN";E;"PERCENT." 16 | 65 GOTO 80 17 | 70 PRINT "SORRY. YOU WERE OFF BY";E;"PERCENT." 18 | 80 PRINT "CORRECT ANSWER IS";V;"HOURS." 19 | 90 PRINT 20 | 95 PRINT "ANOTHER PROBLEM (YES OR NO)"; 21 | 100 INPUT A$ 22 | 105 PRINT 23 | 110 IF A$="YES" THEN 10 24 | 999 END 25 | -------------------------------------------------------------------------------- /examples/gqgames/trap.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(34);"TRAP" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 10 G=6 5 | 20 N=100 6 | 30 REM-TRAP 7 | 40 REM-STEVE ULLMAN, 8-1-72 8 | 50 PRINT "INSTRUCTIONS"; 9 | 60 INPUT Z$ 10 | 70 IF LEFT$(Z$,1)<>"Y" THEN 180 11 | 80 PRINT "I AM THINKING OF A NUMBER BETWEEN 1 AND";N 12 | 90 PRINT "TRY TO GUESS MY NUMBER. ON EACH GUESS," 13 | 100 PRINT "YOU ARE TO ENTER 2 NUMBERS, TRYING TO TRAP" 14 | 110 PRINT "MY NUMBER BETWEEN THE TWO NUMBERS. I WILL" 15 | 120 PRINT "TELL YOU IF YOU HAVE TRAPPED MY NUMBER, IF MY" 16 | 130 PRINT "NUMBER IS LARGER THAN YOUR TWO NUMBERS, OR IF" 17 | 140 PRINT "MY NUMBER IS SMALLER THAN YOUR TWO NUMBERS." 18 | 150 PRINT "IF YOU WANT TO GUESS ONE SINGLE NUMBER, TYPE" 19 | 160 PRINT "YOUR GUESS FOR BOTH YOUR TRAP NUMBERS." 20 | 170 PRINT "YOU GET";G;"GUESSES TO GET MY NUMBER." 21 | 180 X=INT(N*RND(1))+1 22 | 190 FOR Q=1 TO G 23 | 200 PRINT 24 | 210 PRINT "GUESS #";Q; 25 | 220 INPUT A,B 26 | 230 IF A=B AND X=A THEN 400 27 | 240 IF A <= B THEN 260 28 | 250 GOSUB 360 29 | 260 IF A <= X AND X <= B THEN 320 30 | 270 IF XL(J) THEN 340 27 | 320 REM 28 | 330 GOTO 290 29 | 340 NEXT K 30 | 350 NEXT J 31 | 360 P=P+1 32 | 370 M1=L(P) 33 | 380 P=P+1 34 | 390 M2=L(P) 35 | 400 PRINT 36 | 420 PRINT "YOU: ";A$(M1),"COMPUTER: ";A$(M2) 37 | 430 N1=INT((M1-.5)/4) 38 | 440 N2=INT((M2-.5)/4) 39 | 450 IF N1>=N2 THEN 490 40 | 460 A1=A1+1 41 | 470 PRINT "THE COMPUTER WINS!!! YOU HAVE";B1;"AND THE COMPUTER HAS";A1 42 | 480 GOTO 540 43 | 490 IF N1=N2 THEN 530 44 | 500 B1=B1+1 45 | 510 PRINT "YOU WIN. YOU HAVE";B1;"AND THE COMPUTER HAS";A1 46 | 520 GOTO 540 47 | 530 PRINT "TIE. NO SCORE CHANGE." 48 | 540 IF L(P+1)=0 THEN 610 49 | 550 PRINT "DO YOU WANT TO CONTINUE"; 50 | 560 INPUT V$ 51 | 570 IF V$="YES" THEN 360 52 | 580 IF V$="NO" THEN 650 53 | 590 PRINT "YES OR NO, PLEASE. "; 54 | 600 GOTO 540 55 | 610 PRINT 56 | 620 PRINT 57 | 630 PRINT "WE HAVE RUN OUT OF CARDS. FINAL SCORE: YOU: ";B1; 58 | 640 PRINT " THE COMPUTER: ";A1:PRINT 59 | 650 PRINT "THANKS FOR PLAYING. IT WAS FUN." 60 | 655 PRINT 61 | 660 DATA "S-2","H-2","C-2","D-2","S-3","H-3","C-3","D-3" 62 | 670 DATA "S-4","H-4","C-4","D-4","S-5","H-5","C-5","D-5" 63 | 680 DATA "S-6","H-6","C-6","D-6","S-7","H-7","C-7","D-7" 64 | 690 DATA "S-8","H-8","C-8","D-8","S-9","H-9","C-9","D-9" 65 | 700 DATA "S-10","H-10","C-10","D-10","S-J","H-J","C-J","D-J" 66 | 710 DATA "S-Q","H-Q","C-Q","D-Q","S-K","H-K","C-K","D-K" 67 | 720 DATA "S-A","H-A","C-A","D-A" 68 | 999 END 69 | -------------------------------------------------------------------------------- /examples/gqgames/word.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"WORD" 2 | 3 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 4 PRINT: PRINT: PRINT 4 | 5 DIM S(7),A(7),L(7),D(7),P(7) 5 | 10 PRINT "I AM THINKING OF A WORD -- YOU GUESS IT. I WILL GIVE YOU" 6 | 15 PRINT "CLUES TO HELP YOU GET IT. GOOD LUCK!!": PRINT: PRINT 7 | 20 REM 8 | 30 PRINT: PRINT: PRINT "YOU ARE STARTING A NEW GAME..." 9 | 35 RESTORE 10 | 40 READ N 11 | 50 C=INT(RND(1)*N+1) 12 | 60 FOR I=1 TO C 13 | 70 READ S$ 14 | 80 NEXT I 15 | 90 G=0 16 | 95 S(0)=LEN(S$) 17 | 100 FOR I=1 TO LEN(S$): S(I)=ASC(MID$(S$,I,1)): NEXT I 18 | 110 FOR I=1 TO 5 19 | 120 A(I)=45 20 | 130 NEXT I 21 | 140 FOR J=1 TO 5 22 | 144 P(J)=0 23 | 146 NEXT J 24 | 150 PRINT "GUESS A FIVE LETTER WORD"; 25 | 160 INPUT L$ 26 | 170 G=G+1 27 | 172 IF S$=G$ THEN 500 28 | 173 FOR I=1 TO 7: P(I)=0: NEXT I 29 | 175 L(0)=LEN(L$) 30 | 180 FOR I=1 TO LEN(L$): L(I)=ASC(MID$(L$,I,1)): NEXT I 31 | 190 IF L(1)=63 THEN 300 32 | 200 IF L(0)<>5 THEN 400 33 | 205 M=0: Q=1 34 | 210 FOR I=1 TO 5 35 | 220 FOR J=1 TO 5 36 | 230 IF S(I)<>L(J) THEN 260 37 | 231 P(Q)=L(J) 38 | 232 Q=Q+1 39 | 233 IF I<>J THEN 250 40 | 240 A(J)=L(J) 41 | 250 M=M+1 42 | 260 NEXT J 43 | 265 NEXT I 44 | 270 A(0)=5 45 | 272 P(0)=M 46 | 275 A$="": FOR I=1 TO A(0): A$=A$+CHR$(A(I)): NEXT I 47 | 277 P$="": FOR I=1 TO P(0): P$=P$+CHR$(P(I)): NEXT I 48 | 280 PRINT "THERE WERE";M;"MATCHES AND THE COMMON LETTERS WERE...";P$ 49 | 285 PRINT "FROM THE EXACT LETTER MATCHES, YOU KNOW................";A$ 50 | 286 IF A$=S$ THEN 500 51 | 287 IF M>1 THEN 289 52 | 288 PRINT: PRINT "IF YOU GIVE UP, TYPE '?' FOR YOUR NEXT GUESS." 53 | 289 PRINT 54 | 290 GOTO 150 55 | 300 S$="": FOR I=1 TO 7: S$=S$+CHR$(S(I)): NEXT I 56 | 310 PRINT "THE SECRET WORD IS ";S$: PRINT 57 | 320 GOTO 30 58 | 400 PRINT "YOU MUST GUESS A 5 LETTER WORD. START AGAIN." 59 | 410 PRINT: G=G-1: GOTO 150 60 | 500 PRINT "YOU HAVE GUESSED THE WORD. IT TOOK";G;"GUESSES!": PRINT 61 | 510 INPUT "WANT TO PLAY AGAIN";Q$ 62 | 520 IF Q$="YES" THEN 30 63 | 530 DATA 12,"DINKY","SMOKE","WATER","GRASS","TRAIN","MIGHT","FIRST" 64 | 540 DATA "CANDY","CHAMP","WOULD","CLUMP","DOPEY" 65 | 999 END 66 | -------------------------------------------------------------------------------- /examples/graphics.bas: -------------------------------------------------------------------------------- 1 | 100 key off:cls:screen 9 2 | 200 color 7,5 : rem next CLS will clear bg color to 5 3 | 205 line (0,0)-(639,479) 4 | 206 line (50,0)-(0,50) 5 | 210 rem _goproc("sleep1") 6 | 215 print input$(1) 7 | 220 cls 8 | 230 color 2:for i=50 to 300: line (100,50)-(319,i): next 9 | 240 color 4 10 | 250 line (10,100)-(40,130),1,b 11 | 260 line (15,105)-(35,125),,bf 12 | 270 line (80,130)-(50,100),1,b 13 | 280 line (75,125)-(55,105),,bf 14 | 290 line (40,140)-(10,170),1,b 15 | 300 line (15,165)-(35,145),,bf 16 | 310 line (50,170)-(80,140),1,b 17 | 320 line (55,165)-(75,145),,bf 18 | 390 print input$(1) 19 | 400 color 3:for i=0 to 639:for j=0 to 479:pset(i,j):next:next 20 | 900 rem _goimport("time") 21 | 910 rem _godecl("func sleep1() { time.Sleep(1*time.Second) }") 22 | 920 rem _godecl("func sleep3() { time.Sleep(3*time.Second) }") 23 | 930 rem _goproc("sleep3") 24 | 935 print input$(1) 25 | 940 end 26 | -------------------------------------------------------------------------------- /examples/ifarchive/droganya/DROGANYA.DOC: -------------------------------------------------------------------------------- 1 | Castle Droganya is a biactive adventure game. The course of the game is 2 | dictated by your response to the situation. The goal is to free the souls of 3 | the townspeople which have been trapped by the evil Lord Droganya. 4 | 5 | Responses 6 | 7 | The game recognizes over 30 action words. To move in any direction, type, for 8 | example, "GO NORTHEAST" or "GO NE" or "NE". All eight compass points are 9 | possible directions. To review the room description, type "LOOK" or "L". To 10 | see a list of the objects you are carrying, type "INVENTORY" or "INV" or "I". 11 | To exit out of the game at any time, type QUIT, END, or STOP. 12 | 13 | Except for the responses indicated above, you must always start a response with 14 | an action word. Action words include GET, DROP, EXAMINE, OPEN, MOVE, and TURN. 15 | In addition, do not include articles in your responses (ie., A or THE). 16 | The maximum response length allowed in this game is four words. 17 | 18 | Scoring 19 | 20 | Your score is indicated at the bottom right of the screen while playing the 21 | game. Scores are achieved by obtaining objects or solving situations. The 22 | maximum score is 5,000 points. 23 | 24 | 25 | Share Ware 26 | 27 | This game is "user supported" share ware. This means that you are free to 28 | make copies of this game and to distribute them as long as the disk is copied 29 | in its entirety. In fact you are encouraged to do so. If in playing Castle 30 | Droganya, you gain some enjoyment, please further the share ware cause by 31 | sending a $5.00 donation to me at the address indicated below. 32 | 33 | Errors 34 | 35 | Should you run into any errors or bugs or if you have any comments, changes 36 | or improvements, please write to me at the address indicated below. 37 | 38 | Solution 39 | 40 | To obtain a map of Castle Droganya and the solution (or hints), please send 41 | $5.00 to: 42 | Steve Chodes 43 | 670 Sotano Drive 44 | Sacramento, CA 95833 45 | 46 | Thank you. 47 |  -------------------------------------------------------------------------------- /examples/ifarchive/droganya/FILE1074.TXT: -------------------------------------------------------------------------------- 1 | Disk No: 1074 2 | Disk Title: Game Fun for All 3 | PC-SIG Version: 2 4 | 5 | CASTLE DROGANYA is a reactive adventure game. The course of the game is 6 | dictated by your response to the situation. The goal is to free the 7 | souls of the townspeople who have been trapped by the evil Lord 8 | Droganya. 9 | 10 | File Descriptions: 11 | 12 | ------------ CASTLE DROGANYA. 13 | DROGANYA BAS Adventure game. 14 | DROGANYA DOC Documentation. 15 | 16 | PC-SIG 17 | 1030D East Duane Avenue 18 | Sunnyvale Ca. 94086 19 | (408) 730-9291 20 | (c) Copyright 1988,89 PC-SIG, Inc. 21 | 22 | -------------------------------------------------------------------------------- /examples/ifarchive/droganya/README: -------------------------------------------------------------------------------- 1 | 2 | DROGANYA.TOK is the original tokenized version for BASICA, 3 | DROGANYA.BAS is the same stuff written out in ASCII. 4 | 5 | These two versions do not run under GW-BASIC or QBASIC ("out of memory"). 6 | Comments and line numbers take up program space in BASIC, so Nathan Glasser 7 | renumbered the program with shorter line numbers and deleted all the comments 8 | (and fixed a bug found in that process); the result can now be run under 9 | GW-BASIC or QBASIC: 10 | 11 | NEWDROG.BAS is Nathan Glasser's ASCII version for GW-BASIC, 12 | NEWDROG.TOK is the tokenized version of this, 13 | NEWDROG.QBS is a slightly modified version for QBASIC 14 | (modified by Volker Blasius following a suggestion by Ambat Sasi) 15 | 16 | -------------------------------------------------------------------------------- /examples/locate.bas: -------------------------------------------------------------------------------- 1 | 100 screen 0 2 | 110 brick$="x" 3 | 200 for i=1 to 11 4 | 300 for c=i to 81-i 5 | 310 if c<80 then locate 26-i,c: print brick$; 6 | 320 next 7 | 400 for r=26-i to i step -1 8 | 410 if r<25 then locate r,81-i: print brick$; 9 | 420 next 10 | 500 for c=81-i to i step -1 11 | 510 locate i,c: print brick$; 12 | 520 next 13 | 600 for r=i to 26-i 14 | 610 locate r,i: print brick$; 15 | 620 next 16 | 900 next 17 | 990 print input$(1) 18 | -------------------------------------------------------------------------------- /examples/mathdice.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(31);"MATH DICE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 40 PRINT "THIS PROGRAM GENERATES SUCCESIVE PICTURES OF TWO DICE." 5 | 50 PRINT "WHEN TWO DICE AND AN EQUAL SIGN FOLLOWED BY A QUESTION" 6 | 60 PRINT "MARK HAVE BEEN PRINTED, TYPE YOUR ANSWER AND THE RETURN KEY." 7 | 70 PRINT "TO CONCLUDE THE LESSON, TYPE CONTROL-C AS YOUR ANSWER." 8 | 80 PRINT 9 | 90 PRINT 10 | 100 N=N+1 11 | 110 D=INT(6*RND(1)+1) 12 | 120 PRINT" ----- " 13 | 130 IF D=1 THEN 200 14 | 140 IF D=2 THEN 180 15 | 150 IF D=3 THEN 180 16 | 160 PRINT "I * * I" 17 | 170 GOTO 210 18 | 180 PRINT "I * I" 19 | 190 GOTO 210 20 | 200 PRINT "I I" 21 | 210 IF D=2 THEN 260 22 | 220 IF D=4 THEN 260 23 | 230 IF D=6 THEN 270 24 | 240 PRINT "I * I" 25 | 250 GOTO 280 26 | 260 PRINT "I I" 27 | 265 GOTO 280 28 | 270 PRINT "I * * I" 29 | 280 IF D=1 THEN 350 30 | 290 IF D=2 THEN 330 31 | 300 IF D=3 THEN 330 32 | 310 PRINT "I * * I" 33 | 320 GOTO 360 34 | 330 PRINT "I * I" 35 | 340 GOTO 360 36 | 350 PRINT "I I" 37 | 360 PRINT " ----- " 38 | 370 PRINT 39 | 375 IF N=2 THEN 500 40 | 380 PRINT " +" 41 | 381 PRINT 42 | 400 A=D 43 | 410 GOTO 100 44 | 500 T=D+A 45 | 510 PRINT " ="; 46 | 520 INPUT T1 47 | 530 IF T1=T THEN 590 48 | 540 PRINT "NO, COUNT THE SPOTS AND GIVE ANOTHER ANSWER." 49 | 541 PRINT " ="; 50 | 550 INPUT T2 51 | 560 IF T2=T THEN 590 52 | 570 PRINT "NO, THE ANSWER IS";T 53 | 580 GOTO 600 54 | 590 PRINT "RIGHT!" 55 | 600 PRINT 56 | 601 PRINT "THE DICE ROLL AGAIN..." 57 | 610 PRINT 58 | 615 N=0 59 | 620 GOTO 100 60 | 999 END 61 | -------------------------------------------------------------------------------- /examples/prime.bas: -------------------------------------------------------------------------------- 1 | 10 'List primes between two selected numbers 2 | 20 CLEAR :CLS :KEY OFF 3 | 30 PRINT "List primes between two selected numbers." :PRINT 4 | 40 INPUT "Input smaller number ";SMALL 5 | 50 INPUT "Input larger number ";LARGE 6 | 60 IF LARGE < SMALL THEN SWAP LARGE,SMALL 'Swap if entered in wrong order 7 | 70 SMALL=INT(SMALL/2)*2+1 'Ensure small number is odd 8 | 80 LARGE=INT(LARGE/2)*2-1 'Ensure large number is odd 9 | 85 print "small=" small "large=" large 10 | 90 FOR K=SMALL TO LARGE STEP 2 11 | 100 X=SQR(K) 'Only need to check to square root 12 | 110 F=0 'Count factors as a logic step 13 | 120 FOR J=3 TO X STEP 2 14 | 130 IF K/J-INT(K/J)=0 THEN LET F=F+1 'Totals up factors. F=0 is prime 15 | 140 NEXT J 16 | 150 IF F=0 THEN PRINT K; 'Prime has no factors 17 | 160 NEXT K 18 | 170 print 19 | 180 end 20 | -------------------------------------------------------------------------------- /examples/question.bas: -------------------------------------------------------------------------------- 1 | 10 ? "hello question mark print" 2 | -------------------------------------------------------------------------------- /examples/screen.bas: -------------------------------------------------------------------------------- 1 | 110 print "hit ENTER to initialize screen 0" 2 | 120 print input$(1) 3 | 130 screen 0 4 | 140 print "screen 0 initialized": print "hit key to see CLS test" 5 | 150 print input$(1) 6 | 160 cls 7 | 170 print "CLS tested. hit key to see term width test" 8 | 180 print input$(1) 9 | 190 for i=1 to 200:print chr$((i mod 10)+asc("0"));:next 10 | 200 print:print "width test done. hit key to see term scroll test" 11 | 210 print input$(1) 12 | 220 for i=1 to 30:print i:next 13 | 230 print "scroll test done. hit key to test keyboard input" 14 | 240 i$=input$(1) 15 | 250 while i$<>"q" 16 | 260 print "key:";i$;" asc:";asc(i$) 17 | 270 print "hit any other key, or q to exit" 18 | 280 i$=input$(1) 19 | 290 wend 20 | -------------------------------------------------------------------------------- /examples/screenfunc.bas: -------------------------------------------------------------------------------- 1 | 100 screen 0 2 | 110 color 1,6: cls: locate 1,1: print "x" 3 | 120 print 4 | 130 'color 7,0 5 | 140 print "code:";screen(1,1) 6 | 150 print "char:";chr$(screen(1,1)) 7 | 160 attr=screen(1,1,1) 8 | 170 print "attr:";attr 9 | 180 print "fg:";attr MOD 16 10 | 190 print "bg:";attr \ 16 11 | 200 print 12 | 210 print "hit any key";input$(1) 13 | -------------------------------------------------------------------------------- /examples/sparcie/ski.bas: -------------------------------------------------------------------------------- 1 | 10 REM ************* 2 | 20 REM Remake of Ski 3 | 30 REM ************* 4 | 40 REM Another game from a long forgotten book. 5 | 50 REM It is interesting because it takes advantage of text scrolling 6 | 60 REM to move the play area. I've re-written the code for better timing 7 | 70 REM mostly as the original relied on CPU speed. 8 | 80 RANDOMIZE TIMER 9 | 90 DEFINT A-Z 10 | 99 screen 0: rem force screen 0 11 | 100 KEY OFF 12 | 110 COLOR 12,15 : REM change this if you don't like a white background 13 | 120 CLS 14 | 130 PRINT "<<< Downhill Skiiing >>>" 15 | 140 PRINT "Remade by Sparcie" 16 | 150 L$=",": R$=".": REM the controls 17 | 160 PRINT 18 | 170 PRINT "This is a simple game where you are skiing down a slope and" 19 | 180 PRINT "need to keep on the ski slop so you don't fall off the mountain." 20 | 190 PRINT "It's quite similiar to earlt car racing games." 21 | 200 PRINT "press "+L$+" to go left and "+R$+" to go right" 22 | 210 PRINT 23 | 220 PRINT "Select game speed (1 2 3 4)" 24 | 230 C$ = INPUT$(1) 25 | 240 IF C$="1" OR C$="2" OR C$="3" OR C$="4" THEN 260 26 | 250 GOTO 230 27 | 260 LEVEL = VAL(C$) 28 | 270 GAP! = .3/LEVEL : REM sets the gap between game ticks 29 | 280 NEXTT! = TIMER 30 | 290 SCORERATE = 5 * LEVEL 31 | 300 SCORE = 0 32 | 310 PLAYERX = 40 33 | 320 WID = 20 34 | 330 TRACK = 30 35 | 340 C$ = INKEY$ 36 | 350 IF C$ = L$ AND PLAYERX>1 THEN PLAYERX=PLAYERX-1 37 | 360 IF C$ = R$ AND PLAYERX<79 THEN PLAYERX=PLAYERX+1 38 | 370 R = INT(RND*5) 39 | 380 IF R = 0 AND TRACK > 1 THEN TRACK=TRACK-1 40 | 390 IF R = 1 AND WID>5 THEN WID=WID-1 41 | 400 IF R = 3 AND WID<20 THEN WID=WID+1 42 | 410 IF R = 4 AND TRACK<79-WID THEN TRACK=TRACK+1 43 | 420 PRINT TAB(TRACK); "#"; TAB(PLAYERX); "!"; TAB(TRACK+WID); "#" 44 | 430 SCORE = SCORE + SCORERATE 45 | 440 REM a blank line! 46 | 450 IF TIMER=(TRACK+WID) THEN 490 49 | 480 GOTO 340 50 | 490 PRINT "Ouch! you hit the wall!" 51 | 500 PRINT 52 | 510 PRINT "You got a score of: ",SCORE 53 | 520 PRINT "Do you wish to play again? (y/n)" 54 | 530 C$ = INPUT$(1) 55 | 540 IF C$ = "y" THEN 220 56 | 550 IF C$ = "n" THEN 570 57 | 560 GOTO 530 58 | 570 PRINT "bye!..." 59 | 60 | -------------------------------------------------------------------------------- /examples/sparcie/skiorig.bas: -------------------------------------------------------------------------------- 1 | 10 REM ************* 2 | 20 REM Remake of Ski 3 | 30 REM ************* 4 | 40 REM Another game from a long forgotten book. 5 | 50 REM It is interesting because it takes advantage of text scrolling 6 | 60 REM to move the play area. I've re-written the code for better timing 7 | 70 REM mostly as the original relied on CPU speed. 8 | 80 RANDOMIZE TIMER 9 | 90 DEFINT A-Z 10 | 100 KEY OFF 11 | 110 COLOR 12,15 : REM change this if you don't like a white background 12 | 120 CLS 13 | 130 PRINT "<<< Downhill Skiiing >>>" 14 | 140 PRINT "Remade by Sparcie" 15 | 150 L$=",": R$=".": REM the controls 16 | 160 PRINT 17 | 170 PRINT "This is a simple game where you are skiing down a slope and" 18 | 180 PRINT "need to keep on the ski slop so you don't fall off the mountain." 19 | 190 PRINT "It's quite similiar to earlt car racing games." 20 | 200 PRINT "press "+L$+" to go left and "+R$+" to go right" 21 | 210 PRINT 22 | 220 PRINT "Select game speed (1 2 3 4)" 23 | 230 C$ = INPUT$(1) 24 | 240 IF C$="1" OR C$="2" OR C$="3" OR C$="4" THEN 260 25 | 250 GOTO 230 26 | 260 LEVEL = VAL(C$) 27 | 270 GAP! = .3/LEVEL : REM sets the gap between game ticks 28 | 280 NEXTT! = TIMER 29 | 290 SCORERATE = 5 * LEVEL 30 | 300 SCORE = 0 31 | 310 PLAYERX = 40 32 | 320 WID = 20 33 | 330 TRACK = 30 34 | 340 C$ = INKEY$ 35 | 350 IF C$ = L$ AND PLAYERX>1 THEN PLAYERX=PLAYERX-1 36 | 360 IF C$ = R$ AND PLAYERX<79 THEN PLAYERX=PLAYERX+1 37 | 370 R = INT(RND*5) 38 | 380 IF R = 0 AND TRACK > 1 THEN TRACK=TRACK-1 39 | 390 IF R = 1 AND WID>5 THEN WID=WID-1 40 | 400 IF R = 3 AND WID<20 THEN WID=WID+1 41 | 410 IF R = 4 AND TRACK<79-WID THEN TRACK=TRACK+1 42 | 420 PRINT TAB(TRACK); "#"; TAB(PLAYERX); CHR$(19); TAB(TRACK+WID); "#" 43 | 430 SCORE = SCORE + SCORERATE 44 | 440 REM a blank line! 45 | 450 IF TIMER=(TRACK+WID) THEN 490 48 | 480 GOTO 340 49 | 490 PRINT "Ouch! you hit the wall!" 50 | 500 PRINT 51 | 510 PRINT "You got a score of: ",SCORE 52 | 520 PRINT "Do you wish to play again? (y/n)" 53 | 530 C$ = INPUT$(1) 54 | 540 IF C$ = "y" THEN 220 55 | 550 IF C$ = "n" THEN 570 56 | 560 GOTO 530 57 | 570 PRINT "bye!..." 58 | 59 | -------------------------------------------------------------------------------- /examples/startrader/README.md: -------------------------------------------------------------------------------- 1 | # Star Trader 2 | 3 | http://wiki.classictw.com/index.php?title=Star_Trader 4 | 5 | -------------------------------------------------------------------------------- /examples/trek/sttr1/README.md: -------------------------------------------------------------------------------- 1 | # Star Trek 2 | 3 | http://www.dunnington.info/public/startrek/STTR1 4 | 5 | 6 | REM Extracted from HP tape image 16-Nov-2003 by Pete Turnbull 7 | 8 | 1 REM **** HP BASIC PROGRAM LIBRARY ****************************** 9 | 2 REM 10 | 3 REM STTR1: STAR TREK 11 | 4 REM 12 | 5 REM 36243 REV B -- 10/73 13 | 6 REM 14 | 7 REM **** CONTRIBUTED PROGRAM *********************************** 15 | 100 REM ***************************************************************** 16 | 110 REM *** *** 17 | 120 REM *** STAR TREK: BY MIKE MAYFIELD, CENTERLINE ENGINEERING *** 18 | 130 REM *** *** 19 | 140 REM *** TOTAL INTERACTION GAME - ORIG. 20 OCT 1972 20 | 150 REM *** *** 21 | 160 REM ***************************************************************** 22 | -------------------------------------------------------------------------------- /examples/viewprint.bas: -------------------------------------------------------------------------------- 1 | 100 screen 0:key off 2 | 110 locate 1,1: print "---screen first line"; 3 | 120 locate 25,1: print "---screen last line"; 4 | 130 vp1=1+5:vp2=25-5 5 | 140 locate vp1-1,1: print "###before view print"; 6 | 150 locate vp2+1,1: print "###after view print"; 7 | 160 view print vp1 to vp2 8 | 170 locate 1,1: print "hit ENTER to clear screen" 9 | 180 i$=input$(1) 10 | 190 cls 11 | 200 print "screen cleared" 12 | 210 print "hit a key or q to quit" 13 | 220 i$=input$(1) 14 | 230 while i$ <> "q" 15 | 240 print "key: "; i$ 16 | 250 print "line:";csrlin;" - hit another key, c to clear screen, or q to quit - "; 17 | 260 i$=input$(1) 18 | 270 if i$="c" then cls:print "screen cleared" 19 | 280 wend 20 | -------------------------------------------------------------------------------- /examples/vintage_bcg/23matches.bas: -------------------------------------------------------------------------------- 1 | 20 PRINT TAB(31);"23 MATCHES" 2 | 30 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 40 PRINT:PRINT:PRINT 4 | 80 PRINT " THIS IS A GAME CALLED '23 MATCHES'." 5 | 90 PRINT 6 | 100 PRINT "WHEN IT IS YOUR TURN, YOU MAY TAKE ONE, TWO, OR THREE" 7 | 110 PRINT "MATCHES. THE OBJECT OF THE GAME IS NOT TO HAVE TO TAKE" 8 | 120 PRINT "THE LAST MATCH." 9 | 130 PRINT 10 | 140 PRINT "LET'S FLIP A COIN TO SEE WHO GOES FIRST." 11 | 150 PRINT "IF IT COMES UP HEADS, I WILL WIN THE TOSS." 12 | 155 PRINT 13 | 160 REM 14 | 165 N = 23 15 | 170 Q = INT(2*RND(5)) 16 | 180 IF Q = 1 THEN 210 17 | 190 PRINT "TAILS! YOU GO FIRST. " 18 | 195 PRINT 19 | 200 GOTO 300 20 | 210 PRINT "HEADS! I WIN! HA! HA!" 21 | 220 PRINT "PREPARE TO LOSE, MEATBALL-NOSE!!" 22 | 230 PRINT 23 | 250 PRINT "I TAKE 2 MATCHES" 24 | 260 N = N -2 25 | 270 PRINT "THE NUMBER OF MATCHES IS NOW" N 26 | 280 PRINT 27 | 290 PRINT "YOUR TURN -- YOU MAY TAKE 1, 2 OR 3 MATCHES." 28 | 300 PRINT "HOW MANY DO YOU WISH TO REMOVE", 29 | 310 INPUT K 30 | 320 IF K > 3 THEN 430 31 | 330 IF K <= 0 THEN 430 32 | 340 N = N - K 33 | 350 PRINT "THERE ARE NOW";N;"MATCHES REMAINING." 34 | 351 IF N = 4 THEN 381 35 | 352 IF N = 3 THEN 383 36 | 353 IF N = 2 THEN 385 37 | 360 IF N <= 1 THEN 530 38 | 370 Z = 4 - K 39 | 372 GOTO 390 40 | 380 PRINT 41 | 381 Z = 3 42 | 382 GOTO 390 43 | 383 Z = 2 44 | 384 GOTO 390 45 | 385 Z = 1 46 | 390 PRINT "MY TURN ! I REMOVE" Z "MATCHES" 47 | 400 N = N - Z 48 | 410 IF N <= 1 THEN 470 49 | 420 GOTO 270 50 | 430 PRINT "VERY FUNNY! DUMMY!" 51 | 440 PRINT "DO YOU WANT TO PLAY OR GOOF AROUND?" 52 | 450 PRINT "NOW, HOW MANY MATCHES DO YOU WANT", 53 | 460 GOTO 310 54 | 470 PRINT 55 | 480 PRINT"YOU POOR BOOB! YOU TOOK THE LAST MATCH! I GOTCHA!!" 56 | 490 PRINT "HA ! HA ! I BEAT YOU !!!" 57 | 500 PRINT 58 | 510 PRINT "GOOD BYE LOSER!" 59 | 520 GOTO 560 60 | 530 PRINT "YOU WON, FLOPPY EARS !" 61 | 540 PRINT "THINK YOU'RE PRETTY SMART !" 62 | 550 PRINT "LETS PLAY AGAIN AND I'LL BLOW YOUR SHOES OFF !!" 63 | 560 STOP 64 | 570 END 65 | -------------------------------------------------------------------------------- /examples/vintage_bcg/3dplot.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(32);"3D PLOT" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 5 DEF FNA(Z)=30*EXP(-Z*Z/100) 5 | 100 PRINT 6 | 110 FOR X=-30 TO 30 STEP 1.5 7 | 120 L=0 8 | 130 Y1=5*INT(SQR(900-X*X)/5) 9 | 140 FOR Y=Y1 TO -Y1 STEP -5 10 | 150 Z=INT(25+FNA(SQR(X*X+Y*Y))-.7*Y) 11 | 160 IF Z<=L THEN 190 12 | 170 L=Z 13 | 180 PRINT TAB(Z);"*"; 14 | 190 NEXT Y 15 | 200 PRINT 16 | 210 NEXT X 17 | 300 END 18 | -------------------------------------------------------------------------------- /examples/vintage_bcg/animal.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(32);"ANIMAL" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT: PRINT: PRINT 4 | 40 PRINT "PLAY 'GUESS THE ANIMAL'" 5 | 45 PRINT 6 | 50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT." 7 | 60 PRINT 8 | 70 DIM A$(200) 9 | 80 FOR I=0 TO 3 10 | 90 READ A$(I) 11 | 100 NEXT I 12 | 110 N=VAL(A$(0)) 13 | 120 REM MAIN CONTROL SECTION 14 | 130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$ 15 | 140 IF A$="LIST" THEN 600 16 | 150 IF LEFT$(A$,1)<>"Y" THEN 120 17 | 160 K=1 18 | 170 GOSUB 390 19 | 180 IF LEN(A$(K))=0 THEN 999 20 | 190 IF LEFT$(A$(K),2)="\Q" THEN 170 21 | 200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2); 22 | 210 INPUT A$ 23 | 220 A$=LEFT$(A$,1) 24 | 230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120 25 | 240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$ 26 | 250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A" 27 | 260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2) 28 | 270 INPUT X$ 29 | 280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE "; 30 | 290 INPUT A$ 31 | 300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280 32 | 310 IF A$="Y" THEN B$="N" 33 | 320 IF A$="N" THEN B$="Y" 34 | 330 Z1=VAL(A$(0)) 35 | 340 A$(0)=STR$(Z1+2) 36 | 350 A$(Z1)=A$(K) 37 | 360 A$(Z1+1)="\A"+V$ 38 | 370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\" 39 | 380 GOTO 120 40 | 390 REM SUBROUTINE TO PRINT QUESTIONS 41 | 400 Q$=A$(K) 42 | 410 FOR Z=3 TO LEN(Q$) 43 | 415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);: NEXT Z 44 | 420 INPUT C$ 45 | 430 C$=LEFT$(C$,1) 46 | 440 IF C$<>"Y" AND C$<>"N" THEN 410 47 | 450 T$="\"+C$ 48 | 455 FOR X=3 TO LEN(Q$)-1 49 | 460 IF MID$(Q$,X,2)=T$ THEN 480 50 | 470 NEXT X 51 | 475 STOP 52 | 480 FOR Y=X+1 TO LEN(Q$) 53 | 490 IF MID$(Q$,Y,1)="\" THEN 510 54 | 500 NEXT Y 55 | 505 STOP 56 | 510 K=VAL(MID$(Q$,X+2,Y-X-2)) 57 | 520 RETURN 58 | 530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD" 59 | 600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:" 60 | 605 X=0 61 | 610 FOR I=1 TO 200 62 | 620 IF LEFT$(A$(I),2)<>"\A" THEN 650 63 | 624 PRINT TAB(15*X); 64 | 630 FOR Z=3 TO LEN(A$(I)) 65 | 640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);: NEXT Z 66 | 645 X=X+1: IF X=4 THEN X=0: PRINT 67 | 650 NEXT I 68 | 660 PRINT 69 | 670 PRINT 70 | 680 GOTO 120 71 | 999 END 72 | -------------------------------------------------------------------------------- /examples/vintage_bcg/awari.bas: -------------------------------------------------------------------------------- 1 | 5 PRINT TAB(34);"AWARI" 2 | 7 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 10 DATA 0 4 | 15 DIM B(13),G(13),F(50):READ N 5 | 20 PRINT:PRINT:E=0 6 | 25 FOR I=0 TO 12:B(I)=3:NEXT I 7 | 30 C=0:F(N)=0:B(13)=0:B(6)=0 8 | 35 GOSUB 500 9 | 40 PRINT "YOUR MOVE";:GOSUB 110 10 | 45 IF E=0 THEN 80 11 | 50 IF M=H THEN GOSUB 100 12 | 55 IF E=0 THEN 80 13 | 60 PRINT "MY MOVE IS ";:GOSUB 800 14 | 65 IF E=0 THEN 80 15 | 70 IF M=H THEN PRINT ",";:GOSUB 800 16 | 75 IF E>0 THEN 35 17 | 80 PRINT:PRINT"GAME OVER" 18 | 85 D=B(6)-B(13):IF D<0 THEN PRINT "I WIN BY";-D;"POINTS":GOTO 20 19 | 90 N=N+1:IF D=0 THEN PRINT "DRAWN GAME":GOTO 20 20 | 95 PRINT "YOU WIN BY";D;"POINTS":GOTO 20 21 | 100 PRINT "AGAIN"; 22 | 110 INPUT M:IF M<7 THEN IF M>0 THEN M=M-1:GOTO 130 23 | 120 PRINT "ILLEGAL MOVE":GOTO 100 24 | 130 IF B(M)=0 THEN 120 25 | 140 H=6:GOSUB 200 26 | 150 GOTO 500 27 | 200 K=M:GOSUB 600 28 | 205 E=0:IF K>6 THEN K=K-7 29 | 210 C=C+1:IF C<9 THEN F(N)=F(N)*6+K 30 | 215 FOR I=0 TO 5:IF B(I)<>0 THEN 230 31 | 220 NEXT I 32 | 225 RETURN 33 | 230 FOR I=7 TO 12:IF B(I)<>0 THEN E=1:RETURN 34 | 235 GOTO 220 35 | 500 PRINT:PRINT" "; 36 | 505 FOR I=12 TO 7 STEP -1:GOSUB 580 37 | 510 NEXT I 38 | 515 PRINT:I=13:GOSUB 580 39 | 520 PRINT " ";:PRINT B(6):PRINT " "; 40 | 525 FOR I=0 TO 5:GOSUB 580 41 | 530 NEXT I 42 | 535 PRINT:PRINT:RETURN 43 | 580 IF B(I)<10 THEN PRINT " "; 44 | 585 PRINT B(I);:RETURN 45 | 600 P=B(M):B(M)=0 46 | 605 FOR P=P TO 1 STEP -1:M=M+1:IF M>13 THEN M=M-14 47 | 610 B(M)=B(M)+1:NEXT P 48 | 615 IF B(M)=1 THEN IF M<>6 THEN IF M<>13 THEN IF B(12-M)<>0 THEN 625 49 | 620 RETURN 50 | 625 B(H)=B(H)+B(12-M)+1:B(M)=0:B(12-M)=0:RETURN 51 | 800 D=-99:H=13 52 | 805 FOR I=0 TO 13:G(I)=B(I):NEXT I 53 | 810 FOR J=7 TO 12:IF B(J)=0 THEN 885 54 | 815 G=0:M=J:GOSUB 600 55 | 820 FOR I=0 TO 5:IF B(I)=0 THEN 845 56 | 825 L=B(I)+I:R=0 57 | 830 IF L>13 THEN L=L-14:R=1:GOTO 830 58 | 835 IF B(L)=0 THEN IF L<>6 THEN IF L<>13 THEN R=B(12-L)+R 59 | 840 IF R>Q THEN Q=R 60 | 845 NEXT I 61 | 850 Q=B(13)-B(6)-Q:IF C>8 THEN 875 62 | 855 K=J:IF K>6 THEN K=K-7 63 | 860 FOR I=0 TO N-1:IF F(N)*6+K=INT(F(I)/6^(7-C)+.1) THEN Q=Q-2 64 | 870 NEXT I 65 | 875 FOR I=0 TO 13:B(I)=G(I):NEXT I 66 | 880 IF Q>=D THEN A=J:D=Q 67 | 885 NEXT J 68 | 890 M=A:PRINT CHR$(42+M);:GOTO 200 69 | 900 FOR I=0 TO N-1:PRINT B(I):NEXT I 70 | 999 END 71 | -------------------------------------------------------------------------------- /examples/vintage_bcg/bagels.bas: -------------------------------------------------------------------------------- 1 | 5 PRINT TAB(33);"BAGELS" 2 | 10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY":PRINT:PRINT 3 | 15 REM *** BAGLES NUMBER GUESSING GAME 4 | 20 REM *** ORIGINAL SOURCE UNKNOWN BUT SUSPECTED TO BE 5 | 25 REM *** LAWRENCE HALL OF SCIENCE, U.C. BERKELY 6 | 30 DIM A1(6),A(3),B(3) 7 | 40 Y=0:T=255 8 | 50 PRINT:PRINT:PRINT 9 | 70 INPUT "WOULD YOU LIKE THE RULES (YES OR NO)";A$ 10 | 90 IF LEFT$(A$,1)="N" THEN 150 11 | 100 PRINT:PRINT "I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS" 12 | 110 PRINT "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:" 13 | 120 PRINT " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION" 14 | 130 PRINT " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION" 15 | 140 PRINT " BAGELS - NO DIGITS CORRECT" 16 | 150 FOR I=1 TO 3 17 | 160 A(I)=INT(10*RND(1)) 18 | 165 IF I-1=0 THEN 200 19 | 170 FOR J=1 TO I-1 20 | 180 IF A(I)=A(J) THEN 160 21 | 190 NEXT J 22 | 200 NEXT I 23 | 210 PRINT:PRINT "O.K. I HAVE A NUMBER IN MIND." 24 | 220 FOR I=1 TO 20 25 | 230 PRINT "GUESS #";I, 26 | 240 INPUT A$ 27 | 245 IF LEN(A$)<>3 THEN 630 28 | 250 FOR Z=1 TO 3:A1(Z)=ASC(MID$(A$,Z,1)):NEXT Z 29 | 260 FOR J=1 TO 3 30 | 270 IF A1(J)<48 THEN 300 31 | 280 IF A1(J)>57 THEN 300 32 | 285 B(J)=A1(J)-48 33 | 290 NEXT J 34 | 295 GOTO 320 35 | 300 PRINT "WHAT?" 36 | 310 GOTO 230 37 | 320 IF B(1)=B(2) THEN 650 38 | 330 IF B(2)=B(3) THEN 650 39 | 340 IF B(3)=B(1) THEN 650 40 | 350 C=0:D=0 41 | 360 FOR J=1 TO 2 42 | 370 IF A(J)<>B(J+1) THEN 390 43 | 380 C=C+1 44 | 390 IF A(J+1)<>B(J) THEN 410 45 | 400 C=C+1 46 | 410 NEXT J 47 | 420 IF A(1)<>B(3) THEN 440 48 | 430 C=C+1 49 | 440 IF A(3)<>B(1) THEN 460 50 | 450 C=C+1 51 | 460 FOR J=1 TO 3 52 | 470 IF A(J)<>B(J) THEN 490 53 | 480 D=D+1 54 | 490 NEXT J 55 | 500 IF D=3 THEN 680 56 | 505 IF C=0 THEN 545 57 | 520 FOR J=1 TO C 58 | 530 PRINT "PICO "; 59 | 540 NEXT J 60 | 545 IF D=0 THEN 580 61 | 550 FOR J=1 TO D 62 | 560 PRINT "FERMI "; 63 | 570 NEXT J 64 | 580 IF C+D<>0 THEN 600 65 | 590 PRINT "BAGELS"; 66 | 600 PRINT 67 | 605 NEXT I 68 | 610 PRINT "OH WELL." 69 | 615 PRINT "THAT'S TWNETY GUESSES. MY NUMBER WAS";100*A(1)+10*A(2)+A(3) 70 | 620 GOTO 700 71 | 630 PRINT "TRY GUESSING A THREE-DIGIT NUMBER.":GOTO 230 72 | 650 PRINT "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND" 73 | 660 PRINT "HAS NO TWO DIGITS THE SAME.":GOTO 230 74 | 680 PRINT "YOU GOT IT!!!":PRINT 75 | 690 Y=Y+1 76 | 700 INPUT "PLAY AGAIN (YES OR NO)";A$ 77 | 720 IF LEFT$(A$,1)="YES" THEN 150 78 | 730 IF Y=0 THEN 750 79 | 740 PRINT:PRINT "A";Y;"POINT BAGELS BUFF!!" 80 | 750 PRINT "HOPE YOU HAD FUN. BYE." 81 | 999 END 82 | -------------------------------------------------------------------------------- /examples/vintage_bcg/bounce.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"BOUNCE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 90 DIM T(20) 5 | 100 PRINT "THIS SIMULATION LETS YOU SPECIFY THE INITIAL VELOCITY" 6 | 110 PRINT "OF A BALL THROWN STRAIGHT UP, AND THE COEFFICIENT OF" 7 | 120 PRINT "ELASTICITY OF THE BALL. PLEASE USE A DECIMAL FRACTION" 8 | 130 PRINT "COEFFICIENCY (LESS THAN 1)." 9 | 131 PRINT 10 | 132 PRINT "YOU ALSO SPECIFY THE TIME INCREMENT TO BE USED IN" 11 | 133 PRINT "'STROBING' THE BALL'S FLIGHT (TRY .1 INITIALLY)." 12 | 134 PRINT 13 | 135 INPUT "TIME INCREMENT (SEC)";S2 14 | 140 PRINT 15 | 150 INPUT "VELOCITY (FPS)";V 16 | 160 PRINT 17 | 170 INPUT "COEFFICIENT";C 18 | 180 PRINT 19 | 182 PRINT "FEET" 20 | 184 PRINT 21 | 186 S1=INT(70/(V/(16*S2))) 22 | 190 FOR I=1 TO S1 23 | 200 T(I)=V*C^(I-1)/16 24 | 210 NEXT I 25 | 220 FOR H=INT(-16*(V/32)^2+V^2/32+.5) TO 0 STEP -.5 26 | 221 IF INT(H)<>H THEN 225 27 | 222 PRINT H; 28 | 225 L=0 29 | 230 FOR I=1 TO S1 30 | 240 FOR T=0 TO T(I) STEP S2 31 | 245 L=L+S2 32 | 250 IF ABS(H-(.5*(-32)*T^2+V*C^(I-1)*T))>.25 THEN 270 33 | 260 PRINT TAB(L/S2);"0"; 34 | 270 NEXT T 35 | 275 T=T(I+1)/2 36 | 276 IF -16*T^2+V*C^(I-1)*T3 THEN PRINT "INPUT 1, 2, OR 3!": GOTO 170 20 | 190 ON T GOTO 200, 210, 200 21 | 200 P1=.65: P2=.55: P3=.5: P4=.5: GOTO 230 22 | 210 P1=.99: P2=.77: P3=.43: P4=.01: GOTO 230 23 | 220 P1=.95: P2=.75: P3=.45: P4=.05 24 | 230 U=RND(1) 25 | 240 IF U>=P1 THEN PRINT "BULLSEYE!! 40 POINTS!":B=40: GOTO 290 26 | 250 IF U>=P2 THEN PRINT "30-POINT ZONE!":B=30: GOTO 290 27 | 260 IF U>=P3 THEN PRINT "20-POINT ZONE":B=20: GOTO 290 28 | 270 IF U>=P4 THEN PRINT "WHEW! 10 POINTS.":B=10: GOTO 290 29 | 280 PRINT "MISSED THE TARGET! TOO BAD.": B=0 30 | 290 S(I)=S(I)+B: PRINT "TOTAL SCORE =";S(I): NEXT I 31 | 300 FOR I=1 TO N 32 | 310 IF S(I)>=200 THEN M=M+1: W(M)=I 33 | 320 NEXT I 34 | 330 IF M=0 THEN 150 35 | 340 PRINT: PRINT "WE HAVE A WINNER!!": PRINT 36 | 350 FOR I=1 TO M: PRINT A$(W(I));" SCORED";S(W(I));"POINTS.": NEXT I 37 | 360 PRINT: PRINT "THANKS FOR THE GAME.": END 38 | -------------------------------------------------------------------------------- /examples/vintage_bcg/bunny.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"BUNNY" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT: PRINT: PRINT 4 | 100 REM "BUNNY" FROM AHL'S 'BASIC COMPUTER GAMES' 5 | 110 REM 6 | 120 FOR I=0 TO 4: READ B(I): NEXT I 7 | 130 GOSUB 260 8 | 140 L=64: REM ASCII LETTER CODE... 9 | 150 REM 10 | 160 PRINT 11 | 170 READ X: IF X<0 THEN 160 12 | 175 IF X>128 THEN 240 13 | 180 PRINT TAB(X);: READ Y 14 | 190 FOR I=X TO Y: J=I-5*INT(I/5) 15 | 200 PRINT CHR$(L+B(J)); 16 | 210 NEXT I 17 | 220 GOTO 170 18 | 230 REM 19 | 240 GOSUB 260: GOTO 450 20 | 250 REM 21 | 260 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I 22 | 270 RETURN 23 | 280 REM 24 | 290 DATA 2,21,14,14,25 25 | 300 DATA 1,2,-1,0,2,45,50,-1,0,5,43,52,-1,0,7,41,52,-1 26 | 310 DATA 1,9,37,50,-1,2,11,36,50,-1,3,13,34,49,-1,4,14,32,48,-1 27 | 320 DATA 5,15,31,47,-1,6,16,30,45,-1,7,17,29,44,-1,8,19,28,43,-1 28 | 330 DATA 9,20,27,41,-1,10,21,26,40,-1,11,22,25,38,-1,12,22,24,36,-1 29 | 340 DATA 13,34,-1,14,33,-1,15,31,-1,17,29,-1,18,27,-1 30 | 350 DATA 19,26,-1,16,28,-1,13,30,-1,11,31,-1,10,32,-1 31 | 360 DATA 8,33,-1,7,34,-1,6,13,16,34,-1,5,12,16,35,-1 32 | 370 DATA 4,12,16,35,-1,3,12,15,35,-1,2,35,-1,1,35,-1 33 | 380 DATA 2,34,-1,3,34,-1,4,33,-1,6,33,-1,10,32,34,34,-1 34 | 390 DATA 14,17,19,25,28,31,35,35,-1,15,19,23,30,36,36,-1 35 | 400 DATA 14,18,21,21,24,30,37,37,-1,13,18,23,29,33,38,-1 36 | 410 DATA 12,29,31,33,-1,11,13,17,17,19,19,22,22,24,31,-1 37 | 420 DATA 10,11,17,18,22,22,24,24,29,29,-1 38 | 430 DATA 22,23,26,29,-1,27,29,-1,28,29,-1,4096 39 | 440 REM 40 | 450 END 41 | -------------------------------------------------------------------------------- /examples/vintage_bcg/buzzword.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(26);"BUZZWORD GENERATOR" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 40 PRINT "THIS PROGRAM PRINTS HIGHLY ACCEPTABLE PHRASES IN" 5 | 50 PRINT "'EDUCATOR-SPEAK'THAT YOU CAN WORK INTO REPORTS" 6 | 60 PRINT "AND SPEECHES. WHENEVER A QUESTION MARK IS PRINTED," 7 | 70 PRINT "TYPE A 'Y' FOR ANOTHER PHRASE OR 'N' TO QUIT." 8 | 80 PRINT:PRINT:PRINT "HERE'S THE FIRST PHRASE:" 9 | 90 DIM A$(40) 10 | 100 FOR I=1 TO 39 : READ A$(I) : NEXT I 11 | 110 PRINT A$(INT(13*RND(1)+1));" "; 12 | 120 PRINT A$(INT(13*RND(1)+14));" "; 13 | 130 PRINT A$(INT(13*RND(1)+27)) : PRINT 14 | 150 INPUT Y$ : IF Y$="Y" THEN 110 15 | 160 GOTO 999 16 | 200 DATA "ABILITY","BASAL","BEHAVIORAL","CHILD-CENTERED" 17 | 210 DATA "DIFFERENTIATED","DISCOVERY","FLEXIBLE","HETEROGENEOUS" 18 | 220 DATA "HOMOGENEOUS","MANIPULATIVE","MODULAR","TAVISTOCK" 19 | 230 DATA "INDIVIDUALIZED","LEARNING","EVALUATIVE","OBJECTIVE" 20 | 240 DATA "COGNITIVE","ENRICHMENT","SCHEDULING","HUMANISTIC" 21 | 250 DATA "INTEGRATED","NON-GRADED","TRAINING","VERTICAL AGE" 22 | 260 DATA "MOTIVATIONAL","CREATIVE","GROUPING","MODIFICATION" 23 | 270 DATA "ACCOUNTABILITY","PROCESS","CORE CURRICULUM","ALGORITHM" 24 | 280 DATA "PERFORMANCE","REINFORCEMENT","OPEN CLASSROOM","RESOURCE" 25 | 290 DATA "STRUCTURE","FACILITY","ENVIRONMENT" 26 | 999 PRINT "COME BACK WHEN YOU NEED HELP WITH ANOTHER REPORT!":END 27 | -------------------------------------------------------------------------------- /examples/vintage_bcg/calendar.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(32);"CALENDAR" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 REM VALUES FOR 1979 - SEE NOTES 5 | 110 DIM M(12) 6 | 120 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I 7 | 130 D=1: REM 1979 STARTS ON MONDAY (0=SUN, -1=MON, -2=TUES...) 8 | 140 S=0 9 | 150 REM READ DAYS OF EACH MONTH 10 | 160 FOR N=0 TO 12: READ M(N): NEXT N 11 | 170 REM 12 | 180 FOR N=1 TO 12 13 | 190 PRINT: PRINT: S=S+M(N-1) 14 | 200 PRINT "**";S;TAB(7); 15 | 210 FOR I=1 TO 18: PRINT "*";: NEXT I 16 | 220 ON N GOTO 230,240,250,260,270,280,290,300,310,320,330,340 17 | 230 PRINT " JANUARY ";: GOTO 350 18 | 240 PRINT " FEBRUARY";: GOTO 350 19 | 250 PRINT " MARCH ";: GOTO 350 20 | 260 PRINT " APRIL ";: GOTO 350 21 | 270 PRINT " MAY ";: GOTO 350 22 | 280 PRINT " JUNE ";: GOTO 350 23 | 290 PRINT " JULY ";: GOTO 350 24 | 300 PRINT " AUGUST ";: GOTO 350 25 | 310 PRINT "SEPTEMBER";: GOTO 350 26 | 320 PRINT " OCTOBER ";: GOTO 350 27 | 330 PRINT " NOVEMBER";: GOTO 350 28 | 340 PRINT " DECEMBER"; 29 | 350 FOR I=1 TO 18: PRINT "*";: NEXT I 30 | 360 PRINT 365-S;"**"; 31 | 370 REM 366-S; ON LEAP YEARS 32 | 380 PRINT CHR$(10): PRINT " S M T W"; 33 | 390 PRINT " T F S" 34 | 400 PRINT 35 | 410 FOR I=1 TO 59: PRINT "*";: NEXT I 36 | 420 REM 37 | 430 FOR W=1 TO 6 38 | 440 PRINT CHR$(10) 39 | 450 PRINT TAB(4) 40 | 460 REM 41 | 470 FOR G=1 TO 7 42 | 480 D=D+1 43 | 490 D2=D-S 44 | 500 IF D2>M(N) THEN 580 45 | 510 IF D2>0 THEN PRINT D2; 46 | 520 PRINT TAB(4+8*G); 47 | 530 NEXT G 48 | 540 REM 49 | 550 IF D2=M(N) THEN 590 50 | 560 NEXT W 51 | 570 REM 52 | 580 D=D-G 53 | 590 NEXT N 54 | 600 REM 55 | 610 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I 56 | 620 DATA 0,31,28,31,30,31,30,31,31,30,31,30,31 57 | 630 REM 0,31,29, ..., ON LEAP YEARS 58 | 640 END 59 | -------------------------------------------------------------------------------- /examples/vintage_bcg/change.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"CHANGE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 5 PRINT:PRINT:PRINT 4 | 6 PRINT "I, YOUR FRIENDLY MICROCOMPUTER, WILL DETERMINE" 5 | 8 PRINT "THE CORRECT CHANGE FOR ITEMS COSTING UP TO $100." 6 | 9 PRINT:PRINT 7 | 10 PRINT "COST OF ITEM";:INPUT A:PRINT "AMOUNT OF PAYMENT";:INPUT P 8 | 20 C=P-A:M=C:IF C<>0 THEN 90 9 | 25 PRINT "CORRECT AMOUNT, THANK YOU." 10 | 30 GOTO 400 11 | 90 IF C>0 THEN 120 12 | 95 PRINT "SORRY, YOU HAVE SHORT-CHANGED ME $";A-P 13 | 100 GOTO 10 14 | 120 PRINT "YOUR CHANGE, $";C 15 | 130 D=INT(C/10) 16 | 140 IF D=0 THEN 155 17 | 150 PRINT D;"TEN DOLLAR BILL(S)" 18 | 155 C=M-(D*10) 19 | 160 E=INT(C/5) 20 | 170 IF E=0 THEN 185 21 | 180 PRINT E;"FIVE DOLLARS BILL(S)" 22 | 185 C=M-(D*10+E*5) 23 | 190 F=INT(C) 24 | 200 IF F=0 THEN 215 25 | 210 PRINT F;"ONE DOLLAR BILL(S)" 26 | 215 C=M-(D*10+E*5+F) 27 | 220 C=C*100 28 | 225 N=C 29 | 230 G=INT(C/50) 30 | 240 IF G=0 THEN 255 31 | 250 PRINT G;"ONE HALF DOLLAR(S)" 32 | 255 C=N-(G*50) 33 | 260 H=INT(C/25) 34 | 270 IF H=0 THEN 285 35 | 280 PRINT H;"QUARTER(S)" 36 | 285 C=N-(G*50+H*25) 37 | 290 I=INT(C/10) 38 | 300 IF I=0 THEN 315 39 | 310 PRINT I;"DIME(S)" 40 | 315 C=N-(G*50+H*25+I*10) 41 | 320 J=INT(C/5) 42 | 330 IF J=0 THEN 345 43 | 340 PRINT J;"NICKEL(S)" 44 | 345 C=N-(G*50+H*25+I*10+J*5) 45 | 350 K=INT(C+.5) 46 | 360 IF K=0 THEN 380 47 | 370 PRINT K;"PENNY(S)" 48 | 380 PRINT "THANK YOU, COME AGAIN." 49 | 390 PRINT:PRINT 50 | 400 GOTO 10 51 | 410 END 52 | -------------------------------------------------------------------------------- /examples/vintage_bcg/chemist.bas: -------------------------------------------------------------------------------- 1 | 3 PRINT TAB(33);"CHEMIST" 2 | 6 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 8 PRINT:PRINT:PRINT 4 | 10 PRINT "THE FICTITIOUS CHECMICAL KRYPTOCYANIC ACID CAN ONLY BE" 5 | 20 PRINT "DILUTED BY THE RATIO OF 7 PARTS WATER TO 3 PARTS ACID." 6 | 30 PRINT "IF ANY OTHER RATIO IS ATTEMPTED, THE ACID BECOMES UNSTABLE" 7 | 40 PRINT "AND SOON EXPLODES. GIVEN THE AMOUNT OF ACID, YOU MUST" 8 | 50 PRINT "DECIDE WHO MUCH WATER TO ADD FOR DILUTION. IF YOU MISS" 9 | 60 PRINT "YOU FACE THE CONSEQUENCES." 10 | 100 A=INT(RND(1)*50) 11 | 110 W=7*A/3 12 | 120 PRINT A;"LITERS OF KRYPTOCYANIC ACID. HOW MUCH WATER"; 13 | 130 INPUT R 14 | 140 D=ABS(W-R) 15 | 150 IF D>W/20 THEN 200 16 | 160 PRINT " GOOD JOB! YOU MAY BREATHE NOW, BUT DON'T INHALE THE FUMES!" 17 | 170 PRINT 18 | 180 GOTO 100 19 | 200 PRINT " SIZZLE! YOU HAVE JUST BEEN DESALINATED INTO A BLOB" 20 | 210 PRINT " OF QUIVERING PROTOPLASM!" 21 | 220 T=T+1 22 | 230 IF T=9 THEN 260 23 | 240 PRINT " HOWEVER, YOU MAY TRY AGAIN WITH ANOTHER LIFE." 24 | 250 GOTO 100 25 | 260 PRINT " YOUR 9 LIVES ARE USED, BUT YOU WILL BE LONG REMEMBERED FOR" 26 | 270 PRINT " YOUR CONTRIBUTIONS TO THE FIELD OF COMIC BOOK CHEMISTRY." 27 | 280 END 28 | -------------------------------------------------------------------------------- /examples/vintage_bcg/chief.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(30) "CHIEF" 2 | 4 PRINT TAB(15) "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT:PRINT:PRINT 4 | 10 PRINT "I AM CHIEF NUMBERS FREEK, THE GREAT INDIAN MATH GOD." 5 | 20 PRINT "ARE YOU READY TO TAKE THE TEST YOU CALLED ME OUT FOR"; 6 | 30 INPUT A$ 7 | 40 IF A$="YES" THEN 60 8 | 50 PRINT "SHUT UP, PALE FACE WITH WISE TONGUE." 9 | 60 PRINT " TAKE A NUMBER AND ADD 3. DIVIDE THIS NUMBER BY 5 AND" 10 | 70 PRINT "MULTIPLY BY 8. DIVIDE BY 5 AND ADD THE SAME. SUBTRACT 1." 11 | 80 PRINT " WHAT DO YOU HAVE"; 12 | 90 INPUT B 13 | 100 LET C = (B+1-5)*5/8*5-3 14 | 110 PRINT "I BET YOUR NUMBER WAS" C". AM I RIGHT"; 15 | 120 INPUT D$ 16 | 130 IF D$="YES" THEN 500 17 | 140 PRINT "WHAT WAS YOUR ORIGINAL NUMBER"; 18 | 150 INPUT K 19 | 155 LET F=K+3 20 | 160 LET G=F/5 21 | 170 LET H=G*8 22 | 180 LET I=H/5+5 23 | 190 LET J=I-1 24 | 200 PRINT "SO YOU THINK YOU'RE SO SMART, EH?" 25 | 210 PRINT "NOW WATCH." 26 | 230 PRINT K"PLUS 3 EQUALS"F". THIS DIVIDED BY 5 EQUALS"G";" 27 | 240 PRINT "THIS TIMES 8 EQUALS"H". IF WE DIVIDE BY 5 AND ADD 5," 28 | 250 PRINT "WE GET"I", WHICH, MINUS 1, EQUALS"J"." 29 | 260 PRINT "NOW DO YOU BELIEVE ME"; 30 | 270 INPUT Z$ 31 | 290 IF Z$="YES" THEN 500 32 | 295 PRINT "YOU HAVE MADE ME MAD!!!" 33 | 300 PRINT "THERE MUST BE A GREAT LIGHTNING BOLT!" 34 | 310 PRINT:PRINT 35 | 330 FOR X=30 TO 22 STEP -1 36 | 340 PRINT TAB(X) "X X" 37 | 350 NEXT X 38 | 360 PRINT TAB(21) "X XXX" 39 | 370 PRINT TAB(20) "X X" 40 | 380 PRINT TAB(19) "XX X" 41 | 390 FOR Y=20 TO 13 STEP -1 42 | 400 PRINT TAB(Y) "X X" 43 | 410 NEXT Y 44 | 420 PRINT TAB(12) "XX" 45 | 430 PRINT TAB(11) "X" 46 | 440 PRINT TAB(10) "*" 47 | 450 PRINT:PRINT"#########################":PRINT 48 | 470 PRINT "I HOPE YOU BELIEVE ME NOW, FOR YOUR SAKE!!" 49 | 480 GOTO 520 50 | 510 PRINT "BYE!!!" 51 | 520 END 52 | -------------------------------------------------------------------------------- /examples/vintage_bcg/craps.bas: -------------------------------------------------------------------------------- 1 | 5 PRINT TAB(33);"CRAPS" 2 | 10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 12 PRINT:PRINT:PRINT 4 | 15 LET R=0 5 | 20 PRINT"2,3,12 ARE LOSERS; 4,5,6,8,9,10 ARE POINTS; 7,11 ARE NATURAL WINNERS." 6 | 21 LET T=1 7 | 22 PRINT "PICK A NUMBER AND INPUT TO ROLL DICE"; 8 | 23 INPUT Z 9 | 24 LET X=(RND(0)) 10 | 25 LET T =T+1 11 | 26 IF T<=Z THEN 24 12 | 27 PRINT"INPUT THE AMOUNT OF YOUR WAGER."; 13 | 28 INPUT F 14 | 30 PRINT "I WILL NOW THROW THE DICE" 15 | 40 LET E=INT(7*RND(1)) 16 | 41 LET S=INT(7*RND(1)) 17 | 42 LET X=E+S 18 | 50 IF X=7 THEN 180 19 | 55 IF X=11 THEN 180 20 | 60 IF X=1 THEN 40 21 | 62 IF X=2 THEN 195 22 | 65 IF X=0 THEN 40 23 | 70 IF X=2 THEN 200 24 | 80 IF X=3 THEN 200 25 | 90 IF X=12 THEN 200 26 | 125 IF X=5 THEN 220 27 | 130 IF X =6 THEN 220 28 | 140 IF X=8 THEN 220 29 | 150 IF X=9 THEN 220 30 | 160 IF X =10 THEN 220 31 | 170 IF X=4 THEN 220 32 | 180 PRINT X "- NATURAL....A WINNER!!!!" 33 | 185 PRINT X"PAYS EVEN MONEY, YOU WIN"F"DOLLARS" 34 | 190 GOTO 210 35 | 195 PRINT X"- SNAKE EYES....YOU LOSE." 36 | 196 PRINT "YOU LOSE"F "DOLLARS." 37 | 197 LET F=0-F 38 | 198 GOTO 210 39 | 200 PRINT X " - CRAPS...YOU LOSE." 40 | 205 PRINT "YOU LOSE"F"DOLLARS." 41 | 206 LET F=0-F 42 | 210 LET R= R+F 43 | 211 GOTO 320 44 | 220 PRINT X "IS THE POINT. I WILL ROLL AGAIN" 45 | 230 LET H=INT(7*RND(1)) 46 | 231 LET Q=INT(7*RND(1)) 47 | 232 LET O=H+Q 48 | 240 IF O=1 THEN 230 49 | 250 IF O=7 THEN 290 50 | 255 IF O=0 THEN 230 51 | 260 IF O=X THEN 310 52 | 270 PRINT O " - NO POINT. I WILL ROLL AGAIN" 53 | 280 GOTO 230 54 | 290 PRINT O "- CRAPS. YOU LOSE." 55 | 291 PRINT "YOU LOSE $"F 56 | 292 F=0-F 57 | 293 GOTO 210 58 | 300 GOTO 320 59 | 310 PRINT X"- A WINNER.........CONGRATS!!!!!!!!" 60 | 311 PRINT X "AT 2 TO 1 ODDS PAYS YOU...LET ME SEE..."2*F"DOLLARS" 61 | 312 LET F=2*F 62 | 313 GOTO 210 63 | 320 PRINT " IF YOU WANT TO PLAY AGAIN PRINT 5 IF NOT PRINT 2"; 64 | 330 INPUT M 65 | 331 IF R<0 THEN 334 66 | 332 IF R>0 THEN 336 67 | 333 IF R=0 THEN 338 68 | 334 PRINT "YOU ARE NOW UNDER $";-R 69 | 335 GOTO 340 70 | 336 PRINT "YOU ARE NOW AHEAD $";R 71 | 337 GOTO 340 72 | 338 PRINT "YOU ARE NOW EVEN AT 0" 73 | 340 IF M=5 THEN 27 74 | 341 IF R<0 THEN 350 75 | 342 IF R>0 THEN 353 76 | 343 IF R=0 THEN 355 77 | 350 PRINT"TOO BAD, YOU ARE IN THE HOLE. COME AGAIN." 78 | 351 GOTO 360 79 | 353 PRINT"CONGRATULATIONS---YOU CAME OUT A WINNER. COME AGAIN!" 80 | 354 GOTO 360 81 | 355 PRINT"CONGRATULATIONS---YOU CAME OUT EVEN, NOT BAD FOR AN AMATEUR" 82 | 360 END 83 | -------------------------------------------------------------------------------- /examples/vintage_bcg/depthcharge.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(30);"DEPTH CHARGE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 20 INPUT "DIMENSION OF SEARCH AREA";G: PRINT 5 | 30 N=INT(LOG(G)/LOG(2))+1 6 | 40 PRINT "YOU ARE THE CAPTAIN OF THE DESTROYER USS COMPUTER" 7 | 50 PRINT "AN ENEMY SUB HAS BEEN CAUSING YOU TROUBLE. YOUR" 8 | 60 PRINT "MISSION IS TO DESTROY IT. YOU HAVE";N;"SHOTS." 9 | 70 PRINT "SPECIFY DEPTH CHARGE EXPLOSION POINT WITH A" 10 | 80 PRINT "TRIO OF NUMBERS -- THE FIRST TWO ARE THE" 11 | 90 PRINT "SURFACE COORDINATES; THE THIRD IS THE DEPTH." 12 | 100 PRINT : PRINT "GOOD LUCK !": PRINT 13 | 110 A=INT(G*RND(1)) : B=INT(G*RND(1)) : C=INT(G*RND(1)) 14 | 120 FOR D=1 TO N : PRINT : PRINT "TRIAL #";D; : INPUT X,Y,Z 15 | 130 IF ABS(X-A)+ABS(Y-B)+ABS(Z-C)=0 THEN 300 16 | 140 GOSUB 500 : PRINT : NEXT D 17 | 200 PRINT : PRINT "YOU HAVE BEEN TORPEDOED! ABANDON SHIP!" 18 | 210 PRINT "THE SUBMARINE WAS AT";A;",";B;",";C : GOTO 400 19 | 300 PRINT : PRINT "B O O M ! ! YOU FOUND IT IN";D;"TRIES!" 20 | 400 PRINT : PRINT: INPUT "ANOTHER GAME (Y OR N)";A$ 21 | 410 IF A$="Y" THEN 100 22 | 420 PRINT "OK. HOPE YOU ENJOYED YOURSELF." : GOTO 600 23 | 500 PRINT "SONAR REPORTS SHOT WAS "; 24 | 510 IF Y>B THEN PRINT "NORTH"; 25 | 520 IF YA THEN PRINT "EAST"; 27 | 540 IF XB OR X<>A THEN PRINT " AND"; 29 | 560 IF Z>C THEN PRINT " TOO LOW." 30 | 570 IF ZLEN(A$) THEN PRINT "!";:GOTO 50 15 | 34 PRINT MID$(A$,C,1); 16 | 36 C=C+1 17 | 50 NEXT A 18 | 53 IF M=Q THEN 60 19 | 55 PRINT TAB(R*M+(R-N)/2); 20 | 56 NEXT M 21 | 60 PRINT 22 | 70 NEXT N 23 | 83 IF X<>1 THEN 95 24 | 85 X=R-2:Y=1:Z=-2 25 | 90 GOTO 20 26 | 95 NEXT L 27 | 99 END 28 | -------------------------------------------------------------------------------- /examples/vintage_bcg/dice.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(34);"DICE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT:PRINT:PRINT 4 | 10 DIM F(12) 5 | 20 REM DANNY FREIDUS 6 | 30 PRINT "THIS PROGRAM SIMULATES THE ROLLING OF A" 7 | 40 PRINT "PAIR OF DICE." 8 | 50 PRINT "YOU ENTER THE NUMBER OF TIMES YOU WANT THE COMPUTER TO" 9 | 60 PRINT "'ROLL' THE DICE. WATCH OUT, VERY LARGE NUMBERS TAKE" 10 | 70 PRINT "A LONG TIME. IN PARTICULAR, NUMBERS OVER 5000." 11 | 80 FOR Q=1 TO 12 12 | 90 F(Q)=0 13 | 100 NEXT Q 14 | 110 PRINT:PRINT "HOW MANY ROLLS"; 15 | 120 INPUT X 16 | 130 FOR S=1 TO X 17 | 140 A=INT(6*RND(1)+1) 18 | 150 B=INT(6*RND(1)+1) 19 | 160 R=A+B 20 | 170 F(R)=F(R)+1 21 | 180 NEXT S 22 | 185 PRINT 23 | 190 PRINT "TOTAL SPOTS","NUMBER OF TIMES" 24 | 200 FOR V=2 TO 12 25 | 210 PRINT V,F(V) 26 | 220 NEXT V 27 | 221 PRINT 28 | 222 PRINT:PRINT "TRY AGAIN"; 29 | 223 INPUT Z$ 30 | 224 IF Z$="YES" THEN 80 31 | 240 END 32 | -------------------------------------------------------------------------------- /examples/vintage_bcg/flipflop.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(32);"FLIPFLOP" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT 4 | 10 REM *** CREATED BY MICHAEL CASS 5 | 15 DIM A$(20) 6 | 20 PRINT "THE OBJECT OF THIS PUZZLE IS TO CHANGE THIS:" 7 | 30 PRINT 8 | 40 PRINT "X X X X X X X X X X" 9 | 50 PRINT 10 | 60 PRINT "TO THIS:" 11 | 70 PRINT 12 | 80 PRINT "O O O O O O O O O O" 13 | 90 PRINT 14 | 100 PRINT "BY TYPING THE NUMBER CORRESPONDING TO THE POSITION OF THE" 15 | 110 PRINT "LETTER ON SOME NUMBERS, ONE POSITION WILL CHANGE, ON" 16 | 120 PRINT "OTHERS, TWO WILL CHANGE. TO RESET LINE TO ALL X'S, TYPE 0" 17 | 130 PRINT "(ZERO) AND TO START OVER IN THE MIDDLE OF A GAME, TYPE " 18 | 140 PRINT "11 (ELEVEN)." 19 | 170 PRINT 20 | 180 REM 21 | 190 Q=RND(1) 22 | 200 PRINT "HERE IS THE STARTING LINE OF X'S." 23 | 210 PRINT 24 | 220 C=0 25 | 230 PRINT "1 2 3 4 5 6 7 8 9 10" 26 | 240 PRINT "X X X X X X X X X X" 27 | 250 PRINT 28 | 260 REM 29 | 270 FOR X=1 TO 10 30 | 280 A$(X)="X" 31 | 290 NEXT X 32 | 300 GOTO 320 33 | 310 PRINT "ILLEGAL ENTRY--TRY AGAIN." 34 | 320 PRINT "INPUT THE NUMBER"; 35 | 330 INPUT N 36 | 340 IF N<>INT(N) THEN 310 37 | 350 IF N=11 THEN 180 38 | 360 IF N>11 THEN 310 39 | 370 IF N=0 THEN 230 40 | 380 IF M=N THEN 510 41 | 390 M=N 42 | 400 IF A$(N)="O" THEN 480 43 | 410 A$(N)="O" 44 | 420 R=TAN(Q+N/Q-N)-SIN(Q/N)+336*SIN(8*N) 45 | 430 N=R-INT(R) 46 | 440 N=INT(10*N) 47 | 450 IF A$(N)="O" THEN 480 48 | 460 A$(N)="O" 49 | 470 GOTO 610 50 | 480 A$(N)="X" 51 | 490 IF M=N THEN 420 52 | 500 GOTO 610 53 | 510 IF A$(N)="O" THEN 590 54 | 520 A$(N)="O" 55 | 530 R=.592*(1/TAN(Q/N+Q))/SIN(N*2+Q)-COS(N) 56 | 540 N=R-INT(R) 57 | 550 N=INT(10*N) 58 | 560 IF A$(N)="O" THEN 590 59 | 570 A$(N)="O" 60 | 580 GOTO 610 61 | 590 A$(N)="X" 62 | 600 IF M=N THEN 530 63 | 610 PRINT "1 2 3 4 5 6 7 8 9 10" 64 | 620 FOR Z=1 TO 10: PRINT A$(Z);" ";: NEXT Z 65 | 630 C=C+1 66 | 640 PRINT 67 | 650 FOR Z=1 TO 10 68 | 660 IF A$(Z)<>"O" THEN 320 69 | 670 NEXT Z 70 | 680 IF C>12 THEN 710 71 | 690 PRINT "VERY GOOD. YOU GUESSED IT IN ONLY";C;"GUESSES." 72 | 700 GOTO 720 73 | 710 PRINT "TRY HARDER NEXT TIME. IT TOOK YOU";C;"GUESSES." 74 | 720 PRINT "DO YOU WANT TO TRY ANOTHER PUZZLE"; 75 | 730 INPUT X$ 76 | 740 IF LEFT$(X$,1)="N" THEN 780 77 | 760 PRINT 78 | 770 GOTO 180 79 | 780 END 80 | -------------------------------------------------------------------------------- /examples/vintage_bcg/gameofevenwins.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(28);"GAME OF EVEN WINS" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT 4 | 4 INPUT "DO YOU WANT INSTRUCTIONS (YES OR NO)";A$:PRINT 5 | 5 IF A$="NO" THEN 20 6 | 6 PRINT "THE GAME IS PLAYED AS FOLLOWS:":PRINT 7 | 7 PRINT "AT THE BEGINNING OF THE GAME, A RANDOM NUMBER OF CHIPS ARE" 8 | 8 PRINT "PLACED ON THE BOARD. THE NUMBER OF CHIPS ALWAYS STARTS" 9 | 9 PRINT "AS AN ODD NUMBER. ON EACH TURN, A PLAYER MUST TAKE ONE," 10 | 10 PRINT "TWO, THREE, OR FOUR CHIPS. THE WINNER IS THE PLAYER WHO" 11 | 11 PRINT "FINISHES WITH A TOTAL NUMBER OF CHIPS THAT IS EVEN." 12 | 12 PRINT "THE COMPUTER STARTS OUT KNOWING ONLY THE RULES OF THE" 13 | 13 PRINT "GAME. IT GRADUALLY LEARNS TO PLAY WELL. IT SHOULD BE" 14 | 14 PRINT "DIFFICULT TO BEAT THE COMPUTER AFTER TWENTY GAMES IN A ROW." 15 | 15 PRINT "TRY IT!!!!": PRINT 16 | 16 PRINT "TO QUIT AT ANY TIME, TYPE A '0' AS YOUR MOVE.": PRINT 17 | 20 DIM R(1,5) 18 | 25 L=0: B=0 19 | 30 FOR I=0 TO 5 20 | 40 R(1,I)=4 21 | 50 R(0,I)=4 22 | 60 NEXT I 23 | 70 A=0: B=0 24 | 90 P=INT((13*RND(1)+9)/2)*2+1 25 | 100 IF P=1 THEN 530 26 | 110 PRINT "THERE ARE";P;"CHIPS ON THE BOARD." 27 | 120 E1=E 28 | 130 L1=L 29 | 140 E=(A/2-INT(A/2))*2 30 | 150 L=INT((P/6-INT(P/6))*6+.5) 31 | 160 IF R(E,L)>=P THEN 320 32 | 170 M=R(E,L) 33 | 180 IF M<=0 THEN 370 34 | 190 P=P-M 35 | 200 IF M=1 THEN 510 36 | 210 PRINT "COMPUTER TAKES";M;"CHIPS LEAVING";P;"... YOUR MOVE"; 37 | 220 B=B+M 38 | 230 INPUT M 39 | 240 M=INT(M) 40 | 250 IF M<1 THEN 450 41 | 260 IF M>4 THEN 460 42 | 270 IF M>P THEN 460 43 | 280 IF M=P THEN 360 44 | 290 P=P-M 45 | 300 A=A+M 46 | 310 GOTO 100 47 | 320 IF P=1 THEN 550 48 | 330 PRINT "COMPUTER TAKES";P;"CHIPS." 49 | 340 R(E,L)=P 50 | 350 B=B+P 51 | 360 IF B/2=INT(B/2) THEN 420 52 | 370 PRINT "GAME OVER ... YOU WIN!!!": PRINT 53 | 390 IF R(E,L)=1 THEN 480 54 | 400 R(E,L)=R(E,L)-1 55 | 410 GOTO 70 56 | 420 PRINT "GAME OVER ... I WIN!!!": PRINT 57 | 430 GOTO 70 58 | 450 IF M=0 THEN 570 59 | 460 PRINT M;"IS AN ILLEGAL MOVE ... YOUR MOVE"; 60 | 470 GOTO 230 61 | 480 IF R(E1,L1)=1 THEN 70 62 | 490 R(E1,L1)=R(E1,L1)-1 63 | 500 GOTO 70 64 | 510 PRINT "COMPUTER TAKES 1 CHIP LEAVING";P;"... YOUR MOVE"; 65 | 520 GOTO 220 66 | 530 PRINT "THERE IS 1 CHIP ON THE BOARD." 67 | 540 GOTO 120 68 | 550 PRINT "COMPUTER TAKES 1 CHIP." 69 | 560 GOTO 340 70 | 570 END 71 | -------------------------------------------------------------------------------- /examples/vintage_bcg/gomoko.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"GOMOKO" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT:PRINT:PRINT 4 | 8 DIM A(19,19) 5 | 10 PRINT "WELCOME TO THE ORIENTAL GAME OF GOMOKO." 6 | 20 PRINT: PRINT "THE GAME IS PLAYED ON AN N BY N GRID OF A SIZE" 7 | 30 PRINT "THAT YOU SPECIFY. DURING YOUR PLAY, YOU MAY COVER ONE GRID" 8 | 40 PRINT "INTERSECTION WITH A MARKER. THE OBJECT OF THE GAME IS TO GET" 9 | 50 PRINT "5 ADJACENT MARKERS IN A ROW -- HORIZONTALLY, VERTICALLY, OR" 10 | 60 PRINT "DIAGONALLY. ON THE BOARD DIAGRAM, YOUR MOVES ARE MARKED" 11 | 70 PRINT "WITH A '1' AND THE COMPUTER MOVES WITH A '2'." 12 | 80 PRINT: PRINT "THE COMPUTER DOES NOT KEEP TRACK OF WHO HAS WON." 13 | 90 PRINT "TO END THE GAME, TYPE -1,-1 FOR YOUR MOVE.": PRINT 14 | 110 PRINT "WHAT IS YOUR BOARD SIZE (MIN 7/ MAX 19)";: INPUT N 15 | 115 IF N>6 THEN 117 16 | 116 GOTO 120 17 | 117 IF N<20 THEN 210 18 | 120 PRINT "I SAID, THE MINIMUM IS 7, THE MAXIMUM IS 19.": GOTO 110 19 | 210 FOR I=1 TO N:FOR J=1 TO N: A(I,J)=0: NEXT J: NEXT I 20 | 300 PRINT: PRINT "WE ALTERNATE MOVES. YOU GO FIRST...": PRINT 21 | 310 PRINT "YOUR PLAY (I,J)";: INPUT I,J 22 | 315 PRINT 23 | 320 IF I=-1 THEN 980 24 | 330 X=I: Y=J: GOSUB 910: IF L=1 THEN 410 25 | 340 PRINT "ILLEGAL MOVE. TRY AGAIN...": GOTO 310 26 | 410 IF A(I,J)=0 THEN 440 27 | 420 PRINT "SQUARE OCCUPIED. TRY AGAIN...": GOTO 310 28 | 440 A(I,J)=1 29 | 500 REM *** COMPUTER TRIES AN INTELLIGENT MOVE *** 30 | 510 FOR E=-1 TO 1: FOR F=-1 TO 1: IF E+F-E*F=0 THEN 590 31 | 540 X=I+F: Y=J+F: GOSUB 910 32 | 570 IF L=0 THEN 590 33 | 580 IF A(X,Y)=1 THEN 710 34 | 590 NEXT F: NEXT E 35 | 600 REM *** COMPUTER TRIES A RANDOM MOVE *** 36 | 610 X=INT(N*RND(1)+1): Y=INT(N*RND(1)+1): GOSUB 910: IF L=0 THEN 610 37 | 650 IF A(X,Y)<>0 THEN 610 38 | 660 A(X,Y)=2: GOSUB 810: GOTO 310 39 | 710 X=I-E: Y=J-F: GOSUB 910 40 | 750 IF L=0 THEN 610 41 | 760 GOTO 650 42 | 800 REM *** PRINT THE BOARD *** 43 | 810 FOR I=1 TO N: FOR J=1 TO N: PRINT A(I,J); 44 | 840 NEXT J: PRINT: NEXT I: PRINT: RETURN 45 | 910 L=1: IF X<1 THEN 970 46 | 920 IF X>N THEN 970 47 | 930 IF Y<1 THEN 970 48 | 940 IF Y>N THEN 970 49 | 950 RETURN 50 | 970 L=0: RETURN 51 | 980 PRINT: PRINT "THANKS FOR THE GAME!!" 52 | 985 PRINT "PLAY AGAIN (1 FOR YES, 0 FOR NO)";: INPUT Q 53 | 990 IF Q=1 THEN 110 54 | 999 END 55 | -------------------------------------------------------------------------------- /examples/vintage_bcg/guess.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"GUESS" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 4 PRINT "THIS IS A NUMBER GUESSING GAME. I'LL THINK" 5 | 5 PRINT "OF A NUMBER BETWEEN 1 AND ANY LIMIT YOU WANT." 6 | 6 PRINT "THEN YOU HAVE TO GUESS WHAT IT IS." 7 | 7 PRINT 8 | 8 PRINT "WHAT LIMIT DO YOU WANT"; 9 | 9 INPUT L 10 | 10 PRINT 11 | 11 L1=INT(LOG(L)/LOG(2))+1 12 | 12 PRINT "I'M THINKING OF A NUMBER BETWEEN 1 AND";L 13 | 13 G=1 14 | 14 PRINT "NOW YOU TRY TO GUESS WHAT IT IS." 15 | 15 M=INT(L*RND(1)+1) 16 | 20 INPUT N 17 | 21 IF N>0 THEN 25 18 | 22 GOSUB 70 19 | 23 GOTO 1 20 | 25 IF N=M THEN 50 21 | 30 G=G+1 22 | 31 IF N>M THEN 40 23 | 32 PRINT "TOO LOW. TRY A BIGGER ANSWER." 24 | 33 GOTO 20 25 | 40 PRINT "TOO HIGH. TRY A SMALLER ANSWER." 26 | 42 GOTO 20 27 | 50 PRINT "THAT'S IT! YOU GOT IT IN";G;"TRIES." 28 | 52 IF G89 THEN 250 36 | 430 IF B<1 THEN 230 37 | 440 S=S+1 38 | 442 IF S<6 THEN 450 39 | 444 PRINT:PRINT "BOOM !!!! YOU HAVE JUST BEEN DESTROYED "; 40 | 446 PRINT "BY THE ENEMY." : PRINT : PRINT : PRINT : GOTO 495 41 | 450 B2=2*B/57.3 : I=R*SIN(B2) : X=T-I : E=INT(X) 42 | 460 IF ABS(E)<100 THEN 320 43 | 470 IF E>100 THEN 290 44 | 480 GOTO 270 45 | 490 PRINT : PRINT : PRINT "TOTAL ROUNDS EXPENDED WERE:";S1 46 | 492 IF S1>18 THEN 495 47 | 493 PRINT "NICE SHOOTING !!" : GOTO 500 48 | 495 PRINT "BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!" 49 | 500 PRINT : INPUT "TRY AGAIN (Y OR N)";Z$ 50 | 510 IF Z$="Y" THEN 170 51 | 520 PRINT:PRINT "OK. RETURN TO BASE CAMP." 52 | 999 END 53 | -------------------------------------------------------------------------------- /examples/vintage_bcg/hi-lo.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(34);"HI LO" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 PRINT "THIS IS THE GAME OF HI LO.":PRINT 5 | 110 PRINT "YOU WILL HAVE 6 TRIES TO GUESS THE AMOUNT OF MONEY IN THE" 6 | 120 PRINT "HI LO JACKPOT, WHICH IS BETWEEN 1 AND 100 DOLLARS. IF YOU" 7 | 130 PRINT "GUESS THE AMOUNT, YOU WIN ALL THE MONEY IN THE JACKPOT!" 8 | 140 PRINT "THEN YOU GET ANOTHER CHANCE TO WIN MORE MONEY. HOWEVER," 9 | 150 PRINT "IF YOU DO NOT GUESS THE AMOUNT, THE GAME ENDS.":PRINT 10 | 160 R=0 11 | 170 B=0:PRINT 12 | 180 Y=INT(100*RND(1)) 13 | 200 PRINT "YOUR GUESS"; 14 | 210 INPUT A 15 | 220 B=B+1 16 | 230 IF A=Y THEN 300 17 | 240 IF A>Y THEN 270 18 | 250 PRINT "YOUR GUESS IS TOO LOW.":GOTO 280 19 | 270 PRINT "YOUR GUESS IS TOO HIGH." 20 | 280 PRINT:IF B<6 THEN 200 21 | 290 PRINT "YOU BLEW IT...TOO BAD...THE NUMBER WAS";Y 22 | 295 R=0:GOTO 350 23 | 300 PRINT "GOT IT!!!!!!!!!! YOU WIN";Y;"DOLLARS." 24 | 310 R=R+Y 25 | 320 PRINT "YOUR TOTAL WINNINGS ARE NOW";R;"DOLLARS." 26 | 350 PRINT:PRINT "PLAY AGAIN (YES OR NO)"; 27 | 360 INPUT A$:IF A$="YES" THEN 170 28 | 380 PRINT:PRINT "SO LONG. HOPE YOU ENJOYED YOURSELF!!!" 29 | 390 END 30 | -------------------------------------------------------------------------------- /examples/vintage_bcg/hurkle.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"HURKLE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 110 N=5 5 | 120 G=10 6 | 210 PRINT 7 | 220 PRINT "A HURKLE IS HIDING ON A";G;"BY";G;"GRID. HOMEBASE" 8 | 230 PRINT "ON THE GRID IS POINT 0,0 IN THE SOUTHWEST CORNER," 9 | 235 PRINT "AND ANY POINT ON THE GRID IS DESIGNATED BY A" 10 | 240 PRINT "PAIR OF WHOLE NUMBERS SEPERATED BY A COMMA. THE FIRST" 11 | 245 PRINT "NUMBER IS THE HORIZONTAL POSITION AND THE SECOND NUMBER" 12 | 246 PRINT "IS THE VERTICAL POSITION. YOU MUST TRY TO" 13 | 250 PRINT "GUESS THE HURKLE'S GRIDPOINT. YOU GET";N;"TRIES." 14 | 260 PRINT "AFTER EACH TRY, I WILL TELL YOU THE APPROXIMATE" 15 | 270 PRINT "DIRECTION TO GO TO LOOK FOR THE HURKLE." 16 | 280 PRINT 17 | 285 A=INT(G*RND(1)) 18 | 286 B=INT(G*RND(1)) 19 | 310 FOR K=1 TO N 20 | 320 PRINT "GUESS #";K; 21 | 330 INPUT X,Y 22 | 340 IF ABS(X-A)+ABS(Y-B)=0 THEN 500 23 | 350 REM PRINT INFO 24 | 360 GOSUB 610 25 | 370 PRINT 26 | 380 NEXT K 27 | 410 PRINT 28 | 420 PRINT "SORRY, THAT'S";N;"GUESSES." 29 | 430 PRINT "THE HURKLE IS AT ";A;",";B 30 | 440 PRINT 31 | 450 PRINT "LET'S PLAY AGAIN, HURKLE IS HIDING." 32 | 460 PRINT 33 | 470 GOTO 285 34 | 500 REM 35 | 510 PRINT 36 | 520 PRINT "YOU FOUND HIM IN";K;"GUESSES!" 37 | 540 GOTO 440 38 | 610 PRINT "GO "; 39 | 620 IF Y=B THEN 670 40 | 630 IF YL THEN 480 16 | 460 PRINT "TOO LOW. TRY A HIGHER LETTER.": GOTO 410 17 | 480 PRINT "TOO HIGH. TRY A LOWER LETTER.": GOTO 410 18 | 500 PRINT: PRINT "YOU GOT IT IN";G;"GUESSES!!" 19 | 504 IF G<=5 THEN 508 20 | 506 PRINT "BUT IT SHOULDN'T TAKE MORE THAN 5 GUESSES!": GOTO 515 21 | 508 PRINT "GOOD JOB !!!!!" 22 | 510 FOR N=1 TO 15: PRINT CHR$(7);: NEXT N 23 | 515 PRINT 24 | 520 PRINT "LET'S PLAN AGAIN....." 25 | 530 GOTO 310 26 | 999 END 27 | -------------------------------------------------------------------------------- /examples/vintage_bcg/life.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(34);"LIFE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 8 PRINT "ENTER YOUR PATTERN:" 5 | 9 X1=1: Y1=1: X2=24: Y2=70 6 | 10 DIM A(24,70),B$(24) 7 | 20 C=1 8 | 30 INPUT B$(C) 9 | 40 IF B$(C)="DONE" THEN B$(C)="": GOTO 80 10 | 50 IF LEFT$(B$(C),1)="." THEN B$(C)=" "+RIGHT$(B$(C),LEN(B$(C))-1) 11 | 60 C=C+1 12 | 70 GOTO 30 13 | 80 C=C-1: L=0 14 | 90 FOR X=1 TO C-1 15 | 100 IF LEN(B$(X))>L THEN L=LEN(B$(X)) 16 | 110 NEXT X 17 | 120 X1=11-C/2 18 | 130 Y1=33-L/2 19 | 140 FOR X=1 TO C 20 | 150 FOR Y=1 TO LEN(B$(X)) 21 | 160 IF MID$(B$(X),Y,1)<>" " THEN A(X1+X,Y1+Y)=1:P=P+1 22 | 170 NEXT Y 23 | 180 NEXT X 24 | 200 PRINT:PRINT:PRINT 25 | 210 PRINT "GENERATION:";G,"POPULATION:";P;: IF I9 THEN PRINT "INVALID!"; 26 | 215 X3=24:Y3=70:X4=1: Y4=1: P=0 27 | 220 G=G+1 28 | 225 FOR X=1 TO X1-1: PRINT: NEXT X 29 | 230 FOR X=X1 TO X2 30 | 240 PRINT 31 | 250 FOR Y=Y1 TO Y2 32 | 253 IF A(X,Y)=2 THEN A(X,Y)=0:GOTO 270 33 | 256 IF A(X,Y)=3 THEN A(X,Y)=1:GOTO 261 34 | 260 IF A(X,Y)<>1 THEN 270 35 | 261 PRINT TAB(Y);"*"; 36 | 262 IF XX4 THEN X4=X 38 | 266 IF YY4 THEN Y4=Y 40 | 270 NEXT Y 41 | 290 NEXT X 42 | 295 FOR X=X2+1 TO 24: PRINT: NEXT X 43 | 299 X1=X3: X2=X4: Y1=Y3: Y2=Y4 44 | 301 IF X1<3 THEN X1=3:I9=-1 45 | 303 IF X2>22 THEN X2=22:I9=-1 46 | 305 IF Y1<3 THEN Y1=3:I9=-1 47 | 307 IF Y2>68 THEN Y2=68:I9=-1 48 | 309 P=0 49 | 500 FOR X=X1-1 TO X2+1 50 | 510 FOR Y=Y1-1 TO Y2+1 51 | 520 C=0 52 | 530 FOR I=X-1 TO X+1 53 | 540 FOR J=Y-1 TO Y+1 54 | 550 IF A(I,J)=1 OR A(I,J)=2 THEN C=C+1 55 | 560 NEXT J 56 | 570 NEXT I 57 | 580 IF A(X,Y)=0 THEN 610 58 | 590 IF C<3 OR C>4 THEN A(X,Y)=2: GOTO 600 59 | 595 P=P+1 60 | 600 GOTO 620 61 | 610 IF C=3 THEN A(X,Y)=3:P=P+1 62 | 620 NEXT Y 63 | 630 NEXT X 64 | 635 X1=X1-1:Y1=Y1-1:X2=X2+1:Y2=Y2+1 65 | 640 GOTO 210 66 | 650 END 67 | -------------------------------------------------------------------------------- /examples/vintage_bcg/litquiz.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(25);"LITERATURE QUIZ" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 5 R=0 5 | 10 PRINT "TEST YOUR KNOWLEDGE OF CHILDREN'S LITERATURE." 6 | 12 PRINT: PRINT "THIS IS A MULTIPLE-CHOICE QUIZ." 7 | 13 PRINT "TYPE A 1, 2, 3, OR 4 AFTER THE QUESTION MARK." 8 | 15 PRINT: PRINT "GOOD LUCK!": PRINT: PRINT 9 | 40 PRINT "IN PINOCCHIO, WHAT WAS THE NAME OF THE CAT" 10 | 42 PRINT "1)TIGGER, 2)CICERO, 3)FIGARO, 4)GUIPETTO"; 11 | 43 INPUT A: IF A=3 THEN 46 12 | 44 PRINT "SORRY...FIGARO WAS HIS NAME.": GOTO 50 13 | 46 PRINT "VERY GOOD! HERE'S ANOTHER." 14 | 47 R=R+1 15 | 50 PRINT: PRINT 16 | 51 PRINT "FROM WHOSE GARDEN DID BUGS BUNNY STEAL THE CARROTS?" 17 | 52 PRINT "1)MR. NIXON'S, 2)ELMER FUDD'S, 3)CLEM JUDD'S, 4)STROMBOLI'S"; 18 | 53 INPUT A: IF A=2 THEN 56 19 | 54 PRINT "TOO BAD...IT WAS ELMER FUDD'S GARDEN.": GOTO 60 20 | 56 PRINT "PRETTY GOOD!" 21 | 57 R=R+1 22 | 60 PRINT: PRINT 23 | 61 PRINT "IN THE WIZARD OF OS, DOROTHY'S DOG WAS NAMED" 24 | 62 PRINT "1)CICERO, 2)TRIXIA, 3)KING, 4)TOTO"; 25 | 63 INPUT A: IF A=4 THEN 66 26 | 64 PRINT "BACK TO THE BOOKS,...TOTO WAS HIS NAME.": GOTO 70 27 | 66 PRINT "YEA! YOU'RE A REAL LITERATURE GIANT." 28 | 67 R=R+1 29 | 70 PRINT:PRINT 30 | 71 PRINT "WHO WAS THE FAIR MAIDEN WHO ATE THE POISON APPLE" 31 | 72 PRINT "1)SLEEPING BEAUTY, 2)CINDERELLA, 3)SNOW WHITE, 4)WENDY"; 32 | 73 INPUT A: IF A=3 THEN 76 33 | 74 PRINT "OH, COME ON NOW...IT WAS SNOW WHITE." 34 | 75 GOTO 80 35 | 76 PRINT "GOOD MEMORY!" 36 | 77 R=R+1 37 | 80 PRINT:PRINT 38 | 85 IF R=4 THEN 100 39 | 90 IF R<2 THEN 200 40 | 92 PRINT "NOT BAD, BUT YOU MIGHT SPEND A LITTLE MORE TIME" 41 | 94 PRINT "READING THE NURSERY GREATS." 42 | 96 STOP 43 | 100 PRINT "WOW! THAT'S SUPER! YOU REALLY KNOW YOUR NURSERY" 44 | 110 PRINT "YOUR NEXT QUIZ WILL BE ON 2ND CENTURY CHINESE" 45 | 120 PRINT "LITERATURE (HA, HA, HA)" 46 | 130 STOP 47 | 200 PRINT "UGH. THAT WAS DEFINITELY NOT TOO SWIFT. BACK TO" 48 | 205 PRINT "NURSERY SCHOOL FOR YOU, MY FRIEND." 49 | 999 END 50 | -------------------------------------------------------------------------------- /examples/vintage_bcg/love.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"LOVE" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 20 PRINT "A TRIBUTE TO THE GREAT AMERICAN ARTIST, ROBERT INDIANA." 5 | 30 PRINT "HIS GREATEST WORK WILL BE REPRODUCED WITH A MESSAGE OF" 6 | 40 PRINT "YOUR CHOICE UP TO 60 CHARACTERS. IF YOU CAN'T THINK OF" 7 | 50 PRINT "A MESSAGE, SIMPLE TYPE THE WORD 'LOVE'": PRINT 8 | 60 INPUT "YOUR MESSAGE, PLEASE";A$: L=LEN(A$) 9 | 70 DIM T$(120): FOR I=1 TO 10: PRINT: NEXT I 10 | 100 FOR J=0 TO INT(60/L) 11 | 110 FOR I=1 TO L 12 | 120 T$(J*L+I)=MID$(A$,I,1) 13 | 130 NEXT I: NEXT J 14 | 140 C=0 15 | 200 A1=1: P=1: C=C+1: IF C=37 THEN 999 16 | 205 PRINT 17 | 210 READ A: A1=A1+A: IF P=1 THEN 300 18 | 240 FOR I=1 TO A: PRINT " ";: NEXT I: P=1: GOTO 400 19 | 300 FOR I=A1-A TO A1-1: PRINT T$(I);: NEXT I: P=0 20 | 400 IF A1>60 THEN 200 21 | 410 GOTO 210 22 | 600 DATA 60,1,12,26,9,12,3,8,24,17,8,4,6,23,21,6,4,6,22,12,5,6,5 23 | 610 DATA 4,6,21,11,8,6,4,4,6,21,10,10,5,4,4,6,21,9,11,5,4 24 | 620 DATA 4,6,21,8,11,6,4,4,6,21,7,11,7,4,4,6,21,6,11,8,4 25 | 630 DATA 4,6,19,1,1,5,11,9,4,4,6,19,1,1,5,10,10,4,4,6,18,2,1,6,8,11,4 26 | 640 DATA 4,6,17,3,1,7,5,13,4,4,6,15,5,2,23,5,1,29,5,17,8 27 | 650 DATA 1,29,9,9,12,1,13,5,40,1,1,13,5,40,1,4,6,13,3,10,6,12,5,1 28 | 660 DATA 5,6,11,3,11,6,14,3,1,5,6,11,3,11,6,15,2,1 29 | 670 DATA 6,6,9,3,12,6,16,1,1,6,6,9,3,12,6,7,1,10 30 | 680 DATA 7,6,7,3,13,6,6,2,10,7,6,7,3,13,14,10,8,6,5,3,14,6,6,2,10 31 | 690 DATA 8,6,5,3,14,6,7,1,10,9,6,3,3,15,6,16,1,1 32 | 700 DATA 9,6,3,3,15,6,15,2,1,10,6,1,3,16,6,14,3,1,10,10,16,6,12,5,1 33 | 710 DATA 11,8,13,27,1,11,8,13,27,1,60 34 | 999 FOR I=1 TO 10: PRINT: NEXT I: END 35 | -------------------------------------------------------------------------------- /examples/vintage_bcg/lunar.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(33);"LUNAR" 2 | 20 PRINT TAB(l5);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 25 PRINT:PRINT:PRINT 4 | 30 PRINT "THIS IS A COMPUTER SIMULATION OF AN APOLLO LUNAR" 5 | 40 PRINT "LANDING CAPSULE.": PRINT: PRINT 6 | 50 PRINT "THE ON-BOARD COMPUTER HAS FAILED (IT WAS MADE BY" 7 | 60 PRINT "XEROX) SO YOU HAVE TO LAND THE CAPSULE MANUALLY." 8 | 70 PRINT: PRINT "SET BURN RATE OF RETRO ROCKETS TO ANY VALUE BETWEEN" 9 | 80 PRINT "0 (FREE FALL) AND 200 (MAXIMUM BURN) POUNDS PER SECOND." 10 | 90 PRINT "SET NEW BURN RATE EVERY 10 SECONDS.": PRINT 11 | 100 PRINT "CAPSULE WEIGHT 32,500 LBS; FUEL WEIGHT 16,500 LBS." 12 | 110 PRINT: PRINT: PRINT: PRINT "GOOD LUCK" 13 | 120 L=0 14 | 130 PRINT: PRINT "SEC","MI + FT","MPH","LB FUEL","BURN RATE":PRINT 15 | 140 A=120:V=1:M=33000:N=16500:G=1E-03:Z=1.8 16 | 150 PRINT L,INT(A);INT(5280*(A-INT(A))),3600*V,M-N,:INPUT K:T=10 17 | 160 IF M-N<1E-03 THEN 240 18 | 170 IF T<1E-03 THEN 150 19 | 180 S=T: IF M>=N+S*K THEN 200 20 | 190 S=(M-N)/K 21 | 200 GOSUB 420: IF I<=O THEN 340 22 | 210 IF V<=0 THEN 230 23 | 220 IF J<0 THEN 370 24 | 230 GOSUB 330: GOTO 160 25 | 240 PRINT "FUEL OUT AT";L;"SECONDS":S=(-V+SQR(V*V+2*A*G))/G 26 | 250 V=V+G*S: L=L+S 27 | 260 W=3600*V: PRINT "ON MOON AT";L;"SECONDS - IMPACT VELOCITY";W;"MPH" 28 | 274 IF W<=1.2 THEN PRINT "PERFECT LANDING!": GOTO 440 29 | 280 IF W<=10 THEN PRINT "GOOD LANDING (COULD RE BETTER)":GOTO 440 30 | 282 IF W>60 THEN 300 31 | 284 PRINT "CRAFT DAMAGE... YOU'RE STRANDED HERE UNTIL A RESCUE" 32 | 286 PRINT "PARTY ARRIVES. HOPE YOU HAVE ENOUGH OXYGEN!" 33 | 288 GOTO 440 34 | 300 PRINT "SORRY THERE NERE NO SURVIVORS. YOU BLOW IT!" 35 | 310 PRINT "IN FACT, YOU BLASTED A NEW LUNAR CRATER";W*.227;"FEET DEEP!" 36 | 320 GOTO 440 37 | 330 L=L+S: T=T-S: M=M-S*K: A=I: V=J: RETURN 38 | 340 IF S<5E-03 THEN 260 39 | 350 D=V+SQR(V*V+2*A*(G-Z*K/M)):S=2*A/D 40 | 360 GOSUB 420: GOSUB 330: GOTO 340 41 | 370 W=(1-M*G/(Z*K))/2: S=M*V/(Z*K*(W+SQR(W*W+V/Z)))+.05:GOSUB 420 42 | 380 IF I<=0 THEN 340 43 | 390 GOSUB 330: IF J>0 THEN 160 44 | 400 IF V>0 THEN 370 45 | 410 GOTO 160 46 | 420 Q=S*K/M: J=V+G*S+Z*(-Q-Q*Q/2-Q^3/3-Q^4/4-Q^5/5) 47 | 430 I=A-G*S*S/2-V*S+Z*S*(Q/2+Q^2/6+Q^3/12+Q^4/20+Q^5/30):RETURN 48 | 440 PRINT:PRINT:PRINT:PRINT "TRY AGAIN??": GOTO 70 49 | -------------------------------------------------------------------------------- /examples/vintage_bcg/mathdice.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(31);"MATH DICE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 40 PRINT "THIS PROGRAM GENERATES SUCCESIVE PICTURES OF TWO DICE." 5 | 50 PRINT "WHEN TWO DICE AND AN EQUAL SIGN FOLLOWED BY A QUESTION" 6 | 60 PRINT "MARK HAVE BEEN PRINTED, TYPE YOUR ANSWER AND THE RETURN KEY." 7 | 70 PRINT "TO CONCLUDE THE LESSON, TYPE CONTROL-C AS YOUR ANSWER." 8 | 80 PRINT 9 | 90 PRINT 10 | 100 N=N+1 11 | 110 D=INT(6*RND(1)+1) 12 | 120 PRINT" ----- " 13 | 130 IF D=1 THEN 200 14 | 140 IF D=2 THEN 180 15 | 150 IF D=3 THEN 180 16 | 160 PRINT "I * * I" 17 | 170 GOTO 210 18 | 180 PRINT "I * I" 19 | 190 GOTO 210 20 | 200 PRINT "I I" 21 | 210 IF D=2 THEN 260 22 | 220 IF D=4 THEN 260 23 | 230 IF D=6 THEN 270 24 | 240 PRINT "I * I" 25 | 250 GOTO 280 26 | 260 PRINT "I I" 27 | 265 GOTO 280 28 | 270 PRINT "I * * I" 29 | 280 IF D=1 THEN 350 30 | 290 IF D=2 THEN 330 31 | 300 IF D=3 THEN 330 32 | 310 PRINT "I * * I" 33 | 320 GOTO 360 34 | 330 PRINT "I * I" 35 | 340 GOTO 360 36 | 350 PRINT "I I" 37 | 360 PRINT " ----- " 38 | 370 PRINT 39 | 375 IF N=2 THEN 500 40 | 380 PRINT " +" 41 | 381 PRINT 42 | 400 A=D 43 | 410 GOTO 100 44 | 500 T=D+A 45 | 510 PRINT " ="; 46 | 520 INPUT T1 47 | 530 IF T1=T THEN 590 48 | 540 PRINT "NO, COUNT THE SPOTS AND GIVE ANOTHER ANSWER." 49 | 541 PRINT " ="; 50 | 550 INPUT T2 51 | 560 IF T2=T THEN 590 52 | 570 PRINT "NO, THE ANSWER IS";T 53 | 580 GOTO 600 54 | 590 PRINT "RIGHT!" 55 | 600 PRINT 56 | 601 PRINT "THE DICE ROLL AGAIN..." 57 | 610 PRINT 58 | 615 N=0 59 | 620 GOTO 100 60 | 999 END 61 | -------------------------------------------------------------------------------- /examples/vintage_bcg/mugwump.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"MUGWUMP" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 4 REM COURTESY PEOPLE'S COMPUTER COMPANY 5 | 10 DIM P(4,2) 6 | 20 PRINT "THE OBJECT OF THIS GAME IS TO FIND FOUR MUGWUMPS" 7 | 30 PRINT "HIDDEN ON A 10 BY 10 GRID. HOMEBASE IS POSITION 0,0." 8 | 40 PRINT "ANY GUESS YOU MAKE MUST BE TWO NUMBERS WITH EACH" 9 | 50 PRINT "NUMBER BETWEEN 0 AND 9, INCLUSIVE. FIRST NUMBER" 10 | 60 PRINT "IS DISTANCE TO RIGHT OF HOMEBASE AND SECOND NUMBER" 11 | 70 PRINT "IS DISTANCE ABOVE HOMEBASE." 12 | 80 PRINT 13 | 90 PRINT "YOU GET 10 TRIES. AFTER EACH TRY, I WILL TELL" 14 | 100 PRINT "YOU HOW FAR YOU ARE FROM EACH MUGWUMP." 15 | 110 PRINT 16 | 240 GOSUB 1000 17 | 250 T=0 18 | 260 T=T+1 19 | 270 PRINT 20 | 275 PRINT 21 | 290 PRINT "TURN NO.";T;"-- WHAT IS YOUR GUESS"; 22 | 300 INPUT M,N 23 | 310 FOR I=1 TO 4 24 | 320 IF P(I,1)=-1 THEN 400 25 | 330 IF P(I,1)<>M THEN 380 26 | 340 IF P(I,2)<>N THEN 380 27 | 350 P(I,1)=-1 28 | 360 PRINT "YOU HAVE FOUND MUGWUMP";I 29 | 370 GOTO 400 30 | 380 D=SQR((P(I,1)-M)^2+(P(I,2)-N)^2) 31 | 390 PRINT "YOU ARE";(INT(D*10))/10;"UNITS FROM MUGWUMP";I 32 | 400 NEXT I 33 | 410 FOR J=1 TO 4 34 | 420 IF P(J,1)<>-1 THEN 470 35 | 430 NEXT J 36 | 440 PRINT 37 | 450 PRINT "YOU GOT THEM ALL IN";T;"TURNS!" 38 | 460 GOTO 580 39 | 470 IF T<10 THEN 260 40 | 480 PRINT 41 | 490 PRINT "SORRY, THAT'S 10 TRIES. HERE IS WHERE THEY'RE HIDING:" 42 | 540 FOR I=1 TO 4 43 | 550 IF P(I,1)=-1 THEN 570 44 | 560 PRINT "MUGWUMP";I;"IS AT (";P(I,1);",";P(I,2);")" 45 | 570 NEXT I 46 | 580 PRINT 47 | 600 PRINT "THAT WAS FUN! LET'S PLAY AGAIN......." 48 | 610 PRINT "FOUR MORE MUGWUMPS ARE NOW IN HIDING." 49 | 630 GOTO 240 50 | 1000 FOR J=1 TO 2 51 | 1010 FOR I=1 TO 4 52 | 1020 P(I,J)=INT(10*RND(1)) 53 | 1030 NEXT I 54 | 1040 NEXT J 55 | 1050 RETURN 56 | 1099 END 57 | -------------------------------------------------------------------------------- /examples/vintage_bcg/name.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(34);"NAME" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT: PRINT: PRINT 4 | 5 DIM B$(40) 5 | 10 PRINT "HELLO.": PRINT "MY NAME IS CREATIVE COMPUTER." 6 | 20 PRINT "WHAT'S YOUR NAME (FIRST AND LAST";: INPUT A$: L=LEN(A$) 7 | 30 PRINT: PRINT "THANK YOU, "; 8 | 40 FOR I=1 TO L: B$(I)=MID$(A$,I,1): NEXT I 9 | 50 FOR I=L TO 1 STEP -1: PRINT B$(I);: NEXT I 10 | 60 PRINT ".": PRINT "OOPS! I GUESS I GOT IT BACKWARDS. A SMART" 11 | 70 PRINT "COMPUTER LIKE ME SHOULDN'T MAKE A MISTAKE LIKE THAT!": PRINT 12 | 80 PRINT "BUT I JUST NOTICED YOUR LETTERS ARE OUT OF ORDER." 13 | 90 PRINT "LET'S PUT THEM IN ORDER LIKE THIS: "; 14 | 100 FOR J=2 TO L: I=J-1: T$=B$(J) 15 | 110 IF T$>B$(I) THEN 130 16 | 120 B$(I+1)=B$(I): I=I-1: IF I>0 THEN 110 17 | 130 B$(I+1)=T$: NEXT J 18 | 140 FOR I=1 TO L: PRINT B$(I);: NEXT I: PRINT: PRINT 19 | 150 PRINT "DON'T YOU LIKE THAT BETTER";: INPUT D$ 20 | 160 IF D$="YES" THEN 180 21 | 170 PRINT: PRINT "I'M SORRY YOU DON'T LIKE IT THAT WAY.": GOTO 200 22 | 180 PRINT: PRINT "I KNEW YOU'D AGREE!!" 23 | 200 PRINT: PRINT "I REALLY ENJOYED MEETING YOU ";A$;"." 24 | 210 PRINT "HAVE A NICE DAY!" 25 | 999 END 26 | -------------------------------------------------------------------------------- /examples/vintage_bcg/nicomachus.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"NICOMA" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 10 PRINT "BOOMERANG PUZZLE FROM ARITHMETICA OF NICOMACHUS -- A.D. 90!" 5 | 20 PRINT 6 | 30 PRINT "PLEASE THINK OF A NUMBER BETWEEN 1 AND 100." 7 | 40 PRINT "YOUR NUMBER DIVIDED BY 3 HAS A REMAINDER OF"; 8 | 45 INPUT A 9 | 50 PRINT "YOUR NUMBER DIVIDED BY 5 HAS A REMAINDER OF"; 10 | 55 INPUT B 11 | 60 PRINT "YOUR NUMBER DIVIDED BY 7 HAS A REMAINDER OF"; 12 | 65 INPUT C 13 | 70 PRINT 14 | 80 PRINT "LET ME THINK A MOMENT..." 15 | 85 PRINT 16 | 90 FOR I=1 TO 1500: NEXT I 17 | 100 D=70*A+21*B+15*C 18 | 110 IF D<=105 THEN 140 19 | 120 D=D-105 20 | 130 GOTO 110 21 | 140 PRINT "YOUR NUMBER WAS";D;", RIGHT"; 22 | 160 INPUT A$ 23 | 165 PRINT 24 | 170 IF A$="YES" THEN 220 25 | 180 IF A$="NO" THEN 240 26 | 190 PRINT "EH? I DON'T UNDERSTAND '";A$;"' TRY 'YES' OR 'NO'." 27 | 200 GOTO 160 28 | 220 PRINT "HOW ABOUT THAT!!" 29 | 230 GOTO 250 30 | 240 PRINT "I FEEL YOUR ARITHMETIC IS IN ERROR." 31 | 250 PRINT 32 | 260 PRINT "LET'S TRY ANOTHER." 33 | 270 GOTO 20 34 | 999 END 35 | -------------------------------------------------------------------------------- /examples/vintage_bcg/number.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"NUMBER" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 4 PRINT "YOU HAVE 100 POINTS. BY GUESSING NUMBERS FROM 1 TO 5, YOU" 5 | 5 PRINT "CAN GAIN OR LOSE POINTS DEPENDING UPON HOW CLOSE YOU GET TO" 6 | 6 PRINT "A RANDOM NUMBER SELECTED BY THE COMPUTER.": PRINT 7 | 7 PRINT "YOU OCCASIONALLY WILL GET A JACKPOT WHICH WILL DOUBLE(!)" 8 | 8 PRINT "YOUR POINT COUNT. YOU WIN WHEN YOU GET 500 POINTS." 9 | 9 PRINT: P=100 10 | 10 DEF FNR(X)=INT(5*RND(1)+1) 11 | 12 INPUT "GUESS A NUMBER FROM 1 TO 5";G 12 | 15 R=FNR(1) 13 | 16 S=FNR(1) 14 | 17 T=FNR(1) 15 | 18 U=FNR(1) 16 | 19 V=FNR(1) 17 | 20 IF G=R THEN 30 18 | 21 IF G=S THEN 40 19 | 22 IF G=T THEN 50 20 | 23 IF G=U THEN 60 21 | 24 IF G=V THEN 70 22 | 25 IF G>5 THEN 12 23 | 30 P=P-5 24 | 35 GOTO 80 25 | 40 P=P+5 26 | 45 GOTO 80 27 | 50 P=P+P 28 | 53 PRINT "YOU HIT THE JACKPOT!!!" 29 | 55 GOTO 80 30 | 60 P=P+1 31 | 65 GOTO 80 32 | 70 P=P-(P*.5) 33 | 80 IF P>500 THEN 90 34 | 82 PRINT "YOU HAVE";P;"POINTS.":PRINT 35 | 85 GOTO 12 36 | 90 PRINT "!!!!YOU WIN!!!! WITH ";P;"POINTS." 37 | 99 END 38 | -------------------------------------------------------------------------------- /examples/vintage_bcg/onecheck.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(30);"ONE CHECK" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 8 DIM A(64) 5 | 10 PRINT "SOLITAIRE CHECKER PUZZLE BY DAVID AHL" 6 | 15 PRINT 7 | 20 PRINT "48 CHECKERS ARE PLACED ON THE 2 OUTSIDE SPACES OF A" 8 | 25 PRINT "STANDARD 64-SQUARE CHECKERBOARD. THE OBJECT IS TO" 9 | 30 PRINT "REMOVE AS MANY CHECKERS AS POSSIBLE BY DIAGONAL JUMPS" 10 | 35 PRINT "(AS IN STANDARD CHECKERS). USE THE NUMBERED BOARD TO" 11 | 40 PRINT "INDICATE THE SQUARE YOU WISH TO JUMP FROM AND TO. ON" 12 | 45 PRINT "THE BOARD PRINTED OUT ON EACH TURN '1' INDICATES A" 13 | 50 PRINT "CHECKER AND '0' AN EMPTY SQUARE. WHEN YOU HAVE NO" 14 | 55 PRINT "POSSIBLE JUMPS REMAINING, INPUT A '0' IN RESPONSE TO" 15 | 60 PRINT "QUESTION 'JUMP FROM ?'" 16 | 62 PRINT 17 | 63 PRINT "HERE IS THE NUMERICAL BOARD:" 18 | 66 PRINT 19 | 70 FOR J=1 TO 57 STEP 8 20 | 74 PRINT J;TAB(4);J+1;TAB(8);J+2;TAB(12);J+3;TAB(16);J+4;TAB(20);J+5; 21 | 75 PRINT TAB(24);J+6;TAB(28);J+7 22 | 76 NEXT J 23 | 77 PRINT 24 | 78 PRINT "AND HERE IS THE OPENING POSITION OF THE CHECKERS." 25 | 79 PRINT 26 | 80 FOR J=1 TO 64 27 | 82 A(J)=1 28 | 84 NEXT J 29 | 86 FOR J=19 TO 43 STEP 8 30 | 88 FOR I=J TO J+3 31 | 90 A(I)=0 32 | 92 NEXT I 33 | 94 NEXT J 34 | 96 M=0 35 | 98 GOTO 340 36 | 100 INPUT "JUMP FROM";F 37 | 105 IF F=0 THEN 500 38 | 110 INPUT "TO";T 39 | 112 PRINT 40 | 118 REM *** CHECK LEGALITY OF MOVE 41 | 120 F1=INT((F-1)/8) 42 | 130 F2=F-8*F1 43 | 140 T1=INT((T-1)/8) 44 | 150 T2=T-8*T1 45 | 160 IF F1>7 THEN 230 46 | 170 IF T1>7 THEN 230 47 | 180 IF F2>8 THEN 230 48 | 190 IF T2>8 THEN 230 49 | 200 IF ABS(F1-T1)<>2 THEN 230 50 | 210 IF ABS(F2-T2)<>2 THEN 230 51 | 212 IF A((T+F)/2)=0 THEN 230 52 | 215 IF A(F)=0 THEN 230 53 | 220 IF A(T)=1 THEN 230 54 | 225 GOTO 250 55 | 230 PRINT "ILLEGAL MOVE. TRY AGAIN..." 56 | 240 GOTO 100 57 | 245 REM *** UPDATE BOARD 58 | 250 A(T)=1 59 | 260 A(F)=0 60 | 270 A((T+F)/2)=0 61 | 290 M=M+1 62 | 310 REM *** PRINT BOARD 63 | 340 FOR J=1 TO 57 STEP 8 64 | 350 FOR I=J TO J+7 65 | 360 PRINT A(I); 66 | 370 NEXT I 67 | 380 PRINT 68 | 390 NEXT J 69 | 400 PRINT 70 | 410 GOTO 100 71 | 490 REM *** END GAME SUMMARY 72 | 500 S=0 73 | 510 FOR I=1 TO 64 74 | 520 S=S+A(I) 75 | 530 NEXT I 76 | 540 PRINT:PRINT "YOU MADE";M;"JUMPS AND HAD";S;"PIECES" 77 | 550 PRINT "REMAINING ON THE BOARD." 78 | 560 PRINT 79 | 562 INPUT "TRY AGAIN";A$ 80 | 570 IF A$="YES" THEN 70 81 | 575 IF A$="NO" THEN 600 82 | 580 PRINT "PLEASE ANSWER 'YES' OR 'NO'." 83 | 590 GOTO 562 84 | 600 PRINT 85 | 610 PRINT "O.K. HOPE YOU HAD FUN!!" 86 | 999 END 87 | -------------------------------------------------------------------------------- /examples/vintage_bcg/poetry.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(30);"POETRY" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 90 ON I GOTO 100,101,102,103,104 5 | 100 PRINT "MIDNIGHT DREARY";:GOTO 210 6 | 101 PRINT "FIERY EYES";:GOTO 210 7 | 102 PRINT "BIRD OR FIEND";:GOTO 210 8 | 103 PRINT "THING OF EVIL";:GOTO 210 9 | 104 PRINT "PROPHET";:GOTO 210 10 | 110 ON I GOTO 111,112,113,114,115 11 | 111 PRINT "BEGUILING ME";:U=2:GOTO 210 12 | 112 PRINT "THRILLED ME";:GOTO 210 13 | 113 PRINT "STILL SITTING....";:GOTO 212 14 | 114 PRINT "NEVER FLITTING";:U=2:GOTO 210 15 | 115 PRINT "BURNED";:GOTO 210 16 | 120 ON I GOTO 121,122,123,124,125 17 | 121 PRINT "AND MY SOUL";:GOTO 210 18 | 122 PRINT "DARKNESS THERE";:GOTO 210 19 | 123 PRINT "SHALL BE LIFTED";:GOTO 210 20 | 124 PRINT "QUOTH THE RAVEN";:GOTO 210 21 | 125 IF U=0 THEN 210 22 | 126 PRINT "SIGN OF PARTING";:GOTO 210 23 | 130 ON I GOTO 131,132,133,134,135 24 | 131 PRINT "NOTHING MORE";:GOTO 210 25 | 132 PRINT "YET AGAIN";:GOTO 210 26 | 133 PRINT "SLOWLY CREEPING";:GOTO 210 27 | 134 PRINT "...EVERMORE";:GOTO 210 28 | 135 PRINT "NEVERMORE"; 29 | 210 IF U=0 OR RND(1)>.19 THEN 212 30 | 211 PRINT ",";:U=2 31 | 212 IF RND(1)>.65 THEN 214 32 | 213 PRINT " ";:U=U+1:GOTO 215 33 | 214 PRINT : U=0 34 | 215 I=INT(INT(10*RND(1))/2)+1 35 | 220 J=J+1 : K=K+1 36 | 230 IF U>0 OR INT(J/2)<>J/2 THEN 240 37 | 235 PRINT " "; 38 | 240 ON J GOTO 90,110,120,130,250 39 | 250 J=0 : PRINT : IF K>20 THEN 270 40 | 260 GOTO 215 41 | 270 PRINT : U=0 : K=0 : GOTO 110 42 | 999 END 43 | -------------------------------------------------------------------------------- /examples/vintage_bcg/reverse.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(32);"REVERSE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 PRINT "REVERSE -- A GAME OF SKILL": PRINT 5 | 130 DIM A(20) 6 | 140 REM *** N=NUMBER OF NUMBERS 7 | 150 N=9 8 | 160 PRINT "DO YOU WANT THE RULES"; 9 | 170 INPUT A$ 10 | 180 IF A$="NO" THEN 210 11 | 190 GOSUB 710 12 | 200 REM *** MAKE A RANDOM LIST A(1) TO A(N) 13 | 210 A(1)=INT((N-1)*RND(1)+2) 14 | 220 FOR K=2 TO N 15 | 230 A(K)=INT(N*RND(1)+1) 16 | 240 FOR J=1 TO K-1 17 | 250 IF A(K)=A(J) THEN 230 18 | 260 NEXT J:NEXT K 19 | 280 REM *** PRINT ORIGINAL LIST AND START GAME 20 | 290 PRINT: PRINT "HERE WE GO ... THE LIST IS:" 21 | 310 T=0 22 | 320 GOSUB 610 23 | 330 PRINT "HOW MANY SHALL I REVERSE"; 24 | 340 INPUT R 25 | 350 IF R=0 THEN 520 26 | 360 IF R<=N THEN 390 27 | 370 PRINT "OOPS! TOO MANY! I CAN REVERSE AT MOST";N:GOTO 330 28 | 390 T=T+1 29 | 400 REM *** REVERSE R NUMBERS AND PRINT NEW LIST 30 | 410 FOR K=1 TO INT(R/2) 31 | 420 Z=A(K) 32 | 430 A(K)=A(R-K+1) 33 | 440 A(R-K+1)=Z 34 | 450 NEXT K 35 | 460 GOSUB 610 36 | 470 REM *** CHECK FOR A WIN 37 | 480 FOR K=1 TO N 38 | 490 IF A(K)<>K THEN 330 39 | 500 NEXT K 40 | 510 PRINT "YOU WON IT IN";T;"MOVES!!!":PRINT 41 | 520 PRINT 42 | 530 PRINT "TRY AGAIN (YES OR NO)"; 43 | 540 INPUT A$ 44 | 550 IF A$="YES" THEN 210 45 | 560 PRINT: PRINT "O.K. HOPE YOU HAD FUN!!":GOTO 999 46 | 600 REM *** SUBROUTINE TO PRINT LIST 47 | 610 PRINT:FOR K=1 TO N:PRINT A(K);:NEXT K 48 | 650 PRINT:PRINT:RETURN 49 | 700 REM *** SUBROUTINE TO PRINT THE RULES 50 | 710 PRINT:PRINT "THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE" 51 | 720 PRINT "TO DO IS ARRANGE A LIST OF NUMBERS (1 THROUGH";N;")" 52 | 730 PRINT "IN NUMERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU" 53 | 740 PRINT "TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO" 54 | 750 PRINT "REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:" 55 | 760 PRINT:PRINT "2 3 4 5 1 6 7 8 9" 56 | 770 PRINT:PRINT "AND YOU REVERSE 4, THE RESULT WILL BE:" 57 | 780 PRINT:PRINT "5 4 3 2 1 6 7 8 9" 58 | 790 PRINT:PRINT "NOW IF YOU REVERSE 5, YOU WIN!" 59 | 800 PRINT:PRINT "1 2 3 4 5 6 7 8 9":PRINT 60 | 810 PRINT "NO DOUBT YOU WILL LIKE THIS GAME, BUT" 61 | 820 PRINT "IF YOU WANT TO QUIT, REVERSE 0 (ZERO).":PRINT: RETURN 62 | 999 END 63 | -------------------------------------------------------------------------------- /examples/vintage_bcg/rockscissors.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(21);"GAME OF ROCK, SCISSORS, PAPER" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 25 PRINT:PRINT:PRINT 4 | 30 INPUT "HOW MANY GAMES";Q 5 | 40 IF Q<11 THEN 60 6 | 50 PRINT "SORRY, BUT WE AREN'T ALLOWED TO PLAY THAT MANY.": GOTO 30 7 | 60 FOR G=1 TO Q 8 | 70 PRINT: PRINT "GAME NUMBER";G 9 | 80 X=INT(RND(1)*3+1) 10 | 90 PRINT "3=ROCK...2=SCISSORS...1=PAPER" 11 | 100 INPUT "1...2...3...WHAT'S YOUR CHOICE";K 12 | 110 IF (K-1)*(K-2)*(K-3)<>0 THEN PRINT "INVALID.": GOTO 90 13 | 120 PRINT "THIS IS MY CHOICE..." 14 | 130 ON X GOTO 140,150,160 15 | 140 PRINT "...PAPER": GOTO 170 16 | 150 PRINT "...SCISSORS": GOTO 170 17 | 160 PRINT "...ROCK" 18 | 170 IF X=K THEN 250 19 | 180 IF X>K THEN 230 20 | 190 IF X=1 THEN 210 21 | 200 PRINT "YOU WIN!!!":H=H+1: GOTO 260 22 | 210 IF K<>3 THEN 200 23 | 220 PRINT "WOW! I WIN!!!":C=C+1:GOTO 260 24 | 230 IF K<>1 OR X<>3 THEN 220 25 | 240 GOTO 200 26 | 250 PRINT "TIE GAME. NO WINNER." 27 | 260 NEXT G 28 | 270 PRINT: PRINT "HERE IS THE FINAL GAME SCORE:" 29 | 280 PRINT "I HAVE WON";C;"GAME(S)." 30 | 290 PRINT "YOU HAVE WON";H;"GAME(S)." 31 | 300 PRINT "AND";Q-(C+H);"GAME(S) ENDED IN A TIE." 32 | 310 PRINT: PRINT "THANKS FOR PLAYING!!" 33 | 320 END 34 | -------------------------------------------------------------------------------- /examples/vintage_bcg/russianroulette.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(28);"RUSSIAN ROULETTE" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 5 PRINT "THIS IS A GAME OF >>>>>>>>>>RUSSIAN ROULETTE." 5 | 10 PRINT:PRINT "HERE IS A REVOLVER." 6 | 20 PRINT "TYPE '1' TO SPIN CHAMBER AND PULL TRIGGER." 7 | 22 PRINT "TYPE '2' TO GIVE UP." 8 | 23 PRINT "GO"; 9 | 25 N=0 10 | 30 INPUT I 11 | 31 IF I<>2 THEN 35 12 | 32 PRINT " CHICKEN!!!!!" 13 | 33 GOTO 72 14 | 35 N=N+1 15 | 40 IF RND(1)>.833333 THEN 70 16 | 45 IF N>10 THEN 80 17 | 50 PRINT "- CLICK -" 18 | 60 PRINT: GOTO 30 19 | 70 PRINT " BANG!!!!! YOU'RE DEAD!" 20 | 71 PRINT "CONDOLENCES WILL BE SENT TO YOUR RELATIVES." 21 | 72 PRINT:PRINT:PRINT 22 | 75 PRINT "...NEXT VICTIM...":GOTO 20 23 | 80 PRINT "YOU WIN!!!!!" 24 | 85 PRINT "LET SOMEONE ELSE BLOW HIS BRAINS OUT." 25 | 90 GOTO 10 26 | 99 END 27 | -------------------------------------------------------------------------------- /examples/vintage_bcg/sinewave.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(30);"SINE WAVE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT: PRINT: PRINT: PRINT: PRINT 4 | 40 REMARKABLE PROGRAM BY DAVID AHL 5 | 50 B=0 6 | 100 REM START LONG LOOP 7 | 110 FOR T=0 TO 40 STEP .25 8 | 120 A=INT(26+25*SIN(T)) 9 | 130 PRINT TAB(A); 10 | 140 IF B=1 THEN 180 11 | 150 PRINT "CREATIVE" 12 | 160 B=1 13 | 170 GOTO 200 14 | 180 PRINT "COMPUTING" 15 | 190 B=0 16 | 200 NEXT T 17 | 999 END 18 | -------------------------------------------------------------------------------- /examples/vintage_bcg/stars.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(34);"STARS" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 100 REM *** STARS - PEOPLE'S COMPUTER CENTER, MENLO PARK, CA 5 | 140 REM *** A IS LIMIT ON NUMBER, M IS NUMBER OF GUESSES 6 | 150 A=100:M=7 7 | 170 INPUT "DO YOU WANT INSTRUCTIONS";A$ 8 | 190 IF LEFT$(A$,1)="N" THEN 280 9 | 200 REM *** INSTRUCTIONS ON HOW TO PLAY 10 | 210 PRINT "I AM THINKING OF A WHOLE NUMBER FROM 1 TO";A 11 | 220 PRINT "TRY TO GUESS MY NUMBER. AFTER YOU GUESS, I" 12 | 230 PRINT "WILL TYPE ONE OR MORE STARS (*). THE MORE" 13 | 240 PRINT "STARS I TYPE, THE CLOSER YOU ARE TO MY NUMBER." 14 | 250 PRINT "ONE STAR (*) MEANS FAR AWAY, SEVEN STARS (*******)" 15 | 260 PRINT "MEANS REALLY CLOSE! YOU GET";M;"GUESSES." 16 | 270 REM *** COMPUTER THINKS OF A NUMBER 17 | 280 PRINT 18 | 290 PRINT 19 | 300 X=INT(A*RND(1)+1) 20 | 310 PRINT "OK, I AM THINKING OF A NUMBER, START GUESSING." 21 | 320 REM *** GUESSING BEGINS, HUMAN GETS M GUESSES 22 | 330 FOR K=1 TO M 23 | 340 PRINT 24 | 350 PRINT "YOUR GUESS"; 25 | 360 INPUT G 26 | 370 IF G=X THEN 600 27 | 380 D=ABS(G-X) 28 | 390 IF D>=64 THEN 510 29 | 400 IF D>=32 THEN 500 30 | 410 IF D>=16 THEN 490 31 | 420 IF D>=8 THEN 480 32 | 430 IF D>=4 THEN 470 33 | 440 IF D>=2 THEN 460 34 | 450 PRINT "*"; 35 | 460 PRINT "*"; 36 | 470 PRINT "*"; 37 | 480 PRINT "*"; 38 | 490 PRINT "*"; 39 | 500 PRINT "*"; 40 | 510 PRINT "*"; 41 | 520 PRINT 42 | 530 NEXT K 43 | 540 REM *** DID NOT GUESS IN M GUESSES 44 | 550 PRINT 45 | 560 PRINT "SORRY, THAT'S";M;"GUESSES. THE NUMBER WAS";X 46 | 580 GOTO 650 47 | 590 REM *** WE HAVE A WINNER 48 | 600 PRINT:FOR N=1 TO 79 49 | 610 PRINT "*"; 50 | 620 NEXT N 51 | 630 PRINT:PRINT 52 | 640 PRINT "YOU GOT IT IN";K;"GUESSES!!! LET'S PLAY AGAIN..." 53 | 650 GOTO 280 54 | 660 END 55 | -------------------------------------------------------------------------------- /examples/vintage_bcg/synonym.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"SYNONYM" 2 | 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 6 PRINT: PRINT: PRINT 4 | 10 DIM R$(5),W$(10),L(30),R(30) 5 | 20 R$(1)="RIGHT": R$(2)="CORRECT": R$(3)="FINE": R$(4)="GOOD!" 6 | 30 R$(5)="CHECK" 7 | 70 C=0 8 | 90 PRINT "A SYNONYM OF A WORD MEANS ANOTHER WORD IN THE ENGLISH" 9 | 100 PRINT "LANGUAGE WHICH HAS THE SAME OR VERY NEARLY THE SAME"; 10 | 110 PRINT " MEANING." 11 | 130 PRINT "I CHOOSE A WORD -- YOU TYPE A SYNONYM." 12 | 140 PRINT "IF YOU CAN'T THINK OF A SYNONYM, TYPE THE WORD 'HELP'" 13 | 145 PRINT "AND I WILL TELL YOU A SYNONYM.": PRINT 14 | 150 RESTORE: C=C+1: READ N 15 | 160 IF C>N THEN 420 16 | 170 N1=INT(RND(1)*N+1) 17 | 174 IF R(N1)=1 THEN 170 18 | 176 R(N1)=1 19 | 180 FOR I=1 TO N1 20 | 190 READ N2 21 | 200 FOR J=1 TO N2 22 | 210 READ W$(J) 23 | 220 NEXT J 24 | 230 NEXT I 25 | 232 FOR J=1 TO N2: L(J)=J: NEXT J 26 | 235 L(0)=N2: G=1: PRINT 27 | 237 L(G)=L(L(0)): L(0)=N2-1: PRINT 28 | 240 PRINT " WHAT IS A SYNONYM OF ";W$(G);: INPUT A$ 29 | 250 IF A$="HELP" THEN 340 30 | 260 FOR K=1 TO N2 31 | 270 IF G=K THEN 290 32 | 280 IF A$=W$(K) THEN 320 33 | 290 NEXT K 34 | 300 PRINT " TRY AGAIN.": GOTO 240 35 | 320 PRINT R$(INT(RND(1)*5+1)): GOTO 150 36 | 340 G1=INT(RND(1)*L(0)+1) 37 | 360 PRINT "**** A SYNONYM OF ";W$(G);" IS ";W$(L(G1));".": PRINT 38 | 370 L(G1)=L(L(0)): L(0)=L(0)-1: GOTO 240 39 | 420 PRINT: PRINT "SYNONYM DRILL COMPLETED.": GOTO 999 40 | 500 DATA 10 41 | 510 DATA 5,"FIRST","START","BEGINNING","ONSET","INITIAL" 42 | 520 DATA 5,"SIMILAR","ALIKE","SAME","LIKE","RESEMBLING" 43 | 530 DATA 5,"MODEL","PATTERN","PROTOTYPE","STANDARD","CRITERION" 44 | 540 DATA 5,"SMALL","INSIGNIFICANT","LITTLE","TINY","MINUTE" 45 | 550 DATA 6,"STOP","HALT","STAY","ARREST","CHECK","STANDSTILL" 46 | 560 DATA 6,"HOUSE","DWELLING","RESIDENCE","DOMICILE","LODGING" 47 | 565 DATA "HABITATION" 48 | 570 DATA 7,"PIT","HOLE","HOLLOW","WELL","GULF","CHASM","ABYSS" 49 | 580 DATA 7,"PUSH","SHOVE","THRUST","PROD","POKE","BUTT","PRESS" 50 | 590 DATA 6,"RED","ROUGE","SCARLET","CRIMSON","FLAME","RUBY" 51 | 600 DATA 7,"PAIN","SUFFERING","HURT","MISERY","DISTRESS","ACHE" 52 | 605 DATA "DISCOMFORT" 53 | 999 END 54 | -------------------------------------------------------------------------------- /examples/vintage_bcg/test1.bas: -------------------------------------------------------------------------------- 1 | 10 print "I am test 1" 2 | 20 end 3 | -------------------------------------------------------------------------------- /examples/vintage_bcg/tictactoe1.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT TAB(30);"TIC TAC TOE" 2 | 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 30 PRINT:PRINT:PRINT 4 | 50 REM 5 | 100 REM THIS PROGRAM PLAYS TIC TAC TOE 6 | 110 REM THE MACHINE GOES FIRST 7 | 120 PRINT "THE GAME BOARD IS NUMBERED:": PRINT 8 | 130 PRINT "1 2 3": PRINT "8 9 4": PRINT "7 6 5" 9 | 140 PRINT 10 | 150 REM 11 | 160 REM 12 | 170 REM 13 | 180 DEF FNM(X)=X-8*INT((X-1)/8) 14 | 190 REM 15 | 200 REM MAIN PROGRAM 16 | 210 PRINT 17 | 220 PRINT 18 | 230 A=9 19 | 240 M=A 20 | 250 GOSUB 650 21 | 260 P=M 22 | 270 B=FNM(P+1) 23 | 280 M=B 24 | 290 GOSUB 650 25 | 300 Q=M 26 | 310 IF Q=FNM(B+4) THEN 360 27 | 320 C=FNM(B+4) 28 | 330 M=C 29 | 340 GOSUB 700 30 | 350 GOTO 730 31 | 360 C=FNM(B+2) 32 | 370 M=C 33 | 380 GOSUB 650 34 | 390 R=M 35 | 400 IF R=FNM(C+4) THEN 450 36 | 410 D=FNM(C+4) 37 | 420 M=D 38 | 430 GOSUB 700 39 | 440 GOTO 730 40 | 450 IF P/2<>INT(P/2) THEN 500 41 | 460 D=FNM(C+7) 42 | 470 M=D 43 | 480 GOSUB 700 44 | 490 GOTO 730 45 | 500 D=FNM(C+3) 46 | 510 M=D 47 | 520 GOSUB 650 48 | 530 S=M 49 | 540 IF S=FNM(D+4) THEN 590 50 | 550 E=FNM(D+4) 51 | 560 M=E 52 | 570 GOSUB 700 53 | 580 REM 54 | 590 E=FNM(D+6) 55 | 600 M=E 56 | 610 GOSUB 700 57 | 620 PRINT "THE GAME IS A DRAW." 58 | 630 GOTO 210 59 | 640 REM 60 | 650 GOSUB 700 61 | 660 PRINT "YOUR MOVE"; 62 | 670 INPUT M 63 | 680 RETURN 64 | 700 PRINT "COMPUTER MOVES";M 65 | 710 RETURN 66 | 720 REM 67 | 730 PRINT "AND WINS ********" 68 | 740 GOTO 210 69 | 750 END 70 | -------------------------------------------------------------------------------- /examples/vintage_bcg/train.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(33);"TRAIN" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT: PRINT: PRINT 4 | 4 PRINT "TIME - SPEED DISTANCE EXERCISE": PRINT 5 | 10 C=INT(25*RND(1))+40 6 | 15 D=INT(15*RND(1))+5 7 | 20 T=INT(19*RND(1))+20 8 | 25 PRINT " A CAR TRAVELING";C;"MPH CAN MAKE A CERTAIN TRIP IN" 9 | 30 PRINT D;"HOURS LESS THAN A TRAIN TRAVELING AT";T;"MPH." 10 | 35 PRINT "HOW LONG DOES THE TRIP TAKE BY CAR"; 11 | 40 INPUT A 12 | 45 V=D*T/(C-T) 13 | 50 E=INT(ABS((V-A)*100/A)+.5) 14 | 55 IF E>5 THEN 70 15 | 60 PRINT "GOOD! ANSWER WITHIN";E;"PERCENT." 16 | 65 GOTO 80 17 | 70 PRINT "SORRY. YOU WERE OFF BY";E;"PERCENT." 18 | 80 PRINT "CORRECT ANSWER IS";V;"HOURS." 19 | 90 PRINT 20 | 95 PRINT "ANOTHER PROBLEM (YES OR NO)"; 21 | 100 INPUT A$ 22 | 105 PRINT 23 | 110 IF A$="YES" THEN 10 24 | 999 END 25 | -------------------------------------------------------------------------------- /examples/vintage_bcg/trap.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT TAB(34);"TRAP" 2 | 2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 3 PRINT:PRINT:PRINT 4 | 10 G=6 5 | 20 N=100 6 | 30 REM-TRAP 7 | 40 REM-STEVE ULLMAN, 8-1-72 8 | 50 PRINT "INSTRUCTIONS"; 9 | 60 INPUT Z$ 10 | 70 IF LEFT$(Z$,1)<>"Y" THEN 180 11 | 80 PRINT "I AM THINKING OF A NUMBER BETWEEN 1 AND";N 12 | 90 PRINT "TRY TO GUESS MY NUMBER. ON EACH GUESS," 13 | 100 PRINT "YOU ARE TO ENTER 2 NUMBERS, TRYING TO TRAP" 14 | 110 PRINT "MY NUMBER BETWEEN THE TWO NUMBERS. I WILL" 15 | 120 PRINT "TELL YOU IF YOU HAVE TRAPPED MY NUMBER, IF MY" 16 | 130 PRINT "NUMBER IS LARGER THAN YOUR TWO NUMBERS, OR IF" 17 | 140 PRINT "MY NUMBER IS SMALLER THAN YOUR TWO NUMBERS." 18 | 150 PRINT "IF YOU WANT TO GUESS ONE SINGLE NUMBER, TYPE" 19 | 160 PRINT "YOUR GUESS FOR BOTH YOUR TRAP NUMBERS." 20 | 170 PRINT "YOU GET";G;"GUESSES TO GET MY NUMBER." 21 | 180 X=INT(N*RND(1))+1 22 | 190 FOR Q=1 TO G 23 | 200 PRINT 24 | 210 PRINT "GUESS #";Q; 25 | 220 INPUT A,B 26 | 230 IF A=B AND X=A THEN 400 27 | 240 IF A <= B THEN 260 28 | 250 GOSUB 360 29 | 260 IF A <= X AND X <= B THEN 320 30 | 270 IF XL(J) THEN 340 27 | 320 REM 28 | 330 GOTO 290 29 | 340 NEXT K 30 | 350 NEXT J 31 | 360 P=P+1 32 | 370 M1=L(P) 33 | 380 P=P+1 34 | 390 M2=L(P) 35 | 400 PRINT 36 | 420 PRINT "YOU: ";A$(M1),"COMPUTER: ";A$(M2) 37 | 430 N1=INT((M1-.5)/4) 38 | 440 N2=INT((M2-.5)/4) 39 | 450 IF N1>=N2 THEN 490 40 | 460 A1=A1+1 41 | 470 PRINT "THE COMPUTER WINS!!! YOU HAVE";B1;"AND THE COMPUTER HAS";A1 42 | 480 GOTO 540 43 | 490 IF N1=N2 THEN 530 44 | 500 B1=B1+1 45 | 510 PRINT "YOU WIN. YOU HAVE";B1;"AND THE COMPUTER HAS";A1 46 | 520 GOTO 540 47 | 530 PRINT "TIE. NO SCORE CHANGE." 48 | 540 IF L(P+1)=0 THEN 610 49 | 550 PRINT "DO YOU WANT TO CONTINUE"; 50 | 560 INPUT V$ 51 | 570 IF V$="YES" THEN 360 52 | 580 IF V$="NO" THEN 650 53 | 590 PRINT "YES OR NO, PLEASE. "; 54 | 600 GOTO 540 55 | 610 PRINT 56 | 620 PRINT 57 | 630 PRINT "WE HAVE RUN OUT OF CARDS. FINAL SCORE: YOU: ";B1; 58 | 640 PRINT " THE COMPUTER: ";A1:PRINT 59 | 650 PRINT "THANKS FOR PLAYING. IT WAS FUN." 60 | 655 PRINT 61 | 660 DATA "S-2","H-2","C-2","D-2","S-3","H-3","C-3","D-3" 62 | 670 DATA "S-4","H-4","C-4","D-4","S-5","H-5","C-5","D-5" 63 | 680 DATA "S-6","H-6","C-6","D-6","S-7","H-7","C-7","D-7" 64 | 690 DATA "S-8","H-8","C-8","D-8","S-9","H-9","C-9","D-9" 65 | 700 DATA "S-10","H-10","C-10","D-10","S-J","H-J","C-J","D-J" 66 | 710 DATA "S-Q","H-Q","C-Q","D-Q","S-K","H-K","C-K","D-K" 67 | 720 DATA "S-A","H-A","C-A","D-A" 68 | 999 END 69 | -------------------------------------------------------------------------------- /examples/vintage_bcg/word.bas: -------------------------------------------------------------------------------- 1 | 2 PRINT TAB(33);"WORD" 2 | 3 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 3 | 4 PRINT: PRINT: PRINT 4 | 5 DIM S(7),A(7),L(7),D(7),P(7) 5 | 10 PRINT "I AM THINKING OF A WORD -- YOU GUESS IT. I WILL GIVE YOU" 6 | 15 PRINT "CLUES TO HELP YOU GET IT. GOOD LUCK!!": PRINT: PRINT 7 | 20 REM 8 | 30 PRINT: PRINT: PRINT "YOU ARE STARTING A NEW GAME..." 9 | 35 RESTORE 10 | 40 READ N 11 | 50 C=INT(RND(1)*N+1) 12 | 60 FOR I=1 TO C 13 | 70 READ S$ 14 | 80 NEXT I 15 | 90 G=0 16 | 95 S(0)=LEN(S$) 17 | 100 FOR I=1 TO LEN(S$): S(I)=ASC(MID$(S$,I,1)): NEXT I 18 | 110 FOR I=1 TO 5 19 | 120 A(I)=45 20 | 130 NEXT I 21 | 140 FOR J=1 TO 5 22 | 144 P(J)=0 23 | 146 NEXT J 24 | 150 PRINT "GUESS A FIVE LETTER WORD"; 25 | 160 INPUT L$ 26 | 170 G=G+1 27 | 172 IF S$=G$ THEN 500 28 | 173 FOR I=1 TO 7: P(I)=0: NEXT I 29 | 175 L(0)=LEN(L$) 30 | 180 FOR I=1 TO LEN(L$): L(I)=ASC(MID$(L$,I,1)): NEXT I 31 | 190 IF L(1)=63 THEN 300 32 | 200 IF L(0)<>5 THEN 400 33 | 205 M=0: Q=1 34 | 210 FOR I=1 TO 5 35 | 220 FOR J=1 TO 5 36 | 230 IF S(I)<>L(J) THEN 260 37 | 231 P(Q)=L(J) 38 | 232 Q=Q+1 39 | 233 IF I<>J THEN 250 40 | 240 A(J)=L(J) 41 | 250 M=M+1 42 | 260 NEXT J 43 | 265 NEXT I 44 | 270 A(0)=5 45 | 272 P(0)=M 46 | 275 A$="": FOR I=1 TO A(0): A$=A$+CHR$(A(I)): NEXT I 47 | 277 P$="": FOR I=1 TO P(0): P$=P$+CHR$(P(I)): NEXT I 48 | 280 PRINT "THERE WERE";M;"MATCHES AND THE COMMON LETTERS WERE...";P$ 49 | 285 PRINT "FROM THE EXACT LETTER MATCHES, YOU KNOW................";A$ 50 | 286 IF A$=S$ THEN 500 51 | 287 IF M>1 THEN 289 52 | 288 PRINT: PRINT "IF YOU GIVE UP, TYPE '?' FOR YOUR NEXT GUESS." 53 | 289 PRINT 54 | 290 GOTO 150 55 | 300 S$="": FOR I=1 TO 7: S$=S$+CHR$(S(I)): NEXT I 56 | 310 PRINT "THE SECRET WORD IS ";S$: PRINT 57 | 320 GOTO 30 58 | 400 PRINT "YOU MUST GUESS A 5 LETTER WORD. START AGAIN." 59 | 410 PRINT: G=G-1: GOTO 150 60 | 500 PRINT "YOU HAVE GUESSED THE WORD. IT TOOK";G;"GUESSES!": PRINT 61 | 510 INPUT "WANT TO PLAY AGAIN";Q$ 62 | 520 IF Q$="YES" THEN 30 63 | 530 DATA 12,"DINKY","SMOKE","WATER","GRASS","TRAIN","MIGHT","FIRST" 64 | 540 DATA "CANDY","CHAMP","WOULD","CLUMP","DOPEY" 65 | 999 END 66 | -------------------------------------------------------------------------------- /examples/width.bas: -------------------------------------------------------------------------------- 1 | 2 | 100 screen 0 3 | 110 w=25 4 | 120 print "setting WIDTH=";w 5 | 130 print 6 | 140 width w 7 | 150 for i=1 to 200:print chr$((i mod 10)+asc("0"));:next 8 | 160 print 9 | 170 print 10 | 180 print "done. hit any key";input$(1) 11 | 12 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/udhos/basgo 2 | 3 | go 1.20 4 | 5 | require ( 6 | github.com/faiface/mainthread v0.0.0-20171120011319-8b78f0a41ae3 7 | github.com/udhos/baslib v0.12.0 8 | ) 9 | 10 | require ( 11 | github.com/gdamore/encoding v1.0.0 // indirect 12 | github.com/gdamore/tcell v1.3.0 // indirect 13 | github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7 // indirect 14 | github.com/go-gl/glfw v0.0.0-20200420212212-258d9bec320e // indirect 15 | github.com/lucasb-eyer/go-colorful v1.0.3 // indirect 16 | github.com/mattn/go-runewidth v0.0.9 // indirect 17 | github.com/udhos/inkey v0.0.0-20190226220941-63d5361f87da // indirect 18 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect 19 | golang.org/x/text v0.7.0 // indirect 20 | ) 21 | 22 | //replace github.com/udhos/baslib => /home/everton/baslib 23 | -------------------------------------------------------------------------------- /gofunc/gofunc.bas: -------------------------------------------------------------------------------- 1 | 10 print _gofunc("sum", sqr(4+5), 20-10) 2 | 20 print _gofunc("concat$", "a", "b") 3 | 30 _goproc("printString", "c"): print 4 | -------------------------------------------------------------------------------- /gofunc/gofunc.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | ) 6 | 7 | func sum(a, b float64) float64 { 8 | return a + b 9 | } 10 | 11 | func concat(a, b string) string { 12 | return a + b 13 | } 14 | 15 | func printString(s string) { 16 | fmt.Print(s) 17 | } 18 | -------------------------------------------------------------------------------- /gofunc/rad.bas: -------------------------------------------------------------------------------- 1 | 110 rem Using _GOIMPORT and _GODECL to embed Go code within BASIC code 2 | 120 rem 3 | 130 _goimport("math") 4 | 140 _godecl("func degToRad(d float64) float64 {") 5 | 150 _godecl(" return d*math.Pi/180") 6 | 160 _godecl("}") 7 | 170 rem 8 | 180 rem Now using _GOFUNC to call that Go function from BASIC code 9 | 190 rem 10 | 200 d = 180 11 | 210 r = _gofunc("degToRad", d) 12 | 220 print d;"degrees in radians is";r 13 | -------------------------------------------------------------------------------- /gofunc/run-gofunc-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | basgo-build < gofunc.bas > a.go && go run a.go gofunc.go 4 | -------------------------------------------------------------------------------- /lint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | die() { 4 | echo 2>&1 "$0": $# 5 | exit 6 | } 7 | 8 | lint() { 9 | local pkg="$1" 10 | 11 | echo working: "$pkg" 12 | 13 | go vet -vettool=$(which shadow) "$pkg" 14 | gosimple "$pkg" 15 | golint "$pkg" 16 | staticcheck "$pkg" 17 | } 18 | 19 | go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow 20 | 21 | lint ./baslex 22 | lint ./baslex-run 23 | lint ./node 24 | lint ./basparser 25 | lint ./basparser-run 26 | lint ./basgo 27 | lint ./basgo-run 28 | lint ./basgo-build 29 | 30 | --------------------------------------------------------------------------------