基于PyGame的乒乓球和滑雪小游戏

640?wx_fmt=gif

基于PyGame的乒乓球和滑雪游戏

昝道广

概述

  • 前言

  • 乒乓球游戏规则

  • 乒乓球游戏图形界面

  • 乒乓球游戏部分代码

  • 滑雪小游戏图形界面

  • 滑雪小游戏规则

  • 滑雪小游戏部分代码

  • 技术分析

  • 后记

前言

首先阿广确实有点皮了,近期公众号上商业互吹和广告比例偏高,以后会注意广告篇幅和文章质量,请多多谅解。前天由于我竞选了我们学校的十大优秀学生,所以我使用公众号进行了拉票。导致期间个别粉丝给我发消息,谈道“取关取关!”,当我想挽留一下的时候,却出现了红色叹号,令我久久不能忘怀...他一定是这样认为:”作为一个分享知识、传播知识的平台,就应该秉着利他的基本原则,每天都发知识干货“。

说实在的,我无法做到完全每天都发干货,因为我需要生存,需要生活。但是我会做到以“分享知识、传播正能量“为主线,其他为辅线。令言之,不接广告的知识平台,不会做得长久,因为广告和你们的阅读和支持才是我们办下去的动力。毫不夸张地说,我写一篇原创需要前期的大量阅读学习、代码调试和实现,使用幽默的语言讲出来还需要至少若干个小时的时间。希望大家能够谅解每个人的处境,今天我需要大家的帮忙,大家为我帮忙;明天您们有亟需解决的问题,也可以向阿广求助,定倾囊相助。对于我来说,十大优秀学生称号没有任何实际性的意义,或言之是为了我们济南校区的荣誉而战,所以我会拼命而为。在此非常感谢给我拉票和点赞的朋友们,非常感谢你们的持续支持和关注!

下面是乒乓球小游戏和滑雪小游戏,很好玩,希望大家通过此代码理解pygame库的使用,为开发其他游戏打好基础。

640?wx_fmt=gif

乒乓球游戏规则

  • 使用鼠标模拟球拍,接住来回反弹、速度不定的球,如果球碰到屏幕的顶端,则玩家得一分;反之,如果球掉下屏幕得底部,则玩家少一条命。

  • 玩家一共三条命,如果全部用完则游戏结束,并显示分数。

乒乓球游戏图形界面

640?wx_fmt=png

游戏界面

640?wx_fmt=png

游戏结束界面

乒乓球部分代码

 
 

 
 

滑雪小游戏规则

滑雪小游戏图形界面

640?wx_fmt=png

滑雪小游戏部分代码

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包已经被下载过成千上万次,并且也被访问过成千上万次。

后记

鸟大了,什么林子都飞。吐槽今天遇到的一个黑粉。为了提升微信群的内容质量,我将微信群名字前面加上了【禁非合作推文】,结果...

640?wx_fmt=png

结果退群之后还祝我新年快乐...What!?

640?wx_fmt=png

640?wx_fmt=gif

视学算法读者发表了自己的意见,在此谢谢各位合作伙伴和读者的支持。

640?wx_fmt=png

640?wx_fmt=png

对于今天给大家带来的小游戏,大家可以进一步的进行思考。从小时候抱着手机电脑打游戏,到现在能开发出简单的小游戏,是一种进步,更是一种责任。从牙牙学语时的天真无邪,到走向社会的我无尔诈,尔无我虞,岂是后知后觉的成长,亦是矢志不渝的考量。所写的每一行代码都代表着自己不求回报的执着,都代表着咬定青山不放松的大无畏精神,代表着为了成为人上人的壮志凌云。

现在大部分人都活在“道理我都懂,但是我做不到”的千千世界里,但是我希望我们都能够在若干年之后,能够以”初听不识曲中意,再听已是曲中人“的心态,语重心长的向朋友”吹捧”着自己的当年做的那些事,讲解着属于自己的故事!

推荐阅读

【漫画】以后在有面试官问你AVL树,你就把这篇文章扔给他。

640

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你介绍一个基于Pygame小游戏——贪吃蛇。 首先,你需要安装Pygame库。可以通过pip命令来安装: ``` pip install pygame ``` 接下来,我们开始编写代码: ```python import pygame import random # 初始化pygame pygame.init() # 设置游戏窗口大小和标题 width, height = 640, 480 screen = pygame.display.set_mode((width, height)) pygame.display.set_caption('贪吃蛇') # 定义颜色 black = (0, 0, 0) white = (255, 255, 255) red = (255, 0, 0) # 定义蛇的初始位置、大小和速度 snake_x, snake_y = width / 2, height / 2 snake_size = 10 snake_speed = 5 # 定义蛇的移动方向 snake_direction = 'right' # 定义食物的初始位置和大小 food_x, food_y = random.randint(0, width - snake_size), random.randint(0, height - snake_size) food_size = 10 # 定义计分 score = 0 font = pygame.font.SysFont(None, 25) # 游戏主循环 while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() # 处理键盘事件 if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: snake_direction = 'left' elif event.key == pygame.K_RIGHT: snake_direction = 'right' elif event.key == pygame.K_UP: snake_direction = 'up' elif event.key == pygame.K_DOWN: snake_direction = 'down' # 移动蛇 if snake_direction == 'right': snake_x += snake_speed elif snake_direction == 'left': snake_x -= snake_speed elif snake_direction == 'up': snake_y -= snake_speed elif snake_direction == 'down': snake_y += snake_speed # 判断蛇是否撞墙 if snake_x < 0 or snake_x > width - snake_size or snake_y < 0 or snake_y > height - snake_size: pygame.quit() quit() # 判断蛇是否吃到食物 if snake_x <= food_x < snake_x + snake_size and snake_y <= food_y < snake_y + snake_size: food_x, food_y = random.randint(0, width - snake_size), random.randint(0, height - snake_size) score += 1 # 绘制游戏画面 screen.fill(white) pygame.draw.rect(screen, red, [food_x, food_y, food_size, food_size]) pygame.draw.rect(screen, black, [snake_x, snake_y, snake_size, snake_size]) # 绘制计分 text = font.render('Score: ' + str(score), True, black) screen.blit(text, [0, 0]) # 更新游戏画面 pygame.display.update() ``` 这个贪吃蛇游戏比较简单,主要包括以下几个部分: 1. 初始化pygame,设置游戏窗口大小和标题,定义颜色等。 2. 定义蛇的初始位置、大小和速度,以及食物的初始位置和大小。 3. 在游戏主循环里处理事件,包括处理键盘事件、移动蛇、判断蛇是否撞墙或吃到食物等。 4. 绘制游戏画面,包括绘制食物和蛇,以及绘制计分。 5. 更新游戏画面。 你可以根据自己的需求和兴趣,修改代码并添加更多的游戏元素,例如增加障碍物、增加多个食物、增加多条蛇等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值