跑酷游戏源代码

这篇具有很好参考价值的文章主要介绍了跑酷游戏源代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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文章来源地址https://www.toymoban.com/news/detail-471457.html

到了这里,关于跑酷游戏源代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python简单小游戏代码教程,python小游戏程序源代码

    大家好,小编来为大家解答以下问题,python简单小游戏代码教程,python小游戏程序源代码,今天让我们一起来看看吧! 哈喽铁子们 表弟最近在学Python,总是跟我抱怨很枯燥无味,其实,他有没有认真想过,可能是自己学习姿势不对? 比方说,可以通过打游戏来学编程! 今天

    2024年02月02日
    浏览(62)
  • Python背单词记单词小程序源代码,背单词记单词小游戏源代码

    背单词小游戏,要有多界面交互,界面整洁、美观,可调节游戏等级难度,可配置游戏信息。 有游戏分数,游戏时间,动画特效,背景音乐,不同游戏等级的历史最高分记录。 拼写成功的英文单词显示中文意思。支持长按回删键[backspace],快速删除单词字母。 多种游戏困难

    2024年02月15日
    浏览(60)
  • python简单小游戏代码100行,python小游戏程序源代码

    大家好,本文将围绕python简单小游戏代码100行展开说明,python小游戏代码能用的是一个很多人都想弄明白的事情,想搞清楚python小游戏程序源代码需要先了解以下几个事情。 这次用Python实现的是一个接球打砖块的小游戏,需要导入pygame模块,有以下两条经验总结: 1.多父类的

    2024年02月06日
    浏览(65)
  • python简单小游戏代码200行,用python写小游戏源代码

    大家好,小编来为大家解答以下问题,python简单小游戏代码200行,用python写小游戏源代码,现在让我们一起来看看吧! Source code download: 本文相关源码 大家好,本文将围绕python简单小游戏代码100行展开说明,python小游戏代码能用的是一个很多人都想弄明白的事情,想搞清楚

    2024年02月21日
    浏览(58)
  • Python游戏开发--外星人入侵(源代码)

    最近学习的python第一个项目实战,《外星人入侵》,成功实现所有功能,给大家提供源代码 环境安装:python 3.7+ pygame 安装 pygame 或者 先展示效果,消灭外星人,有三条命,按Q是退出全屏,空格键是子弹,按下play键开始游戏,击败外星人飞船会有积分加,三条命之后需要点击

    2024年02月06日
    浏览(55)
  • Python制作的赛车小游戏源代码,逆行飙车

    python制作的赛车小游戏,逆行飙车,通过键盘方向键控制 程序运行截图: 源代码 完整赛车小游戏下载:赛车小游戏源代码 Python代码大全,海量代码任你下载

    2024年02月12日
    浏览(58)
  • Java基础阶段项目 ---- 拼图游戏(含讲解以及源代码)

    此项目为java基础的阶段项目,此项目涉及了基础语法,面向对象等知识,具体像语法基础如判断,循环,数组,字符串,集合等…; 面向对象如封装,继承,多态,抽象类,接口,内部类等等…都有涉及。此项目涉及的内容比较多,作为初学者可以很好的将前面的知识串起来。此项目拿来练手以

    2024年02月09日
    浏览(39)
  • python版大富翁游戏源代码,自己实现自己玩~

    本文实例为大家分享了python版大富翁游戏的具体代码,供大家参考,具体内容如下: 关于Python技术储备 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

    2024年01月16日
    浏览(50)
  • Java实现俄罗斯方块小游戏。(附完整源代码)

    大家好,我是百思不得小赵。 创作时间:2022 年 5 月 12 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀 今天是加入CSDN的第1167天。觉得有帮助麻烦👏点赞、🍀评论、❤️收藏 目录 一、游戏背景 二、功能实现 三、效果

    2024年02月03日
    浏览(65)
  • ASP.NET猜数游戏的设计与开发(源代码+论文)

    随着科学技术和精神生活的不断提高,人们越来越多的热衷于猜数游戏这类小型休闲益智型游戏。它利用其简单的操作方式及逻辑有趣的游戏过程吸引着众多玩家。本次课题设计的即一款界面简洁、大方,休闲有趣的小型猜数游戏系统。本系统采用Microsoft Visual Studio.NET 2003开

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包