I'm currently making a text based choose your own adventure game with possible RPG elements.
I'm somewhat new at programming. My father is very good ad QB64, but isn't always able to help me with my problems. I'm not asking about story help but with ways I could make my code run more efficiently. I've recently replaced a lot of if statements with select case, which in turn has helped with a lot of bugs. but I'm not sure what else would be effective.
SCREEN 12 DIM SHARED age%, gender$, Name$ soundHandle& = _SNDOPEN("Music.mp3") 'opens the sound file _SNDPLAYFILE "Music.mp3", , .25 'plays the sound file menu: CLS PRINT PRINT "==============================" PRINT "THE LOST FOREST: THE BEGINNING" PRINT "==============================" PRINT " The Choose Your Own Adventure" PRINT "==============================" PRINT "What Will Your Heros Name be?:"; Name$ = Ask$(5, 1, CSRLIN, POS(0), 11, 0) CLS COLOR 15, 0 PRINT Name$ + "How Old will Your Hero be?: ";: age% = VAL(Ask$(3, 0, CSRLIN, POS(0), 15, 0)) 'INPUT "", age% CLS age: IF age% < 21 THEN PRINT "Your Hero is Not Old Enough to go on This Journey" IF age% > 100 THEN PRINT "Your Hero Falls Over and Dies from Old Age"; " GAME OVER" IF age% < 21 THEN END IF age% >= 100 THEN END Gender: COLOR 15, 0 PRINT Name$ + " What is Your Gender (M/F/ECT): ";: INPUT "", gender$ CLS ready: COLOR 15, 0 Saythis "Are You Ready to go Onto This Grand Adventure?: " 'saythis is a sub to wrap text when it gets close to the end of the screen ready$ = LCASE$(Ask$(3, 1, CSRLIN, POS(0), 15, 0)) CLS IF INSTR(1, ready$, "y") THEN GOTO story ELSE GOTO ready IF INSTR(1, ready$, "n") THEN GOTO rus ELSE GOTO ready END IF rus: CLS PRINT "are you sure that you dont want to go on this adventure?:", hello$ ready$ = LCASE$(Ask$(3, 1, CSRLIN, POS(0), 15, 0)) IF INSTR(1, hello$, "y") THEN END else GOTO rus IF INSTR(1, hello$, "n") THEN GOTO story ELSE GOTO rus story: CLS Saythis " A long time ago, when sorcery rained supreme, there lived a powerful sorcerer, his name was Steve (placeholder name). he struck fear even among the most powerful of sorcerers and warriors of his time. He overthrew the High Wizard ma’ster but was slightly weakened in the process. most thought being loyal would save their lives, but Steve still enjoyed killing even those most loyal to him. he ruled for many years, until one day an outsider with blackened armor and a sword able to cut through even the strongest of foes like margarine, confronted Steve and challenged him to a battle, Steve thought him mad and struck him with a spell that should've killed him instantly, but the outsider stood there, unharmed, and drove his sword into Steves chest. After that day the stranger faded into history but Steve is believed to still be alive, his soul, trapped in the hero's sword. now a new hero is born but unknown to anyone, he will once again strike down Steve" INPUT "type anything to continue: ", story$ IF story$ = "" THEN GOTO pub pub: CLS saving Saythis "You Stand Inside Your towns local Pub, Tipsy Merry Men surround you, Most of Them you Recognize, Over by The bar maiden, is Smith, The Smith, Aptly Named Fellow Who means well But isn't all That Smart, He Dropped out of School at a young Age to Pursue His Trade, like his Father. Over Near the door is johnson the apprentice Carpenter, Commonly has to Visit Smith, He can't seem to keep from breaking his tools, although he is clumsy he is Very ambitious learner willing to learn from his mistakes instead of getting upset from them. And Sitting next to you is Your best friend Michael Mconline, You've been best friends for most of your life, he wants to become a Night of the Land, but he doesn't have the gold to pay for the training." INPUT "What Will you Do Next?: ", choice$ SELECT CASE choice$ CASE "talk to smith" GOTO DlogS CASE "talk to Micheal" GOTO Micheal_dialog CASE "talk to Johnson" GOTO DlogJ CASE "go outside" GOTO outside CASE ELSE GOTO pub END SELECT Micheal_dialog: Saythis "You look ever to your best friend and" outside: PRINT "" Saythis " You stand outside the Pub, across the road is the lake, about 50 meters west of the lake stands your house, down the road is the town center and the Fountain. Just behind the foutain is the Town Hall " INPUT "Where will you go?: ", Location$ IF Location$ = "go back inside" THEN GOTO pub DlogS: CLS PRINT "you walk up to Smith and greet him" PRINT "1: chat weapons" PRINT "2: joining up" PRINT "3: current events" INPUT " what will You Say?: ", DlogS$ IF INSTR(1, dlog$, "eat") THEN PRINT "you shoudnt do that" SELECT CASE dlog$ CASE "joining up" GOTO teamupsmith CASE "chat weapons" GOTO weaponchat CASE "current events" GOTO CES CASE ELSE GOTO DlogS END SELECT weaponchat: CLS check_1% = 1 Saythis "You ask smith about any recent weapons hes made recently," Saythis "He says that he hasn't had any jobs due to how small the town is, but he goes on about a recent job where he had to fix a plow, but the plow was fine, the ox was just stubbern and pretended that he couldnt pull it. You ask him if hes willing to make some wepons, he agrees, but you tell him that when you know what wepons you will need you'll put in the request" INPUT "", weaponchat$ weponchat$ = LCASE$(Ask$(3, 1, CSRLIN, POS(0), 15, 0)) check_1% = 1 SELECT CASE weaponchat$ CASE "return" GOTO DlogS CASE "back" RETURN CASE ELSE GOTO weaponchat END SELECT teamupsmith: CLS PRINT "You ask Smith if he would like to join up and go see if the rumors are true" PRINT " he says that he has some things he needs to finish but when he does he might" IF check_1% = 1 THEN PRINT "I also have to make those weapons you requested" PRINT "what will you do?: "; INPUT teamupS$ SELECT CASE teamupS$ CASE "return" GOTO DlogS END SELECT CES: CLS Saythis "you talk to smith about recent events that have been going on, he says that alot of soldiers have been passing through the village recenty, and a lot of injured coming back. he wonders what could be doing this to so many soldiers, he hasnt heard of any war or alot of citizens being drafted" INPUT "what will you do? :"; CES$ INPUT "", CES$ SELECT CASE CES$ CASE "" CASE "" CASE "" CASE ELSE GOTO CES END SELECT DlogJ: CLS 'not sure what will happen here 'johnson is the carpenter Saythis "you start to walk towards johnson but when he gets up go greet you, but he trips on his own feet and falls flat on his face, you help him up as he appoligized for his clumbsines, you tell him" PRINT "1: you should be more careful" PRINT "2: you cluts learn to walk" PRINT "3: its ok, ive done that before" PRINT "what will you say? (1,2,3...)"; DlogJ$ SELECT CASE DlogJ$ CASE "1 " CASE "2" CASE "3" CASE ELSE GOTO DlogJ END SELECT Smithery: CLS ' you will get smith as an ally here PRINT "placeholder"; smithery$ SELECT CASE smithery$ CASE "" CASE "" CASE "" CASE ELSE GOTO Smithery END SELECT Town_Hall: CLS 'get a special item here that my help PRINT "placeholder"; Town_hall$ SELECT CASE Town_hall$ CASE "" CASE "" CASE "" CASE ELSE GOTO Town_Hall END SELECT carpender: CLS ' get johnson as a ally here Dark_Lord_Encounter: CLS 'dark lord attempt to stop the proficy from becoming true by killing everyone SUB wrong_weird_input IF INSTR(1, dlog$, "eat") THEN PRINT "you shoudnt do that" PRINT "i dont think you should do that" PRINT "press e to return" IF INKEY$ = ("e") THEN RETURN END SUB SUB Saythis (text$) x = 1 WHILE x <= LEN(text$) y = 80 DO IF INSTR(y + x, text$, " ") > x + 79 THEN y = y - 1 ELSE EXIT DO END IF LOOP PRINT MID$(text$, x, y) x = x + y WEND END SUB SUB Stats strength% = 3 stamina% = 3 agility% = 3 critchance% = 3 IF experiencetotal% = levelup% THEN strength% = strength% + 2 stamina% = stamina% + 1 agility% = agility% + 2 critchance% = critchance% + 1 END IF END SUB SUB lvl level% = 1 levelup% = 50 experience% = 5 experiencetotal% = 0 IF experiencetotal% = levelup% THEN level% = level% + 1 ELSE experiencetotal% = experiencetotal% * 1.25 END IF IF experiencetotal% = levelup% THEN experience% = experience% + 1 END IF END SUB SUB saving OPEN "save1.txt" FOR OUTPUT AS #1 PRINT Name$ PRINT age% PRINT gender$ PRINT #1, Name$ PRINT #1, age% PRINT #1, gender$ CLOSE #1 END SUB DECLARE FUNCTION Ask$ (Length%, Cat%, x%, y%, ForeColor%, BackColor%) FUNCTION Ask$ (Length%, Cat%, x%, y%, ForeColor%, BackColor%) LOCATE x%, y%, 1 COLOR ForeColor, BackColor a = x% b = y% COLOR ForeColor%, BackColor% Variable$ = SPACE$(Length%) DO DO 'wait for keyboard input MyData$ = INKEY$ LOOP WHILE MyData$ = "" IF MyData$ = CHR$(13) THEN Ask$ = Variable$ EXIT FUNCTION END IF SELECT CASE Cat% 'check what category. cat 0 is number only CASE 0 SELECT CASE ASC(MyData$) 'check ascii value of input CASE 48 TO 57 '0 through 9 IF LEN(RTRIM$(Variable$)) < Length% THEN 'if length of user input is less than max length LOCATE a, b 'reset cursor b = b + 1 'add one to our length marker MID$(Variable$, (b - y%), 1) = MyData$ 'make cursor spot the new data PRINT MyData$; END IF END SELECT CASE 1 'alpha numeric SELECT CASE ASC(MyData$) CASE 48 TO 57 '0 through 9 IF LEN(RTRIM$(Variable$)) < Length% THEN LOCATE a, b b = b + 1 MID$(Variable$, (b - y%), 1) = MyData$ PRINT MyData$; END IF CASE 65 TO 90, 97 TO 122, 32 '0 through 9 IF LEN(RTRIM$(Variable$)) < Length% THEN LOCATE a, b b = b + 1 MID$(Variable$, (b - y%), 1) = MyData$ PRINT MyData$; END IF END SELECT END SELECT SELECT CASE ASC(MyData$) CASE 8 'backspace IF b > y% THEN MID$(Variable$, b - y%, 1) = " " b = b - 1 LOCATE x%, y% PRINT Variable$ + " "; LOCATE a, b END IF END SELECT SELECT CASE MyData$ CASE (CHR$(0) + CHR$(75)) 'left arrow IF b > y% THEN b = b - 1 LOCATE a, b END IF CASE (CHR$(0) + CHR$(77)) 'right arrow IF (b - y%) < Length% THEN b = b + 1 LOCATE a, b END IF CASE (CHR$(0) + CHR$(72)) 'up arrow x = x CASE (CHR$(0) + CHR$(80)) 'left arrow x = x CASE (CHR$(0) + CHR$(83)) 'del Variable$ = MID$(Variable$, 1, b - y%) + RTRIM$(MID$(Variable$, (b + 2) - y%)) LOCATE x%, y% PRINT Variable$ + " "; LOCATE a, b ' CASE "~" END END SELECT LOOP END FUNCTION
I'm not asking for a debugger, (I couldn't pay you for your time anyway), but asking for assistance with ways to improve code that isn't effective to have (that probably sounds like debugging).