Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Schleifenproblem
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Koala



Anmeldungsdatum: 24.11.2023
Beiträge: 9

BeitragVerfasst am: 24.11.2023, 17:31    Titel: Schleifenproblem Antworten mit Zitat

Schleifenproblem

Hallo !

Es geht um eine Abfrage von Feldern (1-24) auf einem Backgammonbrett -
das läuft nicht so wie geplant.

1) Ich will nur dann e = 1 setzen, wenn es exakt ein 5er Block ist, d.h. genau 5x hintereinander mindestens 2 Steine auf einem Feld sind, (5 Blocks in einer Reihe, ununterbrochen, nicht mehr, nicht weniger).
Mein Fehler liegt wohl in der Schleife, vermutlich 1020.

1000 FOR a = 20 TO 24
1010 IF g(a) > -1 THEN 1100
1015 FOR b = 1 TO a - 19
1020 c = 0: FOR d = a - b - 5 TO a - b
1030 IF g(d) > 1 THEN c = c + 1
1040 NEXT d
1050 IF c = 5 THEN 1120
1060 NEXT b
1100 NEXT a
1110 GOTO 1199
1120 e = 1
1199 RETURN

Das obige klappt nicht richtig - wie wird das ordentlich programmiert ?

Für den Gegner hatte ich sowas vorgesehen, hier vermutlich Zeile 2020 buggy:

2000 FOR a = 5 TO 1 STEP -1
2010 IF t(a) < 1 THEN 2100
2015 FOR b = 1 TO 6 - a
2020 c = 0: FOR d = a + b + 5 TO a + b STEP -1
2030 IF t(d) < -1 THEN c = c + 1
2040 NEXT d
2050 IF c = 5 THEN 2120
2060 NEXT b
2100 NEXT a
2110 GOTO 1199
2120 e = 1
2199 RETURN


2) Der Fehler hat mich auf eine Idee gebracht:
wie wär's mit einer neuen Variablen f, die 4 Blocks hintereinander
enthält, dann einen Punkt ohne Steine (auch keine des Gegners) und dann
kommt wieder ein eigener Block mit mindestens 2 Steinen vor dem 4er Block.

Wie lauten die korrekten Zeilen dafür ?

Hat jemand einen Vorschlag ?
Bin für jeden Tip dankbar !

Koala
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 25.11.2023, 10:11    Titel: Antworten mit Zitat

Leider kann ich weitestgehend nur raten, was im Programm passieren soll: g(a) speichert die Anzahl der Steine auf dem a-ten Feld? g(a) < 0 bedeutet, dass dort nicht eigene, sondern gegnerische Steine liegen? Mit den Variablen a und b soll gespeichert werden, wo der höchste Fünferblock endet (a) und wo er beginnt (b)?

Unter obigen Annahmen würde ich es ehrlich gesagt ganz anders lösen:
  • Laufe die Felder in einer Schleife von i = 24 bis 1 rückwärts durch.
  • Wenn g(a) > 1 ("richtig besetztes" Feld gefunden), dann:
    Wenn c = 0 (noch keine aufeinanderfolgenden "richtig besetzten" Vorgänger) , setze a = i und c = 1; sonst setze c = c+1.
  • Wenn g(a) < 2, setze c = 0 (Block unterbrochen).
  • Wenn c = 5, beende die Schleife mit Erfolg.
  • Wenn die Schleife ans Ende gerät, wurde kein Block gefunden.

Code:
a = 0
b = 0
c = 0
e = 0
FOR i = 24 TO 1 STEP -1
  IF g(i) > 1 THEN
    IF c = 0 THEN a = i
    c = c+1
  ELSE
    a = 0      : REM nur der Ordnung halber
    c = 0
  END IF
  IF c = 5 THEN
    e = 1
    b = a - 4  : REM eigentlich überflüssig
    EXIT FOR
  END IF
NEXT
RETURN

Vor dem RETURN wäre im Falle e = 0 vielleicht noch ein Aufräumen sinnvoll (a = 0 : b = 0 : c = 0)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Koala



Anmeldungsdatum: 24.11.2023
Beiträge: 9

BeitragVerfasst am: 25.11.2023, 12:12    Titel: Antworten mit Zitat

Zunächst vielen Dank für deine Hilfe !

Ein paar Angaben mehr hätten sicher nicht geschadet, sorry.

Gleichwohl:
g(a) speichert die Anzahl der Steine auf dem a-ten Feld - richtig.
g(a) < 0 bedeutet, dass dort nicht eigene, sondern gegnerische Steine liegen - auch völlig richtig vermutet.

1000 FOR a = 20 TO 24
1010 IF g(a) > -1 THEN 1100
Hier soll zuerst geprüft werden, ob im Brettbereich 20-24 gegnerische Steine zu finden sind (ansonsten läuft der Block ja ins Leere, gibt's nix zu blocken).

Bemerke gerade, daß ich daran denken muß, daß der Gegner auch mindestens einen Stein auf der Bar haben könnte, also 1000 FOR a = 20 TO 25 (25 = Bar) - aber im Moment vernachlässigbar, spielt für die korrekte Erfassung einer 5er Brücke keine Rolle.

1015 FOR b = 1 TO a - 19
Markiert den Suchbereich, von hier startet dann die Suche nach dem 5er Block

1030 IF g(d) > 1 THEN c = c + 1
Setzt den Zähler für jeden gefundenen Block (Feld mit mindestens zwei eigenen Steinen) um 1 höher.

Das Problem liegt wohl in 1020 c = 0: FOR d = a - b - 5 TO a - b
das greift nicht richtig, erfasst nicht nur einen 5erBlock, wo die Blocks
direkt hintereinander liegen müssen (z.B. Punkte 17,18,19,20,21) - sondern auch die Fälle mit unterbrochener Brücke (z.B. 4er Block Punkte 17,18,19,20 und 22).
Letzteres sollte für den 5er Block ausgeschlossen sein - das leistet aber Zeile 1020 nicht.

Auch dürfen es nicht mehr als 5 Blocks nebeneinander sein - ein 6er Block ist eine noch stärkere Prime - also nur genau 5, dann:
1050 IF c = 5 THEN 1120
1120 e = 1

Das war der Plan.

Aber bei der Umsetzung hapert es wohl an Zeile 1020
1020 c = 0: FOR d = a - b - 5 TO a - b

Soweit meine Fehleranalyse.

Hoffentlich ist jetzt einiges klarer geworden.

Danke nochmals !

Koala
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 338

BeitragVerfasst am: 25.11.2023, 15:30    Titel: Antworten mit Zitat

Ich würde eine andere Technik verfolgen: Ich würde bei jedem Zug, die Anzahl der weißen und schwarzen Steine seperat mitzählen:

Ca. so: DIM weiss(24), schwarz(24)

Zu Beginn ist - wenn ich das richtig verstanden habe - zb weis(17) = 3.

Wenn weiß also einen Zug von Feld 17 auf 20 machst, dann müssen folgende Aktualisierungen vorgenommen werden:

weiss(17) = weiss(17) - 1
weis(20) = weiss(20) + 1


Überhaupt helfen sprechende Namen von Variablen dir und uns den Überblick zu behalten.
Da der 5er Block jetzt nicht allzu groß ist, kann man folgendes Konstrukt zum Überprüfen verwenden:

FOR i = 1 to 19
IF weiss(i) > 1 AND weiss(i + 1) > 1 AND weiss(i + 2) > 1 AND weiss(i + 3) > 1 and weiss(i + 4) > 1 THEN

'Ein Fünferblock wurde entdeckt von i bis (i + 4)
END IF
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Koala



Anmeldungsdatum: 24.11.2023
Beiträge: 9

BeitragVerfasst am: 25.11.2023, 18:31    Titel: Antworten mit Zitat

SpionAtom hat Folgendes geschrieben:
Ich würde eine andere Technik verfolgen: Ich würde bei jedem Zug, die Anzahl der weißen und schwarzen Steine seperat mitzählen:

Ca. so: DIM weiss(24), schwarz(24)

Zu Beginn ist - wenn ich das richtig verstanden habe - zb weis(17) = 3.

Wenn weiß also einen Zug von Feld 17 auf 20 machst, dann müssen folgende Aktualisierungen vorgenommen werden:

weiss(17) = weiss(17) - 1
weis(20) = weiss(20) + 1


Auf welchem Feld wieviele Steine (eigene bzw. gegnerische) stehen - das kann das Programm bereits.

SpionAtom hat Folgendes geschrieben:

Da der 5er Block jetzt nicht allzu groß ist, kann man folgendes Konstrukt zum Überprüfen verwenden:

FOR i = 1 to 19
IF weiss(i) > 1 AND weiss(i + 1) > 1 AND weiss(i + 2) > 1 AND weiss(i + 3) > 1 and weiss(i + 4) > 1 THEN

'Ein Fünferblock wurde entdeckt von i bis (i + 4)
END IF


5er Block

FOR i% = 1 TO 19

IF weiss(1) > 1 AND weiss(i%+1) > 1 AND weiss(i%+2) > 1 AND weiss(i%+3) > 1 AND weiss(i%+4) > 1 THEN
ein 5er Block wurde entdeckt von i% bis i% + 4
END IF

Gefällt mir - verblüffend einfach.

Um auszuschließen, daß keine Prime (6er Block) vorliegt, würde ich allerdings diese Abfrage vorziehen:
IF weiss(1) < 2 AND weiss(i%+1) > 1 AND weiss(i%+2) > 1 AND weiss(i%+3) > 1 AND weiss(i%+4) > 1 AND weiss(i%+5) > 1 AND weiss(i%+6) < 2 THEN
ein 5er Block wurde entdeckt von i%+1 bis i% + 5

Dazu könnte man deine Abfragemethode leicht ausbauen um nach einem Viererblock + 1,
also einem "verkappten" 5er Block zu suchen (z.B. Punkte 17,18,19,20 und 22).

IF weiss(1) > 1 AND weiss(i%+1) > 1 AND weiss(i%+2) > 1 AND weiss(i%+3) > 1 AND weiss(i%+4) = 0 AND weiss(i%+5) > 1 THEN
bzw.
IF weiss(1) < 2 AND weiss(i%+1) > 1 AND weiss(i%+2) > 1 AND weiss(i%+3) > 1 AND weiss(i%+4) > 1 AND weiss(i%+5) = 0 AND weiss(i%+6) > 1 THEN
ein 4er Block + 1 wurde entdeckt (von i%+1 bis i% + 4 + i%+6)

Das werde ich mal ausprobieren.

Vielen Dank für die Hinweise !

Koala
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 338

BeitragVerfasst am: 25.11.2023, 22:02    Titel: Antworten mit Zitat

Prima, ich denke du hast mein Prinzip verstanden und du kannst je nach Badarf und Gutdünken anpassen. Eine Sache ist mir aufgefallen. Der erste Eintrag in deiner IF-Bedingung sollte nicht IF weiss(1) > 1 heißen, sondern weiss(i%) > 1, oder?

EDIT: 02:30 Uhr und ich bin noch wach, also Programmier-Kenntnisse hervorkramen!

Code kann man generell leserlicher und ordentlicher gestalten, wenn man sprechende Namen verwendet statt a, b, c. Oder wenn man verschachtelte Schleifen sparsam einsetzt, oder Programmteile in SUBs auslagert. Ebenso hilft es ausreichend Kommentare anzubringen und den Quelltext gut einzurücken. Ein Verzicht auf GOTO ist in den meisten Fällen auch sinnvoll.

Subs sind ein Thema für Fortgeschrittene mit ihren Parametern und Rückgabewerten, dennoch lohnenswert, gerade für ein Spieleprojekt.

Nun habe ich Lust mir nochmal die Backgammon-Regeln anzueignen und QBasic zu benutzen...
Sowohl Backgammon als auch QBasic liegen so weit zurück. Vielleicht Blitzbasic....
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Koala



Anmeldungsdatum: 24.11.2023
Beiträge: 9

BeitragVerfasst am: 26.11.2023, 08:55    Titel: Antworten mit Zitat

SpionAtom hat Folgendes geschrieben:
Prima, ich denke du hast mein Prinzip verstanden und du kannst je nach Badarf und Gutdünken anpassen. Eine Sache ist mir aufgefallen. Der erste Eintrag in deiner IF-Bedingung sollte nicht IF weiss(1) > 1 heißen, sondern weiss(i%) > 1, oder?


Joo, klar. Dank für die Korrektur, Tschuldigung für den Typo.

SpionAtom hat Folgendes geschrieben:

Subs sind ein Thema für Fortgeschrittene mit ihren Parametern und Rückgabewerten, dennoch lohnenswert, gerade für ein Spieleprojekt.

Nun habe ich Lust mir nochmal die Backgammon-Regeln anzueignen und QBasic zu benutzen...
Sowohl Backgammon als auch QBasic liegen so weit zurück. Vielleicht Blitzbasic....


Super, nur zu !
Würde mir gefallen, unsere Backgammon-Programme mal gegeneinander antreten zu lassen ! happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 338

BeitragVerfasst am: 26.11.2023, 17:40    Titel: Antworten mit Zitat

Nee Competition muss nicht sein zwinkern

Ich glaube ich hab die Regeln auch noch nicht richtig gerafft. Habe mir zwei Videos angeschaut, und es leuchtet mir bei beiden nicht ein, warum man diese 5-er Blöcke identifizieren können sollte. Sind das erweiterte Regeln?
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 26.11.2023, 18:20    Titel: Antworten mit Zitat

Die einzige Bedeutung, die mir zum Fünferblock einfällt, ist, dass er schwer zu überspringen ist (nämlich nur, wenn dein Stein direkt vor dem Block steht oder landet und du zugleich noch eine 6 ziehen kannst). Aus Sicht des Gegenspielers wiederum sind die Felder dicht vor dem Block besonders gefährdet, Ein Sechserblock wäre dagegen gar nicht überspringbar und ein Viererblock zwar leichter als ein Fünferblock, aber immer noch recht schwer - daher kann ich dir die besondere Bedeutung des Fünferblocks auch nicht sagen. Vielleicht wird er gesucht, um sich Optionen zur Bildung eines Sechserblocks zu suchen, der ja dann wirklich eine Total-Blockade darstellt..
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 338

BeitragVerfasst am: 26.11.2023, 21:38    Titel: Antworten mit Zitat

Das leuchtet mir ein. Für so eine taktische Anzeige/Analyse kann das Ermitteln der Blöcke hilfreich sein.
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 338

BeitragVerfasst am: 30.11.2023, 23:03    Titel: Antworten mit Zitat

Für einen eigenen Projekt-Eintrag ist es noch zu Alpha, aber hier ein kleiner Heißmacher. Es funktioniert noch nichts.
Ich arbeite mit qb64, jedoch sollte es (bis auf das windowresize) auch in QBasic funktionieren. Da ich so lange nichts mit QB gemacht habe, und auch die Auflösung eine große Herausforderung für mich darstellt (screen 7, 320x200), komme ich nur sehr langsam voran.

[img]https://gdurl.com/INpA[/img]
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Koala



Anmeldungsdatum: 24.11.2023
Beiträge: 9

BeitragVerfasst am: 05.12.2023, 15:40    Titel: Antworten mit Zitat

SpionAtom hat Folgendes geschrieben:
Für einen eigenen Projekt-Eintrag ist es noch zu Alpha, aber hier ein kleiner Heißmacher. Es funktioniert noch nichts.
Ich arbeite mit qb64, jedoch sollte es (bis auf das windowresize) auch in QBasic funktionieren. Da ich so lange nichts mit QB gemacht habe, und auch die Auflösung eine große Herausforderung für mich darstellt (screen 7, 320x200), komme ich nur sehr langsam voran.

[img]https://gdurl.com/INpA[/img]

Prima !

Die Graphik ist schon mal gelungen...weiter so !
Die Spiel-Algorithmen sind aber der wirklich schwierige Teil.

Sollte das im Bild die Anfangsstellung sein...dann gehören die 5 schwarzen Steine aber ein Feld nach rechts ins Heimfeld !

Bin gespannt auf weitere BG-Taten !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 338

BeitragVerfasst am: 06.12.2023, 17:00    Titel: Antworten mit Zitat

Danke fürs Aufmerksam machen auf den Fehler.

Ich müsste mir jetzt im Bekanntenkreis mal jemanden suchen, der mit mir ein paar Runden spielt, um ein Gefühl dafür zu bekommen.
Ab Ende nächster Woche habe ich Urlaub, dann kommen hoffentlich die Fortschritte im Projekt.

Vielleicht bekomme ich in QB64 ja netzwerktechnisch was hin, sodass man online gegeneinander antreten kann. Aber zunächst ist erstmal nur Hot-Seat geplant. Und aus Nostalgiegründen bleibe ich jetzt bei QB und dem alten Screen Mode.


Koala hat Folgendes geschrieben:
Bin gespannt auf weitere BG-Taten !


Wie sieht es bei dir aus?
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Koala



Anmeldungsdatum: 24.11.2023
Beiträge: 9

BeitragVerfasst am: 07.12.2023, 10:27    Titel: Antworten mit Zitat

SpionAtom hat Folgendes geschrieben:

Vielleicht bekomme ich in QB64 ja netzwerktechnisch was hin, sodass man online gegeneinander antreten kann.

Oh ha, das ist gleich die Königsdisziplin.

Auf FIBS (First Internet Backgammon Server) tummeln sich etliche Bots (BG-Programme) gegen die man stets online spielen kann - gratis.

SpionAtom hat Folgendes geschrieben:
Aber zunächst ist erstmal nur Hot-Seat geplant.

Weise Entscheidung.
Es warten auch so genügend Herausforderungen...


Koala hat Folgendes geschrieben:
Bin gespannt auf weitere BG-Taten !

SpionAtom hat Folgendes geschrieben:
Wie sieht es bei dir aus?


Momentan bin ich beim Debuggen...

Mein Angebot steht - wie schon gesagt: würde mir gefallen, unsere Backgammon-Programme gegeneinander antreten zu lassen.
Ganz lockere Testpartien - kein verbissener Wettkampf.

Andererseits hab ich zeitlich einen Riesenvorsprung...wär womöglich ein bißchen unfair. Vielleicht im nächsten Jahr ?

Hier kann man übrigens die 1. Computer Backgammon Rangliste sehen:
https://mustrum.de/blot.html

Diese Liste gibt einen guten Überblick über die Entwicklung der BG-Software im Laufe der Zeit (1970-2023) und listet viele Programme auf von Kreisklasse bis Weltklasse.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 01.02.2024, 21:33    Titel: Backgammon Antworten mit Zitat

Hallo Koala,
wir kennen uns bisher nicht. Durch einen Link von AtomSpion traf ich auf dich und möchte dir gern helfen, soweit ich es kann.

Vorab sollten wir uns über den Begriff "Block" verständigen.
Nach deiner Ansicht gilt eine Zacke als "Block", wenn sie komplett
mit 5 eigenen Steinen besetzt ist.

Um eine Zacke für den Gegner zu "sperren" reichen aber 2 eigene Steine auf ihr bereits aus, so besagen es die Spielregeln.

In meiner Auffassung ist ein "Block" eine Reihe von nebeneinander liegenden, durch mich blockierten Zacken, die für den Gegner nicht mehr erreichbar sind.

Dein Blockbegriff ist also vertikal, meiner hingegen horizontal.
Darüber müssen wir uns also erst mal einig werden, beides kann nicht gleichzeitig gelten.

Ich war noch nicht in der Lage, deine Darlegungen komplett nachzuvollziehen, aber mir ist aufgefallen, daß du nur von 24 Zacken,
also möglichen Zielpunkten sprichst.
In Wirklichkeit sind es aber 25.
Denn schließlich gibt es ja auch noch dir "Bar", auf der geschlagene Steine landen und von dort erst wieder eingespielt (ins Spielfelt wieder eingebracht) werden müssen.
Es sind eben 24 Zacken und die Bar, nicht nur 24 Zacken allein.

Kann es sein, daß du diesen Fakt übersehen hast? Das würde einiges
erklären.

Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 01.02.2024, 21:35    Titel: Antworten mit Zitat

Sorry, ich meinte SpionAtom.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 01.02.2024, 22:28    Titel: Antworten mit Zitat

Wenn man so will, gibt es sogar 26 Felder: Die 24 auf dem Brett, die Bar, aus der herausgewürfelt werden muss und die Bar, in die hineingewürfelt wird. Programmiertechnisch (und spieltechnisch) verhalten sich "die beiden Bars" sehr unterschiedlich und müssen getrennt voneinander behandelt werden. Allerdings verhalten sie sich auch deutlich anders als die 24 "echten" Felder (insbesondere können sie nicht blockiert werden), weshalb eine programmiertechnische Beschränkung auf die 24 Zacken durchaus sinnvoll sein kann. Für die geschlagenen Steine reicht ein Zähler, um festzustellen, ob noch Steine ins Spiel gebracht werden müssen. Für die ins Ziel gewürfelten Steine braucht man eigentlich gar nichts, denn die sind ja aus dem Spiel - ich würde sie wahrscheinlich aber ebenfalls zählen, um eine schnelle Überprüfung des Sieges zu ermöglichen.

Und wie ich im anderen Thread ebenfalls gerade schrieb: Ich glaube schon, dass Koala mit "Block" eine Reihe aufeinanderfolgender Zacken meint, denn nur so ergibt sein Code-Schnipsel Sinn.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 02.02.2024, 00:00    Titel: Antworten mit Zitat

Hallo nemored,
das habe ich nicht so ganz verstanden.
Du hast fachlich völlig Recht, die Bar kann nicht gesperrt werden.
Warum meinst du , daß 2 Bars nötig seien?
Eine zum "Schlagen" und eine zum "Wiedereinspielen".

Wenn ich einen Stein schlage, verschwindet er aus der jeweiligen Zacke und landet auf der Bar. Zacke ist der Start, Bar das Ziel.

Wenn ich einen Stein von der Bar wieder einspiele, ist die Bar der Start und der jeweilige "Einspielzacken" das Ziel, wo der Stein landen muß.

Weshalb benötige ich 2 Bars, wenn ich doch je nach Aktion (Schlagen bzw. Wiedereinspielen) nur Start und Ziel miteinander zu vertauschen brauche?


Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 02.02.2024, 00:48    Titel: Antworten mit Zitat

Wenn ein Stein geschlagen wird, landet er auf der Bar und muss wieder eingespielt werden. Das ist "Bar 1".
Ziel des Spieles ist es, alle eigenen Steine aus dem Spiel hinauszuwürfeln. Das ist "Bar 2".
Wahrscheinlich ist für den zweiten Fall der Begriff nicht richtig gewählt; jedenfalls war es das, was ich meinte.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Koala



Anmeldungsdatum: 24.11.2023
Beiträge: 9

BeitragVerfasst am: 02.02.2024, 07:11    Titel: Re: Backgammon Antworten mit Zitat

Revilo hat Folgendes geschrieben:
Hallo Koala,
wir kennen uns bisher nicht. Durch einen Link von AtomSpion traf ich auf dich und möchte dir gern helfen, soweit ich es kann.

Danke !
Revilo hat Folgendes geschrieben:

Vorab sollten wir uns über den Begriff "Block" verständigen.
Nach deiner Ansicht gilt eine Zacke als "Block", wenn sie komplett
mit 5 eigenen Steinen besetzt ist.

Nein, dies war nie meine Ansicht - lies bitte Posting Nr. 3:
1030 IF g(d) > 1 THEN c = c + 1
Setzt den Zähler für jeden gefundenen Block (Feld mit mindestens zwei eigenen Steinen) um 1 höher.

Revilo hat Folgendes geschrieben:

Um eine Zacke für den Gegner zu "sperren" reichen aber 2 eigene Steine auf ihr bereits aus, so besagen es die Spielregeln.

Korrekt.

Revilo hat Folgendes geschrieben:

Dein Blockbegriff ist also vertikal, meiner hingegen horizontal.


Nein, s. oben.

Revilo hat Folgendes geschrieben:

Ich war noch nicht in der Lage, deine Darlegungen komplett nachzuvollziehen, aber mir ist aufgefallen, daß du nur von 24 Zacken,
also möglichen Zielpunkten sprichst.
In Wirklichkeit sind es aber 25.
Denn schließlich gibt es ja auch noch dir "Bar", auf der geschlagene Steine landen und von dort erst wieder eingespielt (ins Spielfelt wieder eingebracht) werden müssen.
Es sind eben 24 Zacken und die Bar, nicht nur 24 Zacken allein.

Kann es sein, daß du diesen Fakt übersehen hast? Das würde einiges
erklären.

Gruß Revilo

Ebenfalls nein. Die Bar kann nicht blockiert werden oder selbst als Block dienen. Ebenso die von nemored erwähnte "Bar 2", die "Abspiel-Bar", sie heißt bei meinem Programm übrigens "off".

Gruß
Koala
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz