python前端模块_python小游戏-pygame模块

一、tkinter模块的GUI

基本上使用tkinter来开发GUI应用需要以下5个步骤:

导入tkinter模块中我们需要的东西。

创建一个顶层窗口对象并用它来承载整个GUI应用。

在顶层窗口对象上添加GUI组件。

通过代码将这些GUI组件的功能组织起来。

进入主事件循环(main loop)。

代码:

1 import tkinter

2 import tkinter.messagebox

3

4 def main():

5 flag = True

6 #修改标签上的文字

7 def change_label_text():

8 nonlocal flag

9 flag = not flag

10 color,msg = ('red','hello,world')\

11 if flag else ('blue','Goodbye,world!')

12 label.config(text=msg, fg=color)

13 #确认退出

14 def confirm_to_quit():

15 if tkinter.messagebox.askokcancel('温馨提示','确认要退出吗?'):

16 top.quit()

17

18 #创建顶层窗口

19 top = tkinter.Tk()

20 #设置窗口大小

21 top.geometry('240x160')

22 #设置窗口标题

23 top.title('小游戏')

24 #创建标签对象并添加到顶层窗口

25 label = tkinter.Label(top,text='hello,world!',font = 'Arial -32',fg = 'red')

26 label.pack(expand = 1)

27 #创建一个装按钮的容器

28 panel = tkinter.Frame(top)

29 #创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数

30 button1 = tkinter.Button(panel,text = '修改',command = change_label_text)

31 button1.pack(side = 'left')

32 button2 = tkinter.Button(panel,text = '退出',command = change_label_text)

33 button2.pack(side = 'right')

34 panel.pack(side = 'bottom')

35 #开启主事件循环

36 tkinter.mainloop()

37 #主函数

38 if __name__ == '__main__':

39 main()

二、pygame的游戏窗口

制作游戏窗口

1 import pygame

2 def main():

3 # 初始化导入pygame中的模块

4 pygame.init()

5 #初始化用于显示的窗口并设置窗口尺寸

6 screen = pygame.display.set_mode((800,600))

7 # 设置当前窗口的标题

8 pygame.display.set_caption('大球吃小球')

9 running = True

10 # 开启一个事件 循环处理发生的事件

11 while running:

12 for event in pygame.event.get():

13 if event.type == pygame.QUIT:

14 running = False

15 if __name__ == '__main__':

16 main()

运行效果:

三、往游戏窗口里画一个圆

通过pygame中draw模块的函数在窗口上绘图,可以绘制的图形包括:线条、矩形、多边形、圆、椭圆、圆弧等。需要说明的是,屏幕坐标系是将屏幕左上角设置为坐标原点(0, 0),向右是x轴的正向,向下是y轴的正向,在表示位置或者设置尺寸的时候,我们默认的单位都是像素。所谓像素就是屏幕上的一个点,你可以用浏览图片的软件试着将一张图片放大若干倍,就可以看到这些点。pygame中表示颜色用的是色光三原色表示法,即通过一个元组或列表来指定颜色的RGB值,每个值都在0~255之间,因为是每种原色都用一个8位(bit)的值来表示,三种颜色相当于一共由24位构成,这也就是常说的“24位颜色表示法”。

1 import pygame

2 def main():

3 # 初始化导入pygame中的模块

4 pygame.init()

5 #初始化用于显示的窗口并设置窗口尺寸

6 screen = pygame.display.set_mode((800,600))

7 # 设置当前窗口的标题

8 pygame.display.set_caption('大球吃小球')

9

10 # 设置窗口的背景色

11 screen.fill((242,242,242))

12 # 绘制一个圆,参数分别为:(屏幕,颜色,圆心位置,半径,0表示填充圆)

13 pygame.draw.circle(screen,(255,0,0),(100,100),30,0)

14 # 刷新当前窗口

15 pygame.display.flip()

16 running = True

17 # 开启一个事件 循环处理发生的事件

18 while running:

19 for event in pygame.event.get():

20 if event.type == pygame.QUIT:

21 running = False

22 if __name__ == '__main__':

23 main()

画了一个圆:

四、加载图像

使用pygame中image模块的函数来加载图像,再通过之前获得的窗口对象的blit方法渲染图像。

ball_image = pygame.image.load(“ball.png”)

# 刷新当前窗口

pygame.display.flip()

效果图

五、实现动画效果

要让上面代码中的小球动起来,可以将小球的位置用变量来表示,并在循环中修改小球的位置再刷新整个窗口即可。

import pygame

def main():

# 初始化导入pygame中的模块

pygame.init()

#初始化用于显示的窗口并设置窗口尺寸

screen = pygame.display.set_mode((800,600))

# 设置当前窗口的标题

pygame.display.set_caption('大球吃小球')

# 定义变量来表示小球在屏幕上的位置

x,y = 50,50

running = True

# 开启一个事件 循环处理发生的事件

while running:

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

# 设置窗口的背景色

screen.fill((255, 255, 255))

# 绘制一个圆,参数分别为:(屏幕,颜色,圆心位置,半径,0表示填充圆)

pygame.draw.circle(screen,(255,0,0),(x,y),30,0)

# 刷新当前窗口

pygame.display.flip()

# 每隔50毫秒改变小球的位置

pygame.time.delay(50)

x,y = x+5,y+5

running = True

if __name__ == '__main__':

main()

效果图

六、加入碰撞检测,做成一个大球吃小球小游戏

代码

from enum import Enum,unique

from math import sqrt

from random import randint

import pygame

# unique

class Color(Enum):

"""颜色配置"""

RED = (255,0,0)

GREEN = (0,255,0)

BLUE = (0,0,255)

BLACK = (0,0,0)

WHITE = (255,255,255)

GRAY = (242,242,242)

#随机获取颜色

def random_color():

r = randint(0,255)

g = randint(0,255)

b = randint(0,255)

return (r,g,b)

class Ball(object):

"""球类"""

def __init__(self,x,y,radius,sx,sy,color = Color.RED):

#初始化方法

self.x = x

self.y = y

self.radius = radius

self.sx = sx

self.sy = sy

self.color = color

self.alive = True

def move(self,screen):

"""移动"""

self.x += self.sx

self.y += self.sy

if self.x - self.radius <= 0 or self.x + self.radius >= screen.get_width():

self.sx = -self.sx

if self.y - self.radius <= 0 or self.y + self.radius >= screen.get_width():

self.sy = -self.sy

def eat(self,other):

"""吃其他球"""

if self.alive and other.alive and self != other:

dx,dy = self.x - other.x,self.y-other.y

distance = sqrt(dx**2 + dy ** 2)

if distance other.radius:

other.alive = False

self.radius = self.radius + int(other.radius*0.146)

def draw(self,screen):

"""在窗口上绘制球"""

pygame.draw.circle(screen,self.color,(self.x,self.y),self.radius,0)

def main():

balls = [] # 装球的容器

# 初始化导入pygame中的模块

pygame.init()

#初始化用于显示的窗口并设置窗口尺寸

screen = pygame.display.set_mode((800,600))

# 设置当前窗口的标题

pygame.display.set_caption('大球吃小球')

running = True

# 开启一个事件 循环处理发生的事件

while running:

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

#处理鼠标事件的代码

if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:

x,y = event.pos# 获取鼠标点击的事件

radius = randint(10,100)

sx,sy = randint(-10,10),randint(-10,10)

color = Color.random_color()

# 在鼠标点下的位置创建一个球(大小/速度和颜色随机)

ball = Ball(x,y,radius,sx,sy,color)

# 将球添加到列表容器中

balls.append(ball)

# 设置窗口的背景色

screen.fill((255, 255, 255))

# 取出容器中被吃掉的球,如果没吃掉就绘制,吃掉了就移除

for ball in balls:

if ball.alive:

ball.draw(screen)

else:

balls.remove(ball)

# 刷新当前窗口

pygame.display.flip()

# 每隔50毫秒改变小球的位置

pygame.time.delay(50)

for ball in balls:

ball.move(screen)

#检查有没有吃到其它的球

for other in balls:

ball.eat(other)

if __name__ == '__main__':

main()

最终效果图:

作者:侠客小飞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值