返回顶部
首页 > 资讯 > 精选 >Pygame实现小球躲避实例代码怎么写
  • 369
分享到

Pygame实现小球躲避实例代码怎么写

2023-06-22 04:06:26 369人浏览 安东尼
摘要

Pygame实现小球躲避实例代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言:这学期的python课,要写代码是真的多…课程实验一是一个五子棋,但是发了代码。至于代

Pygame实现小球躲避实例代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

前言:

这学期的python课,要写代码是真的多…

课程实验一是一个五子棋,但是发了代码。

至于代码质量嘛~ 我直接全部根据自己划分的结构改了

这里吐槽下 (真的发下来的代码 惨不忍睹 )

我改了快4个小时 后面功能不想加了…

这次是自己写嘛~ 那就写个想样的。

结构划分

我分为了

run 入口

setting 设置

main 主逻辑

utils 仓库

其实我想的是:全部设置到页面上去,但是偷懒~ (期末要去弄绩点)

直接开始贴代码

run.py

import sysfrom main import mainbanner = """ ____        _ _ _____          | __ )  __ _| | | ____|___  ___ |  _ \ / _` | | |  _| / __|/ __|| |_) | (_| | | | |___\__ \ (__ |____/ \__,_|_|_|_____|___/\___|"""if __name__ == '__main__':    print(banner)    print("Author: HengYi")    print("[*] 简单:输入 1")    print("[*] 普通:输入 2")    print("[*] 困难:输入 3")    try:        num = int(input("请选择难度:"))        if num in [1, 2, 3]:            main(num)        else:            print("无法处理~")            sys.exit()    except Exception as e:        raise Exception("无法处理~")

setting.py

WIDTH = 900  # 宽HEIGHT = 600  # 高SCORE = 0  # 分数TIME = 0  # 时间FIRST_STEP = 10  # 到达第二关时间SECOND_STEP = 20  # 到达第三关时间FPS = 60  # 刷新率BG_COLOR = (255, 239, 213)  # 背景颜色

utils.py

# -*- coding: utf-8 -*-import pygamefrom setting import FIRST_STEP, SECOND_STEP, BG_COLOR, WIDTH, HEIGHT# Note: 根据难度生成对应的小球# Time: 2021/12/17 8:35 下午# Author: HengYidef ballNum(ladderNum, time):    index = 0    if FIRST_STEP <= time < SECOND_STEP:        index = 1    if SECOND_STEP <= time:        index = 2    numMap = [        [2, 3, 5],        [3, 5, 6],        [4, 6, 7]    ]    return numMap[ladderNum - 1][index]# Note: 根据小球个数设置防止误触时间# Time: 2021/12/17 8:43 下午# Author: HengYidef protectTime(ballsNum):    if ballsNum in [2, 3, 4]:        return 1    else:        return 2# Note: 根据时间设置小球大小# Time: 2021/12/17 8:58 下午# Author: HengYidef howBigBallIs(ladderNum, time):    index = 0    if FIRST_STEP <= time < SECOND_STEP:        index = 1    if SECOND_STEP <= time:        index = 2    numMap = [        [25, 20, 15],        [24, 20, 16],        [26, 20, 16]    ]    return numMap[ladderNum - 1][index]# Note: 根据时间难度计算球体的大小和速度# Time: 2021/12/17 9:15 下午# Author: HengYidef judgeDiff(ladderNum, time):    index = 0    if FIRST_STEP <= time < SECOND_STEP:        index = 1    if SECOND_STEP <= time:        index = 2    numMap = [        [(30, 30, 3.5, 3.5), (28, 28, 6, 6), (26, 26, 9, 9)],        [(30, 30, 4.5, 4.5), (27, 27, 8, 8), (25, 25, 10, 10)],        [(30, 30, 5, 5), (26, 26, 9, 9), (24, 24, 12, 12)]    ]    return numMap[ladderNum - 1][index]# Note: 创建平台窗口# Time: 2021/12/17 2:58 下午# Author: HengYidef makeGameBg(width, height):    pygame.init()    screen = pygame.display.set_mode((width, height))  # 设置窗口大小    pygame.display.set_caption('小球逃逃逃')  # 设置窗口标题    background = pygame.Surface(screen.get_size())  # 填充背景    return screen, background# Note: 添加小球产生的事件# Time: 2021/12/17 3:06 下午# Author: HengYidef ballCome():    COME_AGAIN = pygame.USEREVENT    pygame.time.set_timer(COME_AGAIN, 1000)    return COME_AGAIN# Note: 提示字体# Time: 2021/12/17 3:11 下午# Author: HengYidef makeTips(content, size, color, position, screen):    font = pygame.font.SysFont('arial', size)    text_sf = font.render(content, True, color, BG_COLOR)    screen.blit(text_sf, position)# Note: 字体展示# Time: 2021/12/18 4:20 下午# Author: HengYidef draw(screen, SCORE, TIME):    screen.fill(BG_COLOR)  # 防止出现拖影    makeTips('SCORE: ', 30, (34, 139, 34), (5, 40), screen)    makeTips('TIME(s): ', 30, (64, 158, 255), (5, 75), screen)    makeTips(str(int(SCORE)), 30, (34, 139, 34), (135, 40), screen)    makeTips(str(int(TIME)), 30, (64, 158, 255), (135, 75), screen)    if TIME in [FIRST_STEP, FIRST_STEP + 1]:        makeTips('Ops! LEVEL_2~', 30, (60, 179, 113), (WIDTH / 2 - 30 * 3.5, HEIGHT / 2 - 50), screen)    elif TIME in [SECOND_STEP, SECOND_STEP + 1]:        makeTips('Congratulations! LEVEL_3', 25, (60, 179, 113), (WIDTH / 2 - 25 * 6.25, HEIGHT / 2 - 50), screen)

Main.py

# -*- coding: utf-8 -*-import randomfrom setting import *from utils import *class Ball(pygame.sprite.Sprite):    def __init__(self, *keys):  # 创建球        super().__init__()        self.timeSec = 0        w, h, xs, ys = keys[0]        self.w = w        self.h = h        self.xs = xs        self.ys = ys        x = random.randint(0, WIDTH - self.w)        y = random.randint(0, HEIGHT - self.h)        self.rect = pygame.Rect(x, y, self.w * 2, self.h * 2)    def update(self, screen, *args):        # 根据设置的速度进行运动        self.rect.x += self.xs        self.rect.y += self.ys        # 当遇到墙的时候进行反弹        if self.rect.x > WIDTH - self.w or self.rect.x < 0:            self.xs = -self.xs        elif self.rect.y > HEIGHT - self.h or self.rect.y < 0:            self.ys = -self.ys        if self.timeSec <= args[0]:            pygame.draw.rect(screen, (100, 149, 237), [self.rect.x, self.rect.y, self.rect.w, self.rect.h], 2)        pygame.draw.circle(screen, (255, 0, 0), [self.rect.center[0], self.rect.center[1]], self.w)    def timerAdd(self):        self.timeSec += 1        return self.timeSec    def __del__(self):  # 销毁的时候        passclass Mouse(pygame.sprite.Sprite):    def __init__(self, *keys):        super().__init__()        self.size = keys[0]  # 设置圆的大小        self.rect = pygame.Rect(WIDTH / 2 - self.size, HEIGHT / 2 - self.size, self.size * 2, self.size * 2)  # 实则是一个正方形    def update(self, screen, *args):        if pygame.mouse.get_focused():  # 如果存在于页面内            self.rect.center = pygame.mouse.get_pos()        # 限制球不能半身跑到边框上        if self.rect.x < 0:            self.rect.x = 0        elif self.rect.x > WIDTH - self.rect.w:            self.rect.x = WIDTH - self.rect.w        elif self.rect.y < 0:            self.rect.y = 0        elif self.rect.y > HEIGHT - self.rect.h:            self.rect.y = HEIGHT - self.rect.h        pygame.draw.circle(screen, (255, 0, 0), [self.rect.center[0], self.rect.center[1]], self.size)  # 根据圆心画圆def main(ladderNum):    # -------------------画布初始化-----------------------    screen, background = makeGameBg(WIDTH, HEIGHT)    clock = pygame.time.Clock()    comeAgain = ballCome()    # --------------------------------------------------    # --------------------对象存储-------------------------    global TIME, SCORE    balls = pygame.sprite.Group(Ball(judgeDiff(ladderNum, TIME)))    mouse = Mouse(howBigBallIs(ladderNum, TIME))    mouseObject = pygame.sprite.Group(mouse)    # --------------------------------------------------    # ---------------------游戏主程序-----------------------    RUNNING = True    SHOWINFO = False    while True:        draw(screen, SCORE, TIME)  # 动态添加文字        if SHOWINFO:            makeTips('Please Press The Space To Restart', 30, (255, 99, 71), (WIDTH / 2 - 240, HEIGHT / 2 - 50),                     screen)        for each in balls:            if pygame.sprite.spritecollide(each, mouseObject, False, collided=None) and each.timeSec > 2:                RUNNING = False                SHOWINFO = True        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                exit(0)            elif event.type == pygame.KEYDOWN:  # 重新开始                if event.key == pygame.K_SPACE:                    SCORE = 0                    TIME = 0                    for each in balls.sprites():                        balls.remove(each)                    SHOWINFO = False                    RUNNING = True            elif event.type == comeAgain and RUNNING:  # 每秒增加                TIME += 1                ballsNum = ballNum(ladderNum, TIME)                diff = judgeDiff(ladderNum, TIME)                SCORE += (ballsNum * diff[3])                if TIME in [10, 20]:                    mouseObject.remove(mouseObject.sprites()[0])                    mouseObject.add(Mouse(howBigBallIs(ladderNum, TIME)))                if len(balls) < ballsNum:                    balls.add(Ball(diff))                for each in balls:  # 防止误触的保护罩                    each.timerAdd()        balls.update(screen, protectTime(ballNum(ladderNum, TIME)))        mouseObject.update(screen)        clock.tick(FPS)        pygame.display.update()  # 刷新    print('游戏结束')

总结

效果图:

Pygame实现小球躲避实例代码怎么写

如何食用:

把上面4处代码Copy下来在用run.py启动

里面设计的 如何判断;如何重来;… (我觉得我的变量名字已经够清楚了????)

看完上述内容,你们掌握Pygame实现小球躲避实例代码怎么写的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Pygame实现小球躲避实例代码怎么写

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

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

猜你喜欢
  • Pygame实现小球躲避实例代码怎么写
    Pygame实现小球躲避实例代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言:这学期的Python课,要写代码是真的多…课程实验一是一个五子棋,但是发了代码。至于代...
    99+
    2023-06-22
  • Pygame实现小球躲避实例代码
    目录前言:结构划分run.pysetting.pyutils.pyMain.py总结效果图:如何食用:前言: 这学期的Python课,要写代码是真的多… 课程实验一是一个五子棋,但是...
    99+
    2024-04-02
  • JS+Canvas实现接球小游戏的示例代码
    目录写在最前git地址成果展示实现思路详细说明写在最后写在最前 看了canvas的动画系列,已经抑制不住内心的冲动想写个小游戏了,还是那个套路——多写写,你才...
    99+
    2024-04-02
  • 使用Java实现大小写转换实例代码
    今天刚学的java 字符串大小写的转化 写的不详细或错误请指出啊谢谢!!! 第一步首先要写输入对象的定义,用到Scanner来接收输入的字符串 Scanner sc = new Sc...
    99+
    2024-04-02
  • Android实现移动小球和CircularReveal页面切换动画实例代码
    前言本文主要给大家介绍了关于Android如何实现移动小球和CircularReveal页面切换动画的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。效果图如下是在fragment中跳转activity实现的效果,...
    99+
    2023-05-30
    android 小球移动 circularreveal
  • python实现烟花的实例代码怎么编写
    本篇文章给大家分享的是有关python实现烟花的实例代码怎么编写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现代码如下:# -*- coding:&nb...
    99+
    2023-06-22
  • java单例模式实现代码怎么写
    在Java中实现单例模式有多种方式,以下是其中几种常用的实现方式: 饿汉式(线程安全): public class Single...
    99+
    2023-10-24
    java
  • C语言实现三子棋实例代码怎么写
    这期内容当中小编将会给大家带来有关C语言实现三子棋实例代码怎么写,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先,我将该程序的实现分为3个板块,main,game.h,和game.c;代码如下:#def...
    99+
    2023-06-22
  • JavaScript实现扫雷小游戏的代码怎么写
    这篇文章主要介绍“JavaScript实现扫雷小游戏的代码怎么写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript实现扫雷小游戏的代码怎么写”文章能帮助大家解决问题。思路:1产生指定...
    99+
    2023-07-02
  • pygame开发:马赛逻辑小游戏的代码实现
    目录一、游戏简介二、核心代码解析三、pygame开发流程1、从创建窗口到棋盘绘制2、点击方格改变颜色2.1、点击事件2.2、碰撞检测2.3、方格变色2.4、阵列转换2.5、效果初见3...
    99+
    2024-04-02
  • VUE+Canvas 实现桌面弹球消砖块小游戏的示例代码
    大家都玩过弹球消砖块游戏,左右键控制最底端的一个小木板平移,接住掉落的小球,将球弹起后消除画面上方的一堆砖块。 那么用VUE+Canvas如何来实现呢?实现思路很简单,首先来拆分一下...
    99+
    2024-04-02
  • QT5实现UDP通信的示例代码怎么写
    QT5实现UDP通信的示例代码怎么写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言该例程经过实际验证可以正常使用,只简单的使用UDP中的单播模式(一对一),...
    99+
    2023-06-22
  • 非html5实现js版弹球游戏示例代码
    开始前的html页面  开始后的html游戏界面  html页面布局,即index.html文件源码如下: 复制代码 代码如下: <!DOCTYPE HTM...
    99+
    2022-11-15
    html5 js 弹球游戏
  • python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
    在上一篇的基础上,继续在透明窗体上绘制小球, 一、画个大球看看 (一)核心代码 在on_resize函数内部增加如下画圆的代码 canvas.create_oval(100, 100, 200, 200, ...
    99+
    2022-06-02
    python tkinter透明窗体小球 python tkinter透明窗体
  • Java实现猜数字小游戏代码怎么编写
    Java实现猜数字小游戏代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。▲游戏规则:系统随机生成一个范围0&mdash;&mdash;...
    99+
    2023-06-26
  • java实现五子棋小游戏的代码怎么写
    这篇文章的内容主要围绕java实现五子棋小游戏的代码怎么写进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!讲解在第一步实现的基础上,添加游戏结束条件。...
    99+
    2023-06-26
  • iOS实现计算器小功能的代码怎么写
    本篇内容介绍了“iOS实现计算器小功能的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文利用ios实现计算器app,后期将用mv...
    99+
    2023-06-29
  • Java实现三子棋小游戏的代码怎么写
    本篇内容主要讲解“Java实现三子棋小游戏的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java实现三子棋小游戏的代码怎么写”吧!游戏操作如图示:原理:主要借助3x3的二维数组实现:...
    99+
    2023-06-30
  • Android 实现扫雷小游戏实例代码
    Android 实现扫雷小游戏实例            &nbs...
    99+
    2022-06-06
    小游戏 Android
  • 微信小程序实现手写签名的示例代码
    目录1.效果图2.相关代码canvas代码js相关在微信小程序上实现手写签名,获取canvascontext新版本和旧版本有点坑,新版本在获取canvas后如果页面有滑动,则签名坐标...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作