[python] 写个既有趣又可爱的弹球小游戏

14 篇文章 3 订阅
13 篇文章 1 订阅

用python写一个既有趣有可爱的弹球小游戏

这几天闲着无聊,就在家写着游戏玩一玩,发现一个这样有趣的小游戏,我通过pygame把它先做了出来,话不多少先上代码。

首先先导入包,导包是必不可少的一件事

# -*- coding:utf-8 -*-
import pygame,sys
from pygame.locals import *
import random
from random import randint

这里我使用了sys包主要是为了使用sys.exit(0)来控制程序退出,然后导入了random包,接着导入random包中的方法randint,这个随机取整数范围的方法也是必不可少的,在游戏中游戏的随机性是非常重要的,几乎占据了游戏的一大部分趣味性,是游戏开发中的重要组成部分。

接着我们载入所有的pygame包的内容

pygame.init()

并且设置一下屏幕的宽度和高度

SCREEN_SIZE = (640,480)

紧接着创建一个屏幕

screen = pygame.display.set_mode(SCREEN_SIZE,0,32)

这里对的“0”代表着是控制游戏是否全屏,如果把 “0” 改成FULLSCREEN那么游戏就全屏了,超级神奇对不对,我们这里做一个测试,所以改成0就ok。

再创建一个窗口的标题名称为game,此游戏主要是用来测试的

caption = pygame.display.set_caption('game')

在创建时钟锁,来控制游戏延迟

clock = pygame.time.Clock()

游戏填充背景为黑色,并刷新屏幕

screen.fill([0,0,0])
pygame.display.flip()

吧所有该赋初值的变量都赋初值

color=[[255,0,0],
		[0,255,0],
		[0,0,255],
		[255,255,255]
		]
pos_x=0
pos_y=0
vel_x=2
vel_y=1
colorflag=0
i=0

color变量是控制游戏对象的颜色变化的几种状态
pos_x,pos_y 是对象的坐标,游戏中对象必须都要有坐标才能移动
vel_x,vel_y是对象垂直变换的中间变量
colorflag 是控制颜色随机变化的变量
i 是辅助颜色控制的变量

接着游戏原理就是一个死循环whle(true)来控制的

while(true):
	...	

在…出写入代码就可以

现在死循环内写入消息轮播时间

for event in pygame.event.get():
		if event.type == pygame.QUIT:
			sys.exit()

为了检查是否有退出游戏的消息,有的话就调用sys.exit()方法退出程序

接着填充在填充游戏背景为黑色,防止发生颜色错乱

screen.fill([0,0,0])

之前对象的左边是左上角,因为pos_x和pos_y的值都是0,所以是坐上角,可能初学者都有点疑问为什么0,0就是左上角,而不是中间。
因为在计算机图形学中0,0(即x坐标0,y坐标0)都建立在窗口左上角,在计算机图形学表示屏幕框中却没有负数这个概念,这个概念和数学却不同。
如图:
在这里插入图片描述
如上面一张图就可以阐述计算机图形学中的坐标原理,上图可以看出,左上角坐标为x=0和y=0,屏幕中最小的值为0,越往右边移动值就越大,所以屏幕右下角的值是x,y。

在这里我在阐述一下,并不是坐标不能表示负数,表示负数当然是可以,只不过已经超出屏幕可以显示的范围了,屏幕正确的范围是>0且<屏幕的宽。(即你可以看到的内容)

再继续写代码,做完上述代码之后,我们的球就可以动了,但是还有一个最大的核心代码没有写,就是遇到墙反弹回来,这才是游戏的核心。

	if pos_x > 550 or pos_x < 0:
		vel_x = - vel_x
		colorflag=1
	if pos_y > 400 or pos_y < 0:
		vel_y = - vel_y
		colorflag=1

上面的代码控制vel_x和vel_y来实现遇到墙面就反向的算法控制对象移动轨迹。

最后加一点特效,如果碰到墙面,就让对象改变自己的颜色

	if colorflag:
		i+=1
		if i==3:
			i=0
		colorflag=0

这样添加了游戏的生动性

再接着绘制游戏坐标

	pos = pos_x,pos_y,100,100
	pygame.draw.rect(screen,color[i],pos)

写完上述代码后,游戏变化的特别快,我么得让游戏慢起来,让人的眼睛能够捕捉游戏的美才好,最后添加两行代码:

	clock.tick(200)
	pygame.display.update()

到这里我们游戏就结束了。然后运行游戏,enter起来。
在这里插入图片描述
最后完整的代码如下:

# -*- coding:utf-8 -*-
import pygame,sys
from pygame.locals import *
import random
from random import randint
pygame.init()
SCREEN_SIZE = (640,480)
screen = pygame.display.set_mode(SCREEN_SIZE,0,32) #HWSURFACE | FULLSCREEN
caption = pygame.display.set_caption('game')
clock = pygame.time.Clock()
screen.fill([0,0,0])
pygame.display.flip()
color=[[255,0,0],
		[0,255,0],
		[0,0,255],
		[255,255,255]
		]
pos_x=0
pos_y=0
vel_x=2
vel_y=1
colorflag=0
i=0
while True:
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			sys.exit()
	screen.fill([0,0,0])

	pos_x+=vel_x
	pos_y+=vel_y
	
	if pos_x > 550 or pos_x < 0:
		vel_x = - vel_x
		colorflag=1
	if pos_y > 400 or pos_y < 0:
		vel_y = - vel_y
		colorflag=1

	if colorflag:
		i+=1
		if i==3:
			i=0
		colorflag=0

	pos = pos_x,pos_y,100,100
	pygame.draw.rect(screen,color[i],pos)

	clock.tick(200)
	pygame.display.update()
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值