开始挑战30天从零开始———>python全栈工程师

Day2:飞机大战小程序

花了点时间Debug总体效果还行,有一点点进步,下一步异常检测

 

 

#飞机大战小游戏
import time
import pygame
from pygame.locals import *
import sys
import random

#玩家类
#属性:显示窗口、位置、图片、子弹列表、移动状态
#方法:显示、移动、开火
class Player():
	def __init__(self,screen):
		self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口
		self.x=150
		self.y=500
		self.img=pygame.image.load(r"C:\Users\************************************************\feiji\hero1.png")
		self.bulletList=[]#子弹列表
		self.moveLeftState=0#0--不移动 1--移动
		self.moveRightState=0
		self.moveUpstate=0
		self.moveDownstate=0


	def display(self):
		self.screen.blit(self.img,(self.x,self.y))
		for b in self.bulletList:   #便利每一个子弹对象,并显示
			b.display()
			b.move()
			if b.y<0:
				#子弹移动到边缘时被清除
				self.bulletList.remove(b)		
	def move(self):
		if self.moveLeftState==1 and self.x>-50:
			self.x-=5
		if self.moveRightState==1 and self.x<250:
			self.x+=5
		if self.moveUpstate==1 and self.y>-50:
			self.y-=5
		if self.moveDownstate==1 and self.y<550:
			self.y+=5


	def fire(self):
		b=PlayerBullet(self.screen,self.x,self.y)
		self.bulletList.append(b)
#玩家子弹类:
#属性:显示窗口、位置、图片
#方法:显示、移动
class PlayerBullet():
	def __init__(self,screen,x,y):
		self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口
		self.x=x+40      #子弹初始位置,需要跟随飞机✈
		self.y=y-20
		self.img=pygame.image.load(r"C:\Users\****************************************\feiji\bullet.png")
		self.bulletList=[]#子弹列表
		self.moveLeftState=0#0--不移动 1--移动
		self.moveRightState=0
	def display(self):
		self.screen.blit(self.img,(self.x,self.y))

	def move(self):
		self.y-=20

#敌机类
#属性:显示窗口、位置、图片、子弹列表、移动状态、被击中次数
#方法:显示、移动、开火
class Enemy():
	def __init__(self,screen):
		self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口
		self.x=0
		self.y=0
		self.img=pygame.image.load(r"C:\Users\**************************\feiji\enemy0.png")
		self.bulletList=[]#子弹列表
		self.moveState=1#0--左移 1--右移

	def display(self):
		self.screen.blit(self.img,(self.x,self.y))
		#显示所有子弹
		for b in self.bulletList:   #便利每一个子弹对象,并显示
			b.display()
			b.move()
			if b.y>=600:
				#子弹移动到边缘时被清除
				self.bulletList.remove(b)


		
	def move(self):
		if self.moveState==1:
			self.x+=5#向右移动5个像素
		elif self.moveState==0:
			self.x-=5#向左移动5个像素
		if self.x<0:
			self.moveState=1
		elif self.x>250:
			self.moveState=0

	def fire(self):#在子弹列表中增加一个子弹对象
		b=EnemyBullet(self.screen,self.x,self.y)
		self.bulletList.append(b)
		

#敌机子弹类
#属性:显示窗口、位置、图片、子弹列表、移动状态、被击中次数
#方法:显示、移动、开火

class EnemyBullet():
	def __init__(self,screen,x,y):
		self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口
		self.x=x+20
		self.y=y+30
		self.img=pygame.image.load(r"C:\Users\************************************************\feiji\bullet2.png")
		self.bulletList=[]#子弹列表
		self.moveLeftState=0#0--不移动 1--移动
		self.moveRightState=0
	def display(self):
		self.screen.blit(self.img,(self.x,self.y))


	def move(self):
		self.y+=20


#键盘监控
def Key_control(player):
	for event in pygame.event.get():
		if event.type==QUIT:
			print("正在退出!")
			sys.exit(0)#强制退出
		elif event.type==KEYDOWN:#键盘键入
			if event.key==K_LEFT:
				print("玩家向左!")
				player.moveLeftState=1
				# player.moveRightState=0
				# # player.x-=10
			if event.key==K_RIGHT:
				# player.x+=10
				print("玩家向右!")
				player.moveRightState=1
				# player.moveLeftState=0
			if event.key==K_UP:
				print("玩家向上!")
				player.moveUpstate=1
			if event.key==K_DOWN:
				print("玩家向下!")
				player.moveDownstate=1
			if event.key==K_SPACE:#捕捉空格键
				print("玩家开火!")
				player.fire()
		elif event.type==KEYUP:#键盘释放
			if event.key==K_LEFT:#释放左键
				print("停止向左...")
				player.moveLeftState=0
			if event.key==K_RIGHT:#释放右键
				print("停止向右...")
				player.moveRightState=0
			if event.key==K_UP:
				print("玩家向上!")
				player.moveUpstate=0
			if event.key==K_DOWN:
				print("玩家向下!")
				player.moveDownstate=0





#main()方法
def main():
	screen=pygame.display.set_mode((300,600))#创建窗口对象
	#获取背景
	background=pygame.image.load(r"C:\Users\**************************************************\feiji\background.png")
	#创建玩家对象,并传入显示窗口
	player=Player(screen)
	#创建敌机对象,并传入显示窗口
	enemy=Enemy(screen)

	#在循环中显示所有对象并刷新
	while 1==1:
		screen.blit(background,(0,0))#显示背景
		player.display()#显示玩家
		enemy.display()#显示敌机
		enemy.move()#敌机移动
		player.move()
		r=random.randint(1,15)
		if r==1:
			enemy.fire()#敌机开火
		Key_control(player)#捕获用户操作
		pygame.display.update()#刷新窗口
		time.sleep(0.05)





#-------------------------------------------------------------------

if __name__=='__main__':
	main()

  

 

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性