基于Python+Pygame实现经典赛车游戏

目录
  • 导语
  • 一、环境安装
  • 二、代码展示
    • 1.主程序main.py
    • 2.地图设置maps.py
  • 三、效果展示
    • 1.游戏界面
    • 2.游戏运行中
    • 3.15分到手

导语

哈喽!哈喽~我是木木子,很久没给大家更新游戏的类似啦——

有粉丝投稿,说最近由于受疫情影响封闭在家不能离开小区,前不久刚刚报名的驾照考试只能无线延期,在家里还是挺无聊的,“憋在家里没事干的时候去打打游戏写写代码还挺好的。

于是,小编灵机一动,就有了今天这款简易版本的《赛车计划》也就是咳咳咳.......

通俗点儿就是一款代码写的一款关于汽车的小游戏,由于小编的思路跟编程的学习跟不上!!

SO,我尽力了......只能展示出这样的一款赛车游戏~有大神的话可以优化啦~

一、环境安装

1.各种素材(图片)

2.运行环境

小编使用的环境:Python3、Pycharm社区版、Pygame模块部分自带。

模块安装:pip install -i https://pypi.douban.com/simple/ pygame

二、代码展示

这款游戏代码特别多啦,小编这里就主要展示一下主程序运行的代码,全部的就找我文末拿哈~

1.主程序main.py

import os, sys, pygame, random, array, gamemode
import direction,  bounds, timeout, menu
from pygame.locals import *

#Import game modules.
from loader import load_image
import player, maps, traffic, camera, tracks

TRAFFIC_COUNT = 45
CENTER_W = -1
CENTER_H = -1

#Main function.
def main():
#initialize objects.
    clock = pygame.time.Clock()
    running = True
    font = pygame.font.Font(None, 24)
    car = player.Player()
    cam = camera.Camera()
    target = gamemode.Finish()
    bound_alert = bounds.Alert()
    time_alert = timeout.Alert()
    info = menu.Alert()
    pointer = direction.Tracker(int(CENTER_W * 2), int(CENTER_H * 2))
#create sprite groups.
    map_s     = pygame.sprite.Group()
    player_s  = pygame.sprite.Group()
    traffic_s = pygame.sprite.Group()
    tracks_s  = pygame.sprite.Group()
    target_s  = pygame.sprite.Group()
    pointer_s = pygame.sprite.Group()
    timer_alert_s = pygame.sprite.Group()
    bound_alert_s = pygame.sprite.Group()
    menu_alert_s = pygame.sprite.Group()

#generate tiles
    for tile_num in range (0, len(maps.map_tile)):
        maps.map_files.append(load_image(maps.map_tile[tile_num], False))
    for x in range (0, 10):
        for y in range (0, 10):
            map_s.add(maps.Map(maps.map_1[x][y], x * 1000, y * 1000, maps.map_1_rot[x][y]))

#load tracks
    tracks.initialize()
#load finish
    target_s.add(target)
#load direction
    pointer_s.add(pointer)
#load alerts
    timer_alert_s.add(time_alert)
    bound_alert_s.add(bound_alert)
    menu_alert_s.add(info)
#load traffic
    traffic.initialize(CENTER_W, CENTER_H)
    for count in range(0, TRAFFIC_COUNT):
        traffic_s.add(traffic.Traffic())

    player_s.add(car)

    cam.set_pos(car.x, car.y)

    while running:
#Render loop.

#Check for menu/reset, (keyup event - trigger ONCE)
        for event in pygame.event.get():
            if event.type == pygame.KEYUP:
                if keys[K_m]:
                    if (info.visibility == True):
                        info.visibility = False
                    else:
                        info.visibility = True
                if (keys[K_p]):
                    car.reset()
                    target.reset()
                if (keys[K_q]):
                    pygame.quit()
                    sys.exit(0)

            if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                running = False
                break

#Check for key input. (KEYDOWN, trigger often)
        keys = pygame.key.get_pressed()
        if (target.timeleft > 0):
            if keys[K_LEFT]:
                car.steerleft()
            if keys[K_RIGHT]:
                car.steerright()
            if keys[K_UP]:
                car.accelerate()
            else:
                car.soften()
            if keys[K_DOWN]:
                car.deaccelerate()

        cam.set_pos(car.x, car.y)

#Show text data.
        text_fps = font.render('FPS: ' + str(int(clock.get_fps())), 1, (224, 16, 16))
        textpos_fps = text_fps.get_rect(centery=25, centerx=60)

        text_score = font.render('Score: ' + str(target.score), 1, (224, 16, 16))
        textpos_score = text_fps.get_rect(centery=45, centerx=60)

        text_timer = font.render('Timer: ' + str(int((target.timeleft / 60)/60)) + ":" + str(int((target.timeleft / 60) % 60)), 1, (224, 16, 16))
        textpos_timer = text_fps.get_rect(centery=65, centerx=60)

#Render Scene.
        screen.blit(background, (0,0))

        #cam.set_pos(car.x, car.y)

        map_s.update(cam.x, cam.y)
        map_s.draw(screen)

#Conditional renders/effects
        car.grass(screen.get_at(((int(CENTER_W-5), int(CENTER_H-5)))).g)
        if (car.tracks):
            tracks_s.add(tracks.Track(cam.x + CENTER_W, cam.y + CENTER_H, car.dir))

#Just render..
        tracks_s.update(cam.x, cam.y)
        tracks_s.draw(screen)

        player_s.update(cam.x, cam.y)
        player_s.draw(screen)

        traffic_s.update(cam.x, cam.y)
        traffic_s.draw(screen)

        target_s.update(cam.x, cam.y)
        target_s.draw(screen)

        pointer_s.update(car.x + CENTER_W, car.y + CENTER_H, target.x, target.y)
        pointer_s.draw(screen)

#Conditional renders.
        if (bounds.breaking(car.x+CENTER_W, car.y+CENTER_H) == True):
            bound_alert_s.update()
            bound_alert_s.draw(screen)
        if (target.timeleft == 0):
            timer_alert_s.draw(screen)
            car.speed = 0
            text_score = font.render('Final Score: ' + str(target.score), 1, (224, 16, 16))
            textpos_score = text_fps.get_rect(centery=CENTER_H+56, centerx=CENTER_W-20)
        if (info.visibility == True):
            menu_alert_s.draw(screen)

#Blit Blit..
        screen.blit(text_fps, textpos_fps)
        screen.blit(text_score, textpos_score)
        screen.blit(text_timer, textpos_timer)
        pygame.display.flip()

#Check collision!!!
        if pygame.sprite.spritecollide(car, traffic_s, False):
            car.impact()
            target.car_crash()

        if pygame.sprite.spritecollide(car, target_s, True):
            target.claim_flag()
            target.generate_finish()
            target_s.add(target)

        clock.tick(64)

#initialization
pygame.init()

screen = pygame.display.set_mode((pygame.display.Info().current_w,
                                  pygame.display.Info().current_h),
                                  pygame.FULLSCREEN)

pygame.display.set_caption('Race of Math.')
pygame.mouse.set_visible(False)
font = pygame.font.Font(None, 24)

CENTER_W =  int(pygame.display.Info().current_w /2)
CENTER_H =  int(pygame.display.Info().current_h /2)

#new background surface
background = pygame.Surface(screen.get_size())
background = background.convert_alpha()
background.fill((26, 26, 26))

#Enter the mainloop.
main()

pygame.quit()
sys.exit(0)

2.地图设置maps.py

import os, sys, pygame, math
from pygame.locals import *
from loader import load_image
from random import randrange

#Map filenames.

map_files = []
map_tile = ['X.png', 'I.png', 'L.png', 'T.png', 'O.png', 'null.png']

#Map to tile.
crossing = 0
straight = 1
turn     = 2
split    = 3
deadend  = 4
null     = 5

#tilemap.
map_1 = [
          [2,1,3,1,1,3,1,1,1,4],
          [1,5,1,5,4,0,1,2,5,4],
          [1,4,3,1,3,3,1,3,2,1],
          [3,1,3,1,3,5,4,5,1,1],
          [3,2,1,5,1,5,3,1,0,3],
          [1,2,0,1,0,3,0,4,1,1],
          [1,5,1,4,2,1,1,2,3,1],
          [1,2,0,1,3,3,0,0,2,1],
          [1,1,4,2,2,5,1,2,1,3],
          [2,3,1,3,1,1,3,1,1,2]
        ]

#tilemap rotation, x90ccw
map_1_rot = [
          [1,1,0,1,1,0,1,1,1,3],
          [0,0,0,0,1,0,1,0,0,0],
          [0,1,2,1,0,2,1,2,0,0],
          [1,1,0,1,3,0,0,0,0,0],
          [1,0,0,0,0,0,1,1,0,3],
          [0,2,0,1,0,0,0,3,0,0],
          [0,0,0,1,3,0,0,1,3,0],
          [0,1,0,1,0,2,0,0,3,0],
          [0,0,2,1,3,0,0,2,1,3],
          [2,2,1,2,1,1,2,1,1,3]
            ]

class Map(pygame.sprite.Sprite):
    def __init__(self, tile_map, y, x, rot):
        pygame.sprite.Sprite.__init__(self)
        self.image = map_files[tile_map]
        self.rect = self.image.get_rect()

        if rot != 0:
            self.image = pygame.transform.rotate(self.image, rot * 90)

        self.x = x
        self.y = y

#Realign the map
    def update(self, cam_x, cam_y):
        self.rect.topleft = self.x - cam_x, self.y - cam_y

三、效果展示

游戏玩法:M游戏开始——P重来——Q退出游戏。跟着红色箭头运行会出现奖杯。一个奖杯15

分,在规定时间拿到的奖杯越多数越高啦~

1.游戏界面

2.游戏运行中

3.15分到手

到此这篇关于基于Python+Pygame实现经典赛车游戏的文章就介绍到这了,更多相关Python Pygame赛车游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python+Pygame制作简易版2048小游戏

    目录 导语 正文 主要代码 效果图 导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏! 2048小游戏——准确的来说确实是一个简单版本的! 呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧! 正文 为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波! 然后.........完全停不下来!23333~ 玩法: 用手指或键盘上下左右滑动,将

  • Python Pygame实战之水果忍者游戏的实现

    目录 一.准备中 1.0游戏规则 1.1游戏图片素材(可修改) 1.2游戏字体素材(可修改) 二.环境安装 三.开始敲代码 3.0设置界面玩家生命值等 3.1导入模块 3.2界面背景.字体设置 3.3游戏窗口设置 3.4随机生成水果的位置与数据存放 3.5用一个字典来存放水果的数据 3.6在屏幕中绘制字体 3.7绘制玩家的生命 3.8游戏开始与结束画面 3.9游戏主循环 四.游戏展示效果 导语 Hey!下午好,我是木木子,关注我,一起玩游戏吧~ ​ ​微信小游戏很久之前刮起了一股切水果热潮,还记

  • Python Pygame实战之打地鼠小游戏

    目录 前言 开发工具 环境搭建 原理简介 前言 今天给大家写一个个打地鼠小游戏,废话不多说直接开始- 开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠~ 首先,让我们确定一下游戏中有哪些元素.打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类: '''地鼠'

  • python实现飞机大战游戏(pygame版)

    简介 使用python实现pygame版的飞机大战游戏: 环境:Windows系统+python3.8.0 游戏规则: 1.点击"PLAY"或者按键"P"开始游戏: 2.敌机根据设置频率从顶部随机位置生成,生成后向下移动: 3.飞船在底部中间生成,玩家使用上下左右键控制飞船移动,敲击空格键发射子弹: 4.子弹打到敌机,该敌机产生爆炸效果并累计分数到右上角: 5.消灭10只飞机后,等级升高,敌机生成频率变快,下落速度也变快: 6.当三条命都消失了,游戏结束. 游戏运行

  • Python Pygame实战之赛车游戏的实现

    目录 导语 一.环境安装 1)运行环境 2)素材环境 二.代码展示 三.效果展示 游戏开始—— 游戏界面—— 游戏结束—— 导语 小伙伴们大家好~ 如今的游戏可谓是层出不穷,NBA 2K系列啊,FIFA系列啊更是经典中的经典,不过小编发现,赛车游戏也是深受大家欢迎啊,像跑跑卡丁车.QQ飞车,还有主机游戏极品飞车系列. 咳咳咳......小编那时候主要是最喜欢里面的人物颜值来的! 赛车游戏,通常以款式多样的车型.各式各样的赛道.身临其境的拟真度吸引了众多玩家,而玩家在游戏中需要驾驶各类赛车驰骋在世

  • 使用python+pygame开发消消乐游戏附完整源码

    效果是这样的 ↓ ↓ ↓ 一.环境要求 windows系统,python3.6+ pip21+ 开发环境搭建地址 一起来学pygame吧 游戏开发30例(开篇词)--环境搭建+游戏效果展示 安装游戏依赖模块 pip install pygame 二.游戏简介 消消乐应该大家都玩过,或者看过.这个花里胡哨的小游戏 用python的pygame来实现,很简单. 今天带大家,用Python来实现一下这个花里胡哨的小游戏. 三.完整开发流程 1.项目主结构 首先,先整理一下项目的主结构,其实看一下主结构

  • 基于Python+Pygame实现经典赛车游戏

    目录 导语 一.环境安装 二.代码展示 1.主程序main.py 2.地图设置maps.py 三.效果展示 1.游戏界面 2.游戏运行中 3.15分到手 导语 哈喽!哈喽~我是木木子,很久没给大家更新游戏的类似啦—— 有粉丝投稿,说最近由于受疫情影响封闭在家不能离开小区,前不久刚刚报名的驾照考试只能无线延期,在家里还是挺无聊的,“憋在家里没事干的时候去打打游戏写写代码还挺好的. 于是,小编灵机一动,就有了今天这款简易版本的<赛车计划>也就是咳咳咳....... 通俗点儿就是一款代码写的一款关于

  • 基于python pygame实现的兔子吃月饼小游戏

    目录 小游戏规则简介 实现 初始化游戏窗口 游戏逻辑 实现玩家类 实现月饼类 交互逻辑 总结 中秋佳节就快来临,给各位大佬整个兔子吃月饼的小游戏助助兴,废话不多说,开整. 小游戏规则简介 玩家通过"wsad"或者"↑↓←→"键控制兔子移动,使得兔子可以吃到更多的月饼,月饼一旦生成之后位置不会变,也不会消失,就等着兔子去吃,就是这么简单.但是吃了月饼会变重,重到一定程度会有想不到的效果. 实现 使用Python的pygame模块开发,pygame是用来开发游戏软件的P

  • 基于Python Pygame实现的画饼图游戏

    目录 导入包 配置基本参数 根据输入的数字改变扇形的个数 监听事件 这个游戏就是实现键盘上输入不同的数字,将圆分割成不同的几个部分,每部分用不同的颜色来实现. 导入包 导入随机包,pygame,系统包,time时间包用于时间暂停.math是用来确认弧度的. import random import pygame, sys, time import math from pygame.locals import * 配置基本参数 初始化pygame,设置窗口大小标题,设置圆心的x和y轴,圆的半径,线

  • Python+Pygame实现经典魂斗罗游戏

    目录 一.效果展示 二.操作说明 三.核心代码 今天分享一个经典小游戏魂斗罗的 Python 版实现. 一.效果展示 二.操作说明 A:向左 D:向右 W:跳起 S:趴下 J:射击 P:退出程序 目前游戏还是比较初级的版本,有兴趣的小伙伴可以自行修改完善. 三.核心代码 class Game_Player(): def __init__(self,game_settings,screen): self.screen = screen self.game_settings = game_setti

  • Python+Pygame实战之泡泡游戏的实现

    目录 导语 一.环境安装 二.代码展示 三.效果展示 导语 泡泡王国 欢乐多多 咕噜噜,吹泡泡,七彩泡泡满天飘.大的好像彩气球,小的就像紫葡萄. ​当泡泡漫天飞舞时,大朋友.小朋友都会情不自禁地被它吸引.而当珍珠般的泡泡遇上可爱的程序员门时,又会出现什么样的美丽风景呢? 说到4399小游戏,没有人会陌生吧?我小时候经常趁着家长不在家的时候偷偷打开电脑打开小游戏的网页,在电脑桌前一坐就是一下午,真的不能赖我不适可而止,而是这些游戏真的太好 玩了!关于童年的经典游戏and有关泡泡的,之前已经仿写了一

  • 基于Python实现英语单词小游戏

    目录 导语 一.敲代码之前的小tips 二.运行环境 三.素材(图片等) 四.代码展示 1)主程序(英文打字小游戏主入口模块) 2)游戏配置信息模块 3)游戏视图模块 4)PyGame游戏精灵模块 五.效果展示 1)游戏界面 2)游戏设置 ​3)随机截图 4)游戏结束 导语 相信大家对于英语四级一点都不陌生了吧? 很多学校都是要求学生必须考过英语四级,不然就不能毕业. 一开始我抱着侥幸心理,心想上高中的时候英语不错,四级应该也很容易.不过成绩出来我就傻眼了,没有通过.然后我就制定了周密的学习计划

  • 基于Python实现贪吃蛇小游戏(附源码)

    目录 前言 主要设计 应用知识点 1.python知识点 2.pygamezero知识点 功能截图 代码实现 1.蛇的表示 2.蛇的前进移动 3.控制移动方向 4.游戏失败 5.食物的随机出现 6.游戏得分 源码 总结 前言 这几年人工智能技术大发展,Python因此几乎成了第一位的语言.实际上,多年来,它不仅在软件工程师中得到广泛使用,也是各行业通用的专家语言,就是说,不管孩子以后做什么,都可能用得着.准备针对我自己上小学的孩子,每周抽出些时间,通过学习他们感兴趣的小游戏,逐步把python知

  • 用Python设计一个经典小游戏

    本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下注,押大或押小: 输入下注金额: 摇3个骰子,11≤骰子总数≤18为大,3≤骰子总数≤10为小: 如果赢了,获得1倍金额,输了,扣除1倍金额,本金为0时,游戏结束. 程序运行结果是这样的: 现在,我们来梳理下思路. 我们

  • Python Pygame实现落球游戏详解

    目录 引包 初始化配置 捕捉事件 填充屏幕让球下落 完整代码 引包 引入对应的包,和原来一样写一个打印文字的方法 import sys, random,  pygame from pygame.locals import * def print_text(font, x, y, text, color=(255, 255, 255)):     img_text = font.render(text, True, color)     screen.blit(img_text, (x, y))

随机推荐