home *** CD-ROM | disk | FTP | other *** search
/ RUN Flagazine: Run 1 / run1.zip / LES9GWB.ASC < prev    next >
Text File  |  2013-08-18  |  22KB  |  269 lines

  1.                         De Basic Interpreter  (9)                            
  2.                                                                              
  3.                          Grafische mogelijkheden                             
  4.                                                                              
  5. Tot nu toe hebben we ons in deze cursus uitsluitend bezig gehouden met       
  6. karaktergeoriënteerd programmeren. Karaktergeoriënteerd wil zeggen dat       
  7. we gebruik maakten van de 256 tekens van de ASCII-tabel waarvan we een       
  8. groot deel vanaf het toetsenbord op het scherm zichtbaar kunnen maken:       
  9. de zogenoemde printable characters. Behalve deze intoetsbare tekens          
  10. (letters, cijfers, leestekens en bijzondere tekens) kunnen we in de          
  11. karaktergeoriënteerde modus nog gebruik maken van 'kwasi grafische           
  12. tekens' als lijnstukjes, hoekjes en blokjes waarmee we in de vorige les      
  13. kaders hebben gemaakt.                                                       
  14. Karaktergeoriënteerde Basic-programma's kunnen er heel mooi uitzien,         
  15. zeker wanneer op verantwoorde wijze van kleuren gebruik wordt gemaakt.       
  16. Maar toch heeft karaktergeoriënteerd Basic zijn beperkingen. We kunnen       
  17. bijvoorbeeld prachtige explosiekaders maken, inclusief schaduwrandjes,       
  18. maar cirkels of ovalen zijn er niet bij.                                     
  19. Op de keper beschouwd is karaktergeoriënteerd nogal grof. De matrix          
  20. waarin we de baas op het scherm kunnen spelen, is slechts 25x80              
  21. tekenposities in omvang: 25 regels van elk 80 ASCII-tekens.                  
  22.                                                                              
  23. De Screens                                                                   
  24.                                                                              
  25. Karaktergeoriënteerd Basic speelt zich af in een stukje geheugen dat         
  26. door de beeldbuis zichtbaar wordt gemaakt. Basic kent deze wijze van         
  27. weergeven als Screen 0 (niet grafisch). In Screen 0 kunnen we met een        
  28. groot aantal Basic-opdrachten en functies werken maar niet alle. Geven       
  29. we in Screen 0 bijvoorbeeld een grafische opdracht als:                      
  30.                                                                              
  31. CIRCLE (50,50),10                                                            
  32.                                                                              
  33. dan volgt onmiddellijk de foutmelding:                                       
  34. Illegal function call of Ongeldige functie-aanroep.                          
  35. We zullen eerst naar  een grafisch Screen moeten omschakelen alvorens        
  36. we van de typisch grafische commando's gebruik kunnen maken en om dat        
  37. te kunnen doen moet uw PC over een grafische kaart beschikken.               
  38. Na Screen 0 (karaktergeoriënteerd) volgen de grafische Screens 1 tot en      
  39. met 12. Vaak wordt tegenwoordig gebruik gemaakt van de hoge resolutie        
  40. van Screen 12: VGA omdat alle PC's van recente datum grafische beelden       
  41. met een hoog oplossend vermogen van 640x480 beeldpunten of pixels            
  42. kunnen weergeven. Sommige PC's gaan zelfs nog verder en hebben grafische     
  43. kaarten en kleurenbuizen die Super VGA (SVGA) kunnen laten zien. Het op-     
  44. lossend vermogen van SVGA bedraagt: 1024x840 pixels.                         
  45. Voordat (S)VGA zijn intrede deed was EGA (Screen 9) de hoogste resolutie:    
  46. 640x350 pixels. Voor GWBasic is dit het hoogst bereikbare scherm.            
  47. Voor Screen 12 moet naar een andere Basic als Q-, Quick-, Power-             
  48. of TurboBasic worden gegrepen.                                               
  49.                                                                              
  50. CGA en Hercules                                                              
  51.                                                                              
  52. Tussen Screen 0 en 10 liggen negen screens waarvan er (voor wat GWBasic       
  53. betreft) slechts zes interessant zijn: de Screens 1, 2, 3, 7, 8 en 9.        
  54. De eerste twee dateren uit de begintijd van de PC toen voor het eerst gra-   
  55. fische mogelijkheden werden geïntroduceerd in de vorm van de Color Graphics  
  56. Array (CGA). CGA zit nog steeds op elke PC maar het oplossend vermogen is    
  57. matig tot slecht: 320x200 beeldpunten in Screen 1 en 640x200 in Screen       
  58. 2.                                                                           
  59. In die begintijd had lang niet iedereen een kleurenscherm. Om de             
  60. grafische beelden van het spreadsheetprogramma Lotus 123 beter weer te       
  61. geven dan in CGA intoduceerde Hercules een videokaart voor de monochrome     
  62. (groene) IBM-buis met een betere resolutie dan IBM's CGA. Zonder kleur       
  63. weliswaar is de resolutie van Hercules in Screen 3: 720x348 pixels vrij      
  64. hoog.                                                                        
  65. Het grote nadeel van Hercules is dat deze grafische modus NIET               
  66. COMPATIBLE is met de standaard. Programma's in Screen 0 geven meestal        
  67. geen problemen zolang er maar geen kleur is gebruikt. Cyaan bijvoorbeeld
  68. op Hercules onderstreept weergegeven. Veel 'gewone' grafische programma's
  69. in de Screens 1,2,9 en 12 lopen zonder aanpassingen niet in Hercules. Daar
  70. zijn weer allerlei kunstgrepen voor nodig zoals CGA-emulatoren die het       
  71. soms mogelijk maken een niet voor Hercules aangepast grafisch Basic-         
  72. programma te laten draaien op een Hercules-scherm.                           
  73. Gebruikers van Hercules-schermen kennen inmiddels de beperkingen van         
  74. deze PC-vreemde modus en kijken niet vreemd op wanneer een nieuw             
  75. programma het op hun schermen niet doet. Ook veel grafische programma's      
  76. in RUN Flagazine laten het helaas op Hercules afweten.                       
  77.                                                                              
  78. Andere coördinaten                                                           
  79.                                                                              
  80. In GWBasic zijn de grafische Screens 1, 2 en 9 het meest interessant;        
  81. Screen 12 (VGA) is onbereikbaar. In Screen 0 werkten we met een              
  82. gemakkelijk stelsel van coordinaten. Met LOCATE y,x adresseren we elke       
  83. van de 2000 (25*80) posities. In de grafische Screens werkt LOCATE nog       
  84. steeds maar de typische grafische commmando's als LINE en PSET moeten        
  85. anders worden geadresseerd.                                                  
  86. In Screen 1 hebben we maken met een grafische matrix van 320x200 punten.     
  87. Op elk punt kunnen we met PSET (x,y) een punt neerzetten. PSET (0,0)         
  88. plaatst een punt in de linker bovenhoek en PSET (319,0) in de rechter        
  89. bovenhoek. Onderstaand programmaatje illustreert hoe we in een               
  90. FOR/NEXT-loop bovenin Screen 1 een dunne horizontale lijn kunnen trekken     
  91. met PSET:                                                                    
  92.                                                                              
  93. ┌───────────────────────────┐                                                
  94. │ 100 CLS:SCREEN 1          │                                                
  95. │ 110 FOR A=0 TO 319        │                                                
  96. │ 120   PSET (A,0)          │                                                
  97. │ 130 NEXT A                │                                                
  98. │ 140 LOCATE 5,1            │                                                
  99. └───────────────────────────┘                                                
  100.                                                                              
  101. Een verticale streep aan de linker kant van het scherm krijgt u door in      
  102. regel 120 de A en de 0 te verwisselen: PSET (0,A).                           
  103. Het grafische commando PSET is overigens niet de juiste methode om           
  104. lijnen horizontaal, diagonaal en verticaal te tekenen. Daarvoor              
  105. gebruiken we het grafische commando: LINE (x1,y1)-(x2,y2).                   
  106. Uit het bovenstaande blijkt al min of meer hoe de horizontale lijn in        
  107. het programmaatje hierboven moet worden getrokken. In tegenstelling tot      
  108. een punt (PSET) wordt een lijn altijd getrokken tussen het ene en het        
  109. andere punt. Het punt links boven wordt aangegeven als: (0,0) en het         
  110. punt rechtsboven als:                                                        
  111. (319,0). Tussen deze twee punten trekken we de grafische lijn aldus:         
  112.                                                                              
  113. 100 CLS:SCREEN 1                                                             
  114. 110 LINE (0,0)-(319,0)                                                       
  115. 120 LOCATE 5,1                                                               
  116.                                                                              
  117. tenslotte een diagonale lijn. Hoe trekken we in Screen 1 de diagonale        
  118. lijn van links boven naar rechts onder?                                      
  119.                                                                              
  120. 100 CLS:SCREEN 1                                                             
  121. 110 LINE (0,0)-(319,199)                                                     
  122.                                                                              
  123. Het commando LINE kan ook nog worden gebruikt in combinatie met STEP:        
  124. -STEP(dx,dy). Hiermee wordt de stap aangegeven waarmee de coördinaten        
  125. worden bepaald ten opzichte van de laatste grafische cursorpositie.          
  126. Een lijn die wordt getrokken kan ook nog een kleur krijgen. De optie:        
  127. ,B of ,BF zorgen ervoor dat er geen lijn wordt getrokken maar een recht-     
  128. hoek (B=Blok) eventueel ingekleurd met de opgegeven kleur (BF = Block        
  129. Fill).                                                                       
  130.                                                                              
  131. Schakel nu zelf over naar Screen 2 en besef dat u daarmee een hogere         
  132. resolutie heeft in een coördinatiestelsel van 640x200. Daarbinnen zet        
  133. PSET (0,639) dus een punt in de uiterste rechter bovenhoek en PSET (0,0)     
  134. nog steeds in de uiterste linker bovenhoek. Een diagnonale lijn van          
  135. links boven naar rechts onder tekent u met: LINE (0,0)-(619,199).            
  136.                                                                              
  137. Cirkels en kleuren                                                           
  138.                                                                              
  139. Als we bij een lijn rekening moeten houden met de verbinding tussen twee     
  140. punten, vraagt een cirkel om andere gegevens. Hierbij zijn middelpunt en     
  141. straal bepalend.                                                             
  142. Een kleine cirkel in het midden van Screen 2 wordt getekend met:             
  143.                                                                              
  144. SCREEN 2                                                                     
  145. CIRCLE (320,100),50                                                          
  146.                                                                              
  147. waarin (320,100) het middelpunt van het scherm is en het toevoegsel ,50      
  148. de straal. Hoe simpel is het nu niet om concentrische cirkels te tekenen     
  149. in een FOR/NEXT-loop...!                                                     
  150.                                                                              
  151. ┌───────────────────────────────────────┐                                    
  152. │ 100 CLS:SCREEN 2                      │                                    
  153. │ 110 FOR A=10 TO 200 STEP 5            │                                    
  154. │ 120 CIRCLE (320,100),A                │                                    
  155. │ 130 NEXT A                            │                                    
  156. └───────────────────────────────────────┘                                    
  157.                                                                              
  158. Voor CIRCLE kennen we de volgende opties:                                    
  159. -STEP(dx,dy), vergelijkbaar dus met die van het commando LINE. Verder ge-    
  160. ven ,BeginBoog, EindeBoog de mogelijkheid om een deel van een cirkel (een    
  161. cirkelboog) te tekenen. De waarden moeten wel in radialen worden opgegeven.  
  162. ,Aspect tenslotte is een verhoudingsgetal van de x- en de y-as met als re-   
  163. sultaat dat er geen cirkels maar ellipsen ontstaan.                          
  164. We kunnen nu ook een moiré-patroon maken door er nog een serie concen-       
  165. trische cirkels vlak naast te zetten:                                        
  166.                                                                              
  167. ┌─────────────────────────────────────────┐                                  
  168. │ 140 FOR A=10 TO 200 STEP 5              │                                  
  169. │ 150 CIRCLE (322,100),A                  │                                  
  170. │ 160 NEXT A                              │                                  
  171. └─────────────────────────────────────────┘                                  
  172.                                                                              
  173. Screen 2 is aantrekkelijker dan Screen 1 vanwege zijn hogere resolutie       
  174. maar het nadeel is dat daarin geen kleur kan worden gebruikt. Vandaar        
  175. dat in de begintijd van de PC zo veel 'kleurrijke' games in Screen 1 zijn    
  176. geprogrammeerd ter wille van de kleur maar ten koste van het oplossend       
  177. vermogen.                                                                    
  178. Screen 9 (EGA) was dus een geweldige verbetering: een hogere resolutie       
  179. dan Screen 2 EN de mogelijkheid om kleur te gebruiken. Rekening houdend      
  180. met de grotere matrix van Screen 9 (640x350) herschrijven we het             
  181. voorbeeldprogrammaatje van de concentrische cirkels aldus:                   
  182.                                                                              
  183. ┌─────────────────────────────────────────────────────────────────────┐      
  184. │ 100 CLS:KEY OFF:SCREEN 9                                            │      
  185. │ 110 FOR A=10 TO 200 STEP 10                                         │      
  186. │ 120   CIRCLE (320,160),A,14:' ,14 bepaalt de tekenkleur: geel       │      
  187. │ 130 NEXT A                                                          │      
  188. └─────────────────────────────────────────────────────────────────────┘      
  189.                                                                              
  190. In Screen 9 kunnen we 16 kleuren gebruiken die we kennen van het             
  191. commando COLOR. Die kleuren kunnen we op tal van manieren gebruiken: om      
  192. blokken of kaders in te kleuren, schaduwrandjes te maken, enzovoorts.        
  193. Voor het 'inkleurwerk' beschikken we over een gespecialiseerd commando:      
  194.                                                                              
  195. PAINT (a,b),y,z                                                              
  196.                                                                              
  197. waarin a en b het punt aangeven waar het kleuren moet beginnen, y de         
  198. grenskleur is tot waar er wordt ingekleurd en z de tekenkleur.              
  199. Een vereiste is wel dat die grens een gesloten geheel vormt. Zit er          
  200. ergens een 'lek' dan ontsnapt de in te vullen kleur buiten deze grens.       
  201. We kunnen nu gekleurde concentrische cirkels maken. Type onderstaand         
  202. programma in en bestudeer de listing. Als u dit begrijpt, programmeert u     
  203. al heel aardig grafisch en in kleur en mag ik uw inzendingen dus zeer        
  204. binnenkort tegemoet zien.                                                    
  205.                                                                              
  206.                     ┌─────────────────────────────────┐                      
  207. ┌───────────────────┤ GEKLEURDE CONCENTRISCHE CIRKELS ├───────────────┐      
  208. │                   └─────────────────────────────────┘               │      
  209. │ 100 CLS:KEY OFF:SCREEN 9                                            │      
  210. │ 110 FOR A=10 TO 200 STEP 10                                         │      
  211. │ 120   R=R+7                                                         │      
  212. │ 130   KLEUR=KLEUR+1:IF KLEUR=16 THEN KLEUR=0                        │      
  213. │ 140   CIRCLE (320,160),A,14                                         │      
  214. │ 150   PAINT (320,160-R),KLEUR,14                                    │      
  215. │ 160 NEXT A                                                          │      
  216. └─────────────────────────────────────────────────────────────────────┘      
  217.                                                                              
  218. Zie ook PTIL                                                                 
  219.                                                                              
  220.                                                                              
  221. Krijgt u de smaak te pakken van de vele mogelijkheden van deze grafische     
  222. commando's? Maak dan vooral eens kennis met het zeer fraaie en veelzij-      
  223. dige programma PTIL (Grafische Behangen) op RUN7. Gewapend met de kennis     
  224. die u nu heeft opgedaan, zult u met heel andere ogen naar dit spectacu-      
  225. laire en veelzijdige grafische programma kijken. PAINT kan namelijk nog      
  226. veel meer maar daar vertelt PTIL u alles over...                             
  227.                                                                              
  228. Animatie met PCOPY                                                           
  229.                                                                              
  230. Heeft u nog niet voldoende nieuwe gereedschappen om een leuke inzending      
  231. op te sturen naar RUN Flagazine of te 'uploaden' naar TeleRUN? Dan           
  232. krijgt u er nog een bij waarmee uw fantasie in vuur en vlam wordt gezet:     
  233. het veelzijdige maar weinig gebruikte PCOPY waarmee u met twee schermen      
  234. tegelijk kunt werken en (in een FOR/NEXT-loop) tot animaties kunt komen.     
  235. PCOPY werkt in alle schermen, dus zowel in Screen 0 als in de grafische      
  236. schermen.                                                                    
  237. De werking van het PCOPY kan niet helderder worden uitgelegd dan in een      
  238. levend voorbeeld. Dit voorbeeld is speciaal voor deze les gemaakt door       
  239. de heer Ger Corba te Leiderdorp.                                             
  240.                                                                              
  241. Zijn voorbeeldprogramma staat op deze RUN-diskette en u kunt het zelf        
  242. in GWBASIC bekijken en bestuderen: niet alleen de verschijningsvorm maar     
  243. ook de listing zelf.                                                         
  244. Experimenteer met de grafische commando's en met PCOPY en probeer een        
  245. afgerond 'programma' van uw vingeroefeningen te maken dat u naar RUN         
  246. kunt insturen.                                                               
  247.                                                                              
  248.                                                                              
  249. Ik ben benieuwd....                                                          
  250.                                                                              
  251. Wordt vervolgd...                                                            
  252.                                                                              
  253. In de volgende les behandelen we een van de moeilijkste onderwerpen van
  254. Basic: Disk I/O (Input/Output). We leren wat een bestand is, wat records
  255. zijn en hoe records worden ingedeeld in velden. Ook leren we welke ver-
  256. schillende soorten bestanden Basic onderscheidt.
  257. Met deze kennis en ervaring zullen we zelf een 'database' kunnen program-
  258. meren. Het ontwerpen en schrijven van een NAW-programma (Naam Adres Woon-
  259. plaats) staat in deze les centraal.
  260.  
  261.                                                                              
  262.                                                                              
  263.                                                                              
  264.                                                                              
  265.                                                                              
  266.                                                                              
  267.                                                                              
  268. ■═══════════════════════════════════════════════════════════════════════════■
  269.