python能制作游戏吗_如何用Python制作小游戏
要想用Python制作小游戲,必須要安裝一個(gè)插件Pygame
什么是Pygame
Pygame是跨平臺(tái)Python模塊,專(zhuān)為電子游戲設(shè)計(jì),包含圖像、聲音。建立在SDL基礎(chǔ)上,允許實(shí)時(shí)電子游戲研發(fā)而無(wú)需被低級(jí)語(yǔ)言(如機(jī)器語(yǔ)言和匯編語(yǔ)言)束縛。
怎么安裝Pygame
首先打開(kāi)虛擬機(jī)以及終端在終端輸入如下指令
sudo pip3 install pygame
如果出錯(cuò)請(qǐng)輸入如下指令
sudo apt install python3-pip
然后再執(zhí)行第一條命令
測(cè)試Pygame是否正常運(yùn)行請(qǐng)?jiān)诮K端輸入如下指令
python3 -m pygame.examples.aliens
如何制作小游戲
我們就拿打飛機(jī)來(lái)做個(gè)例子
1 .創(chuàng)建游戲框架以及游戲背景
#這個(gè)模塊放一些常用的工具和基礎(chǔ)類(lèi)和精靈類(lèi)
#在其他模塊調(diào)用
import pygame
import random
#設(shè)置游戲屏幕大小 這是一個(gè)常量
SCREEN_RECT = pygame.Rect(0,0,580,700)
#敵機(jī)的定時(shí)器事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT
#定制一個(gè)精靈類(lèi),需要繼承pygame提供的精靈類(lèi)
#需要定義的屬性有:
#image圖片
#rect坐標(biāo)
#speed速度
#接下來(lái)開(kāi)始寫(xiě)敵機(jī)方面的內(nèi)容 產(chǎn)生敵機(jī)
#先定義一個(gè)事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT
#我們還可以定義一個(gè)事件常量(發(fā)射子彈)
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()
#精靈移動(dòng)的速度 包括英雄精靈 背景精靈 敵機(jī)精靈 子彈精靈
self.speed = new_speed
def update(self):
#默認(rèn)垂直方向移動(dòng) y軸控制垂直方向
self.rect.y += self.speed
#self.rect.x += 1
#以上是游戲的基礎(chǔ)類(lèi),接下來(lái)設(shè)置背景類(lèi)
#明確背景類(lèi)繼承自游戲的精靈類(lèi)
class Background(GameSprite):
def __init__(self,is_alt = False):
#is_alt判斷是否為另一張圖像
#False表示第一張圖像
#Ture表示另外一張圖像
#兩張圖像交替循環(huán)
#傳圖片
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):
#調(diào)用父類(lèi)方法
super().update()
if self.rect.y >= SCREEN_RECT.height:
self.rect.y = -self.rect.height
2 .創(chuàng)建敵機(jī)精靈
class Enemy(GameSprite):
def __init__(self):
super().__init__("/home/zhangyuan/images/enemy1.png")
#隨機(jī)速度
self.speed = random.randint(10, 15)
#設(shè)置敵機(jī)的初始位置
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
#判斷敵機(jī)是否飛出屏幕 如果飛出屏幕將敵機(jī)從精靈組刪除
if self.rect.y >= SCREEN_RECT.height or self.rect.right <=0 or self.rect.bottom <=0:
self.kill()
3 .創(chuàng)建英雄精靈
class Hero(GameSprite):
def __init__(self):
super().__init__("/home/zhangyuan/images/me1.png")
self.rect.centery = SCREEN_RECT.centery+100
self.rect.left = SCREEN_RECT.y
self.move = True
#子彈精靈組
self.bullets_group = pygame.sprite.Group()
def update(self):
#super().update()
if not self.move:
self.rect.x += self.speed
else:
self.rect.y += self.speed
#self.rect.y += self.speed
#飛機(jī)飛出屏幕
if self.rect.bottom <= 0:
self.rect.y = self.rect.bottom+SCREEN_RECT.height
elif self.rect.y >= SCREEN_RECT.height:
self.rect.y = -self.rect.height
if self.rect.right <= 0:
self.rect.x = self.rect.right+SCREEN_RECT.width
elif self.rect.x >= SCREEN_RECT.width:
self.rect.x = -self.rect.width
def fire(self):
for i in (1,2,3):
#創(chuàng)建子彈精靈
bullet1 = Bullet()
bullet2 = Bullet()
bullet3 = Bullet()
#設(shè)置子彈精靈的位置
bullet1.rect.left = (self.rect.x+120)+i*20
bullet1.rect.centery = self.rect.centery
bullet2.rect.left = (self.rect.x+70)+i*20
bullet2.rect.centery = self.rect.centery+32
bullet3.rect.left = (self.rect.x+70)+i*20
bullet3.rect.centery = self.rect.centery-32
#將子彈精靈添加到精靈組
self.bullets_group.add(bullet1,bullet2,bullet3)
4 .創(chuàng)建子彈精靈
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 .碰撞檢測(cè)
#第一個(gè)參數(shù)和第二個(gè)參數(shù)是要參與碰撞檢測(cè)的精靈
#第三個(gè)參數(shù)為T(mén)ure的時(shí)候 就是當(dāng)碰撞的時(shí)候被碰撞的精靈從精靈組移除
pygame.sprite.groupcollide( self.enemy_group,self.hero.bullet, True, True)#子彈
#判斷列表時(shí)候有內(nèi)容
if len(enemies)>0:
#讓英雄犧牲
self.hero.kill()
#結(jié)束游戲
PlaneGame.__game_over()
@staticmethod
def __game_over():
print("游戲結(jié)束")
#這是pygame提供的卸載模塊功能
pygame.quit()
#這是pygame本身提供的退出腳本的功能
exit()
#需要先卸載pygame模塊 然后退出腳本
if __name__ == "__main__":
game = PlaneGame()
game.star_game()
6 .如果還想添加音樂(lè)只需要三行代碼
pygame.mixer.init()
pygame.mixer.music.load('/home/share/無(wú)敵.mp3')
pygame.mixer.music.play()
過(guò)程大體就是這樣,Pygame還可以做許多游戲,只有專(zhuān)研過(guò)后才知道其中的樂(lè)趣
美女吸睛
總結(jié)
以上是生活随笔為你收集整理的python能制作游戏吗_如何用Python制作小游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 不再颓废,重新开始,牛客第一题1016.
- 下一篇: 基于python实现resnet_【深度