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

作者:顾木子吖 时间:2022-09-17 12:12:14 

导语

小伙伴们大家好~

如今的游戏可谓是层出不穷,NBA 2K系列啊,FIFA系列啊更是经典中的经典,不过小编发现,赛车游戏也是深受大家欢迎啊,像跑跑卡丁车、QQ飞车,还有主机游戏极品飞车系列。

咳咳咳......小编那时候主要是最喜欢里面的人物颜值来的!

赛车游戏,通常以款式多样的车型、各式各样的赛道、身临其境的拟真度吸引了众多玩家,而玩家在游戏中需要驾驶各类赛车驰骋在世界各地的赛道上,享受肾上腺素飙升的快感。

那么接下来就给小编大家用代码编写一款《赛车CAR》小游戏吧,让我们一起来看看

一、环境安装

1)运行环境

文用到的运行环境:Python3.7、Pycharm社区版2021、Pygame游戏模块部分自带模块直 接导入不需要安装。

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

2)素材环境

音乐背景图片等:

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

二、代码展示


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

WINDOWWIDTH = 800
WINDOWHEIGHT = 600
TEXTCOLOR = (255, 255, 255)
BACKGROUNDCOLOR = (0, 0, 0)
FPS = 40
BADDIEMINSIZE = 10
BADDIEMAXSIZE = 40
BADDIEMINSPEED = 8
BADDIEMAXSPEED = 8
ADDNEWBADDIERATE = 6
PLAYERMOVERATE = 5
count=3

def terminate():
   pygame.quit()
   sys.exit()

def waitForPlayerToPressKey():
   while True:
       for event in pygame.event.get():
           if event.type == QUIT:
               terminate()
           if event.type == KEYDOWN:
               if event.key == K_ESCAPE: #escape quits
                   terminate()
               return

def playerHasHitBaddie(playerRect, baddies):
   for b in baddies:
       if playerRect.colliderect(b['rect']):
           return True
   return False

def drawText(text, font, surface, x, y):
   textobj = font.render(text, 1, TEXTCOLOR)
   textrect = textobj.get_rect()
   textrect.topleft = (x, y)
   surface.blit(textobj, textrect)

# set up pygame, the window, and the mouse cursor
pygame.init()
mainClock = pygame.time.Clock()
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('car 赛车游戏')
pygame.mouse.set_visible(False)

# fonts
font = pygame.font.SysFont(None, 30)

# sounds
gameOverSound = pygame.mixer.Sound('music/crash.wav')
pygame.mixer.music.load('music/car.wav')
laugh = pygame.mixer.Sound('music/laugh.wav')

# images
playerImage = pygame.image.load('image/car1.png')
car3 = pygame.image.load('image/car3.png')
car4 = pygame.image.load('image/car4.png')
playerRect = playerImage.get_rect()
baddieImage = pygame.image.load('image/car2.png')
sample = [car3,car4,baddieImage]
wallLeft = pygame.image.load('image/left.png')
wallRight = pygame.image.load('image/right.png')

# "Start" screen
drawText('Press any key to start the game.', font, windowSurface, (WINDOWWIDTH / 3) - 30, (WINDOWHEIGHT / 3))
drawText('And Enjoy', font, windowSurface, (WINDOWWIDTH / 3), (WINDOWHEIGHT / 3)+30)
pygame.display.update()
waitForPlayerToPressKey()
zero=0
if not os.path.exists("data/save.dat"):
   f=open("data/save.dat",'w')
   f.write(str(zero))
   f.close()  
v=open("data/save.dat",'r')
topScore = int(v.readline())
v.close()
while (count>0):
   # start of the game
   baddies = []
   score = 0
   playerRect.topleft = (WINDOWWIDTH / 2, WINDOWHEIGHT - 50)
   moveLeft = moveRight = moveUp = moveDown = False
   reverseCheat = slowCheat = False
   baddieAddCounter = 0
   pygame.mixer.music.play(-1, 0.0)

while True: # the game loop
       score += 1 # increase score

for event in pygame.event.get():

if event.type == QUIT:
               terminate()

if event.type == KEYDOWN:
               if event.key == ord('z'):
                   reverseCheat = True
               if event.key == ord('x'):
                   slowCheat = True
               if event.key == K_LEFT or event.key == ord('a'):
                   moveRight = False
                   moveLeft = True
               if event.key == K_RIGHT or event.key == ord('d'):
                   moveLeft = False
                   moveRight = True
               if event.key == K_UP or event.key == ord('w'):
                   moveDown = False
                   moveUp = True
               if event.key == K_DOWN or event.key == ord('s'):
                   moveUp = False
                   moveDown = True

if event.type == KEYUP:
               if event.key == ord('z'):
                   reverseCheat = False
                   score = 0
               if event.key == ord('x'):
                   slowCheat = False
                   score = 0
               if event.key == K_ESCAPE:
                       terminate()

if event.key == K_LEFT or event.key == ord('a'):
                   moveLeft = False
               if event.key == K_RIGHT or event.key == ord('d'):
                   moveRight = False
               if event.key == K_UP or event.key == ord('w'):
                   moveUp = False
               if event.key == K_DOWN or event.key == ord('s'):
                   moveDown = False

# Add new baddies at the top of the screen
       if not reverseCheat and not slowCheat:
           baddieAddCounter += 1
       if baddieAddCounter == ADDNEWBADDIERATE:
           baddieAddCounter = 0
           baddieSize =30
           newBaddie = {'rect': pygame.Rect(random.randint(140, 485), 0 - baddieSize, 23, 47),
                       'speed': random.randint(BADDIEMINSPEED, BADDIEMAXSPEED),
                       'surface':pygame.transform.scale(random.choice(sample), (23, 47)),
                       }
           baddies.append(newBaddie)
           sideLeft= {'rect': pygame.Rect(0,0,126,600),
                      'speed': random.randint(BADDIEMINSPEED, BADDIEMAXSPEED),
                      'surface':pygame.transform.scale(wallLeft, (126, 599)),
                      }
           baddies.append(sideLeft)
           sideRight= {'rect': pygame.Rect(497,0,303,600),
                      'speed': random.randint(BADDIEMINSPEED, BADDIEMAXSPEED),
                      'surface':pygame.transform.scale(wallRight, (303, 599)),
                      }
           baddies.append(sideRight)

# Move the player around.
       if moveLeft and playerRect.left > 0:
           playerRect.move_ip(-1 * PLAYERMOVERATE, 0)
       if moveRight and playerRect.right < WINDOWWIDTH:
           playerRect.move_ip(PLAYERMOVERATE, 0)
       if moveUp and playerRect.top > 0:
           playerRect.move_ip(0, -1 * PLAYERMOVERATE)
       if moveDown and playerRect.bottom < WINDOWHEIGHT:
           playerRect.move_ip(0, PLAYERMOVERATE)

for b in baddies:
           if not reverseCheat and not slowCheat:
               b['rect'].move_ip(0, b['speed'])
           elif reverseCheat:
               b['rect'].move_ip(0, -5)
           elif slowCheat:
               b['rect'].move_ip(0, 1)

for b in baddies[:]:
           if b['rect'].top > WINDOWHEIGHT:
               baddies.remove(b)

# Draw the game world on the window.
       windowSurface.fill(BACKGROUNDCOLOR)

# Draw the score and top score.
       drawText('Score: %s' % (score), font, windowSurface, 128, 0)
       drawText('Top Score: %s' % (topScore), font, windowSurface,128, 20)
       drawText('Rest Life: %s' % (count), font, windowSurface,128, 40)

windowSurface.blit(playerImage, playerRect)

for b in baddies:
           windowSurface.blit(b['surface'], b['rect'])

pygame.display.update()

# Check if any of the car have hit the player.
       if playerHasHitBaddie(playerRect, baddies):
           if score > topScore:
               g=open("data/save.dat",'w')
               g.write(str(score))
               g.close()
               topScore = score
           break

mainClock.tick(FPS)

# "Game Over" screen.
   pygame.mixer.music.stop()
   count=count-1
   gameOverSound.play()
   time.sleep(1)
   if (count==0):
    laugh.play()
    drawText('Game over', font, windowSurface, (WINDOWWIDTH / 3), (WINDOWHEIGHT / 3))
    drawText('Press any key to play again.', font, windowSurface, (WINDOWWIDTH / 3) - 80, (WINDOWHEIGHT / 3) + 30)
    pygame.display.update()
    time.sleep(2)
    waitForPlayerToPressKey()
    count=3
    gameOverSound.stop()

三、效果展示

每个赛车游戏生命值三条消耗完即游戏结束。躲避相应的车子会加分。方向键左右即是移动键。

游戏开始&mdash;&mdash;

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

游戏界面&mdash;&mdash;

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

游戏结束&mdash;&mdash;

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

来源:https://blog.csdn.net/weixin_55822277/article/details/123002193

标签:Python,Pygame,赛车,游戏
0
投稿

猜你喜欢

  • SQL SERVER 2008 无法附加数据库的解决方法

    2024-01-18 02:35:50
  • 用户"sa"登陆失败 SQLServer 错误18456的解决方法

    2024-01-18 18:04:37
  • 对python while循环和双重循环的实例详解

    2021-01-17 22:22:59
  • django admin 根据choice字段选择的不同来显示不同的页面方式

    2022-04-26 06:39:10
  • Python 根据数据模板创建shapefile的实现

    2023-07-27 00:10:32
  • Python+OpenCV六种实时图像处理详细讲解

    2022-06-14 10:47:27
  • win10系统配置GPU版本Pytorch的详细教程

    2023-07-21 19:30:38
  • python利用多种方式来统计词频(单词个数)

    2021-12-23 14:52:32
  • Python 依赖库太多了该如何管理

    2021-06-22 22:29:02
  • python selenium在打开的浏览器中动态调整User Agent

    2022-09-26 13:41:59
  • Tensorflow 1.0之后模型文件、权重数值的读取方式

    2022-01-09 21:33:18
  • python自动截取需要区域,进行图像识别的方法

    2021-05-14 11:04:42
  • python绘制散点图和折线图的方法

    2021-08-24 04:27:56
  • MSSQL安全设置的具体步骤和方法小结

    2024-01-18 05:55:43
  • php开启openssl的方法

    2023-11-14 06:52:51
  • 解析zend studio中直接导入svn中的项目的方法步骤

    2023-09-05 02:21:01
  • python 包之 re 正则匹配教程分享

    2021-10-15 18:36:41
  • 在Mac OS上使用mod_wsgi连接Python与Apache服务器

    2021-12-18 11:20:02
  • Golang语言如何高效拼接字符串详解

    2023-07-11 03:46:57
  • 基于python调用psutil模块过程解析

    2022-04-09 18:22:56
  • asp之家 网络编程 m.aspxhome.com