热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享Pygame实战之实现扎气球游戏

目录导语正文一、准备中二、代码演示三、效果展示导语​前几天,有人私信小编:说陪女朋友在小广场上面逛街玩儿扎气球:结果一个都没扎破,扎心了老铁。女朋友都要离家出走了~让我给想想办法:
目录
  • 导语
  • 正文
    • 一、准备中
    • 二、代码演示
    • 三、效果展示

导语

​前几天,有人私信小编:

说陪女朋友在小广场上面逛街玩儿扎气球:结果一个都没扎破,扎心了老铁。

女朋友都要离家出走了~让我给想想办法:小编只想给你一个表情。

Pygame实战之实现扎气球游戏

​哈哈哈,开玩笑的~于是,为了满足需求,小编做了一个重大决定:熬夜给他做了一款扎气球的小

游戏,可以拿去哄哄女朋友啦~

这游戏做完之后木子已经替大家玩儿过了,这个很棒,不信的话你自己试试?

Pygame实战之实现扎气球游戏

正文

python教程分享Pygame实战之实现扎气球游戏的扎气球小游戏原型就是路边的扎气球的游戏撒,基于pygame做的!

就准备好射的箭、不同颜色的气球、一张背景图片、然后爆炸的特效就可。哦~对了音乐还是要准备,游戏的话有音乐背景才更有趣哦~

一、准备中

1)素材资料

首先是准备好需要的素材、图片、背景音乐:

Pygame实战之实现扎气球游戏

2)运行环境

环境安装 python教程分享Pygame实战之实现扎气球游戏用到的运行环境:python3.7、pycharm社区版2020、pygame游戏模块部分自带

模块直 接导入不需要安装。

模块安装:

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

二、代码演示

这款小游戏总的有6个.py文件组成的,代码比较都啦,这里就只放一点点哈!

主程序运行:

  ​from game import *     def main() :      intro = true      game = game()      game.loadmusic()      game.readhighscore()      pygame.mixer.music.play(loops=-1)      while intro:          for event in pygame.event.get():              if event.type == pygame.quit:                  intro = false          game.screen.fill(sky_blue)          game.screen.blit(game.background, game.background_rect)          game.draw.button(200, 2*game.height/3, "play", bright_green, green, game.gameloop, 150, 100)          game.draw.button(game.width/2 - 75, 2*game.height/3, "play timed", bright_red, red, game.time_restricted, 150, 100)          game.draw.button(game.width-350, 2*game.height/3, "quit", bright_green, green, quit, 150, 100)          game.draw.draw_text("__arcus__", game.width/2, game.height/3, 200, blue)          game.draw.draw_text("high score:%d" % (game.highscore), game.width-400, 50, 30, black)          pygame.display.flip()          game.clock.tick(fps)     main()  定义的一些常量:桌面背景、音乐等等。     fps = 60  gravity = 0.15  pi = 3.142     white = (255, 255, 255)  black = (0, 0, 0)  red = (200, 0, 0)  bright_red = (255, 0, 0)  green = (0, 200, 0)  bright_green = (0, 255, 0)  sky_blue = (0, 255, 255)  blue = (0, 0, 255)  green_yellow=(181,255,98)  brown=(204,102,0)  dark_brown=(204,76,0)     highscore_file="highscore.txt"  arrow_image = "assets/arrow_1.png"  background_image = "assets/background.png"     explosion_sound = "assets/boom.wav"  click_sound = "assets/select.wav"  music_file = "assets/tgfcoder-frozenjam-seamlessloop.ogg"  volume = 0.2     arrow_size = (16, 150)  baloon_size = (100, 100)  hit_radius = 15  misses = 15  game_time = 60  定义游戏精灵类等:     import pygame  import math  import random  from os import path  from constants import *     #游戏精灵类  class arrow(pygame.sprite.sprite):      def __init__(self,game):          pygame.sprite.sprite.__init__(self)          self.width = game.width          self.height = game.height          self.image_orig = pygame.transform.scale(game.arrow_img, arrow_size)          self.image_orig.set_colorkey(black)          self.image = self.image_orig          self.rect = self.image.get_rect()          self.rect.centerx = self.width/2          self.rect.bottom = self.height-100          self.rot = 0          self.speedx = 0          self.speedy = 0          self.range = 0          self.max_height = 0          self.release_angle = 0          self.set_vel = false          self.released = false          self.releasex = self.rect.centerx          self.releasey = self.rect.bottom          self.cy = self.rect.centery          self.game = game         def update(self):          if self.released:              self.speedy -= gravity              self.rect.bottom -= self.speedy              self.rect.centerx += self.speedx              self.rot = (-math.atan2(self.speedx, self.speedy)*180/3.14) % 360              new_image = pygame.transform.rotate(self.image_orig, self.rot)                 old_center = self.rect.center              self.image = new_image              self.rect = self.image.get_rect()              self.rect.center = old_center              # print "moving"              if self.rect.bottom <0 or self.rect.left > self.width + 10 or self.rect.right <-10:                  self.kill()                        else:              mouse = pygame.mouse.get_pos()              click = pygame.mouse.get_pressed()              if mouse[1] > self.rect.centery and click[0] == 1:                  self.set_vel = true                  dist = math.sqrt(                      math.pow(self.rect.centerx-mouse[0], 2)+math.pow(self.rect.bottom-mouse[1], 2))                  # print dist                     self.rect.centerx = mouse[0]                  self.rect.centery = mouse[1]                  # print(2*gravity*(self.rect.centery-mouse[1]))                  self.speedy = math.sqrt(2*gravity*(-self.cy+mouse[1]))*4                  self.speedx = self.speedy *                       (mouse[0]-self.releasex)/(self.cy-mouse[1])                  self.rot = (-math.atan2(self.speedx, self.speedy)                              * 180/3.14*0.5) % 360                  new_image = pygame.transform.rotate(self.image_orig, self.rot)                  old_center = self.rect.center                  self.image = new_image                  self.rect = self.image.get_rect()                  self.rect.center = old_center                     # print "setting velocity"                 else:                  if self.set_vel:                      self.released = true                      self.game.last_arrow_time = pygame.time.get_ticks()                      self.max_height = (self.rect.bottom-mouse[1])                      self.range = (mouse[0]-self.rect.centerx)*2                      # print "releasing"                  # math.sqrt(math.pow(mouse[0]-self.rect.centerx,2)+math.pow(mouse[1]-self.rect.centery,2)) <200:                  else:                      if (mouse[0]-self.rect.centerx) != 0:                          theta = math.atan(                              (mouse[1]-self.rect.bottom)/(self.rect.centerx-mouse[0]))                      else:                          theta = pi                      move = theta-self.rot                      self.rot = math.degrees(theta)                      new_image = pygame.transform.rotate(                          self.image_orig, self.rot)                      old_center = self.rect.center                      self.image = new_image                      self.rect = self.image.get_rect()                      self.rect.center = old_center                      # print "rotating"                      # print self.rot                      # print theta        class baloon(pygame.sprite.sprite):      def __init__(self,game):          pygame.sprite.sprite.__init__(self)          self.width = game.width          self.height = game.height          bcolor = random.choice(game.baloon_color)          temp = "assets/balloon_{}.png".format(bcolor)          self.image_orig = pygame.image.load(              path.join(path.dirname(__file__), temp))          if bcolor == "blue":              self.image_orig.set_colorkey(blue)          elif bcolor == "black":              self.image_orig.set_colorkey(black)          elif bcolor == "green":              self.image_orig.set_colorkey(bright_green)          elif bcolor == "red":              self.image_orig.set_colorkey(bright_red)             self.image_orig = pygame.transform.scale(self.image_orig, baloon_size)          self.image = self.image_orig.copy()          self.rect = self.image.get_rect()          self.radius = hit_radius             temp = random.randrange(self.width - self.rect.width)          while (-150  self.width + 20:              self.kill()              self.game.misses += 1  ​

三、效果展示

游戏规则的话:箭会出现在游戏界面底部中间位置,拉动它:即是鼠标左键拉动方向可自己调整,

直接向下拉动然后放箭射中气球即可。射中的越多积累的分数越高哦!

1)截图展示效果——

游戏开始界面如下:

Pygame实战之实现扎气球游戏

游戏开始界面如下:

Pygame实战之实现扎气球游戏

扎中气球效果如下:

Pygame实战之实现扎气球游戏

游戏结束总成绩13分:

Pygame实战之实现扎气球游戏

2)视频展示效果——

​到此这篇关于pygame实战之实现扎气球游戏的文章就介绍到这了,更多相关pygame扎气球游戏内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多python教程分享Pygame实战之实现扎气球游戏,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了在Python中使用getpass模块隐藏密码输入的方法,以保护用户的密码不被其他人员看到。同时还提到了在PyCharm中运行该命令无效的问题,需要在terminal中运行。 ... [详细]
  • 零基础用Python打造Android字符串资源翻译器(五):增加图形化界面
    目录 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • pycharm安装插件的方法
    小编给大家分享一下pycharm安装插件的方法,相信大部分人都还不怎么了解,因此分享这边文章给大家学习,希望大家阅读完这篇文章后大所收获,下面 ... [详细]
author-avatar
Yc--Amy_435
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有