这篇文章是对pygame实现落球游戏1的优化

优化挡板的控制为左右按键

如果使用鼠标控制非常的不好控制,而且控制不连续

引入对应变量

这里pos_x和pos_y作为挡板的初始位置,不在作为和鼠标的位置挂钩

# 挡板初始位置
pos_x = 300
pos_y = 460
# 标注方向的变量  -1 左 0 不动 1 右
direction = 0
# 改变位置幅度
rangeChange = 5

捕捉左右按键事件

左右按键按下,改变方向变量,如果左右键抬起,则将方向变为不变

 # 按键之后改变方向elif event.type == KEYDOWN:if event.key == pygame.K_ESCAPE:pygame.quit()sys.exit()elif event.key == pygame.K_RIGHT:direction = 1elif event.key == pygame.K_LEFT:direction = -1elif event.type == KEYUP:if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:direction = 0

根据方向和改变位置幅度,改变位置

这里将最大右方向坐标修改为480,挡板宽度为120,这样不会超出窗口的宽度600

 pos_x += rangeChange * directionif pos_x < 0:pos_x = 0elif pos_x > 480:pos_x = 480

圆球位置和阴影考虑

圆球位置,

这里(bomb_x, int(bomb_y))值的是圆心位置,如果随机到0的话,那么就会出现屏幕只有一个半圆,圆的半径是30,起始位置30,到结束的位置减去30的范围,所以是30-570,纵坐标也不必要从 -50开始,-35即可。

# 球落下的x和y轴坐标
bomb_x = random.randint(0, 500)
bomb_y = -50pygame.draw.circle(screen, yellow, (bomb_x, int(bomb_y)), 30, 0)

修改

bomb_x = random.randint(30, 570)
bomb_y = -35

阴影考虑

纯黑色的阴影过于深,考虑一个浅色,将阴影的半径设置为1

black = 32, 32, 32pygame.draw.circle(screen, black, (bomb_x - 1, int(bomb_y) - 1), 30, 0)pygame.draw.circle(screen, yellow, (bomb_x, int(bomb_y)), 30, 0)pygame.draw.rect(screen, black, (pos_x - 1, pos_y - 1, 120, 40), 0)pygame.draw.rect(screen, red, (pos_x, pos_y, 120, 40), 0)

游戏结束实现提示

显示一个爆炸在屏幕之上


如果游戏进行而且失败了,则显示

# 游戏进行flg
game_start = Falseif game_start and game_over:pygame.draw.polygon(screen, (255, 255, 0), ((80, 80), (160, 120), (500, 120), (460, 320),(320, 300), (160, 400), (150, 200), (80, 80)))print_text(font2, 280, 200, "爆炸", (0, 0, 0))

全部代码

import sys, random,  pygame
from pygame.locals import *def print_text(font, x, y, text, color=(255, 255, 255)):img_text = font.render(text, True, color)screen.blit(img_text, (x, y))pygame.init()
# 定时器
mainClock = pygame.time.Clock()# 设置屏幕和窗口标题
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("落球游戏")
# 设置字体
font1 = pygame.font.SysFont("方正粗黑宋简体", 24)
font2 = pygame.font.SysFont("方正粗黑宋简体", 48)
pygame.mouse.set_visible(False)
# 设置颜色变量
white = 255, 255, 255
red = 220, 50, 50
yellow = 230, 230, 50
black = 32, 32, 32# 生命条数
lives = 3
# 分
score = 0
# 游戏开始flg
game_over = True
# 游戏进行flg
game_start = False
# 鼠标位置
mouse_x = mouse_y = 0
# 挡板初始位置
pos_x = 300
pos_y = 460
# 球落下的x和y轴坐标
bomb_x = random.randint(30, 570)
bomb_y = -35
# 球下落的速度
vel_y = 0.7
# 标注方向的变量  -1 左 0 不动 1 右
direction = 0
# 改变位置幅度
rangeChange = 5while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()elif event.type == MOUSEBUTTONUP:if game_over:game_over = Falsegame_start = Truelives = 3score = 0# 按键之后改变方向elif event.type == KEYDOWN:if event.key == pygame.K_ESCAPE:pygame.quit()sys.exit()elif event.key == pygame.K_RIGHT:direction = 1elif event.key == pygame.K_LEFT:direction = -1elif event.type == KEYUP:if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:direction = 0screen.fill((255, 166, 77))if game_over:print_text(font1, 300, 400, "点击新游戏")else:bomb_y += vel_yif game_start and game_over:pygame.draw.polygon(screen, (255, 255, 0), ((80, 80), (160, 120), (500, 120), (460, 320),(320, 300), (160, 400), (150, 200), (80, 80)))print_text(font2, 280, 200, "爆炸", (0, 0, 0))if bomb_y > 500:bomb_x = random.randint(0, 500)bomb_y = -50lives -= 1if lives == 0:game_over = Trueelif bomb_y > pos_y:if bomb_x > pos_x and bomb_x < pos_x + 120:score += 120bomb_x = random.randint(0, 500)bomb_y = -50pygame.draw.circle(screen, black, (bomb_x - 1, int(bomb_y) - 1), 30, 0)pygame.draw.circle(screen, yellow, (bomb_x, int(bomb_y)), 30, 0)pos_x += rangeChange * directionif pos_x < 0:pos_x = 0elif pos_x > 460:pos_x = 460pygame.draw.rect(screen, black, (pos_x - 1, pos_y - 1, 120, 40), 0)pygame.draw.rect(screen, red, (pos_x, pos_y, 120, 40), 0)print_text(font1, 0, 0, "生命数: " + str(lives))print_text(font1, 500, 0, "分数:  " + str(score))pygame.display.update()mainClock.tick(2000)

pygame落球游戏优化相关推荐

  1. python 乒乓球_python使用pygame实现笑脸乒乓球弹珠球游戏

    今天我们用python和pygame实现一个乒乓球的小游戏,或者叫弹珠球游戏. 笑脸乒乓球游戏功能介绍 乒乓球游戏功能如下: 乒乓球从屏幕上方落下,用鼠标来移动球拍,使其反弹回去,并获得得分,如果没有 ...

  2. Linux乒乓球游戏,python使用pygame实现笑脸乒乓球弹珠球游戏

    今天我们用python和pygame实现一个乒乓球的小游戏,或者叫弹珠球游戏. 笑脸乒乓球游戏功能介绍 乒乓球游戏功能如下: 乒乓球从屏幕上方落下,用鼠标来移动球拍,使其反弹回去,并获得得分,如果没有 ...

  3. 《球球大作战》游戏优化之路(上)

    自从2015年<球球大作战>发布以来,现已拥有五亿多的玩家.如此庞大的玩家群体,对游戏的画面,性能要求是非常高的.在Unite Shanghai 2019大会中,<球球大作战> ...

  4. 制作滚球游戏学习Unity3D

    从创建项目开始 创建一个项目 打开unity,在Projects中可以查看当前的本地项目或者云端项目,点击New project或者右上角的New都可以新建项目. 然后在1处填写创建项目的名称,2处选 ...

  5. Unity游戏优化[第二版]学习记录6

    以下内容是根据Unity 2020.1.01f版本进行编写的 Unity游戏优化[第二版]学习记录6 第6章 动态图形 一.管线渲染 1.GPU前端 2.GPU后端 3.光照和阴影 4.多线程渲染 5 ...

  6. 【学习】Unity3D滚球游戏 原理及实现

    转载:https://blogs.littlegenius.xin/2019/02/10/从滚球游戏初步体验Unity3D/ 从创建项目开始 创建一个项目 打开unity,在Projects中可以查看 ...

  7. pygame自制小游戏

    pygame自制小游戏 皮卡丘 Go! 前言 简单的来写一个pygame小游戏,我的画面比较卡哇伊各位可以自己换图片哈. 一.作品简介 就是一个最基本的pygame小游戏,可以控制人物,攻击敌人,打到 ...

  8. 【Unity3D】二、制作滚球游戏学习Unity3D(下)

    上一篇文章:https://blog.csdn.net/qq_38962621/article/details/86930742 创建碰撞小立方体 新建Cube 我们在游戏场地中加入一些旋转的小方块儿 ...

  9. 弹力球游戏c语言,弹力球游戏

    弹力球是一款轻松有趣的休闲闯关游戏,这款游戏玩法十分简单容易上手,游戏内设置了海量的关卡越往后关卡难度越大,玩家在关卡中控制小球将关卡中心星星全部吃完即可闯关成功,感兴趣的小伙伴还在等什么,快来下载吧 ...

最新文章

  1. Spring MVC 基础
  2. 程序员法律考试(5)-民法(2)
  3. Elasticsearch-检索进阶(银行测试数据)
  4. C++中 auto自动变量,命名空间,using作用以及作用域
  5. 使用jquery的blockui插件显示弹出层
  6. 影视小程序附带搭建教材
  7. oracle以32位运行,Oracle在 32位系统上运行突破sga1.7g的方法
  8. 操作技巧:在Python Shell里如何清屏
  9. 使用 PDO 方式将 Session 保存到 MySQL 数据中
  10. Spring源码解析目录
  11. 倾斜摄影技术构建 WebGIS 智慧展馆 | 图扑软件
  12. 误删除文件恢复工具免费下载
  13. python机器学习实战|机器学习入门笔记1-机器学习流程+matplotlib简单应用
  14. UEBA在信息安全领域的使用
  15. syntax error near unexpected token else
  16. 李宏毅2020机器学习课程笔记(一)
  17. 1024,程序员“赚钱”秘籍倾囊而赠!
  18. 银河麒麟服务器操作系统V10SP2安装搭建OpenVP
  19. 如何用PS把图片中的人物剪掉
  20. android 手柄助手,新游手柄助手app

热门文章

  1. JavaScript中弧度和角度的转换
  2. 阶乘计算思路整理方法归纳
  3. 薛峰:集团管控成就京卫 药品零售业BI破冰
  4. PCB设计中的邮票孔封装如何制作?
  5. GCC源码分析(十一) — 函数节点的gimple低端化
  6. 常见的SQL在线练习平台
  7. python 字典 通过值返回键_怎么使用python字典根据值返回键
  8. “云冈石窟数字化保护研讨会”在云冈研究院成功举办
  9. Android 仿淘宝购物车实现
  10. jQuery 自动给a标签添加target属性