def loadworld(self, game): self.size = 500 self.spawn = [self.size//2,self.size//2] file = open('world/1.data', 'rb') self.data = zlib.decompress(file.read()) self.data = pickle.loads(self.data) file.close() self.rendered = {} for x in xrange(self.spawn[0], self.spawn[0]+game.maxxtile+1): for y in xrange(self.spawn[1], self.spawn[1]+game.maxytile+1): newx = x - self.spawn[0] newy = y - self.spawn[1] self.rendered[(newx,newy)] = helper.loadtilebyid(self.data[x][y][0], self.data[x][y][1], game, (x,y), game.dummytile.image.width*newx, game.dummytile.image.height*newy, RespawnTime=self.data[x][y][1]) print('world loaded!')
def genworld(self, game, seed=False): ######WORLD FORMAT: [id, subid, timeTakenToRespawnInSeconds, TimeChanged(datetime.now)] ####### dummytile = game.dummytile print('Now generating world...') if seed: self.seed = seed else: self.seed = int(random.getrandbits(32)) print('World seed: '+str(self.seed)) random.seed(self.seed) self.size = 500 self.spawn = [self.size//2,self.size//2] self.data = [] for rangex in xrange(0, self.size): self.data.append([]) for rangey in xrange(0, self.size): self.data[rangex].append([]) randnumber = random.randrange(0,1000) type = random.randrange(0,1000) if randnumber is not None: #grass id = 1 if type >= 990: subid = 0 elif type >= 975: subid = 1 elif type >= 955: subid = 2 else: subid = 7 #normal self.data[rangex][rangey] = self.worlditemiser(id,subid) self.rendered = {} for x in xrange(self.spawn[0]-1, self.spawn[0]+game.maxxtile+1): for y in xrange(self.spawn[1]-1, self.spawn[1]+game.maxytile+1): newx = x - self.spawn[0]-1 newy = y - self.spawn[1]-1 self.rendered[(newx,newy)] = helper.loadtilebyid(self.data[x][y][0], self.data[x][y][1], game, (x,y), dummytile.image.width*newx, dummytile.image.height*newy) toreplace = self.rendered[game.player.getscreenpos()] self.rendered[game.player.getscreenpos()] = environment.Grass(game, self.rendered[game.player.getscreenpos()].getpos(), subid=7, x=self.rendered[game.player.getscreenpos()].x, y=self.rendered[game.player.getscreenpos()].y, batch=game.batch, group=game.deepmap) toreplace.delete() print('World generated')
def move(self, dir): # move world torender = {} todelete = {} if dir == "right": self.player.set_direction(self, "right") if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now(): # check collision if self.world.rendered[ (self.maxxtile // 2 + 1, self.maxytile // 2) ].solid and self.player.sprite.collide( [self.world.rendered[(self.maxxtile // 2 + 1, self.maxytile // 2)]] != [] ): torender = self.world.rendered else: self.movetimer2 = datetime.datetime.now() for x in self.world.rendered: self.world.rendered[x].x = self.world.rendered[x].x - 2 if self.world.rendered[x].right < -self.dummytile.image.width: todelete[x] = self.world.rendered[x] elif ( self.world.rendered[x].left <= (x[0] * self.dummytile.image.width) - self.dummytile.image.width ): torender[(x[0] - 1, x[1])] = self.world.rendered[x] else: torender[x] = self.world.rendered[x] for x in todelete: xtoupdate = todelete[x].getpos()[0] + self.maxxtile + 2 torender[(self.maxxtile + 1, x[1])] = helper.loadtilebyid( self.world.data[xtoupdate][todelete[x].getpos()[1]][0], self.world.data[xtoupdate][todelete[x].getpos()[1]][1], self, (xtoupdate, self.world.rendered[x].getpos()[1]), (self.maxxtile) * self.dummytile.image.width - 2, self.world.rendered[x].bottom, self.world.data[xtoupdate][todelete[x].getpos()[1]][2], ) todelete[x].delete() else: torender = self.world.rendered elif dir == "left": self.player.set_direction(self, "left") if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now(): # check collision if self.world.rendered[ (self.maxxtile // 2 - 1, self.maxytile // 2) ].solid and self.player.sprite.collide( [self.world.rendered[(self.maxxtile // 2 - 1, self.maxytile // 2)]] != [] ): torender = self.world.rendered else: self.movetimer2 = datetime.datetime.now() for x in self.world.rendered: self.world.rendered[x].x = self.world.rendered[x].x + 2 if self.world.rendered[x].left > self.width + self.dummytile.width: todelete[x] = self.world.rendered[x] elif ( self.world.rendered[x].left >= (x[0] * self.dummytile.image.width) + self.dummytile.image.width ): torender[(x[0] + 1, x[1])] = self.world.rendered[x] else: torender[x] = self.world.rendered[x] for x in todelete: xtoupdate = todelete[x].getpos()[0] - (self.maxxtile + 2) torender[(-1, x[1])] = helper.loadtilebyid( self.world.data[xtoupdate][todelete[x].getpos()[1]][0], self.world.data[xtoupdate][todelete[x].getpos()[1]][1], self, (xtoupdate, self.world.rendered[x].getpos()[1]), -self.dummytile.width + 2, self.world.rendered[x].bottom, self.world.data[xtoupdate][todelete[x].getpos()[1]][2], ) todelete[x].delete() else: torender = self.world.rendered elif dir == "down": self.player.set_direction(self, "down") if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now(): # check collision if self.world.rendered[ (self.maxxtile // 2, self.maxytile // 2 - 1) ].solid and self.player.sprite.collide( [self.world.rendered[(self.maxxtile // 2, self.maxytile // 2 - 1)]] != [] ): torender = self.world.rendered else: self.movetimer2 = datetime.datetime.now() for x in self.world.rendered: self.world.rendered[x].y = self.world.rendered[x].y + 2 if self.world.rendered[x].bottom > self.height + self.dummytile.height: todelete[x] = self.world.rendered[x] elif ( self.world.rendered[x].bottom >= (x[1] * self.dummytile.image.height) + self.dummytile.image.height ): torender[(x[0], x[1] + 1)] = self.world.rendered[x] else: torender[x] = self.world.rendered[x] for x in todelete: ytoupdate = todelete[x].getpos()[1] - (self.maxytile + 2) torender[(x[0], -1)] = helper.loadtilebyid( self.world.data[todelete[x].getpos()[0]][ytoupdate][0], self.world.data[todelete[x].getpos()[0]][ytoupdate][1], self, (self.world.rendered[x].getpos()[0], ytoupdate), self.world.rendered[x].left, -self.dummytile.height + 2, self.world.data[todelete[x].getpos()[0]][ytoupdate][2], ) todelete[x].delete() else: torender = self.world.rendered elif dir == "up": self.player.set_direction(self, "up") if self.movetimer + datetime.timedelta(seconds=self.movedelay) <= datetime.datetime.now(): # check collision if self.world.rendered[ (self.maxxtile // 2, self.maxytile // 2 + 1) ].solid and self.player.sprite.collide( [self.world.rendered[(self.maxxtile // 2, self.maxytile // 2 + 1)]] != [] ): torender = self.world.rendered else: self.movetimer2 = datetime.datetime.now() for x in self.world.rendered: self.world.rendered[x].y = self.world.rendered[x].y - 2 if self.world.rendered[x].top < -self.dummytile.height: todelete[x] = self.world.rendered[x] elif ( self.world.rendered[x].bottom <= (x[1] * self.dummytile.image.height) - self.dummytile.image.height ): torender[(x[0], x[1] - 1)] = self.world.rendered[x] else: torender[x] = self.world.rendered[x] for x in todelete: ytoupdate = todelete[x].getpos()[1] + (self.maxytile + 2) torender[(x[0], self.maxytile + 1)] = helper.loadtilebyid( self.world.data[todelete[x].getpos()[0]][ytoupdate][0], self.world.data[todelete[x].getpos()[0]][ytoupdate][1], self, (self.world.rendered[x].getpos()[0], ytoupdate), self.world.rendered[x].left, self.height - 2, self.world.data[todelete[x].getpos()[0]][ytoupdate][2], ) todelete[x].delete() else: torender = self.world.rendered if torender is not {}: self.world.rendered = torender