[大赛专区]
赛道一python地图绘制分享(赛道一)
刚刚仓库丢了,现在补上
用pygame绘制,随机产生数据可以跑,但是与程序的连接还没完成,后天结束了,怕是完成不了了,对地图有兴趣的朋友可以试试看。坐标和口罩数量随机生成可以显示。
图片素材在附近,从每日pk上下载来的。
首先,导包,初始化变量。
import random import pygame from pygame.color import THECOLORS pic=['./pic/xq.png','./pic/jzxq.png','./pic/kdy.png'] #需求小区,捐赠小区,快递员图片 xqxq=[[1,5],[6,6],[2,5],[8,9]] #需求小区坐标 jzxq=[[1,9],[11,11],[11,9]]#捐赠小区坐标 xqsl=[-200,-111,-40,-99,-41]#数量 jzsl=[100,100,11]#捐赠数量 cangku=[3,3]
初始化pygame界面,建立快递员,小区的类。
pygame.init() class ck(pygame.sprite.Sprite):#仓库 def __init__(self,top,left): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(pic[3]) self.image=pygame.transform.scale(self.image, (52, 52)) self.rect = self.image.get_rect() self.rect.left = left*50 self.rect.top = top*50 self.num=100 class kdy(pygame.sprite.Sprite):#快递员 def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(pic[2]) self.image=pygame.transform.scale(self.image, (52, 52)) self.rect = self.image.get_rect() self.rect.left = 0#快递员的位置,与华为题目一致,x为东西,原点在左上角 self.rect.top = 0 self.num=100 #快递员目前有多少口罩,要在图上显示 def move(self, top,left):#快递员位置改变的方法 self.rect.left = left*50 self.rect.top = top*50 def get(self,num): self.num=num class xq(pygame.sprite.Sprite): def __init__(self,top,left): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(pic[0]) self.image=pygame.transform.scale(self.image, (51, 51)) self.rect = self.image.get_rect() self.rect.left = left*50 self.rect.top = top*50 self.num=-100#需求小区的需求数量 def move(self, num): self.num=num#改变目前所需口罩数量 class jz(pygame.sprite.Sprite): def __init__(self,top,left): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(pic[1]) self.image=pygame.transform.scale(self.image, (51, 51)) self.rect = self.image.get_rect() self.rect.left = left*50#捐赠小区位置 self.rect.top = top*50 self.num=100#捐赠数量 def move(self, num): self.num = num#改变数量 kdy=kdy()#实例化快递员 ck=ck(cangku[0],cangku[1])
继续初始化pygame
size = width,height = 600,600 screen = pygame.display.set_mode(size) pygame.display.set_caption('postman') clock = pygame.time.Clock()
def draw(): for i in range(0,12,2): for j in range(0,12,2): pygame.draw.rect(screen, [0,255,100],[i*50,j*50,50,50],0) for i in range(1,12,2): for j in range(1,12,2): pygame.draw.rect(screen, [0,255,100],[i*50,j*50,50,50],0) for i in range(1,12,2): for j in range(0,12,2): pygame.draw.rect(screen, [0,240,100],[i*50,j*50,50,50],0) for i in range(0,12,2): for j in range(1,12,2): pygame.draw.rect(screen, [0,240,100],[i*50,j*50,50,50],0) draw()#绘制地图,不含小区和快递员 xq_font = pygame.font.Font(None, 30)#初始化显示的文本
def animate():#重新绘制界面 #先绘制地图,再绘制需求小区,捐赠小区,再更新数量的文本显示,把仓库也画上 draw() for i in xqzb: screen.blit(i.image, i.rect) for i in jzzb: screen.blit(i.image, i.rect) xqxs = [] # 需求数量显示 jzxs = [] # 捐赠数量显示 for i in range(len(xqxq)): xqxs.append(xq_font.render(str(xqzb.num), 1, THECOLORS['black'])) for i in range(len(jzxq)): jzxs.append(xq_font.render(str(jzzb.num), 1, THECOLORS['white'])) for i in range(len(xqxs)): screen.blit(xqxs,[xqxq[1]*50,xqxq[0]*50]) for i in range(len(jzxs)): screen.blit(jzxs,[jzxq[1]*50,jzxq[0]*50]) screen.blit(kdy.image, kdy.rect)#重新绘制快递员并更新数量 screen.blit(xq_font.render(str(kdy.num), 1, THECOLORS['white']), kdy.rect) screen.blit(ck.image, ck.rect) pygame.display.flip()#刷新界面
running = True while running:#开始循环刷新地图 b=random.randint(1,12)#随机增加捐赠小区 if b >10: jzxq.append([b,b,b]) xqzb = [] # 需求小区类的实现,5个实现写到列表里保存 jzzb = [] # 捐赠小区类的实现,同列表保存 for i in range(len(xqxq)): xqzb.append(xq(xqxq[0], xqxq[1])) for i in range(len(jzxq)): jzzb.append(jz(jzxq[0], jzxq[1])) for event in pygame.event.get(): if event.type == pygame.QUIT:#如果点退出,就关闭界面 running = False a=random.randint(1,11)#以下同于改变文本显示的口罩数量 for i in range(len(xqzb)): xqzb.num=a*10 for i in range(len(jzzb)): jzzb.num=a*11 clock.tick(3)#控制帧速率 kdy.move(a,a)#快递员的位置改变,直接给坐标,如(1,2) animate()#调用方法,刷新地图和房子,快递员等 pygame.quit()
picture.zip
19.67 KB,下载次数:9