Pygame实现小球躲避实例代码怎么写(pygame,开发技术)

时间:2024-05-04 17:38:23 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

前言:

这学期的Python课,要写代码是真的多…

课程实验一是一个五子棋,但是发了代码。

至于代码质量嘛~ 我直接全部根据自己划分的结构改了

这里吐槽下 (真的发下来的代码 惨不忍睹 )

我改了快4个小时 后面功能不想加了…

这次是自己写嘛~ 那就写个想样的。

结构划分

我分为了

run 入口

setting 设置

main 主逻辑

utils 仓库

其实我想的是:全部设置到页面上去,但是偷懒~ (期末要去弄绩点)

直接开始贴代码

run.py

importsysfrommainimportmainbanner="""___________|__)___|||____|______|_\/_`|||_|/__|/__|||_)|(_|||||___\__\(__|____/\__,_|_|_|_____|___/\___|"""if__name__=='__main__':print(banner)print("Author:HengYi")print("[*]简单:输入1")print("[*]普通:输入2")print("[*]困难:输入3")try:num=int(input("请选择难度:"))ifnumin[1,2,3]:main(num)else:print("无法处理~")sys.exit()exceptExceptionase:raiseException("无法处理~")

setting.py

WIDTH=900#宽HEIGHT=600#高SCORE=0#分数TIME=0#时间FIRST_STEP=10#到达第二关时间SECOND_STEP=20#到达第三关时间FPS=60#刷新率BG_COLOR=(255,239,213)#背景颜色

utils.py

#-*-coding:utf-8-*-importpygamefromsettingimportFIRST_STEP,SECOND_STEP,BG_COLOR,WIDTH,HEIGHT#Note:根据难度生成对应的小球#Time:2021/12/178:35下午#Author:HengYidefballNum(ladderNum,time):index=0ifFIRST_STEP<=time<SECOND_STEP:index=1ifSECOND_STEP<=time:index=2numMap=[[2,3,5],[3,5,6],[4,6,7]]returnnumMap[ladderNum-1][index]#Note:根据小球个数设置防止误触时间#Time:2021/12/178:43下午#Author:HengYidefprotectTime(ballsNum):ifballsNumin[2,3,4]:return1else:return2#Note:根据时间设置小球大小#Time:2021/12/178:58下午#Author:HengYidefhowBigBallIs(ladderNum,time):index=0ifFIRST_STEP<=time<SECOND_STEP:index=1ifSECOND_STEP<=time:index=2numMap=[[25,20,15],[24,20,16],[26,20,16]]returnnumMap[ladderNum-1][index]#Note:根据时间难度计算球体的大小和速度#Time:2021/12/179:15下午#Author:HengYidefjudgeDiff(ladderNum,time):index=0ifFIRST_STEP<=time<SECOND_STEP:index=1ifSECOND_STEP<=time:index=2numMap=[[(30,30,3.5,3.5),(28,28,6,6),(26,26,9,9)],[(30,30,4.5,4.5),(27,27,8,8),(25,25,10,10)],[(30,30,5,5),(26,26,9,9),(24,24,12,12)]]returnnumMap[ladderNum-1][index]#Note:创建平台窗口#Time:2021/12/172:58下午#Author:HengYidefmakeGameBg(width,height):pygame.init()screen=pygame.display.set_mode((width,height))#设置窗口大小pygame.display.set_caption('小球逃逃逃')#设置窗口标题background=pygame.Surface(screen.get_size())#填充背景returnscreen,background#Note:添加小球产生的事件#Time:2021/12/173:06下午#Author:HengYidefballCome():COME_AGAIN=pygame.USEREVENTpygame.time.set_timer(COME_AGAIN,1000)returnCOME_AGAIN#Note:提示字体#Time:2021/12/173:11下午#Author:HengYidefmakeTips(content,size,color,position,screen):font=pygame.font.SysFont('arial',size)text_sf=font.render(content,True,color,BG_COLOR)screen.blit(text_sf,position)#Note:字体展示#Time:2021/12/184:20下午#Author:HengYidefdraw(screen,SCORE,TIME):screen.fill(BG_COLOR)#防止出现拖影makeTips('SCORE:',30,(34,139,34),(5,40),screen)makeTips('TIME(s):',30,(64,158,255),(5,75),screen)makeTips(str(int(SCORE)),30,(34,139,34),(135,40),screen)makeTips(str(int(TIME)),30,(64,158,255),(135,75),screen)ifTIMEin[FIRST_STEP,FIRST_STEP+1]:makeTips('Ops!LEVEL_2~',30,(60,179,113),(WIDTH/2-30*3.5,HEIGHT/2-50),screen)elifTIMEin[SECOND_STEP,SECOND_STEP+1]:makeTips('Congratulations!LEVEL_3',25,(60,179,113),(WIDTH/2-25*6.25,HEIGHT/2-50),screen)

Main.py

#-*-coding:utf-8-*-importrandomfromsettingimport*fromutilsimport*classBall(pygame.sprite.Sprite):def__init__(self,*keys):#创建球super().__init__()self.timeSec=0w,h,xs,ys=keys[0]self.w=wself.h=hself.xs=xsself.ys=ysx=random.randint(0,WIDTH-self.w)y=random.randint(0,HEIGHT-self.h)self.rect=pygame.Rect(x,y,self.w*2,self.h*2)defupdate(self,screen,*args):#根据设置的速度进行运动self.rect.x+=self.xsself.rect.y+=self.ys#当遇到墙的时候进行反弹ifself.rect.x>WIDTH-self.worself.rect.x<0:self.xs=-self.xselifself.rect.y>HEIGHT-self.horself.rect.y<0:self.ys=-self.ysifself.timeSec<=args[0]:pygame.draw.rect(screen,(100,149,237),[self.rect.x,self.rect.y,self.rect.w,self.rect.h],2)pygame.draw.circle(screen,(255,0,0),[self.rect.center[0],self.rect.center[1]],self.w)deftimerAdd(self):self.timeSec+=1returnself.timeSecdef__del__(self):#销毁的时候passclassMouse(pygame.sprite.Sprite):def__init__(self,*keys):super().__init__()self.size=keys[0]#设置圆的大小self.rect=pygame.Rect(WIDTH/2-self.size,HEIGHT/2-self.size,self.size*2,self.size*2)#实则是一个正方形defupdate(self,screen,*args):ifpygame.mouse.get_focused():#如果存在于页面内self.rect.center=pygame.mouse.get_pos()#限制球不能半身跑到边框上ifself.rect.x<0:self.rect.x=0elifself.rect.x>WIDTH-self.rect.w:self.rect.x=WIDTH-self.rect.welifself.rect.y<0:self.rect.y=0elifself.rect.y>HEIGHT-self.rect.h:self.rect.y=HEIGHT-self.rect.hpygame.draw.circle(screen,(255,0,0),[self.rect.center[0],self.rect.center[1]],self.size)#根据圆心画圆defmain(ladderNum):#-------------------画布初始化-----------------------screen,background=makeGameBg(WIDTH,HEIGHT)clock=pygame.time.Clock()comeAgain=ballCome()#--------------------------------------------------#--------------------对象存储-------------------------globalTIME,SCOREballs=pygame.sprite.Group(Ball(judgeDiff(ladderNum,TIME)))mouse=Mouse(howBigBallIs(ladderNum,TIME))mouseObject=pygame.sprite.Group(mouse)#--------------------------------------------------#---------------------游戏主程序-----------------------RUNNING=TrueSHOWINFO=FalsewhileTrue:draw(screen,SCORE,TIME)#动态添加文字ifSHOWINFO:makeTips('PleasePressTheSpaceToRestart',30,(255,99,71),(WIDTH/2-240,HEIGHT/2-50),screen)foreachinballs:ifpygame.sprite.spritecollide(each,mouseObject,False,collided=None)andeach.timeSec>2:RUNNING=FalseSHOWINFO=Trueforeventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()exit(0)elifevent.type==pygame.KEYDOWN:#重新开始ifevent.key==pygame.K_SPACE:SCORE=0TIME=0foreachinballs.sprites():balls.remove(each)SHOWINFO=FalseRUNNING=Trueelifevent.type==comeAgainandRUNNING:#每秒增加TIME+=1ballsNum=ballNum(ladderNum,TIME)diff=judgeDiff(ladderNum,TIME)SCORE+=(ballsNum*diff[3])ifTIMEin[10,20]:mouseObject.remove(mouseObject.sprites()[0])mouseObject.add(Mouse(howBigBallIs(ladderNum,TIME)))iflen(balls)<ballsNum:balls.add(Ball(diff))foreachinballs:#防止误触的保护罩each.timerAdd()balls.update(screen,protectTime(ballNum(ladderNum,TIME)))mouseObject.update(screen)clock.tick(FPS)pygame.display.update()#刷新print('游戏结束')

总结

效果图:

Pygame实现小球躲避实例代码怎么写

如何食用:

把上面4处代码Copy下来在用run.py启动

里面设计的 如何判断;如何重来;… (我觉得我的变量名字已经够清楚了????)

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Pygame实现小球躲避实例代码怎么写的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C#中List用法是什么下一篇:

29 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18