闲得无聊,对第一版的东西做了一些修改,让它更像一个游戏,也具有一些可玩性。

项目的github地址:https://github.com/lfkdsk/BrainHole_pygame

1.人物类进行了一些修改,添加了怪物类的生成机制:

 __author__ = 'Administrator'
import pygame Window_width = 1365
Window_height = 768
screen = pygame.display.set_mode((Window_width, Window_height))
first_location = [screen.get_width() / 2, screen.get_height() / 2]
Player_image_up = ['resources/image/up-1.png', 'resources/image/up-2.png', 'resources/image/up-3.png',
'resources/image/up-4.png']
Player_image_down = ['resources/image/down-1.png', 'resources/image/down-2.png', 'resources/image/down-3.png',
'resources/image/down-4.png']
Player_image_left = ['resources/image/left-1.png', 'resources/image/left-2.png', 'resources/image/left-3.png',
'resources/image/left-4.png']
Player_image_right = ['resources/image/right-1.png', 'resources/image/right-2.png', 'resources/image/right-3.png',
'resources/image/right-4.png']
Enemy_image = ["resources/image/zm-1.png", "resources/image/zm-2.png"]
Bullets = [] class Enemy(pygame.sprite.Sprite):
def __init__(self, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("resources/image/zm-2.png")
self.rect = self.image.get_rect()
self.rect.topleft = init_pos
self.speed = 2
self.down_index = 0
self.walk = 0 def move(self):
topleft = self.rect.topleft
if self.walk > 40:
self.walk = 0
self.image = pygame.image.load("resources/image/zm-2.png")
if self.walk == 20:
self.image = pygame.image.load("resources/image/zm-1.png")
self.rect = self.image.get_rect()
self.rect.topleft = topleft
self.walk += 1
self.rect.centerx -= self.speed class Bullet(pygame.sprite.Sprite):
def __init__(self, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('resources/image/bullet.png')
self.rect = self.image.get_rect()
self.rect.midtop = init_pos
self.speed = 10
self.walk = 0 def move(self, button_flag):
if button_flag == 1:
self.rect.centerx -= self.speed
elif button_flag == 0:
self.rect.centerx += self.speed
elif button_flag == 2:
self.rect.centery += self.speed
elif button_flag == 3:
self.rect.centery -= self.speed
# self.rect.centery += self.speed
# screen.blit(self.image,self.rect)
# pygame.display.update() class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('resources/image/down-1.png')
self.rect = self.image.get_rect()
self.rect.center = first_location
self.is_hit = False
self.speed = 15
self.down = 0
self.left = 0
self.right = 0
self.up = 0
# print self.rect.center def turn(self, distance):
center = self.rect.center
if distance == 2:
if self.down > 3:
self.down = 0
self.image = pygame.image.load(Player_image_down[self.down])
self.rect = self.image.get_rect()
self.rect.center = center
self.down += 1
# screen.blit(player.image, player.rect)
elif distance == 0:
if self.left > 3:
self.left = 0
self.image = pygame.image.load(Player_image_left[self.left])
self.rect = self.image.get_rect()
self.rect.center = center
self.left += 1
elif distance == 3:
if self.up > 3:
self.up = 0
self.image = pygame.image.load(Player_image_up[self.up])
self.rect = self.image.get_rect()
self.rect.center = center
self.up += 1
elif distance == 1:
if self.right > 3:
self.right = 0
self.image = pygame.image.load(Player_image_right[self.right])
self.rect = self.image.get_rect()
self.rect.center = center
self.right += 1 def move(self, temper):
temper = int(temper)
if temper == 0:
for temp in range(1, 10):
self.rect.centerx -= 3
print self.rect.centerx, self.rect.centery
if temper == 1:
self.rect.centerx += self.speed
print self.rect.centery
if temper == 2:
self.rect.centery -= self.speed
print self.rect.centerx, self.rect.centery
if temper == 3:
self.rect.centery += self.speed
if 0 > self.rect.centerx or self.rect.centerx > screen.get_width():
self.rect.centerx = -self.rect.centerx
if 0 > self.rect.centery or self.rect.centery > screen.get_height():
self.rect.centery = -self.rect.centery def shoot(self):
bullet = Bullet(self.rect.midtop)
Bullets.append(bullet)
 __author__ = 'Administrator'
import pygame Window_width = 1365
Window_height = 768
screen = pygame.display.set_mode((Window_width, Window_height))
first_location = [screen.get_width() / 2, screen.get_height() / 2]
Player_image_up = ['resources/image/up-1.png', 'resources/image/up-2.png', 'resources/image/up-3.png',
'resources/image/up-4.png']
Player_image_down = ['resources/image/down-1.png', 'resources/image/down-2.png', 'resources/image/down-3.png',
'resources/image/down-4.png']
Player_image_left = ['resources/image/left-1.png', 'resources/image/left-2.png', 'resources/image/left-3.png',
'resources/image/left-4.png']
Player_image_right = ['resources/image/right-1.png', 'resources/image/right-2.png', 'resources/image/right-3.png',
'resources/image/right-4.png']
Enemy_image = ["resources/image/zm-1.png", "resources/image/zm-2.png"]
Bullets = []

首先,初始化了屏幕的大小,并且设置了图片资源。

 class Enemy(pygame.sprite.Sprite):
def __init__(self, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("resources/image/zm-2.png")
self.rect = self.image.get_rect()
self.rect.topleft = init_pos
self.speed = 2
self.down_index = 0
self.walk = 0 def move(self):
topleft = self.rect.topleft
if self.walk > 40:
self.walk = 0
self.image = pygame.image.load("resources/image/zm-2.png")
if self.walk == 20:
self.image = pygame.image.load("resources/image/zm-1.png")
self.rect = self.image.get_rect()
self.rect.topleft = topleft
self.walk += 1
self.rect.centerx -= self.speed

怪物类设置了一个move函数,在初始化里设定了一个walk的值,能让在自增的过程中,不断的切换图片。

就是这样的两张图片。

 class Bullet(pygame.sprite.Sprite):
def __init__(self, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('resources/image/bullet.png')
self.rect = self.image.get_rect()
self.rect.midtop = init_pos
self.speed = 10
self.walk = 0 def move(self, button_flag):
if button_flag == 1:
self.rect.centerx -= self.speed
elif button_flag == 0:
self.rect.centerx += self.speed
elif button_flag == 2:
self.rect.centery += self.speed
elif button_flag == 3:
self.rect.centery -= self.speed

子弹类添加了在不同移动方向上的不同移动方法,可以向左右两个方向发射。

(发射飞剑!)

 class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('resources/image/down-1.png')
self.rect = self.image.get_rect()
self.rect.center = first_location
self.is_hit = False
self.speed = 15
self.down = 0
self.left = 0
self.right = 0
self.up = 0
# print self.rect.center def turn(self, distance):
center = self.rect.center
if distance == 2:
if self.down > 3:
self.down = 0
self.image = pygame.image.load(Player_image_down[self.down])
self.rect = self.image.get_rect()
self.rect.center = center
self.down += 1
# screen.blit(player.image, player.rect)
elif distance == 0:
if self.left > 3:
self.left = 0
self.image = pygame.image.load(Player_image_left[self.left])
self.rect = self.image.get_rect()
self.rect.center = center
self.left += 1
elif distance == 3:
if self.up > 3:
self.up = 0
self.image = pygame.image.load(Player_image_up[self.up])
self.rect = self.image.get_rect()
self.rect.center = center
self.up += 1
elif distance == 1:
if self.right > 3:
self.right = 0
self.image = pygame.image.load(Player_image_right[self.right])
self.rect = self.image.get_rect()
self.rect.center = center
self.right += 1 def move(self, temper):
temper = int(temper)
if temper == 0:
for temp in range(1, 10):
self.rect.centerx -= 3
print self.rect.centerx, self.rect.centery
if temper == 1:
self.rect.centerx += self.speed
print self.rect.centery
if temper == 2:
self.rect.centery -= self.speed
print self.rect.centerx, self.rect.centery
if temper == 3:
self.rect.centery += self.speed
if 0 > self.rect.centerx or self.rect.centerx > screen.get_width():
self.rect.centerx = -self.rect.centerx
if 0 > self.rect.centery or self.rect.centery > screen.get_height():
self.rect.centery = -self.rect.centery def shoot(self):
bullet = Bullet(self.rect.midtop)
Bullets.append(bullet)

修改了turn函数让图片不断切换的,在字符数组里不断的进行切换图片,做出人物(李逍遥)走路的样子。

(利用图片的反复切换)

2.主函数体的修改:

 import random

 __author__ = 'Administrator'

 from pygame.locals import *
from Class import *
from sys import exit background_image_filename = 'resources/image/gamestart.png'
start_image = 'resources/image/bg2.png'
dead_image = 'resources/image/dead.png' Score = 0
x = 0
y = 0
pygame.init()
pygame.mixer.init()
background = pygame.image.load(background_image_filename).convert()
pygame.key.set_repeat(100, 100)
clock = pygame.time.Clock() pygame.mixer.music.load("resources/music/butterflylove.mp3")# 初始化背景音乐
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(-1) button_music = pygame.mixer.Sound("resources/music/bullet.wav")# 初始化发射音乐
button_music.set_volume(10)
# music def Waitkey():
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE: # pressing escape quits
exit()
if event.key == K_RETURN:
return
# font
flag = 0
button_flag = 0
enemies = []
enemies_down = []
enemy_frequency = 0
running = True
while running:
clock.tick(60)    # 强置设定为不超过60帧每秒
if enemy_frequency % 50 == 0:
enemy1_pos = [screen.get_width(), random.randint(0, screen.get_height())]# 在屏幕的右侧随机生成怪物
enemy1 = Enemy(enemy1_pos)
enemies.append(enemy1)                
enemy_frequency += 1
if enemy_frequency >= 100:
enemy_frequency = 0
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == KEYDOWN:
if flag == 0:
if event.key == pygame.K_1:
background = pygame.image.load(start_image).convert()
player = Player()
print screen.get_width()
print screen.get_height()
flag = 1
elif event.key == pygame.K_4:
exit()
elif event.key == pygame.K_RIGHT:            # 分别有不同的移动方向
if flag == 1:
player.turn(1)
player.move(1)
button_flag = 0
# flag == 1
print "buttonflag" and button_flag
elif event.key == pygame.K_LEFT:
if flag == 1:
player.turn(0)
player.move(0)
button_flag = 1
print "buttonflag" and button_flag
elif event.key == pygame.K_UP:
if flag == 1:
player.turn(3)
player.move(2)
button_flag = 3
# flag == 1
elif event.key == pygame.K_DOWN:
if flag == 1:
player.turn(2)
player.move(3)
button_flag = 2
elif event.key == pygame.K_x:
if flag == 1:
player.shoot()
button_music.play()
print("shoot")
screen.blit(background, (x, y))
if flag == 1:
score_font = pygame.font.Font(None, 50)                  # 初始化在左上角的score分数
score_surf = score_font.render("Score: " + str(Score), 1, (0, 0, 0))
screen.blit(score_surf, [10, 10])
screen.blit(player.image, player.rect)
for enemy in enemies:
enemy.move()
screen.blit(enemy.image, enemy.rect)
if enemy.rect.left < 0:
enemies.remove(enemy)
break
if pygame.sprite.collide_circle(enemy, player):
enemies_down.append(enemy)
enemies.remove(enemy)
# player.is_hit = True
Score -= 1                      # 每次人物和怪物碰撞的时候分数就会-1
# Game_Over()
break
for bullet in Bullets:
bullet.move(button_flag)
screen.blit(bullet.image, bullet.rect)
for enemy in enemies:
if pygame.sprite.collide_circle(bullet, enemy):
enemies_down.append(enemy)
enemies.remove(enemy)
Bullets.remove(bullet)
Score += 1                      # 然后只要子弹和怪物碰撞子弹会消失然后怪物消失,分数+1
break
if bullet is not None:
if bullet.rect.bottom < 0 or bullet.rect.centerx > screen.get_width() or bullet.rect.centerx < 0:
Bullets.remove(bullet)
if Score < -10:
background_dead = pygame.image.load(dead_image).convert()    # -10分以下就会播放失败图片然后退出
screen.blit(background_dead, (x, y))
pygame.display.update()
if flag == 0:
pygame.display.update()

(死亡的界面)

注释里写的很详细了哦,这次改完之后会出现可随按键移动的子弹类似飞剑的效果哦!

好了第二篇就是这样,喜欢就点赞吧,=-=!

项目的github地址: https://github.com/lfkdsk/BrainHole_pygame

用pygame学习初级python(二) 15.5.11的更多相关文章

  1. 用pygame学习初级python(一) 15.4.19

    最近有计划要学一下python,主要是要用flask.django一些框架进行后端的学习工作,但是在web应用之前希望进行一些基础的项目进行一些语法的练习,熟悉一下写法, 这个时候我就想先做几个小游戏 ...

  2. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  3. Python学习教程(二)Python 安装和 Pycharm 环境配置

    一.Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它 ...

  4. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  5. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

  6. python爬虫scrapy学习之篇二

    继上篇<python之urllib2简单解析HTML页面>之后学习使用Python比较有名的爬虫scrapy.网上搜到两篇相应的文档,一篇是较早版本的中文文档Scrapy 0.24 文档, ...

  7. python 学习笔记(十二) 文件和序列化

    python 文件读写和序列化学习.## python文件读写`1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ` ...

  8. 深度学习与计算机视觉教程(15) | 视觉模型可视化与可解释性(CV通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  9. 小菜学习设计模式(二)—单例(Singleton)模式

    前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...

随机推荐

  1. C#如何实现一个简单的流程图设计器

    以前看过不少Window Form开发的流程图设计器,支持节点拖放,非常方便即可设计出很美观的流程图,作为一个程序员,对其内部实现原理一直很好奇,感叹有朝一日自己如果可以开发一款类似的软件那是多么让人 ...

  2. 20款美化网站的 jQuery Lightbox 灯箱插件

    jQuery Lightbox 灯箱插件可以让你为您的网站和应用程序展示优雅的图像,视频 和其它内容(使用模式窗口).如果你是一个开发人员,你必须拥有 jQuery 灯箱插件集合,因为有一部分的客户会 ...

  3. CRM 2013 自动发送报表

    Sql Server Report非常强大,导出不同格式的文档,比如work 或者excel都可以委托Reporting先做报表开发然后再在程序中调用生成指定格式的报表推送给用户,CRM也是集成了Re ...

  4. SharePoint 2013 Silverlight中使用Net客户端对象模型

    1.创建Silverlight时,选择Silverlight 4,不要选择版本5,试了很久版本5都调用不了,自己也不知道什么原因,谷歌也没找到答案,后来尝试版本4,可以调用: 至于Host the S ...

  5. OpenGL显示图片

    最近想用C++在windows下实现一个基本的图像查看器功能,目前只想到了使用GDI或OpenGL两种方式.由于实在不想用GDI的API了,就用OpenGL的方式实现了一下基本的显示功能. 用GDAL ...

  6. Python学习01 Hello World

    Python学习之Hello World 准备工作 去官网http://www.python.org/ 下载python的安装包: http://www.python.org/download/ 当前 ...

  7. JAVA Web 实现会话跟踪的技术笔记

    1.HTTP协议无状态:客户端的请求与服务器的响应所发生的一系列行为简单的说是客户发送了请求,服务器就给客户端响应,它们彼此之间都没有记录下来.如: 顾客与自动售货机 普通顾客(非会员)与商场 2.c ...

  8. 终极指南:如何为iOS8应用制作预览视频

    最近一两个月里,苹果的世界里出现了很多新东西,比如屏幕更大的iPhone 6,可穿戴设备Apple Watch,iOS8,以及旨在帮助用户更好的发现应用的App Store改版等等. 说到App St ...

  9. classpath: 和classpath*:的区别

    classpath本质是jvm的根路径,jvm获取资源都是从该根路径下找的,注意这个根路径是个逻辑路径,并不是磁盘路径.比如两个jar包的路径是/a/a.jar和/b/b.jar,但是用classpa ...

  10. 13、系统集成项目经理要阅读的书籍 - IT软件人员书籍系列文章

    系统集成项目经理主要对弱电等项目负责.一般包括计算机网络系统,计算机设备系统,智能楼宇,机房建设等.在软考中,系统集成项目经理放在了中级,这个只能说明系统集成项目经理需要的经验没有高级信息系统项目管理 ...