Video: Writing 2D Games in C using SDL by Thomas Lively 2025
I Ruby kan du oprette et rektangel på skærmen ved hjælp af ASCII-kunst. Hvis du skulle tegne et rektangel på papir, der var udfyldt med et mønster, hvad ville du have brug for? For det første kan du trække omridset af rektanglet, og så kan du farve indersiden.
Men til dit program i Ruby vil du i stedet tegne figuren fra toppen til bunden, en linje ad gangen. Hvordan vil du beskrive hvordan man gør det? Som dette:
-
Tegn toppen af rektanglet ved hjælp af det udvendige (eller kant) mønster for første linie.
-
For hver af de linjer, der udgør siderne og indersiden af rektanglet, tegner du venstre kant, hele midten og derefter højre kant.
Gentag dette trin, indtil du skal trække bunden af rektanglet.
-
Tegn bunden af rektanglet nøjagtigt som du trak den øverste kant.
Dette er en algoritme til tegning af rektangler linje for linje fra top til bund.
En algoritme er blot en sekvens af trin, du følger for at udføre nogle opgaver eller beregninger. I dette tilfælde har du skrevet sekvensen for at tegne et rektangel ved at scanne på tværs fra top til bund, linje for linje.
Ruby-versionen af din algoritme læser meget som den engelske version:
-
Opsæt to variabler, der gør det nemmere at se, hvad der sker. Du bruger brugerens valg til formstørrelse som både højden og bredden af den figur, du skal tegne:
height = shape_size width = shape_size
-
Du skal tegne rektangellinjen efter linje, så Opret en loop, der gentager din kode for hver række (så det betyder, at du har brug for din tegningskode for at køre højde gange):
1. op til (højde) gøre | række | # Tegningskode går her ende
Loops er en kraftfuld måde at gentage kode nogle gange (eller endog et uendeligt antal gange)! Ruby har flere måder at programmere en loop på. Optil-metoden er en nem måde at tælle fra et startnummer til et endelig nummer. For rektanglet vil du tælle starter ved 1 for første række og sluttelige tæller, når du når tallet repræsenteret af højden.
-
Nu, for algoritmen skal fungere, skal du kontrollere, hvilken række du vil have programmet til at udskrive. Du har tre tilfælde: den første række, de midterste rækker og den sidste række. Tilføj i tilfældet for den første række i midten af din loop:
Hvis række == 1 sætter outside_letter * bredde ende
Hvis rækkevariabelen svarer til en, bruger programmet sæt til at udskrive dit valg for udvendige_trykker et antal gange svarende til bredden.
Du bruger, hvis du vil se, om en tilstand er sand eller falsk.Symbolet == i Ruby stiller spørgsmålet: "Er ting på venstre side lig med sagen på højre side af == symbolet? "Hvis det er, vil Ruby køre linjerne kode indtil en anden betingelse eller et slutord.
-
Tilføj derefter en check for at se om dette er den sidste række. Elsif-søgeordet starter en anden tilstandstest, og du placerer den lige før det forrige slutord. Det er ikke en stavefejl forresten. Ruby har bare en sjov måde at sige "ellers hvis"! Det hele ser sådan ud:
hvis række == 1 sætter outside_letter * bredde elsif række == højde sætter outside_letter * width end
-
Endelig skal du håndtere displayet af alle rækkerne i midten, så Tilføj en sidste betingelse ved hjælp af Rubys andet søgeord. Denne kode går lige før slutordet. Her er hele Rubys blok:
Hvis række == 1 sætter outside_letter * Bredde elsif række == Højde sætter outside_letter * Bredde andet midt = Inside_letter * (Bredde - 2) sætter "# {outside_letter} # {middle} # { outside_letter} "end
Mellemsagen ser kompliceret ud. Hvad laver det? Nå, ifølge din algoritme skal den tegne venstre og højre kanter og alt i midten.
Mellemvariablen beregner strengen, der repræsenterer midten af rektanglet. Hvis du fjerner en til venstre kantkarakter og en til højre kantkarakter, er den endelige bredde på midten den fulde bredde minus to tegn.
Den endelige sætter erklæring bruger strengbehandling til at oprette den kombinerede række.
-
Kør dit program og se, om du har fejl. Får du noget som det her er vist? Hvis du ser en fejl, der siger noget som sammenligning af Fixnum med String mislykkedes, betyder det, at Ruby havde svært ved at bruge værdien inde i form_size som et tal.
Ruby er ikke sikker på, hvordan man bruger strenge til tal.Hvorfor er det et problem, hvis du har indtastet et nummer? Godt, læser i din indgang, men det læser alle de tegn, du skriver som en streng. Du er nødt til at hjælpe Ruby konvertere strengen til et nummer.
-
Skift de to linjer, hvor du indstiller højde- og breddevariablerne til to_i-metoden, hvilket betyder at konvertere denne variables indhold til et helt tal (tal):
height = shape_size. to_i width = shape_size. to_i
Kør din kode igen. Succes!
Er dette verdens mest spændende rektangel?