跑酷游戏源代码

Python——跑酷游戏 通过这篇文章,我们不仅构建了一个简单的跑酷游戏,还学习了如何使用Python和Pygame库来开发2D游戏。这只是一个起点,游戏开发的世界广阔无垠,等待着你去探索和创造。你可以在此基础上添加更多的功能,比如增加游戏难度、设计更复杂的关卡、加入音效和背景音乐等,让你的游戏更加丰富多彩。记住,编程不仅仅是一门技术,它也是一种艺术,希望你在编程的道路上越走越远,成为一名真正的编程英雄!希望这篇文章能够帮助你理解如何使用Python和Pygame来开发一个基础的跑酷游戏。 阅读详情

import pygame, sys
import random

class Person():  # 人物
    def __init__(self, surf=None, y=None):
        self.surface = surf
        self.y = y  # y坐标
        self.w = (surf.get_width()) / 12  # 宽度
        self.h = surf.get_height() / 2  # 高度
        self.cur_frame = -1  # 当前的运动状态帧
        self.state = 0  # 0代表跑步状态,1代表跳跃状态,2代表连续跳跃
        self.gravity = 1  # 重力加速度
        self.velocity_y = 0  # y方向的速度
        self.vy_start = -20  # 起跳开始速度

    def getPos(self):   # 获取当前的位置信息,用于碰撞检测
        return (0, self.y + 12, self.w, self.h)


class Obstacle(object):  # 障碍物
    def __init__(self, surf, x=0, y=0):
        self.surface = surf
        self.x = x
        self.y = y
        self.w = surf.get_width()
        self.h = surf.get_height()
        self.cur_frame = random.randint(0, 6)  # 随机获取一种障碍物的类型
        self.w = 100
        self.h = 100

    def getPos(self):  # 当前的坐标信息
        return (self.x, self.y, self.w, self.h)

    def judgeCollision(self, rect1, rect2):  # 碰撞检测
        if (rect2[0] >= rect1[2] - 20) or (rect1[0] + 40 >= rect2[2]) or (rect1[1] + rect1[3] < rect2[1] + 20) or (
                rect2[1] + rect2[3] < rect1[1] + 20):
            return False
        return True


class BackGround(object):  # 背景
    def __init__(self, surf):
        self.surface = surf  # 初始化一个Surface 对象
        self.dx = -10
        self.w = surf.get_width()    # 返回 Surface 对象的宽度,以像素为单位。
        self.rect = surf.get_rect()  # 获取 Surface 对象的矩形区域


class PaoKu(object):
    def __init__(self):
        pygame.init()
        pygame.mixer.init()

        self.width = 1200  # 窗口宽度
        self.height = 500  # 窗口高度
        self.size = (self.width, self.height)
        self.screen = pygame.display.set_mode(self.size)
        pygame.display.set_caption('跑酷运动')
        self.score = 0  # 分数
        self.font1 = pygame.font.Font("resource/simkai.ttf", 32)
        self.font2 = pygame.font.Font("resource/simkai.ttf", 64)  # 字体
        self.obstacle_pic = pygame.image.load("resource/obstacles.png").convert_alpha()  # 障碍物图片
        self.game_over = pygame.image.load("resource/gameover.bmp").convert_alpha()  # 游戏结束图片
        self.bg = BackGround(pygame.image.load("resource/bg.png").convert_alpha())  # 背景对象
        self.person = Person(pygame.image.load("resource/person.png").convert_alpha(), 500 - 85)  # 人物对象
        self.screen.blit(self.bg.surface, [0, 0])  # 初始化游戏背景

        self.obstacle_list = []  # 障碍物对象数组
        self.game_state = 0  # 游戏状态,0表示游戏中,1表示游戏结束
        self.life = 3        # 初始的生命值
        self.clock = pygame.time.Clock()  # 时钟
        self.bg_music = pygame.mixer.Sound(r"resource\bgm.wav").play(-1, 0)  # 循环播放北京音乐

    def startGame(self, screen):   # 开始游戏界面
        gameStart = pygame.image.load("resource/start1new.png")
        screen.blit(gameStart, (0, 0))
        font = pygame.font.SysFont("resource/simkai.ttf", 70)
        tip = font.render("Press Any Key To Start!, Press Esc To Quit", True, (65, 105, 225))
        screen.blit(tip, (self.width / 2 - 550, self.height / 2 + 150))
        pygame.display.update()
        while True:
            for event in pygame.event.get():  # 关闭窗口
                if event.type == pygame.QUIT:
                    self.terminate()
                elif event.type == pygame.KEYDOWN:
                    if (event.key == pygame.K_ESCAPE):  # 按下ESC键
                        self.terminate()
                    else:
                        return
    def addObstacle(self):   # 添加障碍物
        rate = 4
        # 是否生成障碍物
        if not random.randint(0, 300) < rate:
            return
        y = random.choice([self.height - 100, self.height - 200, self.height - 300, self.height - 400])
        obstacle = Obstacle(self.obstacle_pic, self.width + 40, y)
        self.obstacle_list.append(obstacle)
    # 监听键盘事件,并做处理
    def ListenKeyBoard(self):  # 键盘事件处理

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                # 空格键跳跃
                if self.game_state == 0:
                    if event.key == pygame.K_SPACE:
                        pygame.mixer.Sound(r"resource\jump.wav").play()
                        if self.person.state == 0:
                            self.person.state = 1
                            self.person.velocity_y = self.person.vy_start
                        elif self.person.state == 1:
                            self.person.state = 2
                            self.person.velocity_y = self.person.vy_start
                elif self.game_state == 1:
                    if event.key == pygame.K_RETURN:   # 重新开始游戏
                        self.bg_music.stop()
                        self.__init__()

        if self.game_state == 0:
            # BackGorund的运动
            self.bg.dx += 10
            if self.bg.dx == 1200:
                self.bg.dx = 0

                # Person的移动
            if self.person.state == 0:
                self.person.cur_frame += 1
                if self.person.cur_frame == 12:
                    self.person.cur_frame = 0
            else:
                self.person.y += self.person.velocity_y
                self.person.velocity_y += self.person.gravity
                if self.person.y >= 500 - 85:
                    self.person.y = 500 - 85
                    self.person.state = 0
            # bstacle的操作
            self.addObstacle()

            for obstacle in self.obstacle_list:
                obstacle.x -= 10# obstacle向左移动十个像素

                if obstacle.x + obstacle.w <= 0:  # 当obstacle离开界面时
                    self.obstacle_list.remove(obstacle)
                    self.score += 10  # 避开obstacle,加10分
                if obstacle.judgeCollision(self.person.getPos(), obstacle.getPos()):  # 碰撞检测
                    if obstacle.cur_frame == 6:
                        self.obstacle_list.remove(obstacle)
                        self.score += 100  # 吃金币加100分
                        coin_sound = pygame.mixer.Sound(
                            r"resource/coin.wav")
                        coin_sound.play()
                    else:
                       self.life -= 1
                       self.obstacle_list.remove(obstacle)
                       if self.life <= 0:
                            self.game_state = 1  # 游戏失败
                       die_sound = pygame.mixer.Sound(
                           r"resource\die.wav")  # 添加碰撞之后产生的音效
                       die_sound.play()
    # 更新显示界面
    def updateScreen(self, screen):
            screen.blit(self.bg.surface, [-self.bg.dx, 0])  # 背景的贴图
            screen.blit(self.bg.surface, [1200 - self.bg.dx, 0])
            text = self.font1.render("score:%d" % self.score, True, (128, 128, 128))  # 分数的贴图
            screen.blit(text, (500, 20))
            del text
            rest_life = self.font1.render("life:%d" % self.life, True, (128, 128, 128))  # 剩余生命
            screen.blit(rest_life, (400, 20))
            del rest_life
            screen.blit(self.person.surface, [0, self.person.y], [int(self.person.cur_frame) * self.person.w, 0, self.person.w, self.person.h])  # 人物的贴图
            for obstacle in self.obstacle_list:  # 障碍物的贴图
                screen.blit(obstacle.surface, [obstacle.x, obstacle.y],
                            [int(obstacle.cur_frame) * obstacle.w, 0, obstacle.w, obstacle.h])
    # 判断游戏的状态
    def judgeState(self, screen):
        if self.game_state == 0:
            self.updateScreen(screen)
            return
        elif self.game_state == 1:
            screen.blit(self.game_over, [0, 0])
            text = self.font1.render("GameOver Score:%d  Press Enter to restart" % self.score, True, (255, 0, 0))
            screen.blit(text, (self.width / 2 - 350, self.height / 2 + 150))
    # 游戏结束
    def terminate(self):
        pygame.quit()
        sys.exit()

    # 游戏主入口函数
    def main(self):
        self.startGame(self.screen)
        while True:
            self.clock.tick(40)  # 设置时钟频率
            self.judgeState(self.screen)
            self.ListenKeyBoard()
            pygame.display.flip()

if __name__ == '__main__':
    paoku = PaoKu()
    paoku.main()

素材包:

person

 start1new

startgame1 

 

 startgame2


bg

 gameover

 

 obstacles

用 Python 写了一个天天酷跑(附源码) 阅读详情

相关推荐

C++跑酷游戏代码

【代码】C++跑酷游戏代码。

py_rookie_的博客 786

如何在python中做一个简单的跑酷游戏

在 Python 中制作一个跑酷游戏需要使用一些图形库,比如 Pygame 或 Pyglet。这些库可以帮助你创建游戏窗口,处理用户输入,并且绘制图形。 下面是一个使用 Pygame 的示例代码,它创建了一个游戏窗口,并在其中绘制一个蓝色的正方形: import pygame # 初始化 Pygame pygame.init() # 设置窗口大小和标题 screen = pygame.disp...

weixin_35756373的博客 1799

C++跑酷小游戏

直接上代码;大家可以复制下来玩一玩~源代码: 记得点赞,关注加收藏哦~

2401_83054973的博客 425

python小游戏——跑酷小恐龙代码开源

python小游戏——推箱子代码开源

一起努力共同进步,为了未来一起奋斗吧! 9097

python代码复刻一款天天酷跑游戏

python代码复刻一款天天酷跑游戏,实现界面、各类物体以及用户碰撞检测、游戏不断刷新等功能。

车道线检测1.0(Python+Opencv基础版)

车道线检测是指在道路上自动检测和识别车道线的过程。车道线是道路上的标记,用于指示车辆行驶的方向和位置。 通过对车道线进行检测和识别,自动驾驶和智能驾驶系统可以实现车辆的自动导航、车道保持、车道偏离警告等功能。

Dream_orz的博客 4264

跑酷小游戏C++源代码

注意这是C++语言,请不要放到Python里和其他里面。话不多说,直接上代码!

Harry_g_Potter的博客 7075

数字锁相环的原理与FPGA实现

数字锁相环是锁相环电路的全数字实现。锁相环电路能够实现对输入信号的相位进行跟踪,进而在噪声中提取纯净的有用信号。以上就是今天要讲的内容,本文简单地介绍了锁相环的原理,然后,在Vivado仿真平台上,通过verilog做仿真验证。最终仿真结果能够实现锁定,但锁定时间较长,表明参数仍可做调整。

weixin_45857378的博客 8510

C++跑酷游戏源代码

if(B[b].what>=300&&B[b].what

爱刷题的小希 2079

如何有效使用Project(1)——编制进度计划、保存基准

1.前言: 软件产品的研发、升级、定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点。如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配是否合理。 当然,如果你的公司已经实施了专门的PM软件来监督管控,可以忽略本文。否则,你可以用微软的Project来做到这一工作。 我也算是一个专业的从事PM软件产品的人(虽然我们的客户都是制造...

weixin_34236869的博客 2115

openlayers6【十九】vue HeatmapLayer热力图层实现热力图效果详解

文章目录1. 写在前面2. Heatmap 类实现热力图2.1 Heatmap 参数2.2 实现热力图3. 完整代码4. 添加删除map图层的方法5. 热力图自身的get,set方法 1. 写在前面 我们主要看热力图的效果,区域绘制效怎么设置详细内容可以访问 openlayers6【十七】vue VectorLayer矢量图层画地图省市区,多省市区(粤港澳大湾区)效果详解 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap L

@必意玲 1万+

【141103】跑酷游戏源代码

本源码是模拟的跑酷小游戏,带有流畅的人物奔跑动画效果,还有欢快的音乐。源码基于VC 2010创建,请用VS2010或更高版本编译运行。在帧动画的判断上,本可以直接使用求余运算, 但是%求余运算速度及效率不好, 所以使用简单的判断操作代替。通过源码可了解下绘制人物、透明贴图的相关技巧,这些技巧对于编写游戏来用是相当有用的。 游戏源码下载地址:点击下载

资源小站 6879

相机中的归一化实现讲解

本分讲解了图像处理中常出现的两个相机归一化操作

weixin_42102084的博客 1475

Swift游戏实战-跑酷熊猫(一) 简介 (含源代码)

原文:Swift游戏实战-跑酷熊猫(一) 简介 (含源代码) 优酷观看地址:http://v.youku.com/v_show/id_XNzM2Nzc2MTIw.html 通过这个小游戏,我们能够接触到物理系统(SKPhysicsBody,physicsWorld),动作(SKAction),声音素材的播放,文本标签(SKLabelNode) ...

weixin_33897722的博客 230

新手避坑指南:用镭神C32和KVH 1750 IMU做标定,为什么直接上lidar_align会失败?

本文详细解析了使用镭神C32激光雷达和KVH 1750 IMU进行标定时常见的失败原因及解决方案。从IMU的微分传感器特性到Lidar-IMU标定的数学本质,再到可行的标定方案和实操注意事项,帮助新手避开认知陷阱,掌握正确的标定方法。

weixin_30162121的博客 327

WinInet 编程:MFC 中的互联网编程

WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。

JAZJD的博客 1638

超好玩地铁跑酷游戏,内涵源代码

超好玩地铁跑酷游戏,内涵源代码

yaosichengalpha的博客 3799

【GameFramework框架内置模块】10、本地化(Localization)

本地化(Localization),也就是我们所说的不同地区的语言适配,比如说中文版“你好”,英文版是“Hello”。GameFramework在本地化方面,不仅支持文本的本地化,还支持任意资源的本地化,比如说游戏中释放烟花的特效也可以做出不同地区的版本,使得中文版烟花里面的“新年好”字样的特效,在英文版里面是“Happy New Year”字样的特效。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2303

cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 OK,到昨天为止,我们已经将游戏基本上写完了,这里本来就是别人开源的东西,我这里重写,当然要发布源代码。那么这里有两种方式: 第一种:将我执行成功的整个项目打包,VS2012+win7...

weixin_30950607的博客 101

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

HTML/JS/CSS 【跑酷游戏教程】含教程,源代码,解析!

本文将介绍如何使用HTML5 Canvas和原生JavaScript创建一个类似Chrome恐龙游戏的跑酷游戏。游戏包含完整的视觉设计和交互功能,采用纯前端技术实现,无需任何外部库。核心内容包括游戏画布设置、角色动画、障碍物生成、碰撞检测以及计分系统。文章提供了完整的HTML结构和CSS样式代码,展示了如何通过Canvas绘制游戏元素,并利用JavaScript实现游戏逻辑。游戏界面设计现代美观,包含渐变色背景、分数显示、游戏说明和重新开始功能,适合前端开发初学者学习Canvas游戏开发的基本原理。

分享unity,c#,c++相关内容 1054

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【转载】C++跑酷小游戏

直接上代码。

蒟蒻の博客 3370

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【c++】跑酷8.0

我把b_game.h1.0用在了跑酷8.0上 所以请先安装b_game.h1.0 b_game.h1.0 修改了N个BUG(N不敢说,怕吓死你) 修改了N个细节(N不敢说,怕吓死你) 代码的第10行的<>里要填入你保存b_game.h1.0的位置 #include<iostream> #include<iomanip> #include<string> #include<cstdlib> #include<ctime> #

饼干的博客 486

C++版忍者跑酷小游戏(可直接复制程序源代码)

c++跑酷小游戏

m0_75148190的博客 9953

Python地铁跑酷地图源代码介绍:地铁跑酷地图核心功能与场景

Python地铁跑酷地图源代码介绍:地铁跑酷地图核心功能与场景 【下载地址】Python地铁跑酷地图源代码介绍 这份开源项目提供了一个使用Python编写的地铁跑酷游戏地图的完整源代码,适合对游戏开发和Python编程感兴趣的开发者及初学者。项目展示了Python在高级数据结构、面向对象编程和动态类型方面的优势,帮助用户...

gitblog_06779的博客 1006
下一篇: pygame实现淡入淡出
https_wyk
博客等级 码龄4年 4粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值