找回密码
 会员注册
查看: 23|回复: 0

python实现小游戏——植物大战僵尸(魔改版本)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72125
发表于 2024-9-7 15:32:16 | 显示全部楼层 |阅读模式
制作一款DIY的‘植物大战僵尸’游戏引起了很多人的兴趣。在这里,我将分享一个使用Python语言在PyCharm环境中开发的初始状态版本。这个版本主要应用了pygame库来完成,是一个充满创意和趣味的魔改版本。文章目录前言一、开发环境准备二、代码1.main方法2.敌人角色(示例)2.我方角色(示例)总结前言近期,《植物大战僵尸杂交版》的热度确实高涨,这主要得益于其独特的创意、对经典游戏的致敬与创新,以及玩家社区的积极反馈与传播。《植物大战僵尸杂交版》由B站UP主“潜艇伟伟迷”开发制作,游戏中引入了杂交植物的概念,如豌豆向日葵、火焰花女王等,这些杂交植物结合了多种植物的特性,拥有独特的攻击方式和能力,极大地丰富了游戏的策略性和可玩性。除了杂交植物外,游戏中还加入了多种新奇的僵尸类型,如武装舞王僵尸、冰车巨人等,以及全新的地图设计,为玩家带来更加刺激和挑战性的游戏体验。游戏不仅保留了原版的经典模式,还增加了抽奖盒子无尽模式等Roguelike玩法,以及多种有趣的小游戏和挑战模式,让玩家在重复游玩中也能保持新鲜感。制作一款DIY的‘植物大战僵尸’游戏引起了很多人的兴趣。在这里,我将分享一个使用Python语言在PyCharm环境中开发的初始状态版本。这个版本主要应用了pygame库来完成,是一个充满创意和趣味的魔改版本。在这篇博文我将源代码以及运行程序压缩包:运行程序(解压后可直接运行)一并分享出来,并给出源码链接:源码供免费下载。里面的所有角色图片来自网络资源都来自于网络资源,由本人一张一张裁剪制作而成,制作不易,希望喜欢并使用的小伙伴可以为我点一个star。提示:以下是本篇文章正文内容,下面案例可供参考一、开发环境准备实现上述描述的DIY“植物大战僵尸”游戏,你需要准备以下代码环境:1.Python语言:确保你的计算机上安装了Python。可以从Python的官方网站下载并安装最新版本的Python。2.PyCharmIDE:PyCharm是一个流行的Python集成开发环境(IDE),它提供了代码编辑、调试、测试等功能。你可以从JetBrains的官方网站下载并安装PyCharm。3.pygame库:pygame是一个用于创建游戏的Python库,它提供了图形、声音、事件处理等游戏开发所需的功能。你可以使用pip命令来安装pygame库:pipinstallpygame。二、代码1.main方法代码如下:#-*-codeing=utf-8-*-#@Time:2023/1/1415:59#@Author:小马#@File:plant_vs_zoomie_game_normal_main.py#@SoftwareyCharmimporttimeimportpygameimportrandomimportosfromAdcimportAdcfromshooterimportshootfromApimportApfromtankimporttankfromSunimportSunfromZombieimportZombiefrombadmanminiimportbadmanminifromBulletimportBulletfrombulletshooterimportbulletshooterfromenemyimportenemyfromCarmanimportCarmanfromBossimportBossfrompythonExtendimportpythonExtendpygame.init()#1680*720backgd_size=(1200,600)screen=pygame.display.set_mode(backgd_size)pygame.display.set_caption('保卫花花之家')bg_image_path='material/bg1.1.png'bg_img_obj=pygame.image.load(bg_image_path).convert_alpha()#sunbank_image_path='material/counter2.jpeg'#sunbank_img_obj=pygame.image.load(sunbank_image_path).convert_alpha()sunbankImg=pygame.image.load('material/cardbank.png').convert_alpha()deleteImg=pygame.image.load('material/delete1.png').convert_alpha()delete=pygame.image.load('material/delete.png').convert_alpha()cardadc=pygame.image.load('material/cardadc.png').convert_alpha()cardap=pygame.image.load('material/cardap.png').convert_alpha()cardtank=pygame.image.load('material/cardtank.png').convert_alpha()cardshooter=pygame.image.load('material/cardshooter.png').convert_alpha()apImg=pygame.image.load('material/character3.1.PNG').convert_alpha()tankImg=pygame.image.load('material/character4.1.PNG').convert_alpha()adcImg=pygame.image.load('material/character1.1.1.PNG').convert_alpha()shooterImg=pygame.image.load('material/character2.1.PNG').convert_alpha()text='900'sun_font=pygame.font.SysFont('arial',25)sun_num_surface=sun_font.render(text,True,(0,0,0))#adc=Adc()#ap=Ap()#tank=tank()#shoot=shoot()#zombie=Zombie()#badman=badmanmini()#enemy=enemy()spriteGroup=pygame.sprite.Group()#spriteGroup.add(adc)#spriteGroup.add(ap)#spriteGroup.add(tank)#spriteGroup.add(shoot)#spriteGroup.add(zombie)#spriteGroup.add(badman)#spriteGroup.add(enemy)sunList=pygame.sprite.Group()bulletList=pygame.sprite.Group()enemyList=pygame.sprite.Group()clock=pygame.time.Clock()GEN_SUN_EVENT=pygame.USEREVENT+1pygame.time.set_timer(GEN_SUN_EVENT,1000)GEN_BULLET_EVENT=pygame.USEREVENT+2pygame.time.set_timer(GEN_BULLET_EVENT,3000)GEN_ENERMY_EVENT=pygame.USEREVENT+3pygame.time.set_timer(GEN_ENERMY_EVENT,9000)choose=0#点中太阳花为1点中坚果为2点中射手为3点中ADC为4definit():pygame.mixer.init()s='material/sound'bgm=pygame.mixer.Sound(os.path.join(s,'bgm1.mp3'))start=pygame.mixer.Sound(os.path.join(s,'start1.mp3'))start2=pygame.mixer.Sound(os.path.join(s,'start2.mp3'))bossbgm=pygame.mixer.Sound(os.path.join(s,'boss.mp3'))tank1=pygame.mixer.Sound(os.path.join(s,'tank.mp3'))pygame.mixer.Sound.play(start)pygame.mixer.Sound.play(start2)sounds=[]globaltext,chooseglobalsun_num_surfacerunning=Trueindex=0whilerunning:#sounds.append(bgm)#forsoundinsounds:#pygame.mixer.Sound.play(sound)pygame.mixer.Sound.play(bgm)clock.tick(10)#ifindex%40==0:#s=Sun(ap.rect)#sunList.add(s)#ifindex%40==0:#boss=Boss()#spriteGroup.add(boss)#foriinrange(1,5):#j=random.randint(1,3)#ifj==1:#zombie=Zombie()#badman=badmanmini()#ene=enemy()#spriteGroup.add(zombie)#spriteGroup.add(badman)#spriteGroup.add(ene)#elifj==2:#badman=badmanmini()#e=enemy()##spriteGroup.add(badman)#spriteGroup.add(e)#elifj==3:#en=enemy()#carman=Carman()##spriteGroup.add(en)#spriteGroup.add(carman)#ifindex%80==0:#b=Bullet(adc.rect,backgd_size)#spriteGroup.add(b)#ifindex%30==0:#d=bulletshooter(shoot.rect,backgd_size)#spriteGroup.add(d)forbulletinbulletList:foreneminenemyList:ifpygame.sprite.collide_mask(bullet,enem):bulletList.remove(bullet)enem.blood-=1foriteminspriteGroup:foreneminenemyList:ifisinstance(item,tank)andpygame.sprite.collide_mask(item,enem):enem.blood-=1item.blood-=1screen.blit(bg_img_obj,(0,0))screen.blit(sunbankImg,(320,-12))screen.blit(sun_num_surface,(350,57))screen.blit(cardap,(415,3))screen.blit(cardadc,(491,3))screen.blit(cardshooter,(567,3))screen.blit(cardtank,(643,3))screen.blit(deleteImg,(719,3))spriteGroup.update(index)spriteGroup.draw(screen)sunList.update(index)sunList.draw(screen)bulletList.update(index)bulletList.draw(screen)enemyList.update(index)enemyList.draw(screen)(x,y)=pygame.mouse.get_pos()ifchoose==1:right=apImg.get_rect().rightbottom=apImg.get_rect().bottomscreen.blit(apImg,(x-right/2,y-bottom/2))elifchoose==4:right=apImg.get_rect().rightbottom=apImg.get_rect().bottomscreen.blit(tankImg,(x-right/2,y-bottom/2))elifchoose==2:right=apImg.get_rect().rightbottom=apImg.get_rect().bottomscreen.blit(adcImg,(x-right/2,y-bottom/2))elifchoose==3:right=apImg.get_rect().rightbottom=apImg.get_rect().bottomscreen.blit(shooterImg,(x-right/2,y-bottom/2))elifchoose==5:right=apImg.get_rect().rightbottom=apImg.get_rect().bottomscreen.blit(delete,(x-right/2,y-bottom/2))#screen.blit(adc.images[index%8],adc.rect)#screen.blit(shoot.images[index%31],shoot.rect)#screen.blit(ap.images[index%26],ap.rect)#screen.blit(tank.images[index%31],tank.rect)#forsuninsunList:#screen.blit(sun.images[index%1],sun.rect)index+=1foreventinpygame.event.get():ifevent.type==GEN_SUN_EVENT:forspriteinspriteGroup:ifisinstance(sprite,Ap):now=time.time()ifnow-sprite.lasttime>=5:s=Sun(sprite.rect)sunList.add(s)sprite.lasttime=nowifevent.type==GEN_BULLET_EVENT:forspriteinspriteGroup:ifisinstance(sprite,Adc):now=time.time()ifnow-sprite.lasttime>=5:b=Bullet(sprite.rect,backgd_size)bulletList.add(b)sprite.lasttime=nowelifisinstance(sprite,shoot):bs=bulletshooter(sprite.rect,backgd_size)bulletList.add(bs)ifevent.type==GEN_ENERMY_EVENT:boss=Boss()enemyList.add(boss)foriinrange(1,5):j=random.randint(1,3)ifj==1:zombie=Zombie()badman=badmanmini()ene=enemy()enemyList.add(zombie)enemyList.add(badman)enemyList.add(ene)elifj==2:badman=badmanmini()e=enemy()enemyList.add(badman)enemyList.add(e)elifj==3:en=enemy()carman=Carman()pythonextend=pythonExtend()enemyList.add(en)enemyList.add(carman)enemyList.add(pythonextend)ifevent.type==pygame.QUIT:running=Falseifevent.type==pygame.MOUSEBUTTONDOWN:pressed_point=pygame.mouse.get_pressed()ifpressed_point[0]==1:position=pygame.mouse.get_pos()x,y=positionprint(position)if415=50:choose=1elif491=100:choose=2elif567=100:choose=3elif643=50:choose=4elif7190:self.image=self.images[args[0]%len(self.images)]ifself.rect.left
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-11 01:50 , Processed in 0.521167 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表