视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何用python做游戏
2020-11-27 14:07:43 责编:小采
文档
 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂!

PyGame是一个Python的库,能够让你更容易的写出一个游戏。它提供的功能包括图片处理和声音重放的功能,并且它们能很容易的整合进你的游戏里。去官网点击这里下载适合你的PyGame安装包。

我们就拿打飞机来做个例子(推荐学习:Python视频教程)
1 .创建游戏框架以及游戏背景

 #这个模块放一些常用的工具和基础类和精灵类
 #在其他模块调用
 import pygame
 import random
 #设置游戏屏幕大小 这是一个常量
 SCREEN_RECT = pygame.Rect(0,0,580,700)
 #敌机的定时器事件常量
 CREATE_ENEMY_EVENT = pygame.USEREVENT

 #定制一个精灵类,需要继承pygame提供的精灵类
 #需要定义的属性有:
 #image图片 
 #rect坐标
 #speed速度

 #接下来开始写敌机方面的内容 产生敌机
 #先定义一个事件常量
 CREATE_ENEMY_EVENT = pygame.USEREVENT
 #我们还可以定义一个事件常量(发射子弹)
 HERO_FIRE_EVENT = pygame.USEREVENT + 1

 class GameSprite(pygame.sprite.Sprite):
 def __init__(self,new_image,new_speed=1):
 super().__init__()
 #图片
 self.image = pygame.image.load(new_image)
 #速度
 self.speed = new_speed
 #位置 获取图片的宽和高 get_rect()(0,0,宽,高)
 self.rect = self.image.get_rect()
 #精灵移动的速度 包括英雄精灵 背景精灵 敌机精灵 子弹精灵
 self.speed = new_speed

 def update(self):
 #默认垂直方向移动 y轴控制垂直方向
 self.rect.y += self.speed
 #self.rect.x += 1
 #以上是游戏的基础类,接下来设置背景类
 #明确背景类继承自游戏的精灵类
 class Background(GameSprite):
 def __init__(self,is_alt = False):
 #is_alt判断是否为另一张图像
 #False表示第一张图像
 #Ture表示另外一张图像
 #两张图像交替循环
 #传图片
 super().__init__("/home/zhangyuan/下载/beijing.png")
 if is_alt:
 #如果是第二张图片 初始位置为-self.rect.height
 self.rect.y = -self.rect.height
 #def __init__(self,new_image):
 # super().init__(new_image)
 def update(self):
 #调用父类方法
 super().update()
 if self.rect.y >= SCREEN_RECT.height:
 self.rect.y = -self.rect.height

2 .创建敌机精灵

class Enemy(GameSprite):
 def __init__(self):

 super().__init__("/home/zhangyuan/images/enemy1.png")
 #随机速度
 self.speed = random.randint(10, 15)
 #设置敌机的初始位置
 self.rect.left = SCREEN_RECT.width
 max_ = SCREEN_RECT.height -self.rect.height
 self.rect.bottom = random.randint(0, max_)

def update(self):
 
 panduan = random.randint(0, 1)
 if panduan == 0:
 self.rect.y -= self.speed
 self.rect.x -= self.speed
 else:
 self.rect.y += self.speed
 self.rect.x -= self.speed
 #判断敌机是否飞出屏幕 如果飞出屏幕将敌机从精灵组删除
 if self.rect.y >= SCREEN_RECT.height or self.rect.right <=0 or self.rect.bottom <=0:
 self.kill()

3 .创建英雄精灵

class Bullet(GameSprite):

 def __init__(self):
 super().__init__("/home/zhangyuan/images/bullet1.png",-5)
 def update(self):
 super().update()

 #判断是否超出屏幕 如果是 从精灵组删除
 if self.rect.bottom < 0:
 self.kill()

5 .碰撞检测

#第一个参数和第二个参数是要参与碰撞检测的精灵
#第三个参数为Ture的时候 就是当碰撞的时候被碰撞的精灵从精灵组移除
pygame.sprite.groupcollide( self.enemy_group,self.hero.bullet, True, True)#子弹
#判断列表时候有内容
 if len(enemies)>0:
 #让英雄牺牲
 self.hero.kill()
 #结束游戏
 PlaneGame.__game_over()
@staticmethod
def __game_over():
 print("游戏结束")
 #这是pygame提供的卸载模块功能
 pygame.quit()
 #这是pygame本身提供的退出脚本的功能
 exit()
 #需要先卸载pygame模块 然后退出脚本

 if __name__ == "__main__":
 game = PlaneGame()
 game.star_game()

过程大体就是这样,Pygame还可以做许多游戏,只有专研过后才知道其中的乐趣

更多Python相关技术文章,请访问Python教程栏目进行学习!

下载本文
显示全文
专题