python如何画贪吃蛇
1、游戏元素及游戏规则:1需要有贪吃蛇、有食物;2需要能控制贪吃蛇来上下移动获取食物;3贪吃蛇在吃取食物后,自身长度增加,同时食物消失并随机生成新的食物;4如果贪吃蛇触碰到四周墙壁或是触碰到自己身体时,则游戏结束。
2、导入我们要用到的模块importpygame,sys,random,time#从pygame模块导入常用的函数和常量frompygame.localsimport* #从pygame模块导入常用的函数和常量frompygame.localsimport*
3、全局参数的初始化#套趱咝鲞初始化Pygame库pygame.init()#初始化一个游戏界面窗口DISPLAY=pygame.display.set_mode((640,480))#设置游戏窗口的番舸榆毛标题pygame.display.set_caption('人人都是Pythonista-Snake')#定义一个变量来控制游戏速度FPSCLOCK=pygame.time.Clock()#初始化游戏界面内使用的字体BASICFONT=pygame.font.SysFont("SIMYOU.TTF",80)#定义颜色变量BLACK=pygame.Color(0,0,0)WHITE=pygame.Color(255,255,255)RED=pygame.Color(255,0,0)GREY=pygame.Color(150,150,150)#定义颜色变量BLACK=pygame.Color(0,0,0)WHITE=pygame.Color(255,255,255)RED=pygame.Color(255,0,0)GREY=pygame.Color(150,150,150)
4、初始化贪吃蛇及食物#贪吃蛇的的初始位置snake_Head=[100,100]#初始化贪吃蛇的长度(注:这里以20*20为一个标准小格子)snake_Body=[[80,100],[60,100],[40,100]]#指定蛇初始前进的方向,向右direction="right"#给定第一枚食物的位置food_Position=[300,300]#食物标记:0代表食物已被吃掉;1代表未被吃掉。food_flag=1#贪吃蛇的的初始位置snake_Head=[100,100]#初始化贪吃蛇的长度(注:这里以20*20为一个标准小格子)snake_Body=[[80,100],[60,100],[40,100]]#指定蛇初始前进的方向,向右direction="right"#给定第一枚食物的位置food_Position=[300,300]#食物标记:0代表食物已被吃掉;1代表未被吃掉。food_flag=1
5、实现贪吃蛇的上下左右移动#检测按键等Pygame事件foreventinpygame.event.get()多唉捋胝:ifevent.type==QUIT:# 接收到退出事件后,退出程序 pygame.quit()sys.exit()#接收到退出事件后,退出程序pygame.quit()sys.exit()#判断键盘事件,用方向键或wsad来表示上下左右elifevent.type==KEYDOWN:if(event.key==K_UPorevent.key==K_w)anddirection!=DOWN:direction=UPif(event.key==K_DOWNorevent.key==K_s)anddirection!=UP:direction=DOWNif(event.key==K_LEFTorevent.key==K_a)anddirection!=RIGHT:direction=LEFTif(event.key==K_RIGHTorevent.key==K_d)anddirection!=LEFT:direction=RIGHT
6、#根据键盘的输入,改变蛇的头部,进行转弯操作ifdirection==LEFT:snake_Head[0]-=20ifdirection==RIGHT:snake_Head[0]+=20ifdirection==UP:snake_Head[1]-=20ifdirection==DOWN:snake_Head[1]+=20#将蛇的头部当前的位置加入到蛇身的列表中snake_Body.insert(0,list(snake_Head))#将蛇的头部当前的位置加入到蛇身的列表中snake_Body.insert(0,list(snake_Head))
7、#判断是否吃掉食物ifsnake_Head[0]==food_Position[0]andsnake_Head[1]==food_Position[1]:food_flag=0else:snake_Body.pop()
8、#生成新的食物iffood_flag==0: #随机生成x,yx=random.randrange(1,32)y=random.randrange(1,24)food_Position=[int(x*20),int(y*20)]food_flag=1
9、#绘制贪吃蛇defdrawSnake(snake_Body):foriinsnake_Body:pygame.draw.rect(DISPLAY,WHITE,Rect(i[0],i[1],20,20))#绘制食物的位置defdrawFood(food_Position):pygame.draw.rect(DISPLAY,RED,Rect(food_Position[0],food_Position[1],20,20))
10、#打印出当前得分defdrawScore(score):#设置分数的显示颜色score_Surf=BASICFONT.render('%s'%(score),True,G伊怕锱鳏REY)#设置分数的位置score_Rect=score_Surf.get_rect()score_Rect.midtop=(320,240)#绑定以上设置到句柄DISPLAY.blit(score_Surf,score_Rect)DISPLAY.fill(BLACK)#画出贪吃蛇drawSnake(snake_Body)#画出食物的位置drawFood(food_Position)#打印出玩家的分数drawScore(len(snake_Body)-3)#刷新Pygame的显示层,贪吃蛇与食物的每一次移动,都会进行刷新显示层的操作来显示。pygame.display.flip()#控制游戏速度FPSCLOCK.tick(7)#画出贪吃蛇drawSnake(snake_Body)#画出食物的位置drawFood(food_Position)#打印出玩家的分数drawScore(len(snake_Body)-3)#刷新Pygame的显示层,贪吃蛇与食物的每一次移动,都会进行刷新显示层的操作来显示。pygame.display.flip()#控制游戏速度FPSCLOCK.tick(7)
11、游戏结束的画面并判断游戏是否结束#游戏结束并退出defGameOver(): #豹肉钕舞设置GameOver的显示颜色GameOver_Surf=BASICFONT.render('GameOver!',True,GREY)#设置GameOver的位置GameOver_Rect=GameOver_Surf.get_rect()GameOver_Rect.midtop=(320,10)#绑定以上设置到句柄DISPLAY.blit(GameOver_Surf,GameOver_Rect)pygame.display.flip()#等待3秒time.sleep(3)#退出游戏pygame.quit()#退出程序sys.exit()'''游戏结束的判断'''#贪吃蛇触碰到边界ifsnake_Head[0]<0orsnake_Head[0]>620:GameOver()ifsnake_Head[1]<0orsnake_Head[1]>460:GameOver()#贪吃蛇触碰到自己foriinsnake_Body[1:]:ifsnake_Head[0]==i[0]andsnake_Head[1]==i[1]:GameOver()