文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-30 07:41

关注

这篇文章主要介绍“基于Python+Pygame怎么实现经典赛车游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Python+Pygame怎么实现经典赛车游戏”文章能帮助大家解决问题。

一、环境安装

各种素材(图片)

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

运行环境

小编使用的环境: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.游戏界面

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

2.游戏运行中

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

3.15分到手

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

关于“基于Python+Pygame怎么实现经典赛车游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯