import pygame import time #循环里面要sleep一下,不然一会儿就将内存占满了 from pygame.locals import * #检测键盘 import random import sys #退出系统 #动态的项目,先截个静态图来分析:化动为静,化难为易,一个西瓜切成块,再拼接起来 #拿到一个大项目,首先把项目的各个元素分成一个个的对象,确定对象具备的属性,方法,然后再组装成为一个项目 #玩家类: #属性:显示窗口、位置、图片、子弹列表、移动状态 #方法:显示、移动、开火,凡是动作类都搞成方法 class player(): def __init__(self,screen): self.screen=screen#将一个窗口对象作为了属性值 self.x=150 self.y=500 self.img =pygame.image.load("飞机\\hero.gif") self.bullet_list=[] self.ifmoveright=0#0表示不移动,1表示移动 self.ifmoveleft=0 def display(self): self.screen.blit(self.img,(self.x,self.y)) print() for f in self.bullet_list: f.move() f.display() if f.y<=0: self.bullet_list.remove(f) def move(self): if self.ifmoveleft==1 and self.x>=-30: self.x-=20 if self.ifmoveright==1 and self.x<=270: self.x+=20 def fire(self): d=playerzd(self.screen,self.x,self.y) self.bullet_list.append(d) class playerzd(): def __init__(self,screen,x,y): self.screen=screen self.x=x self.y=y self.img=pygame.image.load("飞机\\bullet.png") def display(self): self.screen.blit(self.img,(self.x,self.y)) def move(self): self.y-=20 class diji(): def __init__(self,screen): self.screen=screen#将一个窗口对象作为了属性值 self.x=0 self.y=0 self.img =pygame.image.load("飞机\\enemy1.png") self.bullet_list=[] self.dijimove=0#0表示左移动,1表示右移动 def display(self): self.screen.blit(self.img,(self.x,self.y)) for b in self.bullet_list: b.move() b.display() if b.y>=600: self.bullet_list.remove(b) def move(self): if self.x<=0: self.dijimove=1 if self.x>280: self.dijimove=0 if self.dijimove==1: self.x+=10 if self.dijimove==0: self.x-=10 def fire(self): dijizd1=dijizd(self.screen,self.x,self.y) self.bullet_list.append(dijizd1) class dijizd(): def __init__(self,screen,x,y): self.screen=screen#将一个窗口对象作为了属性值 self.x=x self.y=y self.img=pygame.image.load("飞机\\bullet-1.gif") def display(self): self.screen.blit(self.img,(self.x,self.y)) def move(self): self.y+=20 #玩家子弹类 #键盘监控 def jpinput(player): for event in pygame.event.get(): if event.type==QUIT: print("正在退出") sys.exit(0)#强制退出 if event.type==KEYDOWN: if event.key==K_RIGHT: print("正在右移动") player.ifmoveright=1 if event.key==K_LEFT: print("正在左移动") player.ifmoveleft=1 if event.key==K_SPACE: print("玩家开火") player.fire() if event.type==KEYUP: if event.key==K_RIGHT: player.ifmoveright=0 if event.key==K_LEFT: player.ifmoveleft=0 class main(): screen=pygame.display.set_mode((300,600)) backimg = pygame.image.load("飞机\\background.png") a = player(screen) b = diji(screen) while 1==1: screen.blit(backimg,(0,0)) b.move() c=random.randint(1,5) if c==1: b.fire() b.display() jpinput(a) a.move() a.display() pygame.display.update() time.sleep(0.5)
文章来源地址https://www.toymoban.com/news/detail-467930.html
文章来源:https://www.toymoban.com/news/detail-467930.html
到了这里,关于python基础之--人机大战,编程思维的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!