嗨!我是栗子同学。很久不见甚是思念!我回来啦~

今天给大家写点儿什么呢?!嘿嘿,其实这么久没写代码啦,手都不会打字了,代码都不会敲
了,容我慢慢道来!先来点儿简单的吧(其实是没思路,上次写剩下的一个无敌狙击手的游戏
代码小小的改编了一下下,偷懒了哈,因为不知道写啥了,不要打我.jpg)
等我灵感了就好好给大家写,先练练手哈!有爱的源码,可以评论下下次说不定就写了撒!
今天教大家写一款简单的小游戏:《吃掉一切》让我们马上开始叭👇

本文是基于pygame写的一款界面简单的小游戏哈!
1)环境安装👇 Python3、 Pycharm 、tkinter、Pygame模块部分自带模块就不展示啦。
(如需安装包、激活码等直接 私信我即可安装问题解答都可以的哈~)
- 第三方库的安装:pip install pygame 或者 带镜像源 pip install -i
-
- https://pypi.douban.com/simple/ +模块名
2)素材(图片:食物跟吃东西的人)

感觉食物跟人美少女不是很配来着,哈哈哈,将就一下叭,大家可以更换图片的啦!
- import pygame,os,random
- from pygame.locals import *
- from pygame.sprite import *
- def load_image(name):
- fullname=os.path.join(os.path.join(os.path.split(os.path.abspath(__file__))[0],"filedata"),name)
- image=pygame.image.load(fullname)
- return image
- def load_sound(name):
- fullname=os.path.join(os.path.join(os.path.split(os.path.abspath(__file__))[0],"filedata"),name)
- sound=pygame.mixer.Sound(fullname)
- return sound
- class Tip(Sprite):
- def __init__(self,screen,fontrender,waitticks,pos):
- super(Tip,self).__init__()
- self.screen=screen
- self.image=fontrender
- self.rect=self.image.get_rect()
- self.rates=0
- self.waitticks=waitticks
- self.rect.center=pos
- def update(self):
- self.rates+=1
- if self.rates>=self.waitticks:
- self.kill()
- class Surface:
- def __init__(self,screen):
- self.screen=screen
- self.image=load_image("eatingface.png")
- self.rect=self.image.get_rect()
- self.rect.center=self.screen.get_rect().center
- self.speed=3.7
- self.caneat=20
- self.eat=self.caneat
- self.moveUp=False
- self.moveDown=False
- self.moveLeft=False
- self.moveRight=False
- self.faceatleft=False
- self.punch=0
- def update(self):
- if self.punch==0:
- if self.moveUp and self.rect.top>0:
- self.rect.centery-=self.speed
- if self.moveDown and self.rect.bottom<HEIGHT:
- self.rect.centery+=self.speed
- if self.moveLeft and self.rect.left>0:
- if not self.faceatleft:
- self.faceatleft=True
- self.image=pygame.transform.flip(self.image,True,False)
- self.rect.centerx-=self.speed
- if self.moveRight and self.rect.right<WIDTH:
- if self.faceatleft:
- self.faceatleft=False
- self.image=pygame.transform.flip(self.image,True,False)
- self.rect.centerx+=self.speed
- else:
- self.punched()
- def blit(self):
- self.screen.blit(self.image,self.rect)
- def punched(self):
- self.punch+=1
- if self.punch>60:
- self.punch=0
- def eats(self,num):
- self.eat+=num
- if self.eat>=100:
- self.eat=100
- return "True"
- elif self.eat<=0:
- self.eat=0
- return "False"
- return "None"
- def reset(self):
- self.image=load_image("eatingface.png")
- self.rect=self.image.get_rect()
- self.rect.center=self.screen.get_rect().center
- self.speed=3.7
- self.eat=self.caneat
- self.moveUp=False
- self.moveDown=False
- self.moveLeft=False
- self.moveRight=False
- self.faceatleft=False
- self.punch=0
- class Food(Sprite):
- def __init__(self,screen,surface,tips,gameFont):
- super(Food,self).__init__()
- self.screen=screen
- self.surface=surface
- self.tips=tips
- self.gameFont=gameFont
- self.screenrect=self.screen.get_rect()
- self.image=load_image("eatingfood.png")
- self.rect=self.image.get_rect()
- self.rectat=random.choice(["top","left","right","bottom"])
- self.xspeed=round(random.uniform(1,2),2)
- self.yspeed=round(random.uniform(1,2),2)
- if self.rectat=="top":
- self.rect.center=(random.randint(0,WIDTH),0)
- elif self.rectat=="bottom":
- self.rect.center=(random.randint(0,WIDTH),HEIGHT)
- self.yspeed=-self.yspeed
- elif self.rectat=="left":
- self.rect.center=(0,random.randint(0,HEIGHT))
- elif self.rectat=="right":
- self.xspeed=-self.xspeed
- self.rect.center=(WIDTH,random.randint(0,HEIGHT))
- def update(self):
- global toohungry,isfull
- if self.surface.faceatleft:
- if self.rect.left<self.surface.rect.left<=self.rect.right:
- if self.surface.rect.top<self.rect.top<self.surface.rect.bottom or self.surface.rect.bottom>self.rect.bottom>self.surface.rect.top:
- self.kill()
- if self.surface.eats(2)=="True":
- isfull=True
- return
- else:
- if self.rect.right>self.surface.rect.right>=self.rect.left:
- if self.surface.rect.top<self.rect.top<self.surface.rect.bottom or self.surface.rect.bottom>self.rect.bottom>self.surface.rect.top:
- self.kill()
- if self.surface.eats(2)=="True":
- isfull=True
- return
- if collide_rect(self,self.surface):
- self.surface.punched()
- if self.surface.eats(-1)=="False":
- toohungry=True
- return
- self.tips.add(Tip(self.screen,self.gameFont.render("Dizzy!",True,(255,255,255)),
- 60,self.surface.rect.center))
- self.away()
- self.rect.centerx+=self.xspeed
- self.rect.centery+=self.yspeed
- if self.rect.top>self.screenrect.height or self.rect.bottom<0:
- self.kill()
- elif self.rect.left>self.screenrect.width or self.rect.right<0:
- self.kill()
- def away(self):
- self.xspeed=-self.xspeed
- self.yspeed=-self.yspeed
- WIDTH=700
- HEIGHT=600
- toohungry=False
- isfull=False
- def initmain():
- pygame.init()
- screen=pygame.display.set_mode((WIDTH,HEIGHT))
- pygame.display.set_caption("Eater")
- gameFont=pygame.font.SysFont("宋体",26,True)
- fpstime=pygame.time.Clock()
- surface=Surface(screen)
- foods=Group()
- tips=Group()
- def mainit():
- global toohungry,isfull
- foods.empty()
- tips.empty()
- surface.reset()
- rates=0
- toohungry=False
- isfull=False
- while ((not isfull) and (not toohungry)):
- fpstime.tick(100)
- screen.fill((0,255,0))
- screen.blit(gameFont.render("Full "+str(surface.eat)+"%",True,(0,0,0)),(2,2))
- rates+=1
- if rates%50==0:
- foods.add(Food(screen,surface,tips,gameFont))
- foods.draw(screen)
- foods.update()
- surface.blit()
- surface.update()
- tips.draw(screen)
- tips.update()
- for event in pygame.event.get():
- if event.type==QUIT:
- toohungry=True
- isfull=True
- elif event.type==KEYDOWN:
- if event.key==K_RIGHT:
- surface.moveRight=True
- elif event.key==K_LEFT:
- surface.moveLeft=True
- elif event.key==K_UP:
- surface.moveUp=True
- elif event.key==K_DOWN:
- surface.moveDown=True
- elif event.key==K_SPACE:
- surface.speed=5
- elif event.type==KEYUP:
- if event.key==K_RIGHT:
- surface.moveRight=False
- elif event.key==K_LEFT:
- surface.moveLeft=False
- elif event.key==K_UP:
- surface.moveUp=False
- elif event.key==K_DOWN:
- surface.moveDown=False
- elif event.key==K_SPACE:
- surface.speed=3.5
- pygame.display.flip()
- notbreak=True
- while notbreak:
- screen.fill((0,255,0))
- if toohungry and isfull:
- screen.blit(gameFont.render("Esc To Exit!",True,(128,128,128)),(2,2))
- elif toohungry:
- screen.blit(gameFont.render("Too hungry!",True,(0,0,0)),(2,2))
- elif isfull:
- screen.blit(gameFont.render("Full!",True,(0,0,0)),(2,2))
- screen.blit(gameFont.render("Space To Retry",True,(128,128,128)),(2,32))
- for event in pygame.event.get():
- if event.type==QUIT:
- pygame.quit()
- __import__("sys").exit()
- elif event.type==KEYUP:
- if event.key==K_ESCAPE:
- pygame.quit()
- __import__("sys").exit()
- elif event.key==K_SPACE:
- notbreak=False
- pygame.display.flip()
- mainit()
- mainit()
- if __name__=="__main__":
- initmain()
嗨,效果挺简单滴啦,我就不展示了就一张图,鼠标左键一直移动吃掉掉落的食物即可啦!
你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章哦~
项目1.5 Pygame小游戏:植物大战僵尸游戏真的有“毒”?戒不掉啊~
项目1.6 【Pygame小游戏】斗地主我见多了,BUT 这款开源欢乐斗地主,最让人服气~
项目1.7 【Pygame小游戏】神还原【欢乐无穷的双人坦克大战】小程序游戏,上手开玩~
项目3.1 【Pygame实战】如果你是赛车爱好者:这款新赛车游戏分分钟让你上瘾(超跑又是谁的梦想?)
项目3.2 【Pygame小游戏】炸裂全场、超级炸弹人“爆炸”登场,这是你的童年嘛?
项目1.0 Python—2021 |已有文章汇总 | 持续更新,直接看这篇就够了
(更多内容+源码都在文章汇总哦!!欢迎阅读~)
汇总: Python文章合集 | (入门到实战、游戏、Turtle、案例等)
(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)
