Zum Download bereit: Civ4-Mod "Mars, jetzt!"
"Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )
"Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)
Das finde ich aber auch wieder sehr iritierend. (Ich weiß, dass das so ist). Weil normalerweise muss ich die Zahlen nach der richtigen Reihenfolge laden!! Ich kann nicht einfach start an dritter Stelle schreiben, wenn es nach der Library an erster Stelle stehen muss. Dass Parameter ausgelassen werden dürfen, müsste ja bekannt sein. (Funktioniert natürlich nur wenn die Parameter mit einem Vorwert geladen werden)
Mit Anstand, Tugen und Manieren,-kannst du dich nie blamieren!!
Wäre, wenn und aber ... CIV ist kein Spiel der Konjunktive!
Weiß jemand, wie ich einer Variable eine n²-Matrix voller Nullen zuweisen und danach auf die einzelnen Beiträge zugreifen kann?
Leute helft mir:
Warum geht das nciht? Der Code soll folgendes machen: Die Einheit Mongol Herde soll wenn von der KI auf ein freies Feld gestellt werden, nur das macht sie nicht.
PHP-Code:
def AI_unitUpdate(self,argsList):
pUnit = argsList[0]
Herde = gc.getInfoTypeForString('UNIT_MONGOL_HERDE')
pOwner = pUnit.getOwner()
if pUnit.getUnitType() == Herde:
iX = pUnit.getX()
iY = pUnit.getY()
oPlot = CyMap().plot(iX,iY)
if oPlot.isCity():
for iiX in range(iX-1, iX+2, 1):
for iiY in range(iY-1, iY+2, 1):
pPlot = CyMap().plot(iiX,iiY)
if pPlot.getFeatureType() != gc.getInfoTypeForString('FEATURE_FOREST'):
if pPlot.getFeatureType() != gc.getInfoTypeForString('FEATURE_JUNGLE'):
if not pPlot.isWater():
if pPlot.isOwned():
if pPlot.getOwner() == pOwner():
pUnit.getGroup().pushMission(MissionTypes.MISSION_MOVE_TO, pPlot.getX(), pPlot.getY(), 0, False, False, MissionAITypes.NO_MISSIONAI, pUnit.plot(), pUnit)
return true
break
# if pUnit.getUnitType() == Herde:
# return true
return False
Irgendwie sind deine Fragen immer nicht konkret genug. Womöglich hilft dir das Folgende;
Relikte einer extrem ineffizienten Matrixklasse; Ansonsten schau dir mal NumPy an. Wenn du ein bisschen Numerik betreiben willst, ist das gar nicht so schlecht.
Code:class Matrix: def __init__(self,dimX=0,dimY=0,value=0): self._dimX = dimX self._dimY = dimY self._data=[] for i in xrange(self._dimX): self._data.append([]) for j in xrange(self._dimY): self._data[i].append(float(value)) def __getitem__(self,index): i,j = index if self._valid_idx(i,j): return self._data[i][j] else: raise KeyError def __setitem__(self,index,value): i,j = index if self._valid_idx(i,j): self._data[i][j] = value else: raise KeyError def _valid_idx(self,i,j): return i >= 0 or j>= 0 or i < self._dimX or j < self._dimY def pprint(self): import pprint #eher unueblich, module in funcs zu importieren pprint.pprint(self._data) def read(self,filename): buf = open(filename).readlines() self._data = [] self._dimX = len(buf) self._dimY = len(buf[0].split()) for line in buf: self._data.append([]) self._data[-1].extend(map(float,line.split())) def __iadd__(self,m): if self._dimX != m._dimX or self._dimY != m._dimY: raise TypeError for i in xrange(self._dimX): for j in xrange(self._dimY): self._data[i][j]+=m[i,j] return self """der folgende code wird nur ausgefuehrt, wenn diese klasse direkt ausgefuehrt wird""" if __name__ == '__main__': N,M = 4,3 init_value = 0 m = Matrix(N,M,init_value) """schnell ausgabe""" m.pprint() """wert setzen""" m[1,2] = 2 """lesender zugriff""" print "lese" for i in xrange(N): for j in xrange(M): print m[i,j], print """lesen aus datei m.txt: 1 2 3 4.0 5.0 6.0 7 8.8 9.9 10 11 12""" print "read from file" n = Matrix() n.read('m.txt') n.pprint() """prefix addition""" print "m+=n" m+=n m.pprint()
so etwas findest du bei python fast immer in libs. siehe NumPy oben.
Mit Anstand, Tugen und Manieren,-kannst du dich nie blamieren!!
Wäre, wenn und aber ... CIV ist kein Spiel der Konjunktive!
@LittlePritt:
iX = pUnit.getX()
iY = pUnit.getY()
CyUnit hat kein getX(), getY():
iX = pUnit.plot().getX()
iY = pUnit.plot().getY()
Doch eigentlich schon, darüber mekert er auch nicht.
Edith hat den Fehler gefunden, hinter pOwner war ein ()
Geändert von Little Pritt (25. April 2009 um 09:35 Uhr)
Wie komme ich denn von einer Team-ID zu einer CyPlayer-Instanz?
Sowas wie GetPlayers() gibt's für CyTeam ja nicht.
Bin irgendwie zu blöd dazu .
Zum Download bereit: Civ4-Mod "Mars, jetzt!"
"Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )
"Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)
oderPHP-Code:
for i in range (pTeam.getNumMembers()):
pPlayer = gc.getPlayer(i)
PHP-Code:
pPlayer = pTeam.getLeaderID()
wenn das Team genau 1 Mitglied hat (also ganz normal, ohne Allianz, etc), dann liefert mir getNumMembers doch 0 zurück, über getPlayer(0) hab' ich dann aber automatisch den menschlichen Spieler, und nicht das Mitglied des Teams, oder?
Und wenn's mehr als ein Mitglied gibt ?
Zum Download bereit: Civ4-Mod "Mars, jetzt!"
"Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )
"Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)
Ich würde gern ein Unterprogramm schreiben, mit dem man eine Fläche in einem Koordinatensystem festlegen kann. Also bestenfalls so, dass man die Fläche zeichnet oder modelliert wie bei Paint und anschließend eine Funktion definieren kann, die auf der Fläche 1 ist und sonst überall 0.
Weiß jemand, was ich da für Routinen brauche? Ich bin völlig planlos.