超级玛丽、魂斗罗、坦克大战、冒险岛……提到这些游戏,"80后"、"90后"滔滔不绝,掀起一波回忆杀。
最近不少媒体发文称:"小霸王被申请破产"。其实,不管有没有破产,小霸王终究只能成为童年回忆了,它的落寞是不争的事实,曾风靡全国的光辉再也回不去了。
今天我来用 Python 制作一个曾经标志性的游戏:「贪吃蛇」。学习和趣味两不耽误的coding。让我们开始构建游戏吧。
导入库
首先,我们需要将库导入到代码中,这些代码将用于构建游戏。我们需要下面的库来构建和运行我们的游戏。importpygame
importtime
importrandom
说明如下:pygame:此库将帮助我们获取所有图形组件来构建游戏。
random:这个库将帮助我们在游戏中随机位置生成食物。
time:这有助于我们在游戏中与时间相关的功能,如蛇的速度。
启动游戏并设置图形
现在,让我们开始构建游戏部分。我们将首先初始化游戏。pygame.init()
我们在游戏中定义了6种颜色。white=(255,255,255)
yellow=(255,255,102)
black=(0,0,0)
red=(213,50,80)
green=(0,255,0)
blue=(50,153,213)
接下来,我们应该定义游戏运行的显示的大小。将高度定义为 600px,宽度定义为 800px。width=800
height=600
接下来,我们将使用定义游戏标题的游戏名称。dis=pygame.display.set_mode((width,height))
pygame.display.set_caption("SnakeGame")
定义游戏中使用的变量
现在我们将初始化时钟变量,该变量将使用我们之前导入的时间包。clock=pygame.time.Clock()
定义我们的蛇的速度,以及蛇块的大小。snake_block=10
snake_speed=12
接下来,我们定义字体大小和字体样式,用于显示分数。font_style=pygame.font.SysFont(“bahnschrift”,25)
score_font=pygame.font.SysFont(“comicsansms”,35)
定义帮助器函数
在这里,我们需要定义三个帮助器函数,用于以下目的:用于显示分数、处理蛇和处理游戏中其他相关信息的显示。defYour_score(score):
value=score_font.render("YourScore:"+str(score),True,yellow)
dis.blit(value,[0,0]
defour_snake(snake_block,snake_list):
forxinsnake_list:
pygame.draw.rect(dis,black,[x[0],x[1],snake_block,snake_block])
defmessage(msg,colour):
mesg=font_style.render(msg,True,colour)
dis.blit(mesg,[width/6,height/3])
构建游戏循环
现在,我们开始构建游戏的组件,使其运行并通过键盘响应用户输入。
我们首先定义两个布尔变量:game_over和game_close。他们将描述游戏状态。
第一个会告诉游戏是否结束。下一个变量定义游戏是否关闭,我们需要再次玩游戏。我们把两者定义为假。game_over=False
game_close=False
下一步,我们的目标是定义游戏中需要的其他变量。x1=width/2
y1=height/2
x1_change=0
y1_change=0
snake_List=[]
snake_length=1
foodx=round(random.randrange(0,width—snake_block)/10.0)*10.0
foody=round(random.randrange(0,height—snake_block)/10.0)*10.0
接下来,我们将启动一个循环,该循环将game_over变为True。
在该循环中,我们将首先定义要执行的指令,以防game_close为 True。
下面是代码,这将有助于我们解决这种情况时,game_close等于真。whilegame_close==True:
dis.fill(blue)
message(“Oops!Yoursnakedied!PressPtoplayagainorQtoquit”,red)
Your_score(snake_length—1)
pygame.display.update()
foreventinpygame.event.get():
ifevent.type==pygame.KEYDOWN:
ifevent.key==pygame.K_q:
game_over=True
game_close=False
ifevent.key==pygame.K_p:
gameLoop()
现在,在处理game_close条件后,我们接下来将定义所有必需的步骤,这些步骤将允许我们的蛇通过用户的输入移动。我们将接受 W, A, S, D 和向上, 向下, 左右键组合玩游戏。您可以自由选择您选择的键来玩游戏。foreventinpygame.event.get():
ifevent.type==pygame.QUIT:
game_over=True
ifevent.type==pygame.KEYDOWN:
ifevent.key==pygame.K_LEFTorevent.key==pygame.K_a:
x1_change=-snake_block
y1_change=0
elifevent.key==pygame.K_RIGHTorevent.key==pygame.K_d:
x1_change=snake_block
y1_change=0
elifevent.key==pygame.K_UPorevent.key==pygame.K_w:
y1_change=-snake_block
x1_change=0
elifevent.key==pygame.K_DOWNorevent.key==pygame.K_s:
y1_change=snake_block
x1_change=0
接下来,我们将定义输掉比赛的条件。ifx1>=widthorx1=heightory1
game_close=True
x1+=x1_change
y1+=y1_change
dis.fill(blue)
pygame.draw.rect(dis,green,[foodx,foody,snake_block,snake_block])
然后,我们调用our_snake Your_score(定义在之前),并传递给这些函数所需的参数,以显示更新的蛇和玩家的分数。snake_Head=[]
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
iflen(snake_List)>snake_length:
delsnake_List[0]
forxinsnake_List[:-1]:
ifx==snake_Head:
game_close=True
our_snake(snake_block,snake_List)
Your_score(snake_length—1)
pygame.display.update()
接下来,我们将蛇速作为时钟的参数。ifx1==foodxandy1==foody:
foodx=round(random.randrange(0,width—snake_block)/10.0)*10.0
foody=round(random.randrange(0,height—snake_block)/10.0)*10.0
snake_length+=1
clock.tick(snake_speed)
我们的游戏快结束了。最后一步,我们需要退出游戏,并再次调用游戏循环。pygame.quit()
quit()
gameLoop()
我们已经完成了贪吃蛇游戏。完整版贪吃蛇游戏代码如下。
领取方式:
长按扫码,发消息[贪吃蛇]