Option Explicit Randomize Timer Const QuestFile = "words.txt" DIM AS Integer Counter, RandQuestion, TRound, Plrs, Categories, Qstions, PlrNum, Plrs2 RandQuestion = 0 ' Question number we ask next TRound = 0 ' 0 rounds naturally played at start PlrNum = 1 DIM Shared AS Integer AskedQstions(25), AQCounter ' history of last 25 asked Qstions AQCounter = 1 ' handyman to move 1 to 25 and then to 1 For Counter = 1 TO UBOUND(AskedQstions,1) ' this loop just makes sure AskedQstions(Counter) = 0 ' askedQstions array is pure nothing at start Next Counter TYPE HighScores ScorerName AS String ScorerPoints AS Integer ScoreDate AS String END TYPE DIM AS HighScores Record(2) Open "highscor.es" For Input As #1 Input #1, Record(0).ScorerName, Record(0).ScorerPoints, Record(0).ScoreDate, Record(1).ScorerName, Record(1).ScorerPoints, Record(1).ScoreDate Close #1 TYPE PlayerInfo PlrName AS String ' Name of player PlrColor AS Integer ' Color of player PlrPoints AS Integer ' How many points PlrPipe AS Integer ' How many times answered correctly at sequence PlrCase AS Integer ' Does player has CASE Sensitivity ON or OFF PlrFaults AS Integer ' How many fault answers player still have until game over PlrInGame AS Integer ' is player on game or not PlrRounds AS Integer ' How many rounds player playd END TYPE DIM AS PlayerInfo Player(4) ' max. Plrs is 4. For Counter = 1 TO 4 Player(Counter).PlrName = "Player " + STR(Counter) ' default name is Player (Number of player) Player(Counter).PlrColor = (Counter + 1) ' first player color is green Player(Counter).PlrPoints = 0 ' no points at start Player(Counter).PlrPipe = 0 ' how many times in row answered correctly Player(Counter).PlrCase = 0 ' case sensitivity is off for default Player(Counter).PlrFaults = 5 ' 5 times can answer wrong until game over Player(Counter).PlrInGame = 0 ' No any Plrs in game at start Player(Counter).PlrRounds = 0 Next Counter Player(1).PlrInGame = 1 ' ok, we have one player as default :D Plrs = 1 TYPE Question Topic AS String ' on wich topic present question belongs to Hint AS String ' Hint (question) for present answer Answer AS String ' Player answer Messed AS String ' Messed answer what is printed on screen PlrAns AS String Timing AS Integer END TYPE DIM AS Question Present Declare Function RndQuestion(Qstions AS Integer) Declare SUB Copyrights() Declare SUB Help() Declare SUB HighOnes(Record() AS HighScores) Declare SUB Results(Player() AS PlayerInfo, Plrs AS Integer, Record() AS HighScores) Declare SUB Wrong(Player() AS PlayerInfo, Present AS Question, PlrNum, Plrs AS Integer) Declare SUB Correct(Player() AS PlayerInfo, Present AS Question, PlrNum AS Integer) Declare SUB QuestionScreen(Present AS Question, Player() AS PlayerInfo, PlrNum AS Integer) ' shows question Declare SUB Prepare(Present AS Question, Player() AS PlayerInfo, PlrNum AS Integer) ' prepares next player on turn Declare SUB StartMenu(Player() AS PlayerInfo, Plrs AS Integer, Record() AS HighScores) ' start menu of game Declare SUB SetPlrs(Player() AS PlayerInfo, Plrs AS Integer) ' Plrs set up. (how many, names and case sensitivitys) Declare SUB ClearPresent(Present AS Question) ' clears values on Present.X Declare SUB GetQuestion(Present AS Question, RandQuestion AS Integer) ' This reads randomed question with its topic and answer and seperates em Declare SUB MessIt(Present AS Question) ' messes up the answer Declare SUB APrint(LocX, LocY, Color1, Color2 AS Integer, Text AS String) ' APrint unites Color, LOCATE and print in one sub. Looks prettyer Declare SUB CheckWordsTxt(Qstions, Categories AS Integer) ' sub that checks how many topics and Qstions exists on "QuestFile" CheckWordsTxt(Qstions, Categories) ' we call it right away so we know results SCREEN 12 ' ----------------------------------------------------------- DO StartMenu(Player(), Plrs, Record()) Plrs2 = Plrs DO Player(PlrNum).PlrRounds = Player(PlrNum).PlrRounds + 1 ClearPresent(Present) ' This clears Present.X RandQuestion = RndQuestion(Qstions) ' Gets new number of question for next round GetQuestion(Present, RandQuestion) ' reads it from our Qstions file Prepare(Present, Player(), PlrNum) QuestionScreen(Present, Player(), PlrNum) IF Player(PlrNum).PlrCase = 0 THEN IF UCASE(Present.Answer) = UCASE(Present.PlrAns) THEN Correct(Player(), Present, PlrNum) END IF IF UCASE(Present.Answer) <> UCASE(Present.PlrAns) THEN Wrong(Player(), Present, PlrNum, Plrs) END IF END IF IF Player(PlrNum).PlrCase = 1 THEN IF Present.Answer = Present.PlrAns THEN Correct(Player(), Present, PlrNum) END IF IF Present.Answer <> Present.PlrAns THEN Wrong(Player(), Present, PlrNum, Plrs) END IF END IF IF Plrs = 0 THEN EXIT DO DO PlrNum = PlrNum + 1 IF PlrNum > 4 THEN PlrNum = 1 Loop UNTIL Player(PlrNum).PlrInGame = 1 LOOP Plrs = Plrs2 Results(Player(), Plrs, Record()) For Counter = 1 TO 4 Player(Counter).PlrPoints = 0 ' no points at start Player(Counter).PlrPipe = 0 ' how many times in row answered correctly Player(Counter).PlrFaults = 5 ' 5 times can answer wrong until game over Player(Counter).PlrRounds = 0 Next Counter LOOP END ' //////////////////////////////////// FUNCTIONS ////////////////////////////////////////// Function RndQuestion(Qstions AS Integer) DIM AS Integer FCounter, FRandomed, HandyMan DO HandyMan = 0 ' HandyMan is ok at start FRandomed = INT(RND * Qstions) + 1 ' rnd's number of question For FCounter = 1 TO UBOUND(AskedQstions,1) ' we loop thru last 25 Qstions asked IF AskedQstions(FCounter) = FRandomed THEN HandyMan = 1 ' if we have asked it, handyman is not ok Next FCounter LOOP Until HandyMan = 0 ' when comes question that aint asked in last 25 turns AskedQstions(AQCounter) = FRandomed ' lets asave number of question so we dont use it in next 25 rounds AQCounter = AQCounter + 1 ' and increase AQCounter IF AQCounter = 26 Then AQCounter = 1 ' only last 25 are in store Return FRandomed ' were finish here. END Function ' //////////////////////////////////// SUBS ////////////////////////////////////////////// SUB HighOnes(Record() AS HighScores) DIM AS String SubString Color 0, 0 : CLS SubString = "NO CASE SENSITIVE HIGHSCORE:" APrint(8, 40 - (INT(LEN(SubString) / 2)), 7, 0, SubString) SubString = Record(0).ScorerName APrint(10, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = STR(Record(0).ScorerPoints) + " POINTS" APrint(11, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = Record(0).ScoreDate APrint(12, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = "CASE SENSITIVE HIGHSCORE:" APrint(15, 40 - (INT(LEN(SubString) / 2)), 7, 0, SubString) SubString = Record(1).ScorerName APrint(17, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = STR(Record(1).ScorerPoints) + " POINTS" APrint(18, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = Record(1).ScoreDate APrint(19, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) DO : SubString = INKEY$ : Loop Until SubString <> "" DO : SubString = INKEY$ : Loop While SubString <> "" COLOR 0, 0 : CLS END SUB ' =============================================== SUB Results(Player() AS PlayerInfo, Plrs AS Integer, Record() AS HighScores) DIM AS Integer Counter, Counter2, HowMany = 0, MaxPoints = 0 DIM AS Integer NoCaseRec = 0, CaseRec = 0 DIM AS String SubString Color 0, 0 : CLS For Counter = 1 TO 4 IF Player(Counter).PlrPoints > MaxPoints Then MaxPoints = Player(Counter).PlrPoints IF Player(Counter).PlrCase = 0 AND Player(Counter).PlrPoints > Record(0).ScorerPoints Then NoCaseRec = Counter IF Player(Counter).PlrCase = 1 AND Player(Counter).PlrPoints > Record(1).ScorerPoints Then CaseRec = Counter Next Counter HowMany = Plrs For Counter = 0 To MaxPoints For Counter2 = 1 TO Plrs IF Player(Counter2).PlrPoints = Counter THEN SubString = Player(Counter2).PlrName + " " + STR(Player(Counter2).PlrPoints) + " POINTS." APrint((HowMany + 10), 40 - (INT(LEN(SubString) / 2)), Player(Counter2).PlrColor, 0, SubString) HowMany = HowMany - 2 END IF Next Counter2 Next Counter IF NoCaseRec > 0 THEN Record(0).ScorerName = Player(NoCaseRec).PlrName Record(0).ScorerPoints = Player(NoCaseRec).PlrPoints Record(0).ScoreDate = DATE END IF IF CaseRec > 1 THEN Record(1).ScorerName = Player(CaseRec).PlrName Record(1).ScorerPoints = Player(CaseRec).PlrPoints Record(1).ScoreDate = DATE END IF IF NoCaseRec > 0 OR CaseRec > 0 THEN Open "highscor.es" For OutPut As #1 Write #1, Record(0).ScorerName, Record(0).ScorerPoints, Record(0).ScoreDate, Record(1).ScorerName, Record(1).ScorerPoints, Record(1).ScoreDate Close #1 HighOnes(Record()) END IF DO : SubString = INKEY$ : Loop Until SubString <> "" DO : SubString = INKEY$ : Loop While SubString <> "" END SUB ' =============================================== SUB Wrong(Player() AS PlayerInfo, Present AS Question, PlrNum, Plrs AS Integer) DIM AS String SubString DIM AS Integer SubInteger = 0, SubInteger2 = 0 Color 0, 0 : CLS SubString = Player(PlrNum).PlrName APrint(4, 40 - (INT(LEN(SubString) / 2)), Player(PlrNum).PlrColor, 0, SubString) SubString = "__ ______ ___ _ _ ____ " APrint(6, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubString = "\ \ / / _ \ / _ \| \ | |/ ___|" APrint(7, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubString = " \ \ /\ / /| |_) | | | | \| | | _ " APrint(8, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubString = " \ V V / | _ <| |_| | |\ | |_| |" APrint(9, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubString = " \_/\_/ |_| \_\\___/|_| \_|\____|" APrint(10, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubString = "NO NO NO. IT WAS WRONG ANSWER!!!" APrint(12, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubString = "NO POINTS EARNED." APrint(13, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubString = "ANSWERS CORRECTLY IN A SEQUENCE MULTIPLYER RESTORED TO 0" APrint(14, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) Player(PlrNum).PlrPipe = 0 Player(PlrNum).PlrFaults = Player(PlrNum).PlrFaults - 1 IF Player(PlrNum).PlrFaults < 1 THEN SubString = Player(PlrNum).PlrName + " YOUR GAME IS OVER!!!" APrint(15, 40 - (INT(LEN(SubString) / 2)), 7, 0, SubString) Plrs = Plrs - 1 Player(PlrNum).PlrInGame = 0 END IF DO : SubString = INKEY$ : Loop Until SubString <> "" DO : SubString = INKEY$ : Loop While SubString <> "" SLEEP 250, 1 END SUB ' =============================================== SUB Correct(Player() AS PlayerInfo, Present AS Question, PlrNum AS Integer) DIM AS String SubString DIM AS Integer SubInteger = 0, SubInteger2 = 0 COLOR 0, 0 : CLS SubString = Player(PlrNum).PlrName APrint(4, 40 - (INT(LEN(SubString) / 2)), Player(PlrNum).PlrColor, 0, SubString) SubString = " ____ ___ ____ ____ _____ ____ _____ _ " APrint(6, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = " / ___/ _ \| _ \| _ \| ____/ ___|_ _| |" APrint(7, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = "| | | | | | |_) | |_) | _|| | | | | |" APrint(8, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = "| |__| |_| | _ <| _ <| |__| |___ | | |_|" APrint(9, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = " \____\___/|_| \_\_| \_\_____\____| |_| (_)" APrint(10, 40 - (INT(LEN(SubString) / 2)), 2, 0, SubString) SubString = "CATEGORI WAS: " + Present.Topic APrint(12, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) SubString = "HINT WAS: " + Present.Hint APrint(13, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) SubString = "MESSED ANSWER WAS: " + Present.Messed APrint(14, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "CORRECT ANSWER IS: " + Present.Answer APrint(15, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = " YOUR ANSWER WAS: " + Present.PlrAns APrint(17, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "CORRECT ANSWER: +100 POINTS" : SubInteger = SubInteger + 100 ' player gets 100 points if answer was correct APrint(18, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubInteger2 = 19 IF Present.Timing < (LEN(Present.Answer) / 2) THEN ' if player answers faster than LEN(Answer) / 2 he/she gets quickanswer bonus SubInteger = SubInteger + ((LEN(Present.Answer) / 2) * 10) SubString = "QUICK ANSWER BONUS: " + STR(((LEN(Present.Answer) / 2) * 10)) + " POINTS" APrint(SubInteger2, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) SubInteger2 = SubInteger2 + 1 END IF Player(PlrNum).PlrPipe = Player(PlrNum).PlrPipe + 1 IF Player(PlrNum).PlrPipe > 1 AND Player(PlrNum).PlrPipe < 11 THEN SubInteger = (SubInteger * Player(PlrNum).PlrPipe) SubString = STR(Player(PlrNum).PlrPipe) + " ANSWERS CORRECTLY IN A SEQUENCE" APrint(SubInteger2, 40 - (INT(LEN(SubString) / 2)), 12, 0, SubString) SubInteger2 = SubInteger2 + 1 SubString = "POINTS MULTIPLYED BY " + STR(Player(PlrNum).PlrPipe) APrint(SubInteger2, 40 - (INT(LEN(SubString) / 2)), 12, 0, SubString) SubInteger2 = SubInteger2 + 1 END IF IF Player(PlrNum).PlrPipe = 10 THEN Player(PlrNum).PlrFaults = Player(PlrNum).PlrFaults + 1 SubString = "10 IN A ROW. ONE EXTRA FAULT CHANCE EARNED" APrint(SubInteger2, 40 - (INT(LEN(SubString) / 2)), 4, 0, SubString) SubInteger2 = SubInteger2 + 1 Player(PlrNum).PlrPipe = 0 END IF SubString = "TOTAL POINTS EARNED THIS ROUND: " + STR(SubInteger) APrint(SubInteger2, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) Player(PlrNum).PlrPoints = Player(PlrNum).PlrPoints + SubInteger DO : SubString = INKEY$ : Loop Until SubString <> "" DO : SubString = INKEY$ : Loop While SubString <> "" SLEEP 250, 1 END SUB ' =============================================== SUB QuestionScreen(Present AS Question, Player() AS PlayerInfo, PlrNum AS INTEGER) DIM AS String SubString DIM AS Integer Counter Color 0, 0 : CLS SubString = Player(PlrNum).PlrName APrint(5, 40 - (INT(LEN(SubString) / 2)), Player(PlrNum).PlrColor, 0, SubString) SubString = "CATEGORY: " + Present.Topic Aprint(10, 14, 14, 0, SubString) SubString = "HINT: " + Present.Hint Aprint(11, 18, 14, 0, SubString) SubString = "LETTERS: " + Present.Messed Aprint(13, 15, 7, 0, SubString) SubString = " ANSWER: " For Counter = 1 TO LEN(Present.Messed) SubString = SubString + CHR$(95) Next Counter Aprint(14, 15, 7, 0, SubString) Counter = TIMER LOCATE 14, 24: Input"", Present.PlrAns Present.Timing = (TIMER - Counter) END SUB ' =============================================== SUB Prepare(Present AS Question, Player() AS PlayerInfo, PlrNum AS Integer) DIM AS String SubString Color 0, 0 : CLS SubString = Player(PlrNum).PlrName APrint(5, 40 - (INT(LEN(SubString) / 2)), Player(PlrNum).PlrColor, 0, SubString) SubString = "CATEGORY IS " + Present.Topic APrint(6, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) SubString = "PRESS A KEY WHEN READY..." APrint(8, 40 - (INT(LEN(SubString) / 2)), 12, 0, SubString) SubString = "YOUR POINTS: " + STR(Player(PlrNum).PlrPoints) APrint(12, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "YOUR FAULT CHANCES: " + STR(Player(PlrNum).PlrFaults) APrint(13, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "THIS IS YOUR ROUND NUMBER " + STR(Player(PlrNum).PlrRounds) APrint(14, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "YOU ARE NOT UP/low CASE SENSITIVE" IF Player(PlrNum).PlrCase = 1 THEN SubString = "YOU ARE UP/low CASE SENSITIVE" END IF APrint(16, 40 - (INT(LEN(SubString) / 2)), 12, 0, SubString) DO : SubString = INKEY$ : Loop Until SubString <> "" DO : SubString = INKEY$ : Loop While SubString <> "" SLEEP 250, 1 Color 0, 0 : CLS END SUB ' =============================================== SUB StartMenu(Player() AS PlayerInfo, Plrs AS Integer, Record() AS HighScores) DIM AS Integer Counter, Counter2 DIM AS String MenuLogo(6), KeyPress DIM AS Double RePrint Color 0, 0 : CLS Copyrights() DO MenuLogo(1) = "START NEW GAME" MenuLogo(2) = "SET PLAYERS" MenuLogo(3) = "HIGHSCORES" MenuLogo(4) = "HELP" MenuLogo(5) = "QUIT" Counter2 = 9 For Counter = 1 TO UBOUND(MenuLogo,1) - 1 APrint(Counter2 + 3, 31, 15, 0, "(" + STR(Counter) + ")") APrint(Counter2 + 3, 35, (Counter + 9), 0, MenuLogo(Counter)) Counter2 = (Counter2 + 2) Next Counter MenuLogo(1) = " __ __ _ ____ " MenuLogo(2) = " \ \ / /__ _ __ __| |/ ___|_ _ ___ ___ ___ " MenuLogo(3) = " \ \ /\ / / _ \| '__/ _` | | _| | | |/ _ \/ __/ __| " MenuLogo(4) = " \ V V / (_) | | | (_| | |_| | |_| | __/\__ \__ \ " MenuLogo(5) = " \_/\_/ \___/|_| \__,_|\____|\__,_|\___||___/___/ " MenuLogo(6) = " " For Counter = 1 TO LEN(MenuLogo(1)) For Counter2 = 1 TO UBOUND(MenuLogo,1) APrint((Counter2 + 1), (12 + Counter), 14, 1, MID$(MenuLogo(Counter2), Counter,1)) APrint((Counter2 + 1), (67 - Counter), 13, 1, MID$(MenuLogo(Counter2), (LEN(MenuLogo(Counter2)) - Counter) + 1, 1)) Next Counter2 Sleep 30 Next Counter RePrint = Timer DO : KeyPress = INKEY$ LOOP UNTIL KeyPress <> "" OR (Timer - RePrint) > 1.00 IF KeyPress = CHR$(50) THEN SetPlrs(Player(), Plrs) : Color 0, 0 : CLS IF KeyPress = CHR$(51) THEN HighOnes(Record()) IF KeyPress = CHR$(52) THEN Help() IF KeyPress = CHR$(53) THEN END LOOP UNTIL KeyPress = CHR$(49) END SUB ' =============================================== SUB SetPlrs(Player() AS PlayerInfo, Plrs AS Integer) Color 0, 0 : CLS DIM AS Integer Counter, Counter2 DIM AS String MenuLogo(6), KeyPress, SubString DIM AS Double RePrint MenuLogo(1) = " __ __ _ ____ " MenuLogo(2) = " \ \ / /__ _ __ __| |/ ___|_ _ ___ ___ ___ " MenuLogo(3) = " \ \ /\ / / _ \| '__/ _` | | _| | | |/ _ \/ __/ __| " MenuLogo(4) = " \ V V / (_) | | | (_| | |_| | |_| | __/\__ \__ \ " MenuLogo(5) = " \_/\_/ \___/|_| \__,_|\____|\__,_|\___||___/___/ " MenuLogo(6) = " " DO SubString = "Press number of player to edit" APrint(21, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) SubString = "(*) = case sensitivity for answers." APrint(22, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) SubString = "+/- keys to increase/decrease Players." APrint(23, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) SubString = "(ESC) to confirm changes." APrint(24, 40 - (INT(LEN(SubString) / 2)), 14, 0, SubString) For Counter = 1 TO LEN(MenuLogo(1)) For Counter2 = 1 TO UBOUND(MenuLogo,1) APrint((Counter2 + 1), (12 + Counter), 14, 1, MID$(MenuLogo(Counter2), Counter,1)) APrint((Counter2 + 1), (67 - Counter), 13, 1, MID$(MenuLogo(Counter2), (LEN(MenuLogo(Counter2)) - Counter) + 1, 1)) Next Counter2 Next Counter Counter2 = 6 For Counter = 1 TO Plrs Counter2 = Counter2 + 3 APrint(Counter2, 31, 15, 0, "(" + STR(Counter) + ")") APrint(Counter2, 35, Player(Counter).PlrColor, 0, Player(Counter).PlrName) APrint((Counter2 + 1), 33, 7, 0, "(*)") IF Player(Counter).PlrCase = 0 THEN APrint((Counter2 + 1), 37, 12, 0, "OFF") END IF IF Player(Counter).PlrCase = 1 THEN APrint((Counter2 + 1), 37, 10, 0, "ON") END IF Next Counter RePrint = Timer DO : KeyPress = INKEY$ LOOP UNTIL KeyPress <> "" OR (Timer - RePrint) > 1.00 IF KeyPress = CHR$(43) AND Plrs < 4 THEN Plrs = Plrs + 1 : Player(Plrs).PlrInGame = 1 END IF IF KeyPress = CHR$(45) AND Plrs > 1 THEN Plrs = Plrs - 1 : Player(Plrs + 1).PlrInGame = 0 Color 0, 0 : CLS END IF IF ASC(KeyPress) > 48 AND ASC(KeyPress) < (49 + Plrs) THEN Counter2 = ASC(KeyPress) - 48 For Counter = 1 TO LEN(Player(Counter2).PlrName) APrint((6 + (Counter2) * 3), (Counter + 34), Player(Counter2).PlrColor, 0, CHR$(32)) NEXT Counter Color Player(Counter2).PlrColor LOCATE 6 + ((Counter2) * 3), 35 : INPUT "",Player(Counter2).PlrName IF Player(Counter2). PlrName = "" THEN Player(Counter2). PlrName = "Player " + STR(Counter2) APrint(7 + ((Counter2) * 3), 41, 15, 0, "+/- to change. [ENTER] to confirm.") DO : KeyPress = INKEY$ IF KeyPress = CHR$(43) THEN APrint(7 + ((Counter2) * 3), 37, 10, 0, "ON ") : Player(Counter2).PlrCase = 1 END IF IF KeyPress = CHR$(45) THEN APrint(7 + ((Counter2) * 3), 37, 12, 0, "OFF ") : Player(Counter2).PlrCase = 0 END IF LOOP Until KeyPress = CHR$(13) : Color 0, 0 : CLS END IF LOOP Until KeyPress = CHR$(27) END SUB ' =============================================== SUB ClearPresent(Present AS Question) ' this clears Present.X variables Present.Topic = "" Present.Hint = "" Present.Answer = "" Present.Messed = "" Present.PlrAns = "" END SUB ' =============================================== SUB GetQuestion(Present AS Question, RandQuestion AS Integer) ' GetQuestion reads question and topic from file DIM AS String TopicLine, WorkLine ' where we read lines from QuestFile DIM AS Integer HandyArray(), Seperator, QCounter = 1 OPEN QuestFile FOR INPUT AS #1 DO LINE INPUT #1, WorkLine IF MID$(WorkLine,1,1) = CHR$(58) Then TopicLine = WorkLine ' if topic line, then topic becomes to it. IF MID$(WorkLine,1,1) = CHR$(35) Then QCounter = QCounter + 1 ' if question line, we increase LOOP Until QCounter = RandQuestion ' until we have our question CLOSE #1 For QCounter = 2 TO LEN(TopicLine) - 1 Present.Topic = Present.Topic + MID$(TopicLine,QCounter,1) ' now we get riddof topic marker ":" Next QCountery Seperator = INSTR(WorkLine, CHR$(59)) ' locates where is seperator of hint and question ";" For QCounter = 2 TO (Seperator - 1) ' skips over QuestionLine marker "#" Present.Hint = Present.Hint + MID$(WorkLine,QCounter,1) ' now we have hint where it should be Next QCounter For QCounter = (Seperator + 1) TO LEN(WorkLine ) - 1 ' starts reading after ";" seperator Present.Answer = Present. Answer + MID$(WorkLine,QCounter,1) ' adds answer on variable Next Counter MessIt(Present) END SUB ' =============================================== SUB MessIt(Present AS Question) DIM AS String MessyArray(LEN(Present.Answer)) DIM AS Integer Counter, Randomed For Counter = 1 TO LEN(Present.Answer) ' if so, MessyArray(Counter) = CHR$(1) ' just to make sure messyarray is 0's or spaces IF MID$(Present.Answer, Counter, 1) = CHR$(32) THEN ' we search them MessyArray(Counter) = CHR$(32) ' and put em on same places for messy one END IF Next Counter For Counter = 1 TO LEN(Present.Answer) IF MID$(Present.Answer, Counter, 1) <> CHR$(32) THEN DO Randomed = INT(RND * LEN(Present.Answer)) + 1 LOOP Until MessyArray(Randomed) = CHR$(1) MessyArray(Randomed) = MID$(Present.Answer, Counter, 1) END IF Next Counter For Counter = 1 TO UBOUND(MessyArray,1) Present.Messed = Present.Messed + MessyArray(Counter) Next Counter END SUB ' =============================================== SUB APrint(LocX, LocY, Color1, Color2 AS Integer, Text AS String) ' sub aprint is color + locate + print union Color Color1, Color2 LOCATE LocX, LocY, 0 Print Text; End SUB ' =============================================== ' This sub only job is to check quickly at start of program, how many categories and Qstions exists ' and also notice if there is any errors SUB CheckWordsTxt(Qstions, Categories AS Integer) DIM AS String WorkLine DIM AS Integer LineCounter = 1, Warnings = 0 Color 15, 0 OPEN QuestFile FOR INPUT AS #1 DO WHILE NOT EOF(1) LINE INPUT #1, WorkLine ' here we check is :CATEGORY line readed as it should be IF MID$(WorkLine,1,1) = CHR$(58) THEN ' Ok, categori line under handling. lets check few things of it. Categories = Categories + 1 ' ' if only categori ":" marker but no topic and end of line "/" marker IF INSTR(WorkLine, CHR$(58)) = LEN(WorkLine) THEN Print "Warning: Categori (:) marker on line"; LineCounter ; " NO CATEGORI NAME AND END OF LINE MARKER (/) FOUNDED." Warnings = Warnings + 1 ' we have ":/" Print " LINE" ; LineCounter; " = " ; WorkLine END IF IF INSTR(WorkLine, CHR$(47)) - INSTR(WorkLine, CHR$(58)) = 1 THEN ' if only categori ":" and end of line "/" markers Print "Warning: Categori (:) marker on line"; LineCounter ; " NO CATEGORI NAME FOUNDED." Warnings = Warnings + 1 Print " LINE" ; LineCounter; " = " ; WorkLine END IF IF INSTR(WorkLine, CHR$(47)) = 0 THEN ' if no end of line "/" marker Print "Warning: Categori (:) marker on line"; LineCounter ; " NO END OF LINE MARKER (/)" Warnings = Warnings + 1 Print " LINE" ; LineCounter; " = " ; WorkLine END IF END IF ' here we check is question/answer line as it should be IF MID$(WorkLine,1,1) = CHR$(35) THEN ' Ok, categori line under handling. lets check few things of it. Qstions = Qstions + 1 IF INSTR(WorkLine, CHR$(35)) = LEN(WorkLine) THEN ' if only Question "#" marker but no topic and end of line "/" marker Print "Warning: Question (#) marker on line"; LineCounter ; " NO QUESTION AND ANSWER AND END OF LINE MARKER (/) FOUNDED." Warnings = Warnings + 1 Print " LINE" ; LineCounter; " = " ; WorkLine END IF IF INSTR(WorkLine, CHR$(59)) = 0 THEN ' question aint seperated from answer Print "Warning: Question (#) marker on line"; LineCounter ; " NO QUESTION/ANSWER SEPERATOR." Warnings = Warnings + 1 Print " LINE" ; LineCounter; " = " ; WorkLine END IF IF INSTR(WorkLine, CHR$(47)) = 0 THEN ' end of line marker somewhere else or in holiday Print "Warning: Question (#) marker on line"; LineCounter ; " NO END OF LINE (/) MARKER." Warnings = Warnings + 1 Print " LINE" ; LineCounter; " = " ; WorkLine END IF END IF LineCounter = LineCounter + 1 LOOP CLOSE #1 ' if warnings, we ask do player still wana continue or exit and fix the problems IF Warnings > 0 THEN Color 14 : Print Print "Press (ESC) to cancel, any other key to continue." DO : WorkLine = INKEY$ : Loop Until WorkLine <> "" IF WorkLine = CHR$(27) THEN END END IF END SUB SUB Copyrights() DIM AS String SubString SubString = "WordGuess 1.0" APrint(25, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "(C) 2006 Virtanen Kristian" APrint(26, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "virtanen.kristian@ascii-world.com & www.ascii-world.com" APrint(26, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) SubString = "WordGuess 1.0 is published as Freeware / Open Source." APrint(28, 40 - (INT(LEN(SubString) / 2)), 15, 0, SubString) END SUB SUB Help() Color 0, 0 : CLS Color 14, 0 Print "WordGuess is a trivia/guessing game for single or up to four player." Print "" Print "Game gives you an category where answer belongs to, hint and answer that" Print "letters are messed. Then your job is to guess, or know, what is the answer." Print "" Print "At start, player(s) have 5 fault chances. Every time player answers wrong," Print "one fault chance is used. After all 5 faults has used, player game is over." Print "" Print "Every time player answers correctly, he/she gets 100 points as default." Print "After every correct answer, MULTIPLYER is increased by one." Print "Default points are multiplied. If MULTIPLYER > 1" Print "So two correct answers in sequence gives 2 X 100 points," Print "and three in sequence gives 3 X 100 points." Print "" Print "If player answers correctly 10 times in sequence, comes extra FAULT to use" Print "and MULTIPLYER is dropped back to zero." Print "" Print "By answering correctly fast enough, player has chance to get extra points." Print "Player has lenght of answer/2 seconds time to answer, to get QuickAnswer bonus." Print "QuickAnswer bonus is lenght of answer/2 * 10." Print "So it gives nicely extra points." Print "" Color 7, 0 Print "PRESS KEY TO READ NEXT PAGE." : SLEEP : SLEEP 250,1 Color 0, 0 : CLS Color 14, 0 Print "Player can decide is game CASE SENSITIVE." Print "" Print "Shortly, if player is NOT CASE SENSITIVE," Print "answer can be (Helsinki), (helsinki), or even (HeLsInKi)." Print "If player has CASE SENSITIVE off, answer got to be entirely" Print "correct. In that case, (Helsinki) must written as Helsinki" Print "Each player can seperately choose, is hes/her CASE SENSITIVITY on or off." Print "" Print "This option, gives opportunity to compensate differences" Print "between fast and slow writers." Color 7, 0 Print "PRESS KEY TO READ NEXT PAGE." : SLEEP : SLEEP 250,1 Color 0, 0 : CLS Color 14, 0 Print "Categorys, hints and answers are saved on (words.txt) file." Print "Anyone can edit, add or remove lines in there." Print "Follow instructions given on that same file." Print "words.txt is regular text-format file, that can be opened with" Print "all text editor programs." Print "" Color 12, 0 Print "IMPORTANT. I dont take responsibility of words.txt files" Print "that are edited by some one else than me." Print "" Print "If you are unsure about your words.txt file," Print "go to www.ascii-world.com Games section" Print "to download official words.txt file" Color 7, 0 Print "PRESS KEY TO ENTER MENU SCREEN." : SLEEP : SLEEP 250,1 Color 0, 0 : CLS END SUB