iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Pygame如何实现反弹球小游戏
  • 641
分享到

Pygame如何实现反弹球小游戏

2023-06-29 18:06:18 641人浏览 安东尼
摘要

这篇文章主要为大家展示了“Pygame如何实现反弹球小游戏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Pygame如何实现反弹球小游戏”这篇文章吧。一、准备中1)游戏规则比平常的乒乓球????

这篇文章主要为大家展示了“Pygame如何实现反弹球小游戏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Pygame如何实现反弹球小游戏”这篇文章吧。

    一、准备中

    1)游戏规则

    比平常的乒乓球????更简单,玩家只要接住球打回去即可,谁先获得10球就胜利(可修改)。

    单人操作:方向键上下即可;双人模式:一个是方向键上下没错,还有一个就是WS上下。

    2)素材准备

    Pygame如何实现反弹球小游戏

    3)环境安装

    本文用到的环境:python3PyCharm、Pygame模块部分自带。

    pip install -i https://pypi.douban.com/simple/ +模块名

    Pygame如何实现反弹球小游戏

    二、敲代码

    1)配置文件

    配置文件:背景颜色、界面大小、界面的一些背景音乐等等下面代码很简单都看的懂哈。

    import os '''屏幕长宽'''WIDTH = 500HEIGHT = 500'''游戏素材路径'''CURRPATH = os.getcwd()RESOURCESDIRPATH = os.path.join(CURRPATH, 'resources')AUDiOSDIRPATH = os.path.join(RESOURCESDIRPATH, 'audios')FONTDIRPATH = os.path.join(RESOURCESDIRPATH, 'font')IMAGESDIRPATH = os.path.join(RESOURCESDIRPATH, 'images')BALLPICPATH = os.path.join(IMAGESDIRPATH, 'ball.png')RACKETPICPATH = os.path.join(IMAGESDIRPATH, 'racket.png')FONTPATH = os.path.join(FONTDIRPATH, 'font.TTF')GoALSOUNDPATH = os.path.join(AUDIOSDIRPATH, 'goal.wav')HITSOUNDPATH = os.path.join(AUDIOSDIRPATH, 'hit.wav')BGMPATH = os.path.join(AUDIOSDIRPATH, 'bgm.mp3')'''颜色'''WHITE = (255, 255, 255)

    2)设置球的反弹、移动规则

    class Ball(pygame.sprite.Sprite):    def __init__(self, imgpath, cfg, **kwargs):        pygame.sprite.Sprite.__init__(self)        self.cfg = cfg        self.image = loadImage(imgpath)        self.rect = self.image.get_rect()        self.reset()    '''移动'''    def move(self, ball, racket_left, racket_right, hit_sound, goal_sound):        self.rect.left = self.rect.left + self.speed * self.direction_x        self.rect.top = min(max(self.rect.top + self.speed * self.direction_y, 0), self.cfg.HEIGHT - self.rect.height)        # 撞到球拍        if pygame.sprite.collide_rect(ball, racket_left) or pygame.sprite.collide_rect(ball, racket_right):            self.direction_x, self.direction_y = -self.direction_x, random.choice([1, -1])            self.speed += 1            scores = [0, 0]            hit_sound.play()        # 撞到上侧的墙        elif self.rect.top == 0:            self.direction_y = 1            self.speed += 1            scores = [0, 0]        # 撞到下侧的墙        elif self.rect.top == self.cfg.HEIGHT - self.rect.height:            self.direction_y = -1            self.speed += 1            scores = [0, 0]        # 撞到左边的墙        elif self.rect.left < 0:            self.reset()            racket_left.reset()            racket_right.reset()            scores = [0, 1]            goal_sound.play()        # 撞到右边的墙        elif self.rect.right > self.cfg.WIDTH:            self.reset()            racket_left.reset()            racket_right.reset()            scores = [1, 0]            goal_sound.play()        # 普通情况        else:            scores = [0, 0]        return scores    '''初始化'''    def reset(self):        self.rect.centerx = self.cfg.WIDTH // 2        self.rect.centery = random.randrange(self.rect.height // 2, self.cfg.HEIGHT - self.rect.height // 2)        self.direction_x = random.choice([1, -1])        self.direction_y = random.choice([1, -1])        self.speed = 1    '''绑定到屏幕上'''    def draw(self, screen):        screen.blit(self.image, self.rect)

    3)设置球拍电脑的移动等

    class Racket(pygame.sprite.Sprite):    def __init__(self, imgpath, type_, cfg, **kwargs):        pygame.sprite.Sprite.__init__(self)        self.cfg = cfg        self.type_ = type_        self.image = loadImage(imgpath, False)        self.rect = self.image.get_rect()        self.reset()    '''移动'''    def move(self, direction):        if direction == 'UP':            self.rect.top = max(0, self.rect.top - self.speed)        elif direction == 'DOWN':            self.rect.bottom = min(self.cfg.HEIGHT, self.rect.bottom + self.speed)        else:            raise ValueError('[direction] in Racket.move is %s, expect %s or %s...' % (direction, 'UP', 'DOWN'))    '''电脑自动移动'''    def automove(self, ball):        if ball.rect.centery - 25 > self.rect.centery:            self.move('DOWN')        if ball.rect.centery + 25 < self.rect.centery:            self.move('UP')    '''初始化'''    def reset(self):        # 左/右边的拍        self.rect.centerx = self.cfg.WIDTH - self.rect.width // 2 if self.type_ == 'RIGHT' else self.rect.width // 2        self.rect.centery = self.cfg.HEIGHT // 2        # 速度        self.speed = 5    '''绑定到屏幕上'''    def draw(self, screen):        screen.blit(self.image, self.rect)

    4)设置游戏开始界面

    开始界面分单、双人游戏。

    def startInterface(screen):    clock = pygame.time.Clock()    while True:        screen.fill((41, 36, 33))        button_1 = Button(screen, (150, 175), '1 Player')        button_2 = Button(screen, (150, 275), '2 Player')        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                sys.exit()            if event.type == pygame.MOUSEBUTTONDOWN:                if button_1.collidepoint(pygame.mouse.get_pos()):                    return 1                elif button_2.collidepoint(pygame.mouse.get_pos()):                    return 2        clock.tick(10)        pygame.display.update()

    5)定义游戏结束页面

    谁先胜利达到10个球,结束界面设置。

    def endInterface(screen, score_left, score_right):    clock = pygame.time.Clock()    font1 = pygame.font.Font(cfg.FONTPATH, 30)    font2 = pygame.font.Font(cfg.FONTPATH, 20)    msg = 'Player on left won!' if score_left > score_right else 'Player on right won!'    texts = [font1.render(msg, True, cfg.WHITE),            font2.render('Press ESCAPE to quit.', True, cfg.WHITE),            font2.render('Press ENTER to continue or play again.', True, cfg.WHITE)]    positions = [[120, 200], [155, 270], [80, 300]]    while True:        screen.fill((41, 36, 33))        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                sys.exit()            if event.type == pygame.KEYDOWN:                if event.key == pygame.K_RETURN:                    return                elif event.key == pygame.K_ESCAPE:                    sys.exit()                    pygame.quit()        for text, pos in zip(texts, positions):            screen.blit(text, pos)        clock.tick(10)        pygame.display.update()

    6)运行游戏Demo

    def runDemo(screen):    # 加载游戏素材    hit_sound = pygame.mixer.Sound(cfg.HITSOUNDPATH)    goal_sound = pygame.mixer.Sound(cfg.GOALSOUNDPATH)    pygame.mixer.music.load(cfg.BGMPATH)    pygame.mixer.music.play(-1, 0.0)    font = pygame.font.Font(cfg.FONTPATH, 50)    # 开始界面    game_mode = startInterface(screen)    # 游戏主循环    # --左边球拍(ws控制, 仅双人模式时可控制)    score_left = 0    racket_left = Racket(cfg.RACKETPICPATH, 'LEFT', cfg)    # --右边球拍(↑↓控制)    score_right = 0    racket_right = Racket(cfg.RACKETPICPATH, 'RIGHT', cfg)    # --球    ball = Ball(cfg.BALLPICPATH, cfg)    clock = pygame.time.Clock()    while True:        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                sys.exit(-1)        screen.fill((41, 36, 33))        # 玩家操作        pressed_keys = pygame.key.get_pressed()        if pressed_keys[pygame.K_UP]:            racket_right.move('UP')        elif pressed_keys[pygame.K_DOWN]:            racket_right.move('DOWN')        if game_mode == 2:            if pressed_keys[pygame.K_w]:                racket_left.move('UP')            elif pressed_keys[pygame.K_s]:                racket_left.move('DOWN')        else:            racket_left.automove(ball)        # 球运动        scores = ball.move(ball, racket_left, racket_right, hit_sound, goal_sound)        score_left += scores[0]        score_right += scores[1]        # 显示        # --分隔线        pygame.draw.rect(screen, cfg.WHITE, (247, 0, 6, 500))        # --球        ball.draw(screen)        # --拍        racket_left.draw(screen)        racket_right.draw(screen)        # --得分        screen.blit(font.render(str(score_left), False, cfg.WHITE), (150, 10))        screen.blit(font.render(str(score_right), False, cfg.WHITE), (300, 10))        if score_left == 11 or score_right == 11:            return score_left, score_right        clock.tick(100)        pygame.display.update()

    7)主函数、标题名称等

    '''主函数'''def main():    # 初始化    pygame.init()    pygame.mixer.init()    screen = pygame.display.set_mode((cfg.WIDTH, cfg.HEIGHT))    pygame.display.set_caption('反弹球小游戏')    # 开始游戏    while True:        score_left, score_right = runDemo(screen)        endInterface(screen, score_left, score_right)

    三、效果展示

    嗯哼想着感觉视频不需要,这个很简单界面,就直接截图展示吧~懒.jpg

    游戏开始界面&mdash;&mdash;

    Pygame如何实现反弹球小游戏

    开始游戏&mdash;&mdash;

    Pygame如何实现反弹球小游戏

    以上是“Pygame如何实现反弹球小游戏”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: Pygame如何实现反弹球小游戏

    本文链接: https://www.lsjlt.com/news/326051.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Pygame如何实现反弹球小游戏
      这篇文章主要为大家展示了“Pygame如何实现反弹球小游戏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Pygame如何实现反弹球小游戏”这篇文章吧。一、准备中1)游戏规则比平常的乒乓球更简单,...
      99+
      2023-06-29
    • Pygame实现简易版趣味小游戏之反弹球
      目录导语一、准备中1)游戏规则2)素材准备3)环境安装二、敲代码1)配置文件2)设置球的反弹、移动规则3)设置球拍电脑的移动等4)设置游戏开始界面5)定义游戏结束页面6)运行游戏De...
      99+
      2022-11-13
    • pygame实现弹球游戏流程
      目录一、事件二、复习碰撞精灵三、画出球杆并击打小球一、事件 鼠标事件: pygame.mouse.get_pos():获取鼠标当前点的坐标 pygame.mouse.get_pres...
      99+
      2023-01-17
      Pygame弹球游戏 Pygame弹珠游戏 Python弹球游戏
    • jQuery实现弹弹球小游戏
      本文实例为大家分享了jQuery实现弹弹球小游戏的具体代码,供大家参考,具体内容如下 效果展示: CSS样式: #box { width: 600px; ...
      99+
      2022-11-12
    • java实现弹球小游戏
      GUI实现弹球小游戏,供大家参考,具体内容如下 先看一下游戏效果图。 一个简单的Demo。也比较简单,新手试着做一做完善改进。 源代码 import Com.Style.Fo...
      99+
      2022-11-12
    • pygame实现滑块接小球游戏
      用pygame做一个滑块接小球的游戏,供大家参考,具体内容如下 先上图 游戏很简单也很弱智,主要用到了pygame画圆,画方块,随机数等,可以锻炼基本的鼠标控制,游戏设计思维,简单...
      99+
      2022-11-12
    • html5实现弹跳球小游戏
      这篇文章主要介绍“html5实现弹跳球小游戏”,在日常操作中,相信很多人在html5实现弹跳球小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html5实现弹跳球小游戏”...
      99+
      2022-10-19
    • 用python实现弹球小游戏
      目录一、弹球游戏代码 二、程序结果 总结一、弹球游戏代码  下文是tkinter的应用实例,实现弹球游戏,通过<--和-->件移动平板接球。...
      99+
      2022-11-13
    • python实现简单反弹球游戏
      python简单游戏-反弹球,供大家参考,具体内容如下 tkinter实现,直接贴上代码 from tkinter import* import time import rand...
      99+
      2022-11-12
    • python中的pygame实现接球小游戏
      目录一、介绍模块1、Pygame和sys模块2、random模块二、相关功能1、窗口尺寸改变2、键盘控制挡板3、鼠标控制4、挡板接住小球并得分5、小球未接住小球6、小球移动7、显示分...
      99+
      2022-11-10
    • Python+Pygame实现接小弹珠游戏
      目录游戏介绍效果展示游戏代码项目资源游戏介绍 小学生都不一定会晚的游戏,用挡板接住会反弹的小球,随着次数的增多,速度变快,分数增多。 效果展示 游戏代码 import pygame...
      99+
      2022-12-27
      Python Pygame接弹珠游戏 Python Pygame接弹珠 Python Pygame 游戏 Python 接弹珠
    • 怎么用jQuery实现弹弹球小游戏
      本篇内容介绍了“怎么用jQuery实现弹弹球小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文实例为大家分享了jQuery实现弹弹球小...
      99+
      2023-06-20
    • C++实现简易反弹小球游戏的示例代码
      目录前言一、显示静止的小球二、小球下落三、上下弹跳的小球四、斜着弹跳的小球五、控制小球弹跳的速度六、完整代码前言 我们利用printf 函数实现一个在屏幕上弹跳的小球,如图所示。弹跳...
      99+
      2022-11-13
    • 微信小程序实现弹球游戏
      本文实例为大家分享了微信小程序实现弹球游戏的具体代码,供大家参考,具体内容如下 实验内容: 小球按照随机的角度直线运动,如果碰到四壁则反弹。你们不需要做游戏计时、设置小球及背景颜色等...
      99+
      2022-11-13
    • C++实现简易的弹球小游戏
      本文实例为大家分享了C++实现弹球小游戏的具体代码,供大家参考,具体内容如下 操作说明:键盘A和D键控制左右移动,让球不要落下。 #include <graphics.h&...
      99+
      2022-11-12
    • C语言实现双人反弹球游戏
      本文项目为大家分享C语言实现双人反弹球游戏的具体代码,供大家参考,具体内容如下 一、最终项目描述和效果 项目描述:   实现双人玩的弹跳球游戏 最终效果图如下: 二、基本...
      99+
      2022-11-13
    • Pygame是如何实现扎气球游戏
      这期内容当中小编将会给大家带来有关Pygame是如何实现扎气球游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。正文下面的扎气球小游戏原型就是路边的扎气球的游戏撒,基于Pygame做的!就准备好射的箭、不...
      99+
      2023-06-22
    • C语言实现反弹球消砖块游戏
      本文实例为大家分享了C语言实现反弹球消砖块游戏的具体代码,供大家参考,具体内容如下 1.目标要求: 1.击中上方方块’H’,分数加12.下方控制线没有接到小球...
      99+
      2022-11-13
    • python实现简单反弹球游戏的方法
      这篇文章将为大家详细讲解有关python实现简单反弹球游戏的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下tkinter实现,直接贴上代码from tkinter im...
      99+
      2023-06-14
    • Python+Pygame实现趣味足球游戏
      目录导语一、环境安装 二、代码展示三、效果展示1)加载界面2)开始游戏界面3)开始游戏​4)游戏运行导语 ​足球运动有着“世界第一运动”的美称,还是...
      99+
      2022-11-13
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作