学了一段时间的python,还是需要一些实践环节才能深刻理解,毕竟是个刚入门的小白,就先做点简单的小游戏项目来给自己一些鼓励吧,哈哈哈,不说了,上菜。
- 创建一个背景为蓝色的python窗口
首先利用pycharm创建一个项目文件,命名方式最好取与所做项目相关的,见名知意。
先创建一个空的pygame窗口并设置其背景色(背景色可以自定义,颜色的RGB通过百度获取)
main_color.py
#导入模块sys和pygame
import sys
import pygame
def run_game():
pygame.init()#初始化背景设置
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption('blue shy')
bg_color = (135,206,235)#设置背景色,天青蓝
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:#检测玩家单击游戏窗口关闭按钮
sys.exit()#退出游戏
#每次循环时都重绘屏幕
screen.fill(bg_color)
#让最近绘制的屏幕可见
pygame.display.flip()
run_game()
方法pygame.event.get()是用来检测用户事件,判断用户进行的那些操作。
方法screen.fill() 使用背景色填充屏幕。
代码包含了以下几个过程:
- 模块的导入(我们在下面游戏设置中需要使用的模块,在这里有两个,模块pygame包含开发游戏所需的功能,模块sys用来退出游戏)
- 初始化游戏并创建屏幕对象(设置屏幕属性)
- 开启游戏循环(检测用户操作,更新屏幕)
结果如图所示,窗口的大小可以根据自己的需要自己设定。
如果在后面还有很多功能需要添加,就可以考虑创建一些类,分别存放不同的功能,这样在需要大量功能修改的时候才不会显得杂乱,代码的可读性也更强。在这里因为不需要实现大量的功能,就不用创建单独的类来存放代码。
- 将一个图像放在屏幕中央,并将背景色设置为相同
在屏幕中添加一个图像,创建一个ship类,用来管理图像的设置,看代码。
ship.py
import pygame
class Ship():
def __init__(self, screen):
'''初始化图像并设置其初始位置'''
self.screen = screen
#注:定义方法__init__()。(包含两个形参:self, screen 。方法__init__()接受这些形参的值,并将他们存储在根据这个类创建的实例属性中)
#加载图像并获取图像和屏幕的外接矩形
self.image = pygame.image.load("C:\python项目文件\练习001\images\Bee.bmp")
self.image_rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#在指定位置放置飞船
self.image_rect.centerx = self.screen_rect.centerx
self.image_rect.centery = self.screen_rect.centery
def blitme(self):
'''在指定位置绘制图像'''
self.screen.blit(self.image, self.image_rect)#定义方法blitme(),根据self.image_rect 指定的位置将图像绘制到屏幕上
注:定义方法__init__()。(包含两个形参:self, screen 。方法__init__()接受这些形参的值,并将他们存储在根据这个类创建的实例属性中),__ 是两条下划线,最初只打了一条,找了挺久的错误。
pygame中,原点(0,0)位于屏幕左上角。
如上,通过在ship类的代码设置,图像的基本位置已经设定好了,接下来只需在main_color.py中更新代码就可实现功能。
以下是更新好了的代码文件:更新的位置后面有#***
import sys
import pygame
from ship import Ship#***
def run_game():
pygame.init()
screen = pygame.display.set_mode((400,300))
pygame.display.set_caption('blue shy')
#创建图像
ship = Ship(screen)#***
bg_color = (135,206,235)#设置背景色,天青蓝
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:#检测玩家单击游戏窗口关闭按钮
sys.exit()#退出游戏
#每次循环时都重绘屏幕
screen.fill(bg_color)
ship.blitme() #***
#让最近绘制的屏幕可见
pygame.display.flip()
run_game()
从这两个小的功能实现中,我们使用了很多pygame模块中的方法,直接调用模块内部已经设置好的方法来实现功能,的确提供了不少便利,所以想要自己写一个复杂的游戏时,对各个模块以及各个方法的功能作用的了解是必不可少的,当然,写的多了,也自然就会了。
来看一下效果图:
图像居中,背景色没调,选图的时候如果有背景是透明的应该效果会更好,图片格式要位图(也就是后缀是.bmp)。当然,图片的上下左右移动也可以实现,这里就不一一写出来了,后面更新的博客中会说到,其实写的这些博客也没有技术水平,只是当做个笔记顺带加上一些自己的理解,方便以后查阅,顺带可以加深印象。
独乐乐,不如众乐乐:写是乐,评是乐,看是乐,乐最重要。