基于PyGame的乒乓球和滑雪游戏
昝道广
概述
前言
乒乓球游戏规则
乒乓球游戏图形界面
乒乓球游戏部分代码
滑雪小游戏图形界面
滑雪小游戏规则
滑雪小游戏部分代码
技术分析
后记
前言
首先阿广确实有点皮了,近期公众号上商业互吹和广告比例偏高,以后会注意广告篇幅和文章质量,请多多谅解。前天由于我竞选了我们学校的十大优秀学生,所以我使用公众号进行了拉票。导致期间个别粉丝给我发消息,谈道“取关取关!”,当我想挽留一下的时候,却出现了红色叹号,令我久久不能忘怀...他一定是这样认为:”作为一个分享知识、传播知识的平台,就应该秉着利他的基本原则,每天都发知识干货“。
说实在的,我无法做到完全每天都发干货,因为我需要生存,需要生活。但是我会做到以“分享知识、传播正能量“为主线,其他为辅线。令言之,不接广告的知识平台,不会做得长久,因为广告和你们的阅读和支持才是我们办下去的动力。毫不夸张地说,我写一篇原创需要前期的大量阅读学习、代码调试和实现,使用幽默的语言讲出来还需要至少若干个小时的时间。希望大家能够谅解每个人的处境,今天我需要大家的帮忙,大家为我帮忙;明天您们有亟需解决的问题,也可以向阿广求助,定倾囊相助。对于我来说,十大优秀学生称号没有任何实际性的意义,或言之是为了我们济南校区的荣誉而战,所以我会拼命而为。在此非常感谢给我拉票和点赞的朋友们,非常感谢你们的持续支持和关注!
下面是乒乓球小游戏和滑雪小游戏,很好玩,希望大家通过此代码理解pygame库的使用,为开发其他游戏打好基础。
乒乓球游戏规则
使用鼠标模拟球拍,接住来回反弹、速度不定的球,如果球碰到屏幕的顶端,则玩家得一分;反之,如果球掉下屏幕得底部,则玩家少一条命。
玩家一共三条命,如果全部用完则游戏结束,并显示分数。
乒乓球游戏图形界面
游戏界面
游戏结束界面
乒乓球部分代码
滑雪小游戏规则
滑雪小游戏图形界面
滑雪小游戏部分代码
import pygame, sys, random
skier_images = ["./bg_img/skier_down.png", "./bg_img/skier_right1.png", "./bg_img/skier_right2.png",
"./bg_img/skier_left2.png", "./bg_img/skier_left1.png"]
class SkierClass(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("./bg_img/skier_down.png")
self.rect = self.image.get_rect()
self.rect.center = [320, 100]
self.angle = 0
def turn(self, direction):
self.angle = self.angle + direction
if self.angle < -2: self.angle = -2
if self.angle > 2: self.angle = 2
center = self.rect.center
self.image = pygame.image.load(skier_images[self.angle])
self.rect = self.image.get_rect()
self.rect.center = center
speed = [self.angle, 6 - abs(self.angle) * 2]
return speed
def move(self, speed):
self.rect.centerx = self.rect.centerx + speed[0]
if self.rect.centerx < 20: self.rect.centerx = 20
if self.rect.centerx > 620: self.rect.centerx = 620
class ObstacleClass(pygame.sprite.Sprite):
def __init__(self, image_file, location, type):
pygame.sprite.Sprite.__init__(self)
self.image_file = image_file
self.image = pygame.image.load(image_file)
self.location = location
self.rect = self.image.get_rect()
self.rect.center = location
self.type = type
self.passed = False
def scroll(self, terrainPos):
self.rect.centery = self.location[1] - terrainPos
def create_map(start, end):
obstacles = pygame.sprite.Group()
locations = []
gates = pygame.sprite.Group()
for i in range(10):
row = random.randint(start, end)
col = random.randint(0, 9)
location = [col * 64 + 20, row * 64 + 20]
if not (location in locations):
locations.append(location)
type = random.choice(["tree", "flag"])
if type == "tree": img = "./bg_img/skier_tree.png"
elif type == "flag": img = "./bg_img/skier_flag.png"
obstacle = ObstacleClass(img, location, type)
obstacles.add(obstacle)
return obstacles
def animate():
screen.fill([255, 255, 255])
pygame.display.update(obstacles.draw(screen))
screen.blit(skier.image, skier.rect)
screen.blit(score_text, [10, 10])
pygame.display.flip()
def updateObstacleGroup(map0, map1):
obstacles = pygame.sprite.Group()
for ob in map0: obstacles.add(ob)
for ob in map1: obstacles.add(ob)
return obstacles
由于篇幅原因,两款游戏只展示部分代码,详情请查看源码请自行去github,或者点击文末的阅读原文获取源码。
https://github.com/zandaoguang/pygame_pingpang_skier
技术分析
PyGame库:
PyGame是被设计用来写游戏的python模块集合,PyGame是在优秀的SDL库之上开发的功能性包。使用python可以导入PyGame来开发具有全部特性的游戏和多媒体软件,PyGame是极度轻便的并且可以运行在几乎所有的平台和操作系统上。PyGame包已经被下载过成千上万次,并且也被访问过成千上万次。
后记
鸟大了,什么林子都飞。吐槽今天遇到的一个黑粉。为了提升微信群的内容质量,我将微信群名字前面加上了【禁非合作推文】,结果...
结果退群之后还祝我新年快乐...What!?
视学算法读者发表了自己的意见,在此谢谢各位合作伙伴和读者的支持。
对于今天给大家带来的小游戏,大家可以进一步的进行思考。从小时候抱着手机电脑打游戏,到现在能开发出简单的小游戏,是一种进步,更是一种责任。从牙牙学语时的天真无邪,到走向社会的我无尔诈,尔无我虞,岂是后知后觉的成长,亦是矢志不渝的考量。所写的每一行代码都代表着自己不求回报的执着,都代表着咬定青山不放松的大无畏精神,代表着为了成为人上人的壮志凌云。
现在大部分人都活在“道理我都懂,但是我做不到”的千千世界里,但是我希望我们都能够在若干年之后,能够以”初听不识曲中意,再听已是曲中人“的心态,语重心长的向朋友”吹捧”着自己的当年做的那些事,讲解着属于自己的故事!