Collab: Entwicklung eines TSB-Puzznic-Klons

Es gibt 1.089 Antworten in diesem Thema, welches 110.425 mal aufgerufen wurde. Der letzte Beitrag (1. November 2024 um 23:56) ist von Omega.

  • Ich muss ja auch erstmal einen Zeichensatz und die notwendigen Sprites erstellen und so. Zumindest provisorisch.

    Kannst du dabei darauf achten, dass zum identifizieren der Teilenummer das linke obere Zeichen ausreicht?

  • Noch ein paar Fragen:

    * Wandert der Joystick-Cursor nach "NachUntenSchieben" mit oder bleibt er stehen?

    * Was passiert in "DoEvents"?

    * Reicht es, wenn die Assembler-Routinen mit SYS aufgerufen werden können?

    * Wie zeichnest und bewegst du die 2x2-Zeichen-Teile auf den Bildschirm?

  • Wandert der Joystick-Cursor nach "NachUntenSchieben" mit oder bleibt er stehen?

    Er bleibt stehen. Sollte aber für die Assembler-Routinen keine Rolle spielen. Das Bewegen des Cursors mache ich im TSB-Programm.

    Was passiert in "DoEvents"?

    Das ist nur für Windows relevant. Das bewirkt unter anderem, dass Systemereignisse durchgeführt werden und der Bildschirm aktualisiert wird. Sonst würde der Spieler nicht sehen, wie die Teile fallen. Kannst du total 100% ignorieren.

    Reicht es, wenn die Assembler-Routinen mit SYS aufgerufen werden können?

    Ja. Die andere Prozedur, die ich habe, gibt aber noch einen Wert zurück. Den könntest du vielleicht irgendwo im Kassettenpuffer ablegen. Oder sonstwo. Damit ich von Basic darauf mit PEEK zugreifen kann.

    Wie zeichnest und bewegst du die 2x2-Zeichen-Teile auf den Bildschirm?

    Dafür gibt es in TSB (neuerdings) den Map-Befehl. Den hat GoDot extra für Spieleprojekte eingebaut. Es wird eine (oder mehrere) Kachel(n) von 2x2 Zeichen Größe an eine bestimmte Stelle auf den Bildschirm geschrieben. Wie ich das genau programmiere, weiß ich noch nicht. Ich hoffe, du hast ein wenig Geduld. Ich finde, für ein halbwegs vernünftiges Spielprojekt muss man sich vor allem Zeit nehmen. Kann gut sein, dass ich da ein paar Tage dran rumbastele bis ich was präsentieren kann. Es soll ja Spaß machen und nicht in ernsthafte Arbeit ausarten.

    Ich habe aber auch mal eine Frage: Ich hatte ja davon gesprochen, dass das Spielfeld 10 x 10 Felder groß ist. Kann ich das auch auf 12 x 12 vergößern? Muss zwar nicht sein, wäre mir aber lieber. Oder wird es dann zu langsam?

  • Dafür gibt es in TSB (neuerdings) den Map-Befehl. Den hat GoDot extra für Spieleprojekte eingebaut. Es wird eine (oder mehrere) Kachel(n) von 2x2 Zeichen Größe an eine bestimmte Stelle auf den Bildschirm geschrieben.

    Sind die 4 Zeichen frei wählbar oder müssen die aufsteigend im Zeichensatz liegen?

    Ich habe aber auch mal eine Frage: Ich hatte ja davon gesprochen, dass das Spielfeld 10 x 10 Felder groß ist. Kann ich das auch auf 12 x 12 vergößern? Muss zwar nicht sein, wäre mir aber lieber. Oder wird es dann zu langsam?

    Das macht den Braten nicht fetter.

  • Sind die 4 Zeichen frei wählbar oder müssen die aufsteigend im Zeichensatz liegen?

    Die 4 Zeichen müssen aufsteigend im Zeichensatz vorliegen. Das gilt grundsätzlich für alle Kacheln. Wenn die linke obere Ecke Zeichencode 64 enthält, dann sieht die Kachel so aus:

    [64][65]

    [66][67]

    Das macht den Braten nicht fetter.

    Sehr gut.

  • Die 4 Zeichen müssen aufsteigend im Zeichensatz vorliegen.

    Dann erhält man die Teilnummer mit Division durch 4. Das geht effizient in Assembler.

    Werden die Teilenummer so wie oben in der Access-Abbildung bleiben?

  • GoDot: Welche Zeropage-Adressen stehen unter TSB noch zur freien Verfügung?

    Wenn sie deinen Code nicht überdauern müssen, bist du relativ frei ($be enthält die Drivenummer für alle Disk-Befehle). Wenn doch, wird‘s eng. Ausprobieren!

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Werden die Teilenummer so wie oben in der Access-Abbildung bleiben?

    Die Spielsteine werden so hintereinander im Zeichensatz vorkommen. Aber welche Bildschirmcodes das sind, weiß ich bis jetzt noch nicht.

    Wenn das schon so anfängt ... :whistling:

    Hey, moment mal. Ich bin alt und gebrechlich. Zählt das denn überhaupt nicht? :alt:

  • Aber welche Bildschirmcodes das sind, weiß ich bis jetzt noch nicht.

    Aus Effizienzgründen wäre es gut, wenn der leere Hintergrund den Code 0 bekommt, damit die Bedingung lngMerkBild > 4 And lngMerkBild < 14 And lngBildDrunter = 1 zu lngBildDrunter = 0 And lngMerkBild > 4 And lngMerkBild < 14 vereinfacht werden kann.

    Hintergrund: In Assembler ist der Vergleich mit 0 quasi gratis.

  • Wenn sie deinen Code nicht überdauern müssen, bist du relativ frei ($be enthält die Drivenummer für alle Disk-Befehle). Wenn doch, wird‘s eng. Ausprobieren!

    Arndt

    Öh... du meinst sicher $ba oder?

    $be ist Blockzähler (Tape)

  • Öh... du meinst sicher $ba oder?

    $be ist Blockzähler (Tape)

    Nein, ich meine, was ich sage! :bgdev

    $be wird bei allen Diskoperationen nach $ba umkopiert. Deshalb kann sich TSB das Komma-Acht sparen. (Nur bei OPEN-Befehlen muss ein Wert für Laufwerk eingetragen werden, kann aber beliebig sein, auch da wird $be genommen).

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • wenn der leere Hintergrund den Code 0 bekommt

    Code 0 ist Bitte melde dich an, um diesen Link zu sehen. (die Raute #). Von allen Codes wird in MAP intern der Wert 35 subtrahiert. Warum 1570 den Wert 35 genommen hat, weiß ich nicht genau, vermutlich, weil es das Anführungszeichen in der Map-Datei vermeidet. Außerdem hast du dann noch alle Alphazeichen zur Verfügung.

    Arndt

    Edit: Infos zu MAP Bitte melde dich an, um diesen Link zu sehen..

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Das mit den Teilenummern in dem VB-Programm ist nicht vergleichbar mit dem, was auf dem C64 sein wird. Im VB-Programm hat jedes "Bildchen" eine eindeutig Nummer. Wie die Grafik entsteht, braucht den Programmierer nicht zu kümmern. Darum kümmert sich die "Game-Engine", die solche Prozeduren wie "=HintergrundLesen" und "HintergrundSetzen" zur Verfügung stellt.

    Auf dem C64 wird es so sein:

    Die Spiele-Kacheln beginnen im Zeichensatz bei Bildschirmcode 64.

    In grün ist die korrespondierende Teile-Nr. im VB Programm.

    1.) rotes Herz (BC 64-67) 6

    2.) grünes Karo (BC 68-71) 7

    3.) lila Dreieck (BC 72-75) 8

    4.) brauner Kringel (BC 76-79) 9

    5.) gelbes Kreuz (BC 80-83) 10

    6.) blaue Sanduhr (BC 84-87) 11

    7.) graues Kreuz (BC 88-91) 12

    8.) türkis Rahmen (BC 92-95) 13

    9.) Glasblock (BC 96-99) 5 --- (ein Spezialteil, das verschoben- aber nicht aufgelöst werden kann)

    10.) Mauerblock (BC 100-103) 4 --- (kann man nicht bewegen oder auflösen)

    Ein leeres Feld wird aus vier Bildschirmcodes 32 bestehen. Vier Spaces. Also so:

    [32][32] Dies entspricht im VB-Programm Teile-Nr 1

    [32][32]

    Kannst du das in den Griff kriegen? :)

  • Ich könnte den Zeichensatz so reorganisieren:

    In grün sind wieder die Teile-Nummern des VB-Programms.

    1.) leeres Feld (BC 64-67) 1

    2.) Mauerblock (BC 68-71) 4

    3.) Glasblock (BC 72-75) 5

    4.) rotes Herz (BC 76-79) 6

    5.) grünes Karo (BC 80-83) 7

    6.) lila Dreieck (BC 84-87) 8

    7.) brauner Kringel (BC 88-91) 9

    8.) gelbes Kreuz (BC 92-95) 10

    9.) blaue Sanduhr (BC 96-99) 11

    10.) graues Kreuz (BC 100-103) 12

    11.) türkis Rahmen (BC 104-107) 13

    Bei dieser Variante würde ich die erste Kachel als leeres Feld benutzen. Und die anderen Kacheln liegen zumindest in der Reihenfolge vor, wie die Teilenummern in dem VB-Programm.

    Soll ich das so machen? (Das mit den 3-4 Wochen war natürlich ein Scherz.)

    EDIT: Es wäre mir aber eigentlich lieber, wenn ich das leere Feld nicht als eigene Kachel definieren müsste. Da verschwendet man dann 4 wertvolle Zeichen aus dem Zeichensatz.

  • Es wäre mir eigentlich lieber, wenn ich das leere Feld nicht als eigene Kachel definieren müsste.

    Wenn dafür nicht der BC 0 in Frage kommt, Was ist mit einem BC >= 128, um effizient das höchste Bit abfragen zu können?

    Da verschwendet man dann 4 wertvolle Zeichen aus dem Zeichensatz.

    Wofür werden die nicht aufgeführten Codes (BC) gebraucht?

  • Wenn dafür nicht der BC 0 in Frage kommt, Was ist mit einem BC >= 128, um effizient das höchste Bit abfragen zu können?

    Bin mir nicht sicher, was du meinst. Von höchsten Bits verstehe ich nichts.

    Ich habe im Zeichensatz die Bildschirmcodes 64-255 zur Verfügung. Die Zeichencodes vor 64 brauche ich für Buchstaben und Zahlen und Satzzeichen. Ich fange bei BC 64 an, die Kacheln zu belegen. Und dann benutze ich lückenlos eine Kachel nach der anderen solange noch Platz da ist.

    Wofür die anderen Kacheln später noch gebraucht werden, weiß ich noch nicht. Man braucht ja noch Verzierungen und so und ich wollte, falls Platz da ist, eine Art Mini-Adventure drumherum basteln. Um das Puzzle-Gameplay etwas aufzulockern. Da bin ich mir aber noch nicht sicher, was da kommen wird.

    Ich möchte erstmal das Puzzle-Gameplay unter Dach- und Fach haben. Den Rest überlege ich mir dann in aller Ruhe.