Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
ss19:mapgeneration_fuer_grosse_populationen_eric [2019/06/19 18:02] eric_m |
ss19:mapgeneration_fuer_grosse_populationen_eric [2019/06/20 13:19] (aktuell) eric_m |
||
---|---|---|---|
Zeile 15: | Zeile 15: | ||
self.size = 1 #Größe | self.size = 1 #Größe | ||
self.status = True #Aktiv oder nicht | self.status = True #Aktiv oder nicht | ||
- | self.chunkpos = [] #Speichert die Position des Chunks | + | self.chunkpos = [0,0] #Speichert die Position des Chunks |
self.speed = 5 #Geschwindigkeit | self.speed = 5 #Geschwindigkeit | ||
self.stamina = 250 #Ausdauer | self.stamina = 250 #Ausdauer | ||
self.angle = angle #Laufwinkel | self.angle = angle #Laufwinkel | ||
self.sight = 1 #Sichtweite | self.sight = 1 #Sichtweite | ||
- | self.rect=pygame.Rect(int(self.x)-int(self.sight),int(self.y)-int(self.sight),self.sight*2+self.size,self.sight*2+self.size)#Rechteck in Pygame | + | self.rect=pygame.Rect(int(self.x)-int(self.size),int(self.y)-int(self.size),self.size*2+self.size,self.size*2+self.size)#Rechteck in Pygame |
self.name=name #ID | self.name=name #ID | ||
self.vx = 0#?? | self.vx = 0#?? | ||
self.vy = 0 | self.vy = 0 | ||
self.list = [] | self.list = [] | ||
+ | self.status = True | ||
#Löscht den Spieler | #Löscht den Spieler | ||
- | def __del__(self,k): | + | def __del__(self): |
- | if k == True: | + | if self.status == True: |
return self.list | return self.list | ||
+ | print("Player died") | ||
+ | time.sleep(2) | ||
#bewegt den Spieler | #bewegt den Spieler | ||
def move(self): | def move(self): | ||
- | #if self.name == 0 : | ||
- | #self.x+=5 | ||
- | #if self.name == 1 : | ||
- | # self.x-=5 | ||
- | #if self.name == 2 : | ||
- | # self.y+=5 | ||
- | #if self.name == 3 : | ||
- | #self.y-=5 | ||
self.x+=random.randint(-self.speed,self.speed) | self.x+=random.randint(-self.speed,self.speed) | ||
self.y+=random.randint(-self.speed,self.speed) | self.y+=random.randint(-self.speed,self.speed) | ||
self.rect=pygame.Rect(int(self.x)-int(self.sight),int(self.y)-int(self.sight),self.sight*2+self.size,self.sight*2+self.size) | self.rect=pygame.Rect(int(self.x)-int(self.sight),int(self.y)-int(self.sight),self.sight*2+self.size,self.sight*2+self.size) | ||
- | pygame.draw.rect(screen, (255, 0, 0),self.rect) | + | pygame.draw.rect(screen, (255,0, 0),self.rect) |
self.stamina-=1 | self.stamina-=1 | ||
Zeile 58: | Zeile 53: | ||
self.name = name #ID | self.name = name #ID | ||
self.chunkpos = [] #Speichert die Koordinaten des Chunks | self.chunkpos = [] #Speichert die Koordinaten des Chunks | ||
- | self.size = 5 #Größe | + | self.size = 3 #Größe |
self.rect = pygame.Rect(x, y, self.size,self.size) #Rechteck in Pygame | self.rect = pygame.Rect(x, y, self.size,self.size) #Rechteck in Pygame | ||
Zeile 83: | Zeile 78: | ||
self.overlay = overlay | self.overlay = overlay | ||
self.objects = [] #Liste der festen Objekte | self.objects = [] #Liste der festen Objekte | ||
- | self.density = 0.7 #Wahrscheinlichkeit für neue Objekte | + | self.density = 0.00125 #Wahrscheinlichkeit für neue Objekte |
self.name = name | self.name = name | ||
Zeile 106: | Zeile 101: | ||
a = object(0,0,0) | a = object(0,0,0) | ||
numb = self.length*self.height*self.density/a.size | numb = self.length*self.height*self.density/a.size | ||
- | for i in range(numb): | + | for i in range(int(numb)): |
- | self.objects.append(object(random.randint(self.x,self.getendx()-a.size),random.randint(self.y,self.getendy()-a.size),name)) | + | self.objects.append(object(random.randint(self.x,self.getendx()-a.size),random.randint(self.y,self.getendy()-a.size),i)) |
+ | #print(len(self.objects)) | ||
#Gesamte Map | #Gesamte Map | ||
class map: | class map: | ||
Zeile 126: | Zeile 121: | ||
self.maplist = [] #2-Dim Liste der Chunks | self.maplist = [] #2-Dim Liste der Chunks | ||
self.initiate() | self.initiate() | ||
- | self.playerinitiate(playerlist) | + | self.playerupdate() |
#Initilisiert die Grundmap, sowie weist jedem Chunk die Objekte hinzu | #Initilisiert die Grundmap, sowie weist jedem Chunk die Objekte hinzu | ||
def initiate(self): | def initiate(self): | ||
- | preobject = self.objects.copy() | ||
factor = int(self.worldsize/self.chunksize) | factor = int(self.worldsize/self.chunksize) | ||
print(factor) | print(factor) | ||
Zeile 137: | Zeile 131: | ||
for i in range(factor): | for i in range(factor): | ||
line = [] | line = [] | ||
- | |||
- | |||
#Durchläuft die x-Richtung der Chunks | #Durchläuft die x-Richtung der Chunks | ||
for e in range(factor): | for e in range(factor): | ||
Zeile 145: | Zeile 137: | ||
#Durchläuft alle festen Objekte | #Durchläuft alle festen Objekte | ||
line[e].generate() | line[e].generate() | ||
+ | #print("(",line[e].x,"/",line[e].y,")",end="") | ||
self.maplist.append(line) | self.maplist.append(line) | ||
+ | #print("") | ||
del line | del line | ||
print("Objects ready!") | print("Objects ready!") | ||
Zeile 186: | Zeile 180: | ||
x = self.player[q].x #x-Pos des Spielers | x = self.player[q].x #x-Pos des Spielers | ||
y = self.player[q].y #y-Pos des Spielers | y = self.player[q].y #y-Pos des Spielers | ||
- | x0 = self.maplist[0][0].x #kleinste x-Pos der Chunks | + | x0 = 0 #kleinste x-Pos der Chunks |
- | y0 = self.maplist[0][0].y #kleinste y-Pos der Chunks | + | y0 = 0 #kleinste y-Pos der Chunks |
- | xn = self.maplist[0][len(self.maplist[0])-1].getendx() #größte x-Pos der Chunks | + | xn = self.worldsize #größte x-Pos der Chunks |
- | yn = self.maplist[len(self.maplist)-1][0].getendy() #größte x-Pos der Chunks | + | yn = self.worldsize #größte x-Pos der Chunks |
- | #Da sich die Map auch in den negativen Bereich erweitert, erhalten alle Chunks einen Shift. | ||
- | self.player[q].chunkpos[1] = int(x0/10) | ||
- | self.player[q].chunkpos[0] = int(y0/10) | ||
- | #Falls der Spieler außerhalb der Map ist, wird diese erweitert. | + | if x <= x0 or x >= xn or y <= y0 or y >= yn: |
- | if x < x0 or x > xn or y < y0 or y > yn: | + | |
del self.player[q] | del self.player[q] | ||
q-=1 | q-=1 | ||
+ | else: | ||
+ | #Da sich die Map auch in den negativen Bereich erweitert, erhalten alle Chunks einen Shift. | ||
+ | self.player[q].chunkpos[1] = int(x/self.chunksize) | ||
+ | self.player[q].chunkpos[0] = int(y/self.chunksize) | ||
+ | #print(x,"/",y) | ||
+ | #print(self.maplist[int(y/self.chunksize)][int(x/self.chunksize)].x,"/",self.maplist[int(y/self.chunksize)][int(x/self.chunksize)].y) | ||
+ | #print("---------") | ||
+ | #time.sleep(2) | ||
q+=1 | q+=1 | ||
Zeile 219: | Zeile 217: | ||
#(bis jetzt) löscht das Objekt und erhöt Stamina um 250 | #(bis jetzt) löscht das Objekt und erhöt Stamina um 250 | ||
if self.player[i].rect.collidelist(self.maplist[q][w].objects)>-1: | if self.player[i].rect.collidelist(self.maplist[q][w].objects)>-1: | ||
- | print("Treffer!") | + | #print("Treffer!") |
- | print("Position: (",self.player[i].x,"/",self.player[i].y,")") | + | #print("Position: (",self.player[i].x,"/",self.player[i].y,")") |
del self.maplist[q][w].objects[e] | del self.maplist[q][w].objects[e] | ||
e-=1 | e-=1 | ||
Zeile 330: | Zeile 328: | ||
self.playerinitiate(playerlist) | self.playerinitiate(playerlist) | ||
- | mapsize=10000 #Mapsize | + | mapsize=1000 #Mapsize |
playerl = [] #Spielerliste | playerl = [] #Spielerliste | ||
clock = pygame.time.Clock() | clock = pygame.time.Clock() | ||
+ | playercount = int(0.1*mapsize) | ||
- | + | for i in range(playercount):#erstellt X Spieler | |
- | for i in range(50):#erstellt X Spieler | + | |
playerl.append(player(random.randint(mapsize*0.1,mapsize*0.9),random.randint(mapsize*0.1,mapsize*0.9),0,0,i)) | playerl.append(player(random.randint(mapsize*0.1,mapsize*0.9),random.randint(mapsize*0.1,mapsize*0.9),0,0,i)) | ||
- | map01 = map(playerl,mapsize,int(0.005*mapsize)) #erstellt die Map | + | map01 = map(playerl,mapsize,50) #erstellt die Map |
- | screen = pygame.display.set_mode((500,500)) #erstellt den Hauptbildschirm | + | screen = pygame.display.set_mode((1000,1000)) #erstellt den Hauptbildschirm |
moveframes = 5 #Anzahl der Frames | moveframes = 5 #Anzahl der Frames | ||
i=0 #Zählt die Schleifendurchläufe | i=0 #Zählt die Schleifendurchläufe | ||
done = False #Falls True beendet das Programm | done = False #Falls True beendet das Programm | ||
+ | winner = [] | ||
+ | while not done: | ||
+ | clock.tick(50) #Für größere Pausen zwischen den Runden | ||
- | while not done: | ||
- | #clock.tick(50) #Für größere Pausen zwischen den Runden | ||
- | | ||
#Beendet das Programm falls ... | #Beendet das Programm falls ... | ||
for event in pygame.event.get(): | for event in pygame.event.get(): | ||
Zeile 361: | Zeile 359: | ||
#Lässt die Spieler einen move machen oder löscht diese | #Lässt die Spieler einen move machen oder löscht diese | ||
e = 0 | e = 0 | ||
+ | status = False | ||
while e <len(map01.player) and e>=0: | while e <len(map01.player) and e>=0: | ||
if map01.player[e].stamina>0: | if map01.player[e].stamina>0: | ||
map01.player[e].move() | map01.player[e].move() | ||
- | e+=1 | + | else: |
- | else: | + | if len(map01.player)<=int(playercount*0.1): |
+ | winner.append(map01.player[e]) | ||
+ | #if len(map01.player)==1: | ||
+ | #print("Runde:",i) | ||
del map01.player[e] | del map01.player[e] | ||
e-=1 | e-=1 | ||
+ | e+=1 | ||
print("------------") | print("------------") | ||
Zeile 385: | Zeile 387: | ||
pygame.display.flip() | pygame.display.flip() | ||
- | print("Runde: ",i) #Gibt die Rundenanzahl aus | + | #print("Runde: ",i) #Gibt die Rundenanzahl aus |
i+=1 | i+=1 | ||