python实现简单的贪吃蛇游戏

本文实例为大家分享了python实现贪吃蛇游戏的具体代码,加入按钮、难度、音乐、得分功能,供大家参考,具体内容如下

贪吃蛇小游戏,可以显示出得分,又背景音乐,难度选择和开始重启按钮设置。

游戏实现效果如下:

后面有完整代码和解析

import sys
import pygame
import random

class Button(object):#定义按钮类
 def __init__(self,begin1,begin2,restart1,restart2,position,position2):
 self.gamebegin1=pygame.image.load(begin1).convert_alpha()#导入开始和重启按钮图片
 self.gamebegin2=pygame.image.load(begin2).convert_alpha()
 self.gamerestart1=pygame.image.load(restart1).convert_alpha()
 self.gamerestart2=pygame.image.load(restart2).convert_alpha()
 self.position=position
 self.position2=position2

 def ifpress(self):
 point_x,point_y=pygame.mouse.get_pos()#找到鼠标光标所在位置
 x,y=self.position#指定的点击按钮位置
 w,h=self.gamebegin1.get_size()#定义按钮尺寸
 x-=w/2
 y-=h/2
 if_x=x-w/2<point_x<x+w/2#判断鼠标光标是否在按钮上
 if_y=y-h/2<point_y<y+h/2
 return if_x and if_y

 def ispress(self):
 x,y=self.position
 w,h=self.gamebegin1.get_size()
 x-=w/2
 y-=h/2
 if self.ifpress():#如果鼠标光标在按钮上,图片显示为gamebegin1,否则显示为gamebegin2
  screen.blit(self.gamebegin1,(x-w/2+8,y-h/2+7))
 else:
  screen.blit(self.gamebegin2,(x-w/2,y-h/2))
 #定义重启按钮,方法同上
 def ifrepress(self):
 point_x,point_y=pygame.mouse.get_pos()
 x,y=self.position2
 w,h=self.gamerestart1.get_size()
 x-=w/2
 y-=h/2
 if_x=x-w/2<point_x<x+w/2
 if_y=y-h/2<point_y<y+h/2
 return if_x and if_y

 def isrepress(self):
 x,y=self.position2
 w,h=self.gamerestart1.get_size()
 x-=w/2
 y-=h/2
 if self.ifrepress():
  screen.blit(self.gamerestart1,(x-w/2,y-h/2))
 else:
  screen.blit(self.gamerestart2,(x-w/2,y-h/2))

def choice():#定义选择难度
 screen.fill((0,0,0))#初始界面颜色设置为黑色
 Rect1=pygame.Rect(300,300,200,100)#设置按钮尺寸
 Rect2=pygame.Rect(300,450,200,100)
 pygame.draw.rect(screen,(136,189,186),Rect1)#创建按钮
 screen.blit(font.render('grade one:',-1,(255,255,255)),(300,300))
 pygame.draw.rect(screen,(136,189,186),Rect2)
 screen.blit(font.render('grade two:',-1,(255,255,255)),(300,450))
 pygame.display.flip()#显示到屏幕上
 point_x,point_y=pygame.mouse.get_pos()#找到鼠标光标所在位置
 global a,b#定义全局变量
 if 300<point_x<500 and 300<point_y<400:#判断光标是否在按钮上
 if pygame.mouse.get_pressed()[0]:#判断鼠标是否按下
  a=8#a表示没秒执行8次
  b=1#b表示设定的一个数,与后面判断执行时有关
 if 300<point_x<500 and 450<point_y<550:
 if pygame.mouse.get_pressed()[0]:
  a=12
  b=1
 pygame.display.update()#更新屏幕

def getResult():#游戏结束时出现得分结果和gameover
 final_text1='Game_Over'
 final_text2='Your final score is: '+str(score)
 ft1_font=pygame.font.SysFont('Arial',70)
 ft1_surf=font.render(final_text1,1,(242,3,36))
 screen.blit(ft1_surf,[screen.get_width()/2-ft1_surf.get_width()/2,100])
 pygame.display.flip()

def main():
 pygame.init()#初始化pygame
 clock=pygame.time.Clock()#定义时间
 pygame.font.init()#初始化字符
 #需要在其它定义中出现的参数,这里还需要定义全局变量一下
 global score,screen,font,button,status,x,y,direction,snackhead,snackbody,foodposition,state,a,b
 screen=pygame.display.set_mode((640,640))#设置屏幕尺寸
 screen.fill((0,0,0))#填充屏幕颜色
 #指明图片路径
 beginname1='D://picture//gamebegin1.png'
 beginname2='D://picture//gamebegin2.png'
 restartname1='D://picture//restart1.png'
 restartname2='D://picture//restart2.png'
 pygame.display.set_caption('sanckgame')
 font=pygame.font.SysFont('Arial',40)#定义字符种类和大小
 snackhead=[120,120]#定义初始蛇的头部位置
 foodposition=[360,360]#定义初始食物位置
 snackbody=[[120,120],[100,120],[80,120]]#定义蛇全身位置
 score=0
 x=300
 y=300
 state=0
 a=1
 b=0
 food_eat=1#食物被吃为0,否则为1
 direction='right'#定义初始运动方向
 re_direction=direction#re_direction为变化后的方向
 button = Button(beginname1,beginname2,restartname1,restartname2,(330,300),(600,320))#定义按钮数值
 pygame.display.update()

 while True:

 for event in pygame.event.get():#遍历可能出现的事件

  if event.type == pygame.QUIT:#点击关闭,程序关闭
  pygame.quit()
  sys.exit()
 button.ispress()#显示按钮
 pygame.display.update()
 if button.ifpress():
  if pygame.mouse.get_pressed()[0]:
  break #点击按钮,结束这里的循环,进入游戏选择难度界面
 while True:
 for event in pygame.event.get():

  if event.type == pygame.QUIT:
  pygame.quit()
  sys.exit()
 choice()#运行choice()
 if b==1:#如果点击了按钮,结束循环,进入游戏运行界面
  break
 pygame.mixer.init()#初始化音乐
 pygame.mixer.music.load('D://music//Above Everything - Capo Productions.ogg')#导入音乐
 pygame.display.update()
 status=True
 screen=pygame.display.set_mode((640,640))
 screen.fill((0,0,0))
 while status:
 clock.tick(a)#运行速度

 for event in pygame.event.get():

  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'):
   re_direction='right'
  if event.key == pygame.K_LEFT or event.key == ord('a'):
   re_direction='left'
  if event.key == pygame.K_UP or event.key == ord('w'):
   re_direction='up'
  if event.key == pygame.K_DOWN or event.key == ord('s'):
   re_direction='down'
 #跳出判断事件循环
 if re_direction=='right'and not direction =='left':
  direction=re_direction
 if re_direction=='left'and not direction =='right':
  direction=re_direction
 if re_direction=='up'and not direction =='down':
  direction=re_direction
 if re_direction=='down'and not direction =='up':
  direction=re_direction
 #头部坐标变化
 if direction=='left':
  snackhead[0]-=20
 if direction=='right':
  snackhead[0]+=20
 if direction=='down':
  snackhead[1]+=20
 if direction=='up':
  snackhead[1]-=20
 snackbody.insert(0,list(snackhead))#每移动一次,把头部新位置插入到最前面,形成新的头部

 if snackhead[0]==foodposition[0] and snackhead[1]==foodposition[1]:#判断蛇是否吃到了食物
  food_eat=0
  score+=1
  pygame.display.update()
 else:
  snackbody.pop()#没吃到则将位置变化前的尾部剔除出去,设的长度不变
 pygame.display.update()
 if food_eat==0:#迟到食物后生成新的食物
  x=random.randint(1,31)
  y=random.randint(1,31)
  for position in snackbody:#判断食物是否出现在蛇的身体处,出现则重新生成
  if not x == position[0] and not y == position[1]:
   state=1
  else:
   state=0
  if state ==1:
  foodposition=[int(x*20),int(y*20)]
  food_eat=1

 screen.fill((0,0,0))
 for position in snackbody:#画出蛇的身体和食物
  rect2=pygame.Rect(position[0],position[1],20,20)
  pygame.draw.rect(screen,(166,188,199),rect2)
  rect1=pygame.Rect(foodposition[0],foodposition[1],20,20)
  pygame.draw.rect(screen,(169,111,102),rect1)
 screen.blit(font.render('Score:'+str(score),-1,(255,255,255)),(100,50))#显示出得分
 pygame.display.update()
 #如果蛇撞到墙或自己的身体,则游戏结束
 if snackhead[0]<0 or snackhead[0]>620:
  restart()
 if snackhead[1]<0 or snackhead[1]>620:
  restart()
 for body in snackbody[1:]:
  if body[0]==snackhead[0]and body[1]==snackhead[1]:
  restart() 

 pygame.display.flip()
 pygame.display.update()
 if pygame.mixer.music.get_busy()==False:
  pygame.mixer.music.set_volume(0.3)
  pygame.mixer.music.play(-1)#音乐循环

def restart():#重新开始按钮

 getResult()#显示结果
 while True:
 for event in pygame.event.get():

  if event.type == pygame.QUIT:
  pygame.quit()
  sys.exit()

  button.isrepress()
  pygame.display.update()
  if button.ifrepress():
  pygame.display.update()
  if pygame.mouse.get_pressed()[0]:
   main()

main()

按钮图片如下,可以自己画图做,音乐最好用ogg格式的,否则可能出问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到最初体型 4.变色食物:吃了会根据食物颜色改变蛇的颜色 #coding=UTF-8 from Tkinter import * from random import randint import tkMessageBox class Grid(object): def __init__(self,

  • python贪吃蛇游戏代码

    本文实例为大家分享了python贪吃蛇游戏的具体代码,供大家参考,具体内容如下 贪吃蛇游戏截图: 首先安装pygame,可以使用pip安装pygame: pip install pygame 运行以下代码即可: #!/usr/bin/env python import pygame,sys,time,random from pygame.locals import * # 定义颜色变量 redColour = pygame.Color(255,0,0) blackColour = pygame.

  • python实现贪吃蛇小游戏

    关于编写游戏,是博主非常向往的东西(博主喜爱游戏),编写游戏得一步一步的走!今天我简单的编写一下非常经典的游戏贪吃蛇!!!! 效果图: 首先引入pygame模块 pip install pygame 关于编写贪吃蛇有如下几个步骤!依次思考 1.设置背景大小,即游戏框大小,---像素(px) 2.设置颜色,蛇的颜色,背景颜色,豆子的颜色 #pygame游戏库,sys操控python运行的环境 import pygame,sys,random #这个模块包含所有pygame所使用的常亮 from p

  • python实现贪吃蛇游戏

    本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 本文稍作改动,修复一些bug,原文链接:python实现贪吃蛇游戏 #!/usr/bin/env python #__*__ coding: utf-8 __*__ import pygame,sys,time,random from pygame.locals import * redColour = pygame.Color(255,0,0) blackColour = pygame.Color(0,0,0)

  • 利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的做法,是到身边找问题,然后编程实现.比如说,我学了高等数学,我是不是应该考虑下如何去用编程实现求导或者积分操作,如果想不出怎么办,是不是应该 baidu 一下,别人是如何实现数值积分或是符号积分的.我们每天买东西都要用到加减甚至乘除,那么我是否能编写个简单的计算器,如果命令行太丑的话,我是否能够快速

  • 教你一步步利用python实现贪吃蛇游戏

    0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了

  • python实现贪吃蛇游戏源码

    本文实例为大家分享了python实现贪吃蛇的具体代码,供大家参考,具体内容如下 import pygame import sys import random SCREEN_X=600 SCREEN_Y=600 class Snake(object): def __init__(self): self.direction=pygame.K_RIGHT self.body = [] for i in range(5): self.addnode() def addnode(self): left,

  • Python写的贪吃蛇游戏例子

    第一次用Python写这种比较实用且好玩的东西,权当练手吧 游戏说明: * P键控制"暂停/开始"* 方向键控制贪吃蛇的方向 源代码如下: 复制代码 代码如下: from Tkinter import *import tkMessageBox,sysfrom random import randint class Grid(object):    def __init__(self,master=None,window_width=800,window_height=600,grid_

  • Python 实现 贪吃蛇大作战 代码分享

    感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核.媒体们除了之前竞相追捧<Pokemon Go>热闹了一把,似乎也听不到什么声音了.直到最近几天,突然听见好几人都提到同一个游戏,网上还有人表示朋友圈被它刷屏了.(不过现在微信已经悍然屏蔽了它的分享) 这个游戏就是现在iOS免费榜排名第一的<贪吃蛇大作战>.一个简单到不行的游戏,也不知道怎么就火了.反正一款游戏火了,各路媒体.专家总能说出种种套路来,所以我就不发表意见了.不过这实在是一个挺好实现的游戏,于是

  • Python贪吃蛇游戏编写代码

    最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间找不到别的,就先做个贪吃蛇来练练简单的语法. 由于Python监听键盘很麻烦,没有C语言的kbhit(),所以这条贪吃蛇不会自己动,运行效果如下: 要求:用#表示边框,用*表示食物,o表示蛇的身体,O表示蛇头,使用wsad来移动 Python版本:3.6.1 系统环境:Win10 类: board:棋盘,也就是游戏区域 snake:贪吃蛇,通过记录身体每个点来记录蛇的状态 game:游戏类 本来还想要个foo

随机推荐