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

项目的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. Molecule – 帮助你构建跨平台的 HTML5 游戏

    Molecule 框架由拥有超过五年手机游戏开发经验的游戏开发者开发.由于移动浏览器与实际的 HTML5 规范的兼容性的改进和内部硬件的自然进化,HTML5 手机游戏真正有可能流行起来. 您可能感兴趣 ...

  2. angularjs封装bootstrap官网的时间插件datetimepicker

    背景:angular与jquery类库的协作 第三方类库中,不得不提的是大名鼎鼎的jquery,现在基本上已经是国内web开发的必修工具了.它灵活的dom操作,让很多web开发人员欲罢不能.再加上已经 ...

  3. Eclipse 寻找迷失的ID

    这一篇会介绍用一种蠢的办法找拓展点常量ID. 1.打开IDE,之后什么都不干,直接关闭IDE,将当前工作区间(workspace)上的文件.metadata\.plugins\org.eclipse. ...

  4. VS无法启动 IISExpress web 服务器

    VS无法启动 IISExpress web 服务器     今天把原来的VS卸载重装了,重装之后启动一个web项目时发现启动不起来,提示如下:     在网上查找资料之后发现是由于WebMatrix也 ...

  5. UITableView中的cell的优化

    1.cell的重用 所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据I ...

  6. 浏览器判断是否安装APP

    浏览器判断是否安装APP http://blog.csdn.net/henrywulibin/article/details/52087041 从浏览器中打开我们的应用 http://blog.csd ...

  7. yii create url (一)

    1.$this->redirect这里的$this是当前的controller.可能是应用程序的也 可能是模块下的 这里仅将解一下第一个参能是url,当url是一个字符串时,它会自己动跳转 如$ ...

  8. Android-Using DDMS

    原文:http://developer.android.com/tools/debugging/ddms.html#how-ddms-works Android提供了一个debug工具叫做:DDMS, ...

  9. 操作系统开发系列—13.c.进程之中断重入

    现在又出现了另外一个的问题,在中断处理过程中是否应该允许下一个中断发生? 让我们修改一下代码,以便让系统可以在时钟中断的处理过程中接受下一个时钟中断.这听起来不是个很好的主意,但是可以借此来做个试验. ...

  10. Android 样式和主题(style & theme)

    Android 样式 android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view控件属性的集合.如:需要定义字体的颜色和大小. 在CSS中是这样定义的 ...