Pure Buch-Wiki Dokumentation Planung

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Pure Buch-Wiki Dokumentation Planung

Beitrag von PAMKKKKK »

Hallo!

Getreu Sylvias sehr zu beachtenden Mottos :
Fange nie ein großes Projekt an, ohne es vorher zu Planen

Ich habe ich mir Gedanken gemacht wie man nun ein PureBasic Buch im Wiki umsetzen könnte.
http://www.purearea.net/pb/english/pure ... :Main_Page

Die Schwierigkeit liegt darin, den Programmierneuling langsam mit leichten PB Funktionen, an das Thema Programmieren heranzuführen und trotzdem keinen PB Befehl auszulassen.

Da ich selber ein Anwendungs-Programmierer bin, habe ich alle Themen die ausschliesslich zur Spieleprogrammierung gebraucht werden ausgelassen.
(Gibt es ja auch schon ein Buch drüber, wenn auch in Englisch
2-D Scroll-Spiele Programmieren
http://www.codersworkshop.com/viewproduct.php?id=22 )
(Habs schon bestellt...)

Zu allererst habe ich mir eine übersicht über alle PB Befehle und Reservierter Wörter verschafft:
http://www.network-gui.de/Befehle_PB_3-93.pdf (Din A3, am besten mit 200% anschauen ;)

Danach habe ich mich drangesetzt und alle Befehle Gedanklich nach Schwierigkeitsgrad in Lernblöcke eingeteilt.
Alle Themen sollen anhand von Beispielcodes erklärt werden!!!!!
Diese Lernblöcke sind in der Reihenfolge in der Sie nachher erklärt werden sollen.
Block 1 setzt ein Wissen von 0 voraus.
Alle folgenden Lernblöcke setzen auf den vorherigen auf.

Die Befehle die in den einzelnen Lernblöcken erklärt werden, habe ich in den Lernblöcken angegeben.
Die Reihenfolge in der Sie später erklärt werden ist nicht die Reihenfolge in der Sie dort aufgeführt sind.
Die jetzige Reihenfolge ist lediglich zum schnellen wieder finden gedacht, und als spätere Checkliste zum abstreichen.
Die Erklärreihenfolge ergibt sich aus den Beispielcodes, die noch gefunden werden müssen.
Lernblöcke:
http://www.network-gui.de/LernBloecke_PB_3-93.pdf (Din A4)

Eine Übersichtstabelle welche Befehle ich welchen schwierigkeitsgrad gegeben habe und welche Befehle verplant sind gibt es hier:
http://www.network-gui.de/LernHardness_PB_3-93.pdf (Din A3, am besten mit 200% anschauen ;)

Wer Excel hat (das ist mein Planungstool) der findet das ganze als Exceltabelle hier:
http://www.network-gui.de/Befehle_PB_3-93.xls


Schaut bitte mal ob ich da Denkfehler drin habe oder ob da Befehle fehlen oder Falsch Plaziert sind.

Der nächste Schritt ist dann: Kapitel mit Inhalten festzurren und Beispielcodes schreiben.


Eine Sourcecode zum Lernen (Text-Editor) habe ich schon geposted:
http://forums.purebasic.com/german/view ... 8226#58226

Wer noch beim Dokumentieren mithelfen will trägt sich bitte hier ein:
Eine Liste im Wiki wo die Leute sich ein- und austragen können:
http://www.purearea.net/pb/english/pure ... c_DokuTeam
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Also, zu deinen Blöcken: ich habs mir mal kurz angeschaut, und dabei ist mir was aufgefallen:
absolute Grundlagen wie If-Else-ElseIf-EndIf oder Schleifen gehören unbedingt in den Block 0. Wie will man "Frage-Anwortspiele" ohne If-EndIf lösen?
Erst Schlüsselwörter lernen, dann die Befehle.
Ansonsten schaut das auf den ersten blick mal recht gut aus. Weiter so, PamKKK! :allright: Ich hätte das nicht hingekriegt! :)
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

hardfalcon hat geschrieben:Also, zu deinen Blöcken: ich habs mir mal kurz angeschaut, und dabei ist mir was aufgefallen:
absolute Grundlagen wie If-Else-ElseIf-EndIf oder Schleifen gehören unbedingt in den Block 0. Wie will man "Frage-Anwortspiele" ohne If-EndIf lösen?
Erst Schlüsselwörter lernen, dann die Befehle.
Ansonsten schaut das auf den ersten blick mal recht gut aus. Weiter so, PamKKK! :allright: Ich hätte das nicht hingekriegt! :)
Erstmal danke für das Lob :oops:

Mit dem Block 0 hast du (fast) recht....
Wenn man schon wie ich ca. 52 Lehrbücher über Programmiersprachen hinter sich hat, weiß man das man am besten mit Consolen Programmen anfängt.
Deine denkweise ist vollkommen richtig !
Man muss sich überlegen was erklärt man, in welcher Reihenfolge.

Diese Consolen Programme fangen mit PrintN("Hallo World!") an.

Man lässt den if-Kram erstmal weg, auch wenn es zum Fehler abfangen sinnvoll wäre.

Beispiel erstes Programm:

Code: Alles auswählen

OpenConsole()
  PrintN("Hallo Welt")
  Input()
CloseConsole()
Nun erklärt man die benutzten Befehle.

Dann Erklärt man String-Variablen, weil der Inputbefehl die ja braucht und nur Strings zurückliefert.

Code: Alles auswählen

OpenConsole()
  PrintN("Hallo, Wie Heisst du ?")
  name.s =Input()
  PrintN("Hallo," + name + " schön das du da bist!")
CloseConsole()
Erst wenn man Variablen hat kann man ja ordentlich Entscheidungen treffen.(mit Konstanten macht das wenig Sinn :mrgreen: )
Hier muss man dann ja die Type-Casting {Val() und Str()} Funktionen erklären, weil Input() nur strings liefert.

Code: Alles auswählen

OpenConsole()
  PrintN("Der Türsteher vor der Diskothek Fragt dich:")
  Print("Hallo, Wie Alt bist du?")
  Alter.s =Input()
  PrintN("")
  If Val(Alter) > 18 
    PrintN("OK, du darfst rein!")
  EndIf
  If Val(Alter) < 18 
    PrintN("Tut mir leid!")
    PrintN("Ich darf dich nicht in die Diskothek lassen")
  EndIf
CloseConsole()
Ich habe hier absichtlich kein else benutzt, und mehrere PrintN und das Leere PrintN("") als Zeilenvorschub (statt chr(10))…

Danach kann man mit dem else weitermachen, die anderen Type-Casting funktionen erklären usw….

Code: Alles auswählen

If OpenConsole()
  Preis = 5 
  PrintN("Der Türsteher vor der Diskothek Fragt dich:")
  Print("Hallo, Wie Alt bist du?")
  Alter.s =Input()
  PrintN("")
  If Val(Alter) > 18 
    PrintN("OK, du darfst rein!")
    PrintN("Der Eintritt in die Diskothek kostet" + Str(Preis) + " Euro!")
  Else   
    PrintN("Tut mir leid!")
    PrintN("Ich darf dich nicht in die Diskothek lassen")
  EndIf
  CloseConsole()
EndIf
So führt man den Lernenden, auch innerhalb der Lernblöcke langsam an den Stoff heran.
Man sollte in einem Buch also einen guten Didaktischen aufbau haben.
aus Wikipedia, der freien Enzyklopädie hat geschrieben: http://de.wikipedia.org/wiki/Didaktik
Didaktik (von lat. mit zwei Fingern) im engeren Sinn beschäftigt sich mit der Theorie des Unterrichts, in einem weiteren Sinne mit der Theorie und Praxis des Lehrens und Lernens.
Zuletzt geändert von PAMKKKKK am 16.10.2005 14:13, insgesamt 1-mal geändert.
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Da hst du natürlich Recht. Aber dann gehören Fragen-Antwort-Spiele trotzdem nicht in den 1. Block... :wink:
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

Kuck mal auf code 3.....
Das ist doch schon sowas wie ein Frage- und Antwortspiel :wink: :wink: :wink:

Da kann man in der Console noch viel geilere mit wenig befehlen machen!!
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

PAMKKKKK hat geschrieben:

Code: Alles auswählen

OpenConsole()
  PrintN("Der Türsteher vor der Diskothek Fragt dich:")
Sollte man Umlaute nicht besser ausschreiben?

Bei Windows wird hier das 'ü' nicht richtig angezeigt, und da
es überall laufen soll kann man die Umwandlung mit WinAPI
auch vergessen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

@Danilo
Hast recht! Habe ich auch schon gemerkt...Danke!

@All
Der Block 1 könnte dann ja so enden :

Code: Alles auswählen

; Zahlenraten
; PB 3.93 16.October.2005
; Pamkkkkk

if OpenConsole() = 0
  End
EndIf
While lGrad = 0
  PrintN("Welchen schwierigkeitsgrad waehlst du ?")
  PrintN("")
  Print("(0 zum beenden) Eingabe: 20, 50 oder 100:")
  sGrad.s =Input()
  Select sGrad.s
    Case "0"
      End
    Case "20"
      lGrad = 20
      lLeben = 6
    Case "50"
      lGrad = 50
      lLeben = 5
    Case "100"
      lGrad = 100
      lLeben = 4
    Default
      lGrad = 0 
  EndSelect
  ClearConsole() 
Wend

lZufall = Random(lGrad)

ClearConsole()
PrintN("Ich habe mir eine Zahl zwischen 0 und " + Str(lGrad) + " ausgedacht!")
PrintN("Du musst sie Raten und hast " + Str(lLeben) + " Versuche.")
PrintN("Los gehts....")
PrintN("")
For i = lLeben To 1 Step -1
  Print("Deine Zahl, Eingabe:")
  lZahl = Val(Input())
  PrintN("")
  If lZahl < lZufall
    PrintN("Die Zahl " + Str(lZahl) + " ist zu klein")
    PrintN("Du hast noch " + Str(i-1) + " versuche")
  ElseIf lZahl > lZufall
    PrintN("Die Zahl " + Str(lZahl) + " ist zu gross")
    PrintN("Du hast noch " + Str(i-1) + " versuche")
  Else
    PrintN("Die Zahl " + Str(lZahl) + " ist richtig geraten!")
    PrintN("Du hast gewonnen und " + Str(lLeben - i + 1) + " versuche Gebraucht")
    Break
  EndIf
  If i = 1
    ClearConsole()
    PrintN("Du hast keine versuche mehr!")
    PrintN("Die zu ratende Zahl war: " + Str(lZufall))
  EndIf
Next
PrintN("")
PrintN("--------------------------------------------------------------")
PrintN("Spiel ende!")
Print("....druecke Enter....")
sNix.s = Input()
CloseConsole()
End
Wer noch mehr von diesen Lerncodes hat...
Her damit!


....jetzt ist ja schon fast der 1/2 Block 1 fertig.... /:->
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ich hab das Spiel nur mal eben etwas aufgebohrt, können also noch fehler drin sein:

Code: Alles auswählen

; Zahlenraten
; PB 3.93 ; created on 16th October 2005 by Pamkkkkk, extended and changed by hardfalcon on 18th October 2005
; Pamkkkkk, modified by hardfalcon

If OpenConsole() = 0
  End
EndIf
Repeat
  PrintN("Waehle einen Schwierigkeitsgrad zwischen 1 und 100!") ;Sonderzeichen sollte man möglichst vermeiden, da sie auf manchen PCs falsch angezeigt werden
  sGrad.s = Input()
  bGrad.b = Val(sGrad.s) ;Wandelt die Zeichenkette sGrad.s zu einer Zahl um, und gibt 0 zurück, wenn die Umwandlung fehlgeschlagen ist
  ClearConsole()
Until bGrad.b > 0 And bGrad.b < 101 ;Schleife solange durchlaufen, bis bGrad.b größer als 0 und kleiner als 101 ist

bZufall.b = Random(bGrad.b) ;der Zufallsgenerator denkt sich für uns eine Zahl im gewünschten Zahlenbereich aus
bVersuche.b = Round(bGrad.b/20,1) ;Wir errechnen die Anzahl der Versuche, und Runden das Ergebnis ab, damit wird IMMER mindestens 1 als Ergebnis erhalten

ClearConsole()
PrintN("Ich habe mir eine Zahl zwischen 0 und " + sGrad.s + " ausgedacht!")
PrintN("Du musst sie erraten und hast dazu " + Str(bVersuche.b) + " Versuche.")
PrintN("Los gehts...")
PrintN("")
For i = bVersuche.b To 1 Step -1 ;durchläuft die Schleife, bis wir keine versuche mehr haben, ein Schleifendurchlauf entspricht also einem Versuch
PrintN("Rate, welche Zahl ich mir ausgedacht habe:")
  Repeat ;Wir überprüfen, ob der Benutzer auch wirklich eine korrekte Zahl eingegeben hat
    sZahl.s = Input()
    PrintN("")
    bZahl.b = Val(sZahl.s)
    If bZahl.b = 0
      If sZahl.s = "0"
        Break ;Wenn der Benutzer wirklich 0 eingegeben hat, wird die RepeatSchleife verlassen
      EndIf
    EndIf
  Until bZahl.b >= 0 And bZahl.b <= bGrad.b ;Hier kommt man nur raus, wenn man eine korrekte Zahl eingibt ;)
  
  PrintN("")
  If bZahl.b < bZufall.b
    PrintN("Die Zahl " + Str(bZahl.b) + " ist leider zu klein.")
    PrintN("Du hast noch " + Str(i-1) + " Versuche.")
  ElseIf bZahl.b > bZufall.b
    PrintN("Die Zahl " + Str(bZahl.b) + " ist leider zu gross.")
    PrintN("Du hast noch " + Str(i-1) + " Versuche.")
  Else
    PrintN("Die Zahl " + Str(bZahl.b) + " ist richtig geraten!")
    If bVersuche.b - i + 1 = 1 ;Wenn der Spieler nur einen Versuch gebraucht hat, bekommt er eine ganz besondere Siegesnachricht ;)
      PrintN("Wow! Du hast gleich beim ersten Versuch gewonnen!")
    Else
      PrintN("Du hast gewonnen und " + Str(bVersuche.b - i + 1) + " Versuche gebraucht!")
    EndIf
    Break
  EndIf
  If i = 1
    ClearConsole()
    PrintN("Du hast leider keine Versuche mehr!")
    PrintN("Die zu ratende Zahl war " + Str(bZufall.b) + ".")
  EndIf
Next
PrintN("")
PrintN("--------------------------------------------------------------")
PrintN("Spiel vorbei!")
Print("Druecke Enter zum Beenden...")
Input()
CloseConsole()
End
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

@hardfalcon
:allright: Super Ding!
vor allem mit Super Komentaren und Ungarischer Notation. :allright:

Nur die Variablen wollten wir in Englisch halten!
Damit nicht-deutsche, wenigstens den Code lesen können, und wir es leichter mit übersetzen haben.

Habe mich aber selbst nicht dran gehalten /:-> ....

Danke!
:allright:
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Danke für die Blumen, aber die Hauptarbeit hattest du ja schon geleistet... :allright:
Antworten