python基础之--人机大战,编程思维

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)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值