自制紧张刺激的滑雪游戏,来一把?

news/2025/1/15 8:24:48/

目录标题

  • 介绍
    • pygame简介
  • 源码
  • 点击直接资料领取

介绍

pygame简介

Pygame是跨平台Pyth,Pygame 作者是 Pete Shinners, 协议为 GNU Lesser General Public
License。
包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python。

(1) pygamepygame模块会自动导入其它的pygame相关模块。pygame模块包括surface函数, 可以返回一个新的surface 对象。 init()函数是pygame游戏的核心,必须在进入游戏的主循环之前调用。init()会自动初始化其它所有模块。
(2) pygame.locals包括在你自己的模块作用域内使用的名字(变量)。包括事件类型、键和视频模式等的名字。
(3) pygame.display包括处理pygame显示方式的函数。包括普通窗口和全屏模式。 pygame.display中一些常用的方法如下:flip:更新显示。update:更新一部分时候使用update。set_mode:设定显示的类型和尺寸。set_caption:设定pygame程序的标题。get_surface:调用flip和blit前返回一个可用于画图的surface对象。
(4) pygame.font包括font函数,用于表现不同的字体。
(5) pygame.sprite游戏精灵,Group用做sprite对象的容器。调用group对象的update对象,会自动调用所有sprite对象的update方法。
(6) pygame.mouse隐藏鼠标光标,获取鼠标位置
(7) pygame.event追踪鼠标单击、按键按下和释放等事件。
(8) pygame.image用于处理保存在GIF、PNG或者JPEG文件内的图像。

源码

在这里插入图片描述

import sys
import cfg
import pygame
import random'''滑雪者类'''
class SkierClass(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)# 滑雪者的朝向(-2到2)self.direction = 0self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1]self.image = pygame.image.load(self.imagepaths[self.direction])self.rect = self.image.get_rect()self.rect.center = [320, 100]self.speed = [self.direction, 6-abs(self.direction)*2]'''改变滑雪者的朝向. 负数为向左,正数为向右,0为向前'''def turn(self, num):self.direction += numself.direction = max(-2, self.direction)self.direction = min(2, self.direction)center = self.rect.centerself.image = pygame.image.load(self.imagepaths[self.direction])self.rect = self.image.get_rect()self.rect.center = centerself.speed = [self.direction, 6-abs(self.direction)*2]return self.speed'''移动滑雪者'''def move(self):self.rect.centerx += self.speed[0]self.rect.centerx = max(20, self.rect.centerx)self.rect.centerx = min(620, self.rect.centerx)'''设置为摔倒状态'''def setFall(self):self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])'''设置为站立状态'''def setForward(self):self.direction = 0self.image = pygame.image.load(self.imagepaths[self.direction])'''
Function:障碍物类
Input:img_path: 障碍物图片路径location: 障碍物位置attribute: 障碍物类别属性
'''
class ObstacleClass(pygame.sprite.Sprite):def __init__(self, img_path, location, attribute):pygame.sprite.Sprite.__init__(self)self.img_path = img_pathself.image = pygame.image.load(self.img_path)self.location = locationself.rect = self.image.get_rect()self.rect.center = self.locationself.attribute = attributeself.passed = False'''移动'''def move(self, num):self.rect.centery = self.location[1] - num'''创建障碍物'''
def createObstacles(s, e, num=10):obstacles = pygame.sprite.Group()locations = []for i in range(num):row = random.randint(s, e)col = random.randint(0, 9)location  = [col*64+20, row*64+20]if location not in locations:locations.append(location)attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys()))img_path = cfg.OBSTACLE_PATHS[attribute]obstacle = ObstacleClass(img_path, location, attribute)obstacles.add(obstacle)return obstacles'''合并障碍物'''
def AddObstacles(obstacles0, obstacles1):obstacles = pygame.sprite.Group()for obstacle in obstacles0:obstacles.add(obstacle)for obstacle in obstacles1:obstacles.add(obstacle)return obstacles'''显示游戏开始界面'''
def ShowStartInterface(screen, screensize):screen.fill((255, 255, 255))tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5)cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20)title = tfont.render(u'滑雪游戏', True, (255, 0, 0))content = cfont.render(u'按任意键开始游戏', True, (0, 0, 255))trect = title.get_rect()trect.midtop = (screensize[0]/2, screensize[1]/5)crect = content.get_rect()crect.midtop = (screensize[0]/2, screensize[1]/2)screen.blit(title, trect)screen.blit(content, crect)while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:returnpygame.display.update()'''显示分数'''
def showScore(screen, score, pos=(10, 10)):font = pygame.font.Font(cfg.FONTPATH, 30)score_text = font.render("Score: %s" % score, True, (0, 0, 0))screen.blit(score_text, pos)'''更新当前帧的游戏画面'''
def updateFrame(screen, obstacles, skier, score):screen.fill((255, 255, 255))obstacles.draw(screen)screen.blit(skier.image, skier.rect)showScore(screen, score)pygame.display.update()'''主程序'''
def main():# 游戏初始化pygame.init()pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)# 设置屏幕screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('滑雪游戏 —— 九歌')# 游戏开始界面ShowStartInterface(screen, cfg.SCREENSIZE)# 实例化游戏精灵# --滑雪者skier = SkierClass()# --创建障碍物obstacles0 = createObstacles(20, 29)obstacles1 = createObstacles(10, 19)obstaclesflag = 0obstacles = AddObstacles(obstacles0, obstacles1)# 游戏clockclock = pygame.time.Clock()# 记录滑雪的距离distance = 0# 记录当前的分数score = 0# 记录当前的速度speed = [0, 6]# 游戏主循环while True:# --事件捕获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_LEFT or event.key == pygame.K_a:speed = skier.turn(-1)elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:speed = skier.turn(1)# --更新当前游戏帧的数据skier.move()distance += speed[1]if distance >= 640 and obstaclesflag == 0:obstaclesflag = 1obstacles0 = createObstacles(20, 29)obstacles = AddObstacles(obstacles0, obstacles1)if distance >= 1280 and obstaclesflag == 1:obstaclesflag = 0distance -= 1280for obstacle in obstacles0:obstacle.location[1] = obstacle.location[1] - 1280obstacles1 = createObstacles(10, 19)obstacles = AddObstacles(obstacles0, obstacles1)for obstacle in obstacles:obstacle.move(distance)# --碰撞检测hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False)if hitted_obstacles:if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed:score -= 50skier.setFall()updateFrame(screen, obstacles, skier, score)pygame.time.delay(1000)skier.setForward()speed = [0, 6]hitted_obstacles[0].passed = Trueelif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed:score += 10obstacles.remove(hitted_obstacles[0])# --更新屏幕updateFrame(screen, obstacles, skier, score)clock.tick(cfg.FPS)'''run'''
if __name__ == '__main__':main()

本文来自:趣学python+python办公专栏欢迎大家一起学习。

链接:传送门
在这里插入图片描述

点击直接资料领取

这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。


http://www.ppmy.cn/news/357601.html

相关文章

狂神说ElasticSearch入门(最全笔记)

1. ElasticSearch概述 2. ES与Solr的差别 2.1. Solr简介 2.2. Lucene简介 2.3. ES VS Solr 3. ElasticSearch 安装 官网 ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?CN&OD logstash: https://mirrors.huaweicloud.com/logstash/?CN&OD kibana…

Elasticsearch、Kibana7.6.2安装及head插件安装

【ES笔记】Elasticsearch、Kibana7.6.2安装及head插件安装 (一)安装包准备1、JDK-14_下载2、Elasticsearch(7.6.2)_下载3、Kibana(7.6.2)_下载4、Nodejs_下载5、Head插件_下载 (二)解…

1.1【气宇轩昂】《踏雪》

一、踏雪 这首歌气质昂扬,让我感到肃然起敬,让我们听一听吧。 ​​​​​​等什么君《踏雪》因冬奥会火了!宝剑锋从磨砺出,梅花香自苦寒来_哔哩哔哩_bilibili 歌词也意味非凡,尽显精神! 飞鸿起 踏破云…

无心剑中译霍尔·波兰德《甜美的九月》

Sweet September 甜美的九月 By Hal Borland 霍尔波兰德 September is more than a month, really; it is a season, an achievement in itself. It begins with August’s leftovers and it ends with October’s preparations, but along the way it achieves special satisf…

惊弓之鸟

PC又出现了蓝屏故障 祸不单行?病入膏肓? 冷静分析,这故障最近几日才出现,而且呈愈演愈烈趋势。难道跟显卡的Fastwrite有关?一波未平一波又起? No.No.No. 顺手挪动了一下机箱,不会这么脆弱震…

【杂记】01:王者荣耀,再见?

杂记01:王者荣耀,再见? 时间:2021年2月14日大年初三(情人节)事件:打开下载了又反复卸载的王者玩了一局百里守约,被虐杀的很惨“杀瑶者必死”心累。开始反思自己的游戏初衷结论&#…

王者荣耀·双兰玄策羁绊之战,为何花木兰会向兰陵王提出合作?

“边界突围”模式在昨天已经上线,相信很多玩家都已经过了一把吃鸡的瘾!其实在这种新玩法背后,还隐藏着双兰与玄策的故事。 在边界双兰与玄策展开了一场战斗,战后双兰玄策深入大漠腹地,他们能否查明云中漠地当年灾难的…

下载安装谷歌浏览器插件

前言:下载谷歌插件,本是要去谷歌应用商店下载,但是因为谷歌应用商店打不开,所以推荐去“极简插件”网站下载插件。 一、下载 1、打开“极简插件”网站,网址:https://chrome.zzzmh.cn/index#/index 2、以”…