python游戏的魅力之冒险岛实战项目
目录
- 导语
- 正文
- 效果图:
- 总结
导语 ?哈喽哈喽!我是木木子。
新的一天又开始了~
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/2616df8cd9d54aae9a15107dbaddc897.jpg)
文章图片
?
是的,今天是大工程,?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/550446b2a5f847c696060924959c78bf.jpg)
文章图片
又到了每日更新游戏环节,你们有期待吗?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/8167a2b09e614b20b0394de29dd41279.jpg)
文章图片
?
想了很久,这游戏估计你们也没玩过,比较少见吧!最近家里的孩子一直在沉迷《梦幻国度》。
让他见识下python的魅力,能学习也能做游戏的。不能一直玩撒~学习也很重要嘛
今天想说我们直接开始制作一款Python玛丽冒险岛游戏~
正文
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/5c303df293104b9e9ca9cc34cfadca0f.gif)
文章图片
?
?(1)环境安装部分:
Python版本:Python 3.6
开发工具:PyCharm。Python内置模块:itertools、random。第三方模块:pygame。
注意:在使用第三方模块时,首先需要使用pip install命令安装该模块,可以在命令窗口中执行以下命令:
pip install pygame
(2)图片素材:可自制。
?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/15501f7161ed4e8eb4f3ee1f78ba94d6.jpg)
文章图片
??
(3)基本上手机上的游戏软件都是自带背景音乐撒,当然冒险岛也不例外。
?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/fa71a6c62b094a788174ac4c71088f44.jpg)
文章图片
??
?附代码:游戏背景音乐可以暂停也可以播放, 有音乐更有游戏的乐趣。
??
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/9e0c036172324a1a9b6a12197ebe8bd3.jpg)
文章图片
??
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/4c9ce1215ea44429a727bbfcbc343ef1.jpg)
文章图片
??
# 背景音乐按钮class Music_Button():is_open = True# 背景乐音的标记def __init__(self):self.open_img = pygame.image.load('image/btn_open.png').convert_alpha()self.close_img = pygame.image.load('image/btn_close.png').convert_alpha()self.bg_music = pygame.mixer.Sound('audio/bg_music.wav')# 加载背景音乐# 判断鼠标是否在,按钮的范围内def is_select(self):# 获取鼠标,的坐标point_x, point_y = pygame.mouse.get_pos()w, h = self.open_img.get_size()# 获取按钮图片的大小# 判断鼠标是否在按钮范围内in_x = point_x > 20 and point_x < 20 + win_y = point_y > 20 and point_y < 20 + hreturn in_x and in_y
(4)冒险岛的话是玩家会一直前进所以要定义移动的地图。
# 定义一个移动地图类class MyMap(): def __init__(self, x, y):# 加载背景图片self.bg = pygame.image.load("image/bg.png").convert_alpha()self.x = xself.y = y def map_rolling(self):if self.x < -790:# 小于-790说明地图已经完全移动完毕self.x = 800# 给地图一个新的坐标点else:self.x -= 5# 5个像素向左移动 # 更新地图def map_update(self):SCREEN.blit(self.bg, (self.x, self.y))
(5)定义冒险岛玩家的类,向上跳,躲避障碍等。
?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/37b08dccd8d849e2b970b3d7d5d99323.jpg)
文章图片
??
class Marie():def __init__(self):# 初始化小玛丽矩形self.rect = pygame.Rect(0, 0, 0, 0)self.jumpState = False# 跳跃的状态self.jumpHeight = 130# 跳跃的高度self.lowest_y = 140# 最低坐标self.jumpValue = https://www.it610.com/article/0# 跳跃增变量# 小玛丽动图索引self.marieIndex = 0self.marieIndexGen = cycle([0, 1, 2])# 加载小玛丽图片self.adventure_img = (pygame.image.load("image/adventure1.png").convert_alpha(),pygame.image.load("image/adventure2.png").convert_alpha(),pygame.image.load("image/adventure3.png").convert_alpha(),)self.jump_audio = pygame.mixer.Sound('audio/jump.wav')# 跳音效self.rect.size = self.adventure_img[0].get_size()self.x = 50; # 绘制小玛丽的X坐标self.y = self.lowest_y; # 绘制小玛丽的Y坐标self.rect.topleft = (self.x, self.y) # 跳状态def jump(self):self.jumpState = True # 小玛丽移动def move(self):if self.jumpState:# 当起跳的时候if self.rect.y >= self.lowest_y:# 如果站在地上self.jumpValue = https://www.it610.com/article/-5# 以5个像素值向上移动if self.rect.y <= self.lowest_y - self.jumpHeight:# 小玛丽到达顶部回落self.jumpValue = 5# 以5个像素值向下移动self.rect.y += self.jumpValue# 通过循环改变玛丽的Y坐标if self.rect.y>= self.lowest_y:# 如果小玛丽回到地面self.jumpState = False# 关闭跳跃状态 # 绘制小玛丽def draw_marie(self):# 匹配小玛丽动图marieIndex = next(self.marieIndexGen)# 绘制小玛丽SCREEN.blit(self.adventure_img[marieIndex],(self.x, self.rect.y))
(6)设置障碍物随机出现。
import random# 随机数# 障碍物类class Obstacle():score = 1# 分数move = 5# 移动距离obstacle_y = 150# 障碍物y坐标def __init__(self):# 初始化障碍物矩形self.rect = pygame.Rect(0, 0, 0, 0)# 加载障碍物图片self.missile = pygame.image.load("image/missile.png").convert_alpha()self.pipe = pygame.image.load("image/pipe.png").convert_alpha()# 加载分数图片self.numbers = (pygame.image.load('image/0.png').convert_alpha(),pygame.image.load('image/1.png').convert_alpha(),pygame.image.load('image/2.png').convert_alpha(),pygame.image.load('image/3.png').convert_alpha(),pygame.image.load('image/4.png').convert_alpha(),pygame.image.load('image/5.png').convert_alpha(),pygame.image.load('image/6.png').convert_alpha(),pygame.image.load('image/7.png').convert_alpha(),pygame.image.load('image/8.png').convert_alpha(),pygame.image.load('image/9.png').convert_alpha())# 加载加分音效self.score_audio = pygame.mixer.Sound('audio/score.wav')# 加分# 0和1随机数r = random.randint(0, 1)if r == 0:# 如果随机数为0显示导弹障碍物相反显示管道self.image = self.missile# 显示导弹障碍self.move = 15# 移动速度加快self.obstacle_y = 100# 导弹坐标在天上else:self.image = self.pipe# 显示管道障碍# 根据障碍物位图的宽高来设置矩形self.rect.size = self.image.get_size()# 获取位图宽高self.width, self.height = self.rect.size# 障碍物绘制坐标self.x = 800self.y = self.obstacle_yself.rect.center = (self.x, self.y) # 障碍物移动def obstacle_move(self):self.rect.x -= self.move # 绘制障碍物def draw_obstacle(self):SCREEN.blit(self.image, (self.rect.x, self.rect.y))
(7)躲避障碍物,一次得一份。绘制分数。
?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/e1907d0b474d445abdc2eda0504e6401.jpg)
文章图片
??
?# 获取分数 def getScore(self): self.score tmp = self.score; if tmp == 1: self.score_audio.play() # 播放加分音乐 self.score = 0; return tmp; # 显示分数 def showScore(self, score): # 获取得分数字 self.scoreDigits = [int(x) for x in list(str(score))] totalWidth = 0 # 要显示的所有数字的总宽度 for digit in self.scoreDigits: # 获取积分图片的宽度 totalWidth += self.numbers[digit].get_width() # 分数横向位置 Xoffset = (SCREENWIDTH - (totalWidth+30)) for digit in self.scoreDigits: # 绘制分数 SCREEN.blit(self.numbers[digit], (Xoffset, SCREENHEIGHT * 0.1)) # 随着数字增加改变位置 Xoffset += self.numbers[digit].get_width() ?
(8)游戏结束的撞击到障碍物。
?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/79288f075fb442b8a8f820af274a6317.jpg)
文章图片
??
# 游戏结束的方法def game_over():bump_audio = pygame.mixer.Sound('audio/bump.wav')# 撞击bump_audio.play()# 播放撞击音效# 获取窗体宽、高screen_w = pygame.display.Info().current_wscreen_h = pygame.display.Info().current_h# 加载游戏结束的图片over_img = pygame.image.load('image/gameover.png').convert_alpha()# 将游戏结束的图片绘制在窗体的中间位置SCREEN.blit(over_img, ((screen_w - over_img.get_width()) / 2,(screen_h - over_img.get_height()) / 2))
效果图: ?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/aad6170e8a0a49bfb7b13e9d4af7cb63.jpg)
文章图片
??
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/59849cbaca894700af9f9abe9b687a3c.jpg)
文章图片
??
总结 嘿嘿!跟着小编一起去冒险吧~
?
![python游戏的魅力之冒险岛实战项目](https://img.it610.com/image/info11/7d56d0602b8544b5be67f8a04b3ecfae.gif)
文章图片
??
【python游戏的魅力之冒险岛实战项目】到此这篇关于python游戏的魅力之冒险岛实战项目的文章就介绍到这了,更多相关python 冒险岛内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 夜游宫|夜游宫 心语
- 游戏IP(立足于玩家情感的粉丝经济)
- 涉毒患者(新诗)
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 西湖游
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 《格列佛游记》第二卷第五章概括
- 老母亲游记之麓山火锅道20190220