基于Python+Pygame怎么实现经典赛车游戏
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"基于Python+Pygame怎么实现经典赛车游戏"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"基于Python+Pygame怎么实现经典赛
千家信息网最后更新 2026年11月03日基于Python+Pygame怎么实现经典赛车游戏
这篇文章主要介绍"基于Python+Pygame怎么实现经典赛车游戏"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"基于Python+Pygame怎么实现经典赛车游戏"文章能帮助大家解决问题。
一、环境安装
1.各种素材(图片)
2.运行环境
小编使用的环境:Python3、Pycharm社区版、Pygame模块部分自带。
模块安装:pip install -i https://pypi.douban.com/simple/ pygame
二、代码展示
这款游戏代码特别多啦,小编这里就主要展示一下主程序运行的代码,全部的就找我文末拿哈~
1.主程序main.py
import os, sys, pygame, random, array, gamemodeimport direction, bounds, timeout, menufrom pygame.locals import * #Import game modules.from loader import load_imageimport player, maps, traffic, camera, tracks TRAFFIC_COUNT = 45CENTER_W = -1CENTER_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) #initializationpygame.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 surfacebackground = 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, mathfrom pygame.locals import *from loader import load_imagefrom 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 = 0straight = 1turn = 2split = 3deadend = 4null = 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, x90ccwmap_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怎么实现经典赛车游戏"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
经典
赛车
代码
奖杯
环境
知识
运行
主程序
模块
行业
不同
实用
内容
图片
地图
实用性
实际
效果
文章
方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网是第几次科技革命的成果
今日互联网科技
互联网科技英文
科技创新互联网企业
壕鑫互联网络科技
互联网科技的未来发展
天扬科技互联网广告
常德市电业局互联网科技部
互联网校园科技培训
互联网科技有哪些公司
崇明区互联网教育科技诚信经营
阿大互联网科技有限公司
搜狐科技互联网
华夏恒生互联网科技013171
互联网行业科技股
互联网科技创新的路径
伊宁互联网科技做什么的
21世纪互联网科技成就
杭州融税互联网科技有限公司
广州全民伙伴互联网科技有限公司
广州淘业互联网络科技
狮子座互联网科技
南京欣网互联网科技
互联网教育科技公司vipkid
移动互联网科技股
中和天地互联网科技有限公司
四川互联网展示科技馆设计
互联网科技股为什么大涨
互联网相关科技技术
普陀区互联网教育科技管理办法