PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Programmierungs-Problem



aldialdi
14-04-2005, 18:00
Hallo,

Ich will mir ein Programm mit folgender Funktiopn schreiben:

Es soll das Spiel Solitär sein, wobei man über einen Stein hüpft und dieser dann verschwindet!

Ich will mit diesem Programm alle Sprünge, d.h. wie ich ziehen muss berechnen, damit am Schluss immer nur ein Stein übrig bleibt.

Wie kann Ich das realisieren? Kann mir jemand Programmcode geben oder interessant Links geben?
mfg
aldialdi

SeeksTheMoon
14-04-2005, 19:06
Wie soll das Programm jetzt aussehen? Irgendwas grafisches, oder geht es Dir erstmal um die Spiellogik?

Poste mal einen Auszug aus den Spielregeln, dann kann man Dir einen Tip geben. "Springen" ist recht vage.

aldialdi
14-04-2005, 19:30
Hallo,
das Spiel sieht ungefähr so aus:

http://home.arcor.de/bernd-sonnborn/Solitaer.jpg

Nachzulesen auf: http://home.arcor.de/bernd-sonnborn/Solitaer.htm

In der Mitte ist immer ein Loch frei.
Es soll so programmiert werden, das am Anfang nur Kreise sind, und dann immer gesprungen wird und dann immer ei Kreis wegfällt, nämlich der, über den gesprungen wird!
Ich soll ein Programm programmieren, das die KOmbinationen der Sprünge berechnet, so dass immer nur ein oder zwei Steine über sin!
Wie kann man das realisieren?ann mir jemand Programmcode geben oder interessant Links geben?
mfg
aldialdi

peschmae
14-04-2005, 20:47
Naja, am einfachsten ists wohl alles durchzuprobieren und dann die Lösung zu speichern, die muss man ja nur einmal ausrechnen... :D

MfG Peschmä

aldialdi
15-04-2005, 06:10
ja, und dazu soll, bzw. will ich ja das C-Programm schreiben!
Wie kann man das realisieren?ann mir jemand Programmcode geben oder interessant Links geben?
mfg
aldialdi

SeeksTheMoon
15-04-2005, 14:25
ok, ich würde folgende Datenstrukturen benutzen:
- Einen Zähler für die Spielsteine. Er fängt bei [Anzahl Steine] an zu zählen und wenn ein Stein entfernt wird, wird auch der Zähler dekrementiert.
- Ein mehrdimensionales Array mit booleans (besetzt/nicht besetzt) für die Spielfelder. Da es in C kein bool gibt, kannst Du short nehmen, 1 ist besetztes Feld, 0 ist leeres Feld.

Dann brauchst Du Funktionen für:
- Eine Spielstein-Aufstellungsfunktion. Sie allociert Speicher für das Spielfeld und intialisiert die Feldelemente, setzt also die Steine auf das Spielbrett.
- Einen Spielzug, also den Sprung. Ein Stein springt über seinen benachbarten, wenn das Zielfeld frei ist und setzt das übersprungene Feld auf 0. Außerdem muss auch der Steinzähler dekrementiert werden.
Ob die Steinkoordinaten automatisch oder manuell übergeben/ermittelt werden müssen, hast Du noch nicht gesagt, sollte aber recht unkompliziert zu lösen sein.
- ggf brauchst Du Hilfsfunktionen für Analyseschritte o.ä, aber das wirst Du dann noch sehen.

In der main() rufst Du dann in einer Schleife den Spielzug auf, bis die Steine weg sind (Zähler auf 1) oder kein Zug mehr gemacht werden kann (kein Stein hat einen Nachbarn).

Das sollten genug Tips sein um dem Programm das Laufen beizubringen :D

aldialdi
15-04-2005, 16:21
Hallo,
hättest Du dafür noch den passenden Code? :mad:

Nein, im Ernst, kannst Du mir mal einen Code geben?

ICh habe momentan leider gar keine Ahnung, wie Ich das realisieren kann!

Joghurt
15-04-2005, 16:22
Übrigens ein Tipp: Wenn du die "optimale Lösung" finden willst, also dass nur ein Stein in der Mitte übrigbleibt, empfiehlt es sich, rückwärts zu lösen, d.h. mit diesem einen Stein anzufangen und dann über ein leeres Feld springen und dort dann einen Stein hinlegen, solange, bis du bei der Anfangsstellung ankommst.

Siehe auch http://de.wikipedia.org/wiki/Backtracking

Dein Bild könntest du so realisieren:

int Spielfeld[9][9] = {
{-1,-1,-1, 1, 1, 1,-1,-1,-1},
{-1,-1,-1, 1, 1, 1,-1,-1,-1},
{-1,-1,-1, 1, 1, 1,-1,-1,-1},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1},
{ 1, 1, 1, 1, 0, 1, 1, 1, 1},
{ 1, 1, 1, 1, 1, 1, 1, 1, 1},
{-1,-1,-1, 1, 1, 1,-1,-1,-1},
{-1,-1,-1, 1, 1, 1,-1,-1,-1},
{-1,-1,-1, 1, 1, 1,-1,-1,-1}
}; Hierbei steht 1 für ein besetztes, 0 für ein freies und -1 für ein ungültiges Feld.

aldialdi
15-04-2005, 18:32
Hallo,
aber wie genau kann ich die Kreise erzeugen und die x?

Mit dem Code kann ich leider nichts anfangen!
Wenn mir jemand den Komplettcode für das Spielfeld geben könnte, dann würde ich ja weiterwissen, aber so, keine Chance, leider!

Vielleicht kann ja jemand so nett sein!
Bitte Bitte
mfg
aldialdi

RapidMax
15-04-2005, 23:25
Sollen wir zusammen mit dem Komplettcode auch gleich verschieden Skins für die Figuren mitliefern? Wenn ja auch solche in 3D?

Gruss, Andy

Joghurt
15-04-2005, 23:27
Ich soll ein Programm programmieren, das die KOmbinationen der Sprünge berechnet, so dass immer nur ein oder zwei Steine über sin!Da steht nichts darüber, dass du das Spielfeld auch graphisch darstellen willst!

aldialdi
16-04-2005, 07:47
Sollen wir zusammen mit dem Komplettcode auch gleich verschieden Skins für die Figuren mitliefern? Wenn ja auch solche in 3D?

Gruss, Andy


Wäre nicht schlecht!:P

aldialdi
16-04-2005, 07:48
Da steht nichts darüber, dass du das Spielfeld auch graphisch darstellen willst!

Naja, wenn da noch kreise wären, wäre es gut, aber mir reicht erst mal der Code zur Errechnung der Lösungen des Springens!
mfg
aldialdi

SeeksTheMoon
16-04-2005, 10:22
eben, Du solltest erstmal mit der Spiellogik anfangen. Was Du dann für eine Oberfläche draufbastelst, das ist nachher egal.
Außerdem: Wenn Du nicht programmieren kannst, dann ist es völlig witzlos direkt mit irgendeinem Grafikzeugs anzufangen, weil das weitere Techniken, mehr Wissen und mehr Erfahrung benötigt: Fenster, Events, Zeichnen, Doublebuffer, vielleicht Threads und dann brauchst Du noch Kenntnis in der Klassenhierarchie des Grafiktoolkits das Du verwendest (Du hast nichtmal gesagt welche Bibliothek Du dafür verwenden willst: wxWindows, GTK, QT, Java AWT/Swing, <Scriptsprache> TK, MFC, Win32 API, .net-Zeugs, ...)

aldialdi
16-04-2005, 13:20
Ich kann schon programmieren, das ist nicht das Problem, ich bräuchte nur den Code zur Errechnung der richtigen Lösungen, das grafische kann ich mir selbst basteln!
mfg
aldialdi

peschmae
16-04-2005, 13:38
Hier wird dir keiner einfach tonnenweise Code in den Rachen schieben :rolleyes:

Bringt auch gar nichts. Entweder machst du das selber um etwas zu lernen oder du machst es nicht.

MfG Peschmä

RogerJFX
16-04-2005, 14:14
nen ordentlichen 2 GB - Riegel ins Motherboard schieben und alles rekursiv bis zum letzten Stein durchrechnen lassen. Jawohl! Die Matrix auf den Stack! Ab dafür!

Kann unter Umständen etwas dauern beim ersten Mal (könnte auch sein, daß sich nach einiger Zeit der Lüfter bemerkbar macht), aber danach sollte alles wie im Fluge gehen.

:D

Cheers,

Roger

peschmae
16-04-2005, 14:48
Das war schon mein ursprünglicher Vorschlag. Aber er will Code. Was kann man da nur machen? :confused:

*ggg

MfG Peschmä

aldialdi
16-04-2005, 15:17
Danke für die Hilfe!
Wie ich sehe, will mir keiner helfen!
Tschau
mfg
aldialdi
PS.: War das letzte Mal hier! :mad: :mad: :mad: :mad: :mad: :mad:

peschmae
16-04-2005, 15:41
Danke für die Hilfe!
Wie ich sehe, will mir keiner helfen!

Helfen schon. Aber nicht für dich komplette Programme oder Algos schreiben. Das wird dir auch in keinem anderen Forum einfach so gemacht...



PS.: War das letzte Mal hier! :mad: :mad: :mad: :mad: :mad: :mad:

Adieu.

MfG Peschmä

aldialdi
16-04-2005, 15:59
Ich bräuchte ja auch nur den lgorithmus zu Berechnung der richtigen Sprünge, alles andere kann ich mir selbst programmieren!
Aber egal!
Tschau dann

RapidMax
17-04-2005, 16:38
Eigentlich habe ich gehofft, dass mein ironischer Beitrag den richtigen Hinweis gegeben hat...

Es wird sich niemand hier die Mühe machen, den Code zu schreiben und dir zuschicken, weil wir alle mit unserer Zeit besseres zu tun haben. Zudem gehe ich davon aus, das du nicht der erste bist, welcher diesen Algorithmus braucht. Ein bisschen Recherche über Suchmaschinen etc. hätte dir vermutlich sogar den gewünschten Code gebracht (fallst du das schon versucht hast, dann währe hier ein Hinweis darauf angebracht gewesen).
Gehen wir nun davon aus, dass du kein brauchbaren Code gefunden hast und nun selber entwickeln musst. Wir geben dir gerne Tipps wie man so ein Problem angehen kann und helfen dir bei der Fehlersuche, aber nur wenn wir genügend Eigeninitative und Vorarbeit deinerseits erkennen können und du die Fragen richtig stellst (http://www.lugbz.org/documents/smart-questions_de.html).

Ich hoffe dieser Beitrag war nicht für die Katz und du hast daraus gelernt.

Gruss, Andy

dra
17-04-2005, 21:11
Ich kann schon programmieren, das ist nicht das Problem, ich bräuchte nur den Code zur Errechnung der richtigen Lösungen, das grafische kann ich mir selbst basteln!
mfg
aldialdi

Machste das zur Übung?

Wenn ja, dann überleg dir die Lösung selbst. Tipp: Baum.

Gruß,
dra

aldialdi
18-04-2005, 09:19
naja eher als projekt, bräuchte ja nur die berechnung der Sprünge, mehr nicht!

Alex_K
18-04-2005, 09:20
ich hab das problem nicht genau durchdacht, aber ich vermute dass es alles andere als einfach zu lösen ist, deshalb wird hier wohl auch keiner einfach einen alog hinwerfen können.

klar kann man es mit "alle möglichen lösungen durchsuchen" versuchen, dieser code wäre wohl relativ schnell gebastelt. aber wenn es sich dabei, wie ich vermute, um ein NP schweres problem handelt wird dann die berechnung stunden, tage bis wochen dauern.

eine heuristik zu basteln, welche auch noch gute ergebnisse liefert ist auch alles andere als einfach.

aldialdi
18-04-2005, 11:42
hat sich erledigt