python赛车游戏代码,python赛车游戏简易

本篇文章给大家谈谈python赛车游戏代码,以及python赛车游戏简易,希望对各位有所帮助,不要忘了收藏本站喔。

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

欢迎和猫妹一起,趣味学Python。

今日主题

你玩过游戏吗?

你喜欢玩游戏吗?

手机游戏,电脑游戏,还是游戏机游戏?

pygame是一个跨平台Python库,pygame 作者是 Pete Shinners, 协议为 GNU Lesser General Public License。

pygame官网上有许多游戏,如下图:  

咱们今天简单学习下pygame,了解用它做游戏的简单流程。

使用前,需要用pip安装下pygame库。

一、绘制窗口

import sys
import pygame
from pygame.locals import *


BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED   = (255, 0, 0)


()
clock = .Clock()
(60)


pygame.display.set_caption("疯狂赛车")
screen = pygame.display.set_mode((500, 800))
(WHITE)
pygame.display.update()


while True:
    for event in ():
        if  == QUIT:
            ()
            ()
    pygame.display.update()

2行:导入pygame库

3行:导入pygame库中的局部变量

5~7行:定义单个颜色RGB变量

9行:该函数在使用pygame时进行初始化,只有引用了该函数才能使用pygame提供的所用功能。

10行:实例化Clock对象

11行:设置每秒60帧,每秒更新不超过60次。

帧速率是指程序每秒在屏幕上绘制图像的数目,我们可以用FPS来表示它。

一般的计算机都能达到每秒60帧的速度。如果我们把帧速率讲得比较低,游戏会看上去较为卡顿。

.Clock对象帮助我们确定程序要以多少最大的帧速率运行。

13行:设置窗口的名称

14行:设置游戏窗口大小

15行:设置窗口填充颜色

16行:刷新屏幕内容显示

18~23行:当玩家点击退出时才会退出,所以是一个循环结构。

19行:获取事件,比如鼠标、键盘等

20行:当用户点击了窗口的关闭,产生事件QUIT

21~22行:退出程序,()是()函数的一种相反的函数,它运行的代码会使得Pygame库停止工作。在调用()终止程序之前,总是应该先调用()。

23行:刷新屏幕

二、加载游戏界面

import sys, os, random
import pygame
from pygame.locals import *


BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED   = (255, 0, 0)


.dirname(__file__)
(GAME_ROOT_FOLDER, "Images")
()
clock = .Clock()
(60)


pygame.display.set_caption("疯狂赛车")
IMG_ROAD = ((IMAGE_FOLDER, ""))
IMG_PLAYER = ((IMAGE_FOLDER, ""))
IMG_ENEMY = ((IMAGE_FOLDER, ""))
screen = pygame.display.set_mode(IMG_ROAD.get_size())


h=IMG_ROAD.get_width()//2
v=IMG_ROAD.get_height() - (IMG_PLAYER.get_height()//2)
player = pygame.sprite.Sprite()
player.image = IMG_PLAYER
 = pygame.Surface(IMG_PLAYER.get_size())
 = .get_rect(center = (h, v))
hl=IMG_ENEMY.get_width()//2
hr=IMG_ROAD.get_width()-(IMG_ENEMY.get_width()//2)
h=random.randrange(hl, hr)
v=0
enemy = pygame.sprite.Sprite()
enemy.image = IMG_ENEMY
 = pygame.Surface(IMG_ENEMY.get_size())
 = .get_rect(center = (h, v))
while True:
    (IMG_ROAD, (0,0))
    (player.image, )
    (enemy.image, )


    for event in ():
        if  == QUIT:
            ()
            ()
    pygame.display.update()

1行:导入sys、os、random

9行:获取当前py文件所在路径

10行:当前py文件夹路径下的Images,此路径存放一些图片

16~18行:加载三张图像数据

(1).使用()加载图像的数据

(2).使用游戏屏幕对象,调用blit方法将图像绘制到指定位置

(3).调用pygame.display.update()方法更新整个屏幕的显示

要在创建的窗口中按照指定要求显示图片,需要三个步骤:

19行:设置窗口大小

21~26行:设置player信息

精灵(sprite),一种能放在surface上的图片对象,可以进行移动、旋转、删除等操作。

创建sprite对象player,分别设置图像、大小、位置等。

31~34行:设置enemy信息

创建sprite对象enemy,分别设置图像、大小、位置等。

36~38行:使用游戏屏幕对象,调用blit方法将图像绘制到指定位置

三、动起来

import sys, os, random
import pygame
from pygame.locals import *
from datetime import datetime


BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED   = (255, 0, 0)


moveSpeed = 5
.dirname(__file__)
(GAME_ROOT_FOLDER, "Images")
()
clock = .Clock()
(60)


pygame.display.set_caption("疯狂赛车")
IMG_ROAD = ((IMAGE_FOLDER, ""))
IMG_PLAYER = ((IMAGE_FOLDER, ""))
IMG_ENEMY = ((IMAGE_FOLDER, ""))
screen = pygame.display.set_mode(IMG_ROAD.get_size())


h=IMG_ROAD.get_width()//2
v=IMG_ROAD.get_height() - (IMG_PLAYER.get_height()//2)
player = pygame.sprite.Sprite()
player.image = IMG_PLAYER
 = pygame.Surface(IMG_PLAYER.get_size())
 = .get_rect(center = (h, v))
hl=IMG_ENEMY.get_width()//2
hr=IMG_ROAD.get_width()-(IMG_ENEMY.get_width()//2)
h=random.randrange(hl, hr)
v=0
enemy = pygame.sprite.Sprite()
enemy.image = IMG_ENEMY
 = pygame.Surface(IMG_ENEMY.get_size())
 = .get_rect(center = (h, v))
while True:
    (IMG_ROAD, (0,0))


    (player.image, )
    keys = .get_pressed()
    if keys[K_LEFT] and  > 0:
        .move_ip(-moveSpeed, 0)
        if  < 0:
             = 0


    if keys[K_RIGHT] and .right < IMG_ROAD.get_width():
        .move_ip(moveSpeed, 0)
        if .right > IMG_ROAD.get_width():
            .right = IMG_ROAD.get_width()


    (enemy.image, )
    .move_ip(0, moveSpeed)
    if (.bottom > IMG_ROAD.get_height()):
        hl=IMG_ENEMY.get_width()//2
        hr=IMG_ROAD.get_width()-(IMG_ENEMY.get_width()//2)
        h=random.randrange(hl, hr)
        v=0
        .center = (h, v)
    for event in ():
        if  == QUIT:
            ()
            ()
    pygame.display.update()


    dt_obj = ()
    millisec = dt_obj.timestamp()
    print(millisec)



怎么让游戏动起来呢?

只需要修改两张汽车的照片位置即可,可以用键盘上的左右键控制汽车player的左右移动,另一辆汽车可以自动从上向下移动。

10行:变量moveSpeed用于定义汽车移动速度

41~45行:如果按下了键盘方向键左键,且坐标没有靠近最左边,使其向左移动,否则在窗口最左边不改变。

47~50行:如果按下了键盘方向键右键,且坐标没有靠近最右边,使其向右移动,否则在窗口最右边不改变。

53~59行:汽车enemy从上向下移动,如果移出窗口,则重新生成一个,位置在顶部,横坐标随机。

66~68行:打印时间信息,调试使用

四、碰撞检测

import sys, os, random
import pygame
from pygame.locals import *
from datetime import datetime


BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED   = (255, 0, 0)


moveSpeed = 5
maxSpeed = 10
score = 0
.dirname(__file__)
(GAME_ROOT_FOLDER, "Images")
def GameOver():
    ()
    ()
()
clock = .Clock()
(60)


pygame.display.set_caption("疯狂赛车")
IMG_ROAD = ((IMAGE_FOLDER, ""))
IMG_PLAYER = ((IMAGE_FOLDER, ""))
IMG_ENEMY = ((IMAGE_FOLDER, ""))
screen = pygame.display.set_mode(IMG_ROAD.get_size())


h=IMG_ROAD.get_width()//2
v=IMG_ROAD.get_height() - (IMG_PLAYER.get_height()//2)
player = pygame.sprite.Sprite()
player.image = IMG_PLAYER
 = pygame.Surface(IMG_PLAYER.get_size())
 = .get_rect(center = (h, v))
hl=IMG_ENEMY.get_width()//2
hr=IMG_ROAD.get_width()-(IMG_ENEMY.get_width()//2)
h=random.randrange(hl, hr)
v=0
enemy = pygame.sprite.Sprite()
enemy.image = IMG_ENEMY
 = pygame.Surface(IMG_ENEMY.get_size())
 = .get_rect(center = (h, v))
while True:
    pygame.display.set_caption("疯狂赛车-得分 " + str(score))
    (IMG_ROAD, (0,0))


    (player.image, )
    keys = .get_pressed()
    if keys[K_LEFT] and  > 0:
        .move_ip(-moveSpeed, 0)
        if  < 0:
             = 0


    if keys[K_RIGHT] and .right < IMG_ROAD.get_width():
        .move_ip(moveSpeed, 0)
        if .right > IMG_ROAD.get_width():
            .right = IMG_ROAD.get_width()


    (enemy.image, )
    .move_ip(0, moveSpeed)
    if (.bottom > IMG_ROAD.get_height()):
        hl=IMG_ENEMY.get_width()//2
        hr=IMG_ROAD.get_width()-(IMG_ENEMY.get_width()//2)
        h=random.randrange(hl, hr)
        v=0
        .center = (h, v)
        score += 1
        if moveSpeed < maxSpeed:
            moveSpeed += 1
    if pygame.sprite.collide_rect(player, enemy):
        GameOver()
    for event in ():
        if  == QUIT:
            ()
            ()
    pygame.display.update()


    # dt_obj = ()
    # millisec = dt_obj.timestamp()
    # print(millisec)

11行:对面汽车的最大速度

12行:定义变量用于保存玩家分数

15行:定义一个函数,当玩家汽车和对面汽车接触时退出游戏

43行:窗口标题栏会显示玩家当前的分数

66行:每躲过一个对面的小汽车时,分数加1

67~68行:每躲过一个对面的小汽车时,对面小汽车速度加1,直到最大值

69~70:检测两个精灵对象是否接触,如果接触,退出游戏

五、Game Over

import sys, os, random, time
import pygame
from pygame.locals import *




BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED   = (255, 0, 0)


startSpeed = 5
moveSpeed = startSpeed


maxSpeed = 10
score = 0


eNum = -1
paused = False


.dirname(__file__)
(GAME_ROOT_FOLDER, "Images")


def GameOver():
    textFonts = ['comicsansms','arial']
    textSize = 48
    fontGameOver = .SysFont(textFonts, textSize)
    textGameOver = fontGameOver.render("Game Over!", True, RED)
    rectGameOver = textGameOver.get_rect()
    rectGameOver.center = (IMG_ROAD.get_width()//2,
                           IMG_ROAD.get_height()//2)


    (BLACK)
    (textGameOver, rectGameOver)
    pygame.display.update()


    ()
    ()
    time.sleep(5)


    ()
    ()


()
clock = .Clock()
(60)


pygame.display.set_caption("疯狂赛车")
IMG_ROAD = ((IMAGE_FOLDER, ""))
IMG_PLAYER = ((IMAGE_FOLDER, ""))
IMG_ENEMIES = []
IMG_ENEMIES.append(((IMAGE_FOLDER, "")))
IMG_ENEMIES.append(((IMAGE_FOLDER, "")))
IMG_ENEMIES.append(((IMAGE_FOLDER, "")))
IMG_ENEMIES.append(((IMAGE_FOLDER, "")))
screen = pygame.display.set_mode(IMG_ROAD.get_size())


h=IMG_ROAD.get_width()//2
v=IMG_ROAD.get_height() - (IMG_PLAYER.get_height()//2)
player = pygame.sprite.Sprite()
player.image = IMG_PLAYER
 = pygame.Surface(IMG_PLAYER.get_size())
 = .get_rect(center = (h, v))


while True:
    pygame.display.set_caption("疯狂赛车-得分 " + str(score))
    (IMG_ROAD, (0,0))


    (player.image, )
    if eNum == -1:
        eNum = random.randrange(0, len(IMG_ENEMIES))
        hl=IMG_ENEMIES[eNum].get_width()//2
        hr=IMG_ROAD.get_width()-(IMG_ENEMIES[eNum].get_width()//2)
        h=random.randrange(hl, hr)
        v=0


        enemy = pygame.sprite.Sprite()
        enemy.image = IMG_ENEMIES[eNum]
         = pygame.Surface(IMG_ENEMIES[eNum].get_size())
         = .get_rect(center = (h, v))


    keys = .get_pressed()
    if paused:
        if not keys[K_SPACE]:
            moveSpeed=tempSpeed
            paused=False
    else:
        if keys[K_LEFT] and  > 0:
            .move_ip(-moveSpeed, 0)
            if  < 0:
                 = 0
        if keys[K_RIGHT] and .right < IMG_ROAD.get_width():
            .move_ip(moveSpeed, 0)
            if .right > IMG_ROAD.get_width():
                .right = IMG_ROAD.get_width()
        if keys[K_SPACE]:
            tempSpeed=moveSpeed
            moveSpeed=0
            paused=True


    (enemy.image, )
    .move_ip(0, moveSpeed)


    if (.bottom > IMG_ROAD.get_height()):
        ()
        eNum = -1
        score += 1
        moveSpeed += 1
        if moveSpeed < maxSpeed:
            moveSpeed += 1


    if eNum >= 0 and pygame.sprite.collide_rect(player, enemy):
        if eNum == 3:
            moveSpeed = startSpeed
        else:
            GameOver()
    for event in ():
        if  == QUIT:
            ()
            ()
    pygame.display.update()

5行:开始速度

22~40行:将游戏结束时,显示Game Over

16行:对面汽车索引

17行:是否暂停

49~53行:对面障碍物,是四个图片中的一个,随机出现

68~78行:随机产生一个障碍物

81~84行:空格键松开时,恢复对面车的运动速度,游戏暂停结束

94~97行:空格键按下时,保存当前对面车的速度,游戏开始暂停

102~108行:当对面车移除游戏窗口时,销毁它

111~112行:当遇到特殊的车,速度降低到原始速度

源码

有朋友需要图片、源码等资源的话,可以点击阅读原文,然后输入6666

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!


原文地址:https://blog.csdn.net/parasoft/article/details/130435847

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简单的Python赛车游戏代码,使用了Pythonpygame库实现: ```python import pygame import random # 初始化pygame pygame.init() # 设置窗口大小 win_width = 600 win_height = 600 # 创建窗口 win = pygame.display.set_mode((win_width, win_height)) # 设置窗口标题 pygame.display.set_caption("赛车游戏") # 加载赛车图片 car_img = pygame.image.load("car.png") # 设置赛车的初始位置 car_x = win_width // 2 - car_img.get_width() // 2 car_y = win_height - car_img.get_height() - 10 # 设置赛道 track_width = 300 track_x = (win_width - track_width) // 2 track_y = 0 track_color = (255, 255, 255) # 设置障碍物 obstacles = [] # 游戏是否结束 game_over = False # 设置游戏时钟 clock = pygame.time.Clock() # 游戏主循环 while not game_over: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True # 移动赛车 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and car_x > track_x + 10: car_x -= 5 elif keys[pygame.K_RIGHT] and car_x < track_x + track_width - car_img.get_width() - 10: car_x += 5 # 移动障碍物 for obstacle in obstacles: obstacle["y"] += 5 if obstacle["y"] > win_height: obstacles.remove(obstacle) # 添加障碍物 if random.randint(0, 100) < 5: obstacle_x = random.randint(track_x, track_x + track_width - 50) obstacle_y = 0 obstacle_width = random.randint(50, 100) obstacle_height = random.randint(50, 100) obstacles.append({"x": obstacle_x, "y": obstacle_y, "width": obstacle_width, "height": obstacle_height}) # 检测碰撞 for obstacle in obstacles: if car_x < obstacle["x"] + obstacle["width"] and car_x + car_img.get_width() > obstacle["x"] and \ car_y < obstacle["y"] + obstacle["height"] and car_y + car_img.get_height() > obstacle["y"]: game_over = True # 绘制窗口 win.fill((0, 0, 0)) pygame.draw.rect(win, track_color, (track_x, track_y, track_width, win_height)) win.blit(car_img, (car_x, car_y)) for obstacle in obstacles: pygame.draw.rect(win, (255, 0, 0), (obstacle["x"], obstacle["y"], obstacle["width"], obstacle["height"])) pygame.display.flip() # 设置游戏时钟 clock.tick(60) # 游戏结束,退出pygame pygame.quit() ``` 在运行代码之前,需要准备一张赛车图片(例如名为`car.png`的图片),并将其放在代码所在的目录中。 这个简单的赛车游戏会在窗口中显示赛道和赛车,并不断地向下移动障碍物。玩家可以使用左右箭头键控制赛车的移动,避免撞到障碍物。如果赛车与障碍物发生碰撞,游戏将结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值