Table Of ContentHands On DarkBASIC Pro
Volume 1
ASelf-Study Guide to Games Programming
AlistairStewart
Digital Skills
Milton
Barr
Girvan
Ayrshire
KA26 9TY
www.digital-skills.co.uk
Copyright ©AlistairStewart2005
Allrightsreserved.
Nopartofthisworkmaybereproduced orused inanyform
without the writtenpermissionofthe author.
Although everyefforthas beenmade to ensureaccuracy, the
author and publisheracceptneitherliabilitynorresponsibility
foranylossordamagearisingfromthe information inthisbook.
Allbrandnames and productnames are trademarksoftheirrespective
companiesandhave beencapitalisedthroughout the text.
DarkBASICProfessionalisproduced byTheGameCreatorsLtd
CoverDesignbyNeilKing2007
Printed September2005
2ndPrintingNovember2005
3rdPrintingJanuary2006
4th PrintingNovember2006
5th PrintingFebruary2007
6th PrintingSeptember2007
7th PrintingFebruary2008
8th PrintingSeptember2009 (with corrections)
9th PrintingJuly2010(withcorrections)
Title : HandsOnDarkBASICPro Volume1
ISBN : 1-874107-08-4
ISBN-13 978-1-874107-08-8
OtherTitlesAvailable:
HandsOn DarkBASICProVolume2
HandsOn Pascal
HandsOn C++
HandsOn Java
HandsOn XHTML
Table Of Contents
Chapter 1 Designing Algorithms
DesigningAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
FollowingInstructions . . . . . . . . . . . . . . . . . . . . . . . . . . 2
ControlStructures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
ComplexConditions . . . . . . . . . . . . . . . . . . . . . . . . . 9
Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
OperationsonData . . . . . . . . . . . . . . . . . . . . . . . . 22
LevelsofDetail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
CheckingforErrors . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Chapter 2 Starting DarkBASIC Pro
ProgrammingaComputer . . . . . . . . . . . . . . . . . . . . . . . . . 38
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
TheCompilationProcess . . . . . . . . . . . . . . . . . . . . . . . . 38
StartingDarkBASICPro . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
DarkBASICProFiles . . . . . . . . . . . . . . . . . . . . . . . . . . 40
GettingStartedwithDarkBASIC . . . . . . . . . . . . . . . . . . . . 41
FirstStart-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
SubsequentStart-Ups . . . . . . . . . . . . . . . . . . . . . . . 41
SpecifyingaProject . . . . . . . . . . . . . . . . . . . . . . . . 41
AFirstProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
SavingYourProject . . . . . . . . . . . . . . . . . . . . . . . . 44
FirstStatementsinDarkBASICPro . . . . . . . . . . . . . . . . . . . . 45
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
EndingaProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
TheENDStatement . . . . . . . . . . . . . . . . . . . . . . . . 45
TheWAITKEY Statement . . . . . . . . . . . . . . . . . . . . . 45
AddingComments . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
OutputtingtotheScreen . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
ThePRINTStatement . . . . . . . . . . . . . . . . . . . . . . . 48
PositioningTextontheScreen . . . . . . . . . . . . . . . . . . . . . 51
TheSETCURSORStatement . . . . . . . . . . . . . . . . . . . 51
TheTEXTStatement . . . . . . . . . . . . . . . . . . . . . . . 52
TheCENTERTEXTCommand . . . . . . . . . . . . . . . . . . 53
ChangingtheOutputFont . . . . . . . . . . . . . . . . . . . . . . . 54
TheSETTEXTFONTStatement . . . . . . . . . . . . . . . . . 54
TheSETTEXTSIZEStatement . . . . . . . . . . . . . . . . . . 55
TheSETTEXTTOStatement . . . . . . . . . . . . . . . . . . . 55
ChangingColours . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
HowColoursareDisplayed . . . . . . . . . . . . . . . . . . . 56
TheRGBStatement . . . . . . . . . . . . . . . . . . . . . . . . 57
TheINKStatement . . . . . . . . . . . . . . . . . . . . . . . . . 58
TheSETTEXTOPAQUEStatement . . . . . . . . . . . . . . . 60
TheSETTEXTTRANSPARENTStatement. . . . . . . . . . . . 60
TheCLSStatement . . . . . . . . . . . . . . . . . . . . . . . . 61
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
SomeDisplayTechniques . . . . . . . . . . . . . . . . . . . . . . . . . 64
ScreenResolution . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
TheSETDISPLAY MODEStatement . . . . . . . . . . . . . . . 64
ChoosingaTextFont . . . . . . . . . . . . . . . . . . . . . . . . . 65
ErasingText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
ShadowText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
EmbossedText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Chapter 3 Data
ProgramData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
IntegerVariables . . . . . . . . . . . . . . . . . . . . . . . . . . 75
RealVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
StringVariables . . . . . . . . . . . . . . . . . . . . . . . . . . 76
UsingMeaningfulNames . . . . . . . . . . . . . . . . . . . . . 77
NamingRules . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
AllocatingValuestoVariables . . . . . . . . . . . . . . . . . . . . . . . 79
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
TheAssignmentStatement . . . . . . . . . . . . . . . . . . . . . . 79
AssigningaConstant . . . . . . . . . . . . . . . . . . . . . . . 79
CopyingaVariable(cid:146)sValue . . . . . . . . . . . . . . . . . . . . 80
CopyingtheResultofanArithmeticExpression . . . . . . . . . . 80
OperatorPrecedence . . . . . . . . . . . . . . . . . . . . . . . . . 83
UsingParentheses . . . . . . . . . . . . . . . . . . . . . . . . . 84
VariableRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
StringOperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
ThePRINTStatementAgain . . . . . . . . . . . . . . . . . . . . . . 85
OtherWaystoStoreaValueinaVariable . . . . . . . . . . . . . . . 87
TheINPUTStatement . . . . . . . . . . . . . . . . . . . . . . . 87
TheREADandDATAStatements . . . . . . . . . . . . . . . . . 88
TheRESTOREStatement . . . . . . . . . . . . . . . . . . . . . 91
TheTimeandDate . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
TheTIMERStatement . . . . . . . . . . . . . . . . . . . . . . . 91
TheGETTIME$Statement . . . . . . . . . . . . . . . . . . . . 92
TheGETDATE$Statement . . . . . . . . . . . . . . . . . . . . 93
GeneratingRandomNumbers . . . . . . . . . . . . . . . . . . . . . 93
TheRNDStatement . . . . . . . . . . . . . . . . . . . . . . . . 93
TheRANDOMIZEStatement . . . . . . . . . . . . . . . . . . . 94
StructuredEnglishandPrograms . . . . . . . . . . . . . . . . . . . 95
UsingVariablestoStoreColourValues . . . . . . . . . . . . . . . . 96
NamedConstants . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
TestingSequentialCode . . . . . . . . . . . . . . . . . . . . . . . . 97
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
DeterminingCurrentSettings . . . . . . . . . . . . . . . . . . . . . . . 100
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
ScreenSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
TheSCREENHEIGHTStatement . . . . . . . . . . . . . . . . 100
TheSCREENWIDTHStatement . . . . . . . . . . . . . . . . 100
TheSCREENDEPTHStatement . . . . . . . . . . . . . . . . 101
ColourComponents . . . . . . . . . . . . . . . . . . . . . . . . . 101
TheRGBRStatement . . . . . . . . . . . . . . . . . . . . . . 101
TheRGBGStatement . . . . . . . . . . . . . . . . . . . . . . 102
TheRGBBStatement . . . . . . . . . . . . . . . . . . . . . . 102
TextSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
TheTEXTBACKGROUNDTYPEStatement . . . . . . . . . . 103
TheTEXTSTYLEStatement . . . . . . . . . . . . . . . . . . 103
TheTEXTSIZEStatement . . . . . . . . . . . . . . . . . . . 104
TheTEXTFONT$Statement . . . . . . . . . . . . . . . . . . 104
TheTEXTWIDTHStatement . . . . . . . . . . . . . . . . . . 104
TheTEXTHEIGHTStatement . . . . . . . . . . . . . . . . . . 105
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Chapter 4 Selection
BinarySelection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
TheIFStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
CompoundConditions-theANDandOROperators . . . . . . 116
TheNOTOperator . . . . . . . . . . . . . . . . . . . . . . . . 118
ELSE-CreatingTwoAlternativeActions . . . . . . . . . . . . 119
TheOtherIFStatement . . . . . . . . . . . . . . . . . . . . . . . 120
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Multi-WaySelection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
NestedIFStatements . . . . . . . . . . . . . . . . . . . . . . . . 122
TheSELECTStatement . . . . . . . . . . . . . . . . . . . . . . . 124
TestingSelectiveCode . . . . . . . . . . . . . . . . . . . . . . . . 127
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Chapter 5 Iteration
Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
TheWHILE..ENDWHILEConstruct . . . . . . . . . . . . . . . . . 134
TheREPEAT..UNTILConstruct . . . . . . . . . . . . . . . . . . 136
TheFOR..NEXTConstruct . . . . . . . . . . . . . . . . . . . . . 138
FindingtheSmallestValueinaListofValues . . . . . . . . . . 142
UsingFORwithREADandDATA . . . . . . . . . . . . . . . . 144
TheEXITStatement . . . . . . . . . . . . . . . . . . . . . . . 145
TheDO..LOOPConstruct . . . . . . . . . . . . . . . . . . . . . . 146
TheWAITmillisecondsStatement . . . . . . . . . . . . . . . . 147
TheSLEEPStatement . . . . . . . . . . . . . . . . . . . . . . 147
NestedLoops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
NestedFORLoops . . . . . . . . . . . . . . . . . . . . . . . 149
TestingIterativeCode . . . . . . . . . . . . . . . . . . . . . . . . 150
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Chapter 6 Drawing Statements
DrawingOnTheScreen . . . . . . . . . . . . . . . . . . . . . . . . . 160
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
BasicDrawingCommands . . . . . . . . . . . . . . . . . . . . . . 160
TheDOTStatement . . . . . . . . . . . . . . . . . . . . . . . 160
ThePOINTStatement . . . . . . . . . . . . . . . . . . . . . . 161
TheLINEStatement . . . . . . . . . . . . . . . . . . . . . . . 162
TheBOXStatement . . . . . . . . . . . . . . . . . . . . . . . 163
TheCIRCLEStatement . . . . . . . . . . . . . . . . . . . . . 164
TheELLIPSEStatement . . . . . . . . . . . . . . . . . . . . . 165
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
DemonstratingBasicShapes . . . . . . . . . . . . . . . . . . . . . . . 167
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
AFirstLookatAnimation . . . . . . . . . . . . . . . . . . . . . . . . 169
BasicConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
HowtoRemoveanObjectfromtheScreen . . . . . . . . . . . . . 169
HowtoMoveanObject . . . . . . . . . . . . . . . . . . . . . . . 170
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Chapter 7 Modular Programming
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
DesigningaFunction. . . . . . . . . . . . . . . . . . . . . . . 176
CodingaFunction . . . . . . . . . . . . . . . . . . . . . . . . 177
CallingaFunction . . . . . . . . . . . . . . . . . . . . . . . . 177
AnotherExample . . . . . . . . . . . . . . . . . . . . . . . . . 179
Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Pre-conditions . . . . . . . . . . . . . . . . . . . . . . . . . . 182
TheEXITFUNCTIONStatement . . . . . . . . . . . . . . . . . 182
ReturnTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
LocalVariables . . . . . . . . . . . . . . . . . . . . . . . . . . 186
GlobalVariables . . . . . . . . . . . . . . . . . . . . . . . . . 187
DesigningRoutines . . . . . . . . . . . . . . . . . . . . . . . . . . 188
SpecifyingaPost-Condition . . . . . . . . . . . . . . . . . . . 188
TheDrawTextLineMini-Spec . . . . . . . . . . . . . . . . . . 188
CreatingModularSoftware . . . . . . . . . . . . . . . . . . . . . . 191
Top-DownProgramming . . . . . . . . . . . . . . . . . . . . . . . 195
Bottom-UpProgramming . . . . . . . . . . . . . . . . . . . . . . . 197
StructureDiagrams . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
CreatingaSubroutine . . . . . . . . . . . . . . . . . . . . . . . . 201
CallingaSubroutine . . . . . . . . . . . . . . . . . . . . . . . . . 202
TheGOSUBStatement . . . . . . . . . . . . . . . . . . . . . 202
VariablesinaSubroutine . . . . . . . . . . . . . . . . . . . . 202
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Chapter 8 String Functions
StandardStringFunctions . . . . . . . . . . . . . . . . . . . . . . . . 210
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
StringOperations . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
TheLENStatement . . . . . . . . . . . . . . . . . . . . . . . 210
TheUPPER$Statement . . . . . . . . . . . . . . . . . . . . . 211
TheLOWER$Statement . . . . . . . . . . . . . . . . . . . . 212
TheLEFT$Statement . . . . . . . . . . . . . . . . . . . . . . 212
TheRIGHT$Statement . . . . . . . . . . . . . . . . . . . . . 213
TheMID$Statement . . . . . . . . . . . . . . . . . . . . . . . 213
TheASCStatement . . . . . . . . . . . . . . . . . . . . . . . 214
TheCHR$Statement . . . . . . . . . . . . . . . . . . . . . . 215
TheSTR$Statement . . . . . . . . . . . . . . . . . . . . . . 215
TheVALStatement . . . . . . . . . . . . . . . . . . . . . . . 216
TheSPACE$Statement . . . . . . . . . . . . . . . . . . . . . 217
TheBIN$Statement . . . . . . . . . . . . . . . . . . . . . . . 217
TheHEX$Statement . . . . . . . . . . . . . . . . . . . . . . 218
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
User-DefinedStringFunctions . . . . . . . . . . . . . . . . . . . . . . 220
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
CreatingNewStringFunctions . . . . . . . . . . . . . . . . . . . . 220
ThePos()Function . . . . . . . . . . . . . . . . . . . . . . . . 220
TheOccurs()Function . . . . . . . . . . . . . . . . . . . . . . 221
TheInsert$()Function . . . . . . . . . . . . . . . . . . . . . . 221
TheDelete$()Function. . . . . . . . . . . . . . . . . . . . . . 222
TheReplace$()Function . . . . . . . . . . . . . . . . . . . . . 222
TheCopy$()Function . . . . . . . . . . . . . . . . . . . . . . 222
UsingYourRoutinesinOtherPrograms . . . . . . . . . . . . . . . 223
The#INCLUDEStatement . . . . . . . . . . . . . . . . . . . . 223
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Chapter 9 Hangman
CreatingaFirstGame . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
TheRulesoftheGame . . . . . . . . . . . . . . . . . . . . . . . . 230
WhatParttheComputerPlaysintheGame . . . . . . . . . . . . . 230
DesigningtheScreenLayout . . . . . . . . . . . . . . . . . . . . . 231
GameData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
GameLogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
GameDocumentation . . . . . . . . . . . . . . . . . . . . . . . . 233
ImplementingtheDesign . . . . . . . . . . . . . . . . . . . . . . . 237
AddingInitialiseGame() . . . . . . . . . . . . . . . . . . . . . 238
AddingThinkOfWord() . . . . . . . . . . . . . . . . . . . . . . 239
AddingDrawInitialScreen(). . . . . . . . . . . . . . . . . . . . 241
AddingGetGuess() . . . . . . . . . . . . . . . . . . . . . . . 243
AddingCheckForLetter() . . . . . . . . . . . . . . . . . . . . . 247
AddingDrawLetter() . . . . . . . . . . . . . . . . . . . . . . . 248
AddingAddToHangedMan() . . . . . . . . . . . . . . . . . . . 249
AddingWordGuessed() . . . . . . . . . . . . . . . . . . . . . 249
AddingHangedManComplete() . . . . . . . . . . . . . . . . . 249
AddingGameOver() . . . . . . . . . . . . . . . . . . . . . . . 249
KeepingaTestLog . . . . . . . . . . . . . . . . . . . . . . . . . . 250
FlawsintheGame . . . . . . . . . . . . . . . . . . . . . . . . . . 250
OmissionsfromtheCode . . . . . . . . . . . . . . . . . . . . 250
DeviatingfromtheOriginalSpecifications . . . . . . . . . . . . 251
FinalTesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252