前几天受到儿子班级同学写得一首班级游戏人的打油诗影响,同时也是对儿子贪玩手机游戏不用心学习的无奈,写了首小诗:
从来游戏最害人,沉迷游戏学业毁。
游戏青春空余恨,游戏人生终后悔。
年轻人玩游戏简直要命,青春易逝,一不小心中学六年过去了,虽然学习是一辈子的事情,但是过了这几年就算想要学习也很难赶上来了。我上中学的时候没有条件玩游戏,上了大学了才接触电子游戏,当时也打过通宵,我记得是《仙剑奇侠传》,打完之后就记得特别累,白天上课没有精神,最后就记得里面的几首诗词,除此之外,基本上没有任何收获,实在不划算,后来就不玩了。当然了,后来刚认识老婆的时候陪着老婆玩这个游戏装走迷宫高手还是有的,因为我记忆力比较好,走过一遍就能记住,很长时间不会忘掉。
在软件行业工作,玩游戏没啥意思,但写一个游戏就要有点技术水平了。本文就用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,才能设计出有卖点的游戏。就说这个贪吃蛇游戏,在网上搜一下就能发现一大堆大同小异的游戏,很难体现出特色来。游戏的价值来自于创造性和差异化,事实上,其他软件产品也一样,甚而我们每一个人以及我们所在的组织也都一样,我们的价值在于我们不一样!
领取专属 10元无门槛券
私享最新 技术干货