Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss19:mapgeneration_fuer_grosse_populationen_eric

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

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 == 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 = #Größe+ self.size = #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.#​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
  
ss19/mapgeneration_fuer_grosse_populationen_eric.1560960151.txt.gz · Zuletzt geändert: 2019/06/19 18:02 von eric_m