目录
前言
我发布博客仅仅是为了提升自己的学习能力,同时这样有效的记录很多东西,萌新勿喷
pygame安装
我是直接在pycharm上面安装的,因为别的我也不太会弄,别的不说了,直接上图:
打开pycharm,选择新建
找到设置选项
找到 项目:python中的python解释器,选择小加号
输入pygame点击安装包
然后就安装好了,只要用这个python解释器就行,我这个是中文的python,如果有人是英文的可以先用翻译软件翻译或者汉化,当然我觉得既然用英文的python应该英文就不错
制作游戏尝试
咳咳,虽然我还没做好,但是也是在努力制作的过程中,有好多东西都还不会弄,所以用了最浪费资源的做法,总之我也会持续更改这的。
先给你们看一下大概效果:
做游戏首先需要做一个窗口:
import pygame
import sys
if __name__ == '__main__':
# 检查python,如果不写后面在弄字体音频之类的可能会出现错误
pygame.init()
while True:
# 制作一个窗口
screen = pygame.display.set_mode((1024, 512), 0, 32)
pygame.display.flip() # 更新全部显示
然后需要设置如何关闭它,我这里弄了一个函数,把这个函数加到while循环里:
def Exit(): # 自定义的关闭函数
for event in pygame.event.get(): # 用for循环遍历一遍所有的事件
if event.type == pygame.QUIT: # 如果有事件的类型和关闭相同
sys.exit() # 那么关闭文件
有了窗口和关闭函数,还需要一张背景图片,在根目录放置背景图片,这个也要放到循环里面:
# 添加一张图片作为背景图
background = pygame.image.load('背景.png')
background_box = background.get_rect() # 获取图片的矩形框
screen.blit(background, background_box) # 打印背景图片到窗口
还需要一个会跑的人物,我这里弄了一个在网上搜的蜡笔小新,然后又稍微p了一下图:
蜡笔小新_box = 蜡笔小新.get_rect()
screen.blit(蜡笔小新, speed1) # 打印会跑的小新
上面我还没有添加小新的图片,把上面这段代码放到while循环的pygame.display.flip()上面
在站里不动时小新的图片:
def Stand():
global 蜡笔小新
if str[pygame.K_RIGHT] == 0 and str[pygame.K_d] == 0 and str[pygame.K_LEFT] == 0 and str[pygame.K_a] == 0:
蜡笔小新 = pygame.image.load('蜡笔小新\stand\图层 1.png')
向左跑动的图片即效果:
def Left():
global 蜡笔小新
global i
if str[pygame.K_a] != 0 or str[pygame.K_LEFT] != 0:
if i == 0:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 1.png')
elif i == 1:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 2.png')
elif i == 2:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 3.png')
elif i == 3:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 4.png')
elif i == 4:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 5.png')
elif i == 5:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 6.png')
elif i == 6:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 7.png')
elif i == 7:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 8.png')
i = 0
pygame.time.wait(90)
speed1[0] -= 20
i += 1
global 蜡笔小新_type
蜡笔小新_type = 'left'
在用上面这段函数之前,要把:
# 检测键盘按键
str = pygame.key.get_pressed()
这段代码放在while循环里面
还有向右跑动,实际上只改了少许参数:
# 向右移动
def Right():
global 蜡笔小新
global i
if str[pygame.K_d] != 0 or str[pygame.K_RIGHT] != 0:
if i == 0:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 1.png')
elif i == 1:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 2.png')
elif i == 2:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 3.png')
elif i == 3:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 4.png')
elif i == 4:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 5.png')
elif i == 5:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 6.png')
elif i == 6:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 7.png')
elif i == 7:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 8.png')
i = 0 # 图片的序号
pygame.time.wait(90) # 暂停90毫秒
speed1[0] += 20 # x轴移动20像素
i += 1 # 循环播放图片的序号
global 蜡笔小新_type # 小新的类型,在跳跃的时候使用
蜡笔小新_type = 'right'
还有跳跃时的函数:
def Up(蜡笔小新_type):
global 蜡笔小新
global j
# 当按下上建的时候
if str[pygame.K_w] != 0 or str[pygame.K_UP] != 0:
# 判断y轴坐标是否小于50
if speed1[1] <= 0:
# 小于50的话给j赋予一个1314这只是一个标志,让后面知道下落
j = 1314
# 向左跳的图片
if 蜡笔小新_type == 'left':
蜡笔小新 = pygame.image.load('蜡笔小新\Stand_Up\图层 1.png')
Up_1(j)
# 向右跳的图片
elif 蜡笔小新_type == 'right':
蜡笔小新 = pygame.image.load('蜡笔小新\Stand_Up\图层 2.png')
Up_1(j)
# 判断如果左右都没有按的话的图片
else:
蜡笔小新 = pygame.image.load('蜡笔小新\Stand\图层 1.png')
Up_1(j)
# 在按完上建以后标准下落
elif speed1[1] < 200:
speed1[1] += 10
pygame.time.wait(10)
# 判断如果在200的值上也就是掉地上了,那么就不下落了
if speed1[1] >= 200:
j = 0
上面这段函数里面还包含一个函数,那是一段用来跳跃的函数:
def Up_1(j):
if speed1[1] >= 200:
j = 0
# 判断j如果不等于1314,那就减y轴坐标,相当于跳起来
if j != 1314:
speed1[1] -= 50
# 同时要暂停5毫秒,毕竟程序是有速度的,不能一下子加那么多
pygame.time.wait(5)
# 如果等于1314,那就加y轴,相当于下落的时候
else:
speed1[1] += 10
pygame.time.wait(10)
# 在这个小循环里面判断y轴是否大于等于200,相当于落地的时候,如果是则给j赋予一个不是1314的值即可
大概就写这些,里面有很多BUG
下面是源码:
import pygame
import sys
def Exit(): # 自定义的关闭函数
for event in pygame.event.get(): # 用for循环遍历一遍所有的事件
if event.type == pygame.QUIT: # 如果有事件的类型和关闭相同
sys.exit() # 那么关闭文件
# 向右移动
def Right():
global 蜡笔小新
global i
if str[pygame.K_d] != 0 or str[pygame.K_RIGHT] != 0:
if i == 0:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 1.png')
elif i == 1:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 2.png')
elif i == 2:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 3.png')
elif i == 3:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 4.png')
elif i == 4:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 5.png')
elif i == 5:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 6.png')
elif i == 6:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 7.png')
elif i == 7:
蜡笔小新 = pygame.image.load('蜡笔小新\Right\图层 8.png')
i = 0 # 图片的序号
pygame.time.wait(90) # 暂停90毫秒
speed1[0] += 20 # x轴移动20像素
i += 1 # 循环播放图片的序号
global 蜡笔小新_type # 小新的类型,在跳跃的时候使用
蜡笔小新_type = 'right'
# 向左移动
def Left():
global 蜡笔小新
global i
if str[pygame.K_a] != 0 or str[pygame.K_LEFT] != 0:
if i == 0:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 1.png')
elif i == 1:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 2.png')
elif i == 2:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 3.png')
elif i == 3:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 4.png')
elif i == 4:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 5.png')
elif i == 5:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 6.png')
elif i == 6:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 7.png')
elif i == 7:
蜡笔小新 = pygame.image.load('蜡笔小新\Left\图层 8.png')
i = 0
pygame.time.wait(90)
speed1[0] -= 20
i += 1
global 蜡笔小新_type
蜡笔小新_type = 'left'
# 跳跃时
def Up(蜡笔小新_type):
global 蜡笔小新
global j
# 当按下上建的时候
if str[pygame.K_w] != 0 or str[pygame.K_UP] != 0:
# 判断y轴坐标是否小于50
if speed1[1] <= 0:
# 小于50的话给j赋予一个1314这只是一个标志,让后面知道下落
j = 1314
# 向左跳的图片
if 蜡笔小新_type == 'left':
蜡笔小新 = pygame.image.load('蜡笔小新\Stand_Up\图层 1.png')
Up_1(j)
# 向右跳的图片
elif 蜡笔小新_type == 'right':
蜡笔小新 = pygame.image.load('蜡笔小新\Stand_Up\图层 2.png')
Up_1(j)
# 判断如果左右都没有按的话的图片
else:
蜡笔小新 = pygame.image.load('蜡笔小新\Stand\图层 1.png')
Up_1(j)
# 在按完上建以后标准下落
elif speed1[1] < 200:
speed1[1] += 10
pygame.time.wait(10)
# 判断如果在200的值上也就是掉地上了,那么就不下落了
if speed1[1] >= 200:
j = 0
def Up_1(j):
if speed1[1] >= 200:
j = 0
# 判断j如果不等于1314,那就减y轴坐标,相当于跳起来
if j != 1314:
speed1[1] -= 50
# 同时要暂停5毫秒,毕竟程序是有速度的,不能一下子加那么多
pygame.time.wait(5)
# 如果等于1314,那就加y轴,相当于下落的时候
else:
speed1[1] += 10
pygame.time.wait(10)
# 在这个小循环里面判断y轴是否大于等于200,相当于落地的时候,如果是则给j赋予一个不是1314的值即可
# 站立不动时
def Stand():
global 蜡笔小新
if str[pygame.K_RIGHT] == 0 and str[pygame.K_d] == 0 and str[pygame.K_LEFT] == 0 and str[pygame.K_a] == 0:
蜡笔小新 = pygame.image.load('蜡笔小新\stand\图层 1.png')
if __name__ == '__main__':
# 检查python,如果不写后面在弄字体音频之类的可能会出现错误
pygame.init()
# 想要窗口一直出现需要一个无限循环
speed1 = [0, 200]
# speed = 5
i = 0
# n = 0
蜡笔小新_type = '' # 判断当前图片朝左还是朝右
while True:
# 制作一个窗口
screen = pygame.display.set_mode((1024, 512), 0, 32)
# 需要程序检测怎么关闭
Exit() # 自定义的关闭函数
# 检测键盘按键
str = pygame.key.get_pressed()
Right() # 向右移动
Left() # 向左移动
Stand() # 站立不动时
Up(蜡笔小新_type) # 跳跃时
# 添加一张图片作为背景图
background = pygame.image.load('背景.png')
background_box = background.get_rect() # 获取图片的矩形框
screen.blit(background, background_box) # 打印背景图片到窗口
蜡笔小新_box = 蜡笔小新.get_rect()
screen.blit(蜡笔小新, speed1) # 打印会跑的小新
pygame.display.flip() # 更新全部显示
后面我还会继续更新,修改bug,尽量做好……
资源下载百度网盘
链接:https://pan.baidu.com/s/1BHT4rLvv6wxuDIiltpnMRQ
提取码:d3lj