Skip to content

Commit

Permalink
#132 Ortsübergreifendes Sammeln und herstellen
Browse files Browse the repository at this point in the history
ausgabe: Klarere Bezeichner, Reisezeiten aus Vorgängen
grafischeAusgabe: Anpassung Baumausgabebereich
logistik: Kommentar entfernt
planetenTypen: scharlachroter Typ neu, PassendesGasPlanetentypen Prädikat neu
planetMondNameDialog: Fehlerbehebung bei Update wurde sammlung nicht gelöscht
reisen: bessere Bezeichner, Keine Modifikaton des Spielerortes in diesem Modul, Reisezeit werden in Vorgänge eingetragen
sammelAktion: Tiere sind jetzt im Wald
sammlung: basalt ergänzt
stoffErlangenDialog: Spielerort wird gesetzt
suchAlgorithmus: baue und baueFuerVorfertigung umgestellt, rezeptZulaessig korrigiert
  • Loading branch information
SchwertAs committed Apr 10, 2021
1 parent 4c8dc70 commit 4a0831f
Show file tree
Hide file tree
Showing 10 changed files with 149 additions and 87 deletions.
14 changes: 5 additions & 9 deletions ausgabe.pl
Original file line number Diff line number Diff line change
Expand Up @@ -110,19 +110,15 @@

ausgabeVorgaenge(Vorgaenge, VorgaengePred, VorgaengePredDanach) :-
Vorgaenge = [ Kopf | Rest],
Kopf = [_, _, _, Operation, [[_, VonOrt], [_, NachOrt]], [_, Produkt]],
Kopf = [_, _, _, Operation, [[_, _], [_, NachOrt]], [ReiseZeit, Produkt]],
Operation = reisen,
VonOrt = [System, Planet, _],
NachOrt = [SystemNach, PlanetNach, Nach],
NachOrt = [NachSystem, NachPlanet, NachOrtsTeil],

retractall(reisen:letzterOrt(_, _, _)),
assertz(reisen:letzterOrt(System, Planet, ortHauptBasis)),
reisen:reisen(NachOrt, ReiseZeit),
bildeOperation(ReiseZeit, Operation, OperationString),

atom_string(SystemNach, SystemNachString),
atom_string(PlanetNach, PlanetNachString),
textResources:getText(Nach, NachString),
atom_string(NachSystem, SystemNachString),
atom_string(NachPlanet, PlanetNachString),
textResources:getText(NachOrtsTeil, NachString),
textResources:getText(Produkt, ProduktString),
textResources:getText(txtBitteReisenSieNachSystem, TxtBitteReisenSieNachSystem),
string_concat(TxtBitteReisenSieNachSystem, SystemNachString, Anweisung6),
Expand Down
2 changes: 1 addition & 1 deletion grafischeAusgabe.pl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
findall(Stoff, baum(_, _, Stoff, _), Beschriftungen),
findall(SvgX, (select(Beschriftung, Beschriftungen, _), symbolFromBeschriftung(Beschriftung, SvgX)), Symbols),
concatSymbols(Symbols, "", Svg1),
findall(AnzPosesEbene, (between(1, 9, UntersuchungsEbene),
findall(AnzPosesEbene, (between(1, 12, UntersuchungsEbene),
findall(Pos, (baum(Pos, Ebene, _, _),
Ebene=UntersuchungsEbene
), PosesPerEbene),
Expand Down
3 changes: 1 addition & 2 deletions logistik.pl
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
:- module(logistik, [sammelVorgaengeZusammenfassen/2]).

/* Minimalversion ohne Funktion als Platzhalter */

sammelVorgaengeZusammenfassen(Vorgaenge, OptimierteVorgaenge) :-
/* gleiche Vorgänge, die mehrfach vorkommen, zu einer mit erhöhter Stückzahl machen bei gleicher Reihenfolge */
/* summarischer Satz ist an Position des ersten Auftretens des Vorganges */
Expand Down
2 changes: 1 addition & 1 deletion planetMondNameDialog.pl
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@
debug(myTrace, 'Attribut-Update: RecNo=~k System=~k Planet=~k PlanetenTyp=~k', [RecNo, System, PlanetNew, PlanetenTyp]),
retractall(spielStatus:planeten(RecNo, System, PlanetNew, _)),
assertz(spielStatus:planeten(RecNo, System, PlanetNew, PlanetenTyp)),
ignore(retractall(sammlung:sammlung(0, System, PlanetNew, _, _, _, _, _))),
ignore(retractall(sammlung:sammlung(_, System, PlanetNew, _, _, _, _, _))),
/* rauswerfen der unmöglichen Stoffe nach Planetentypänderung, reinbringen der Defaults für neuen Planetentyp */
sammlung:sammlungAnOrteAnpassen(System, PlanetNew),
!.
Expand Down
20 changes: 15 additions & 5 deletions planetenTypen.pl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
:- module(planetenTypen, [planetenGruppePlanetenTyp/2]).
:- module(planetenTypen, [planetenGruppePlanetenTyp/2, passendesGasPlanetenTyp/3]).

planetenTyp(exotischBlasen).
planetenTyp(exotischDrahtZelle).
Expand Down Expand Up @@ -44,8 +44,7 @@
PlanetenTyp = radioAktiv;
PlanetenTyp = trocken,
PlanetenTyp = sumpfig.



planetenGruppePlanetenTyp(sprudelnder, exotischBlasen).
planetenGruppePlanetenTyp(schaeumender, exotischBlasen).
planetenGruppePlanetenTyp(schaumiger, exotischBlasen).
Expand Down Expand Up @@ -110,7 +109,6 @@
planetenGruppePlanetenTyp(himmelBlauer, megaExotisch).
planetenGruppePlanetenTyp(nichtFunktionierender, megaExotisch).
planetenGruppePlanetenTyp(purpur, megaExotisch).
planetenGruppePlanetenTyp(scharlachRoter, vulkanisch).
planetenGruppePlanetenTyp(toedlicheGrueneAnomalieMegaExot, megaExotisch).
planetenGruppePlanetenTyp(ultramarin, megaExotisch).
planetenGruppePlanetenTyp(verdammterJade, megaExotisch).
Expand Down Expand Up @@ -151,6 +149,7 @@
planetenGruppePlanetenTyp(lava, vulkanisch).
planetenGruppePlanetenTyp(magma, vulkanisch).
planetenGruppePlanetenTyp(obsidianPerle, vulkanisch).
planetenGruppePlanetenTyp(scharlachRoter, vulkanisch).
planetenGruppePlanetenTyp(tektonischer, vulkanisch).
planetenGruppePlanetenTyp(vulkanischer, vulkanisch).

Expand Down Expand Up @@ -236,7 +235,18 @@
planetenGruppePlanetenTyp(verstrahlter, radioAktiv).



passendesGasPlanetenTyp(System, Planet, Stoff) :-
spielStatus:planeten(_, System, Planet, PlanetenTyp),
planetenGruppePlanetenTyp(PlanetenTyp, PlanetenGruppe),
((PlanetenGruppe = gemaessigt, Stoff = stickStoff);
(PlanetenGruppe = giftig, Stoff = stickStoff);
(PlanetenGruppe = radioAktiv, Stoff = radon);
(PlanetenGruppe = frostig, Stoff = radon);
(planetenTypIstExotisch(PlanetenTyp), Stoff = sauerStoff);
(PlanetenGruppe = heiss, Stoff = schwefelin);
(PlanetenGruppe = trocken, Stoff = schwefelin)
).

test :-
\+testInKonsistent.

Expand Down
80 changes: 40 additions & 40 deletions reisen.pl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
:- module(reisen, [bildeReiseZeiten/4, fuegeReiseOperationenEin/2]).
:- module(reisen, [bildeReiseZeiten/4, fuegeReiseOperationenEin/4]).

:- dynamic(letzterOrt/3).

Expand Down Expand Up @@ -26,11 +26,8 @@
bauenNurInFrachter(frachterTreppe).

bildeReiseZeiten(System, Planet, Vorgaenge, ReiseZeit) :-
ignore(retractall(spielStatus:systemAusstattung([_, _, ortSpieler], _))),
assertz(spielStatus:systemAusstattung([System, Planet, ortSpieler], 0)),
noetigeRaffinerieEingabefaecher(Vorgaenge, 0, NoetigeRaffinerieEingabeFaecher),
spielStatus:systemAusstattung([System, Planet, ortSpieler], _),
retractall(letzterOrt(_, _, _)),
ignore(retractall(letzterOrt(_, _, _))),
assertz(letzterOrt(System, Planet, ortHauptBasis)),
findall(VorgangsOrt1, (member(Vorgang, Vorgaenge), vorgangsOrt(NoetigeRaffinerieEingabeFaecher, Vorgang, VorgangsOrt1)), VorgangsOrte1),
findall(EinzelZeit, (member(VorgangsOrt2, VorgangsOrte1), reisen(VorgangsOrt2, EinzelZeit)), EinzelZeiten),
Expand Down Expand Up @@ -152,38 +149,37 @@
!.

/* Nullreise */
reisen([System, Planet, VorgangsOrt], Zeit) :-
letzterOrt(SystemVorher, PlanetVorher, VorgangsOrtVorher),
SystemVorher = System,
PlanetVorher = Planet,
VorgangsOrtVorher = VorgangsOrt,
reisen([NachSystem, NachPlanet, NachOrtsTeil], Zeit) :-
letzterOrt(VonSystem, VonPlanet, VonOrtsTeil),
VonSystem = NachSystem,
VonPlanet = NachPlanet,
VonOrtsTeil = NachOrtsTeil,
Zeit = 0, /* der Spieler muss nicht zum bereits eingenommenen Ort reisen */
!.

/* vorhaben auf gleichem Planeten; Reise zu Fuß / mit Raumschiff */
reisen([System, Planet, VorgangsOrt], Zeit) :-
letzterOrt(System, Planet, Ort),
spielStatus:systemAusstattung([System, Planet, Ort], ZurBasisTransferZeit),
spielStatus:systemAusstattung([System, Planet, VorgangsOrt], ZumVorgangTransferZeit),
reisen([System, Planet, NachOrtsTeil], Zeit) :-
letzterOrt(System, Planet, VonOrtsTeil),
spielStatus:systemAusstattung([System, Planet, VonOrtsTeil], ZurBasisTransferZeit),
spielStatus:systemAusstattung([System, Planet, NachOrtsTeil], ZumVorgangTransferZeit),
retractall(letzterOrt(_, _, _)),
assertz(letzterOrt(System, Planet, VorgangsOrt)),
assertz(letzterOrt(System, Planet, NachOrtsTeil)),
Zeit is ZurBasisTransferZeit + ZumVorgangTransferZeit,
!.

/* vorhaben auf gleichem Planeten; Reise mit Fahrzeug */
/* TODO Meilenstein Fahrzeuge */

/* vorhaben auf anderem Planeten in gleichem System; Reise mit Raumschiff über RaumStation und zu Fuß*/
reisen([System, Planet, VorgangsOrt], Zeit) :-
spielStatus:spielStatus(raumSchiffIstFlott, true),
letzterOrt(System1, Planet1, Ort),
spielStatus:systemAusstattung([System1, Planet1, Ort], ZurBasisTransferZeit),
System = System1,
spielStatus:systemAusstattung([System1, Planet1, ortRaumStation], TransferZurRaumStation),
spielStatus:systemAusstattung([System, Planet, ortRaumStation], TransferVonRaumStation),
spielStatus:systemAusstattung([System, Planet, VorgangsOrt], ZumVorgangTransferZeit),
reisen([NachSystem, NachPlanet, NachOrtsTeil], Zeit) :-
letzterOrt(VonSystem, VonPlanet, VonOrtsTeil),
NachSystem = VonSystem,
spielStatus:systemAusstattung([VonSystem, VonPlanet, VonOrtsTeil], ZurBasisTransferZeit),
spielStatus:systemAusstattung([VonSystem, VonPlanet, ortRaumStation], TransferZurRaumStation),
spielStatus:systemAusstattung([NachSystem, NachPlanet, ortRaumStation], TransferVonRaumStation),
spielStatus:systemAusstattung([NachSystem, NachPlanet, NachOrtsTeil], ZumVorgangTransferZeit),
retractall(letzterOrt(_, _, _)),
assertz(letzterOrt(System, Planet, VorgangsOrt)),
assertz(letzterOrt(NachSystem, NachPlanet, NachOrtsTeil)),
Zeit is ZurBasisTransferZeit + TransferZurRaumStation + TransferVonRaumStation + ZumVorgangTransferZeit,
!.

Expand Down Expand Up @@ -223,7 +219,7 @@
WarpTransferZeit = 4100,
spielStatus:systemAusstattung([System, Planet, ortRaumStation], ZurBasisTransferZeit1),
spielStatus:systemAusstattung([System, Planet, VorgangsOrt], ZumVorgangTransferZeit),
retractall(letzterOrt(_, _, _)),
ignore(retractall(letzterOrt(_, _, _))),
assertz(letzterOrt(System, Planet, VorgangsOrt)),
Zeit is ZurBasisTransferZeit0 + ZurBasisTransferZeit1 + ZumAbflugZeit + WarpTransferZeit + ZumVorgangTransferZeit,
!.
Expand Down Expand Up @@ -261,14 +257,14 @@
*/

/* ------------------------------------------------------------------------------------------------------ */
fuegeReiseOperationenEin(Vorgaenge, VorgaengeDanach) :-
fuegeReiseOperationenEin(System, Planet, Vorgaenge, VorgaengeDanach) :-
/* ermittelt größte nötige RaffinerieEingabefachzahl für alle Vorgänge */
/* dadurch wird nur eine Reise für Raffinieren benötigt */
spielStatus:systemAusstattung([System, Planet, ortSpieler], _),
retractall(reisen:letzterOrt(_, _, _)),
assertz(reisen:letzterOrt(System, Planet, ortHauptBasis)),
noetigeRaffinerieEingabefaecher(Vorgaenge, 0, NoetigeFaecher),
fuegeReiseOperationenEinSub(NoetigeFaecher, Vorgaenge, [System, Planet, ortSpieler], [], VorgaengeDanach).
ReiseOrtBisher = [System, Planet, ortSpieler],
ignore(retractall(letzterOrt(_, _, _))),
assertz(letzterOrt(System, Planet, ortHauptBasis)),
fuegeReiseOperationenEinSub(NoetigeFaecher, Vorgaenge, ReiseOrtBisher, [], VorgaengeDanach).


fuegeReiseOperationenEinSub(_, Vorgaenge, _, VorgaengeBisher, VorgaengeDanach) :-
Expand All @@ -283,21 +279,25 @@
append(VorgaengeBisher, ErweiterterVorgang, VorgaengeBisher1),
fuegeReiseOperationenEinSub(NoetigeRaffinerieEingabeFaecher, RestVorgaenge, ReiseOrtBisherDanach, VorgaengeBisher1, VorgaengeDanach),
!.

vorgangAnfuegenWennVerschiedeneOrte(VorgaengeBisher, [SystemBisher, PlanetBisher, ReiseOrtBisher], [System, Planet, VorgangsOrt], VorgaengeBisher2, ReiseOrtBisherDanach) :-
ReiseOrtBisher = VorgangsOrt,
SystemBisher = System, /* Vorgangsort und Aufenthaltsort gleiches System, gleicher Planet */
PlanetBisher = Planet,

/* keine Reise, weil gleicher Ort */
vorgangAnfuegenWennVerschiedeneOrte(VorgaengeBisher, ReiseOrtBisher, VorgangsOrt, VorgaengeBisher2, ReiseOrtBisherDanach) :-
ReiseOrtBisher = VorgangsOrt,
VorgaengeBisher2 = VorgaengeBisher,
ReiseOrtBisherDanach = [System, Planet, ReiseOrtBisher].
ReiseOrtBisherDanach = ReiseOrtBisher.

vorgangAnfuegenWennVerschiedeneOrte(VorgaengeBisher, ReiseOrtBisher, [_, _, VorgangsOrt], VorgaengeBisher2, ReiseOrtBisherDanach) :-
VorgangsOrt = ortSpieler,
/* keine Reise weil Aktion überall moeglich */
vorgangAnfuegenWennVerschiedeneOrte(VorgaengeBisher, ReiseOrtBisher, VorgangsOrt, VorgaengeBisher2, ReiseOrtBisherDanach) :-
VorgangsOrt = [_, _, VorgangsOrtsTeil],
VorgangsOrtsTeil = ortSpieler,
VorgaengeBisher2 = VorgaengeBisher,
ReiseOrtBisherDanach = ReiseOrtBisher.


/* Reise an anderen Ort */
vorgangAnfuegenWennVerschiedeneOrte(VorgaengeBisher, ReiseOrtBisher, VorgangsOrt, VorgaengeBisher2, ReiseOrtBisherDanach) :-
letzterOrt(System, Planet, _Ort1),
append([[System, Planet, 1, reisen, [[1, ReiseOrtBisher], [1, VorgangsOrt]], [1, angekommen]]], VorgaengeBisher, VorgaengeBisher2),
ReiseOrtBisher = [System, Planet, _OrtsTeil],
reisen(VorgangsOrt, ReiseZeit),
append([[System, Planet, 1, reisen, [[1, ReiseOrtBisher], [1, VorgangsOrt]], [ReiseZeit, angekommen]]], VorgaengeBisher, VorgaengeBisher2),
ReiseOrtBisherDanach = VorgangsOrt.

2 changes: 1 addition & 1 deletion sammelAktion.pl
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
sammelOrt(terrainFormerNutzen, ortWald).
sammelOrt(unterWasserErkaempfen, ortWasser).
sammelOrt(verbessertenMinenLaserNutzen, ortWald).
sammelOrt(vonTierErhalten, ortNahrungsProzessor).
sammelOrt(vonTierErhalten, ortWald).
sammelOrt(solarStrahlNutzen, ortWald).
sammelOrt(gemuetsStrahlNutzen, ortWald).
sammelOrt(verdienen, ortRaumStation).
Expand Down
5 changes: 3 additions & 2 deletions sammlung.pl
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,14 @@
,assertz(sammlung(0, 'System', 'MeinPlanet', herausSchlagen, kohlenStoff, 5, 5, 150))

/* mit Minenlaser auf Planet */
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, ammoniak, 7, 7, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, basalt, 3, 3, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, diWasserStoff, 4, 4, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, radon, 87, 7, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, stickStoff, 9, 9, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, schwefelin, 87, 7, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, ammoniak, 7, 7, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, pilzSchimmel, 1, 1, 150))

,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, diWasserStoff, 4, 4, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, ferritStaub, 3, 3, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, kobalt, 4, 4, 150))
,assertz(sammlung(0, 'System', 'MeinPlanet', minenLaserNutzen, kohlenStoff, 2, 2, 150))
Expand Down
2 changes: 2 additions & 0 deletions stoffErlangenDialog.pl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
[auswahlSystem(AuswahlSystem, [length > 0]),
auswahlPlanet(AuswahlPlanet, [length > 0])
]) ,
ignore(retractall(spielStatus:systemAusstattung([_, _, ortSpieler], _))),
assertz(spielStatus:systemAusstattung([AuswahlSystem, AuswahlPlanet, ortSpieler], 0)),
((AuswahlPlanet = TxtBitteWaehlen, server:fehlerBehandlung);
stoffErlangenAnzeigen(AuswahlSystem, AuswahlPlanet)
).
Expand Down
Loading

0 comments on commit 4a0831f

Please sign in to comment.