Python实现贪吃蛇游戏案例

前几天受到儿子班级同学写得一首班级游戏人的打油诗影响,同时也是对儿子贪玩手机游戏不用心学习的无奈,写了首小诗:

从来游戏最害人,沉迷游戏学业毁。

游戏青春空余恨,游戏人生终后悔。

年轻人玩游戏简直要命,青春易逝,一不小心中学六年过去了,虽然学习是一辈子的事情,但是过了这几年就算想要学习也很难赶上来了。我上中学的时候没有条件玩游戏,上了大学了才接触电子游戏,当时也打过通宵,我记得是《仙剑奇侠传》,打完之后就记得特别累,白天上课没有精神,最后就记得里面的几首诗词,除此之外,基本上没有任何收获,实在不划算,后来就不玩了。当然了,后来刚认识老婆的时候陪着老婆玩这个游戏装走迷宫高手还是有的,因为我记忆力比较好,走过一遍就能记住,很长时间不会忘掉。

在软件行业工作,玩游戏没啥意思,但写一个游戏就要有点技术水平了。本文就用Python来实现一个贪吃蛇的案例,逻辑不复杂,首先要有一个画板,然后初始化一条贪吃蛇,然后准备一个食物,接下来就让这条贪吃蛇跑起来,写一个控制键盘方向键的逻辑来改变贪吃蛇爬动的方向,如果碰到食物就吃下去贪吃蛇变长,如果碰到边界就游戏失败。

逻辑清晰没毛病,直接上代码:

#author: hanshiqiang365

import pygame, sys, random, time

check_errors = pygame.init()

if check_errors[1] > 0:

print("(!) Failed start Snake Game with errors ...".format(check_errors[1]))

sys.exit(-1)

else:

print("(+) Successfully started Snake Game!")

fpsController = pygame.time.Clock()

snakePos = [100, 50]

snakeBody = [[100,50], [90,50], [80,50]]

foodPos = [random.randrange(1,72)*10,random.randrange(1,46)*10]

foodSpawn = True

direction = 'RIGHT'

changeto = direction

score = 0

def gameOver():

myFont = pygame.font.SysFont('Calibri', 72)

GOsurf = myFont.render('Game Over!', True, pygame.Color(255, 0, 0))

GOrect = GOsurf.get_rect()

GOrect.midtop = (360, 15)

playSurface.blit(GOsurf,GOrect)

showScore(0)

time.sleep(2)

pygame.quit()

sys.exit()

def showScore(choice=1):

sFont = pygame.font.SysFont('Calibri', 24)

Ssurf = sFont.render('Score : '.format(score) , True, pygame.Color(0, 0, 0) )

Srect = Ssurf.get_rect()

if choice == 1:

Srect.midtop = (80, 10)

else:

Srect.midtop = (360, 120)

playSurface.blit(Ssurf,Srect)

while True:

if event.type == pygame.QUIT:

pygame.quit()

sys.exit()

elif event.type == pygame.KEYDOWN:

if event.key == pygame.K_RIGHT or event.key == ord('d'):

changeto = 'RIGHT'

if event.key == pygame.K_LEFT or event.key == ord('a'):

changeto = 'LEFT'

if event.key == pygame.K_UP or event.key == ord('w'):

changeto = 'UP'

if event.key == pygame.K_DOWN or event.key == ord('s'):

changeto = 'DOWN'

if event.key == pygame.K_ESCAPE:

if event.key == pygame.K_DOWN or event.key == ord('s'):

changeto = 'DOWN'

if changeto == 'RIGHT' and not direction == 'LEFT':

direction = 'RIGHT'

if changeto == 'LEFT' and not direction == 'RIGHT':

direction = 'LEFT'

if changeto == 'UP' and not direction == 'DOWN':

direction = 'UP'

if changeto == 'DOWN' and not direction == 'UP':

direction = 'DOWN'

if direction == 'RIGHT':

snakePos[0] += 10

if direction == 'LEFT':

snakePos[0] -= 10

if direction == 'UP':

snakePos[1] -= 10

if direction == 'DOWN':

snakePos[1] += 10

snakeBody.insert(0, list(snakePos))

if snakePos[0] == foodPos[0] and snakePos[1] == foodPos[1]:

score += 1

foodSpawn = False

else:

snakeBody.pop()

if foodSpawn == False:

foodPos = [random.randrange(1,72)*10,random.randrange(1,46)*10]

foodSpawn = True

playSurface.fill(pygame.Color(225, 225, 225) )

for pos in snakeBody:

if snakePos[0] > 710 or snakePos[0]

gameOver()

if snakePos[1] > 450 or snakePos[1]

gameOver()

for block in snakeBody[1:]:

if snakePos[0] == block[0] and snakePos[1] == block[1]:

gameOver()

showScore()

fpsController.tick(18)

运行程序,启动贪吃蛇游戏界面,控制方向键开始吃:

在这个案例中利用了pygame这个类库,设置自定义的游戏界面图标和标题,然后在游戏界面上不断地画贪吃蛇和食物,监控键盘输入改变贪吃蛇地跑动方向,设置游戏结束条件的逻辑判断,全部代码写下来需要80几行代码,认真写也就需要1-2小时就可以搞定。

我跟儿子说,玩游戏不算本事,写游戏才是能耐!学会Python,分分钟写一个游戏出来让别人来玩,这才叫创造力!

当然了,要想制作出好的经典的游戏,除了懂技术会写代码之外,要学会设计游戏故事和套路,更要重视用户体验,设计出好的UI,才能设计出有卖点的游戏。就说这个贪吃蛇游戏,在网上搜一下就能发现一大堆大同小异的游戏,很难体现出特色来。游戏的价值来自于创造性和差异化,事实上,其他软件产品也一样,甚而我们每一个人以及我们所在的组织也都一样,我们的价值在于我们不一样!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180616G0WDFZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券