python小游戏-贪食蛇-v1.1

#---------------------------------备注-----------------------------------
#运行环境 :
#python --v3.2.5
#pygame -- pygame-1.9.2a0.win32-py3.2
#-------------------------------------------------------------------------
#--------------------------------导入库-------------------------------------
import pygame
import random
import copy
import time
from pygame.locals import *
from sys import exit
pygame.init()
#--------------------------------新建类-------------------------------------
#-----------新建类--蛇------------------------------------------------------
class Snake:
	def __init__(self):
		#蛇头X坐标
		self.x=200
		#蛇头Y坐标
		self.y=200
		#蛇头半径大小
		self.r=5
		#蛇身数组
		self.c=[]
		#蛇身长度
		self.index=2
		#初始化按键
		self.keys = [False, False, False, False]		
	#初始化蛇的位置	
	def s_weizhi(self):
		for i in range(self.index):
			if len(self.c) < self.index+2:
				(self.c).append([self.x-(i*2*self.r),self.y])
			#调用PYGAME画出蛇头
			pygame.draw.circle(screen, (50,50,50),(self.c[i]),self.r)
	#初始化--蛇
	def s_restart(self):
		self.x=200
		self.y=200
		del self.c[:]
		self.index=2
		self.keys = [False, False, False, False]
	#设置(W,A,S,D)按键	
	def move(self):		
	#----------判断 按键 状态-------------------------
		if event.type==pygame.KEYDOWN:
			if event.key==K_w:
				if self.keys[2]:
					pass
				else:
					self.keys[0]=True
					self.keys[1]=False
					self.keys[2]=False
					self.keys[3]=False
			elif event.key==K_a:
				if self.keys[3]:
					pass
				else:
					self.keys[1]=True
					self.keys[0]=False
					self.keys[2]=False
					self.keys[3]=False
			elif event.key==K_s:
				if self.keys[0]:
					pass
				else:
					self.keys[2]=True
					self.keys[1]=False
					self.keys[0]=False
					self.keys[3]=False
			elif event.key==K_d:
				if self.keys[1]:
					pass
				else:
					self.keys[3]=True
					self.keys[1]=False
					self.keys[2]=False
					self.keys[0]=False
				
	#---------------判断 (W,A,S,D) 的操作------------------------------
		if self.keys[0]==True:
			self.c[self.index-1]=copy.copy(self.c[0])
			(self.c).insert(0,(self.c[self.index-1]))
			del self.c[self.index]
			self.c[0][1]-=10
			time.sleep (0.05)
			
		if self.keys[1]==True:
			self.c[self.index-1]=copy.copy(self.c[0])
			(self.c).insert(0,(self.c[self.index-1]))
			del self.c[self.index]
			self.c[0][0]-=10
			time.sleep (0.05)
			
		if self.keys[2]==True:
			self.c[self.index-1]=copy.copy(self.c[0])
			(self.c).insert(0,(self.c[self.index-1]))
			del self.c[self.index]
			self.c[0][1]+=10
			time.sleep (0.05)
			
		if self.keys[3]==True:
			self.c[self.index-1]=copy.copy(self.c[0])
			(self.c).insert(0,(self.c[self.index-1]))
			del self.c[self.index]	
			self.c[0][0]+=10
			time.sleep (0.05)		
			
#-----------新建类--食物------------------------------------------------------	
class Food:
	def __init__(self):
		self.r=5
#-------------------确保食物出现的位置是 半径 的倍数-------------------
		self.rp_x = random.randint(1,59)*2*self.r
		self.rp_y = random.randint(1,59)*2*self.r
#-------------------随机食物颜色---------------------------------------
		self.rc = (random.randint(100,255), random.randint(100,255), random.randint(100,255))
	def f_weizhi(self):
#----------------预防食物刷新在 蛇身上---------------------------------------------
		if (self.rp_x == s.x and self.rp_y == s.y):
			pass
		else:
#----------------调用PYGAME画出食物---------------------------------------
			pygame.draw.circle(screen, (self.rc),(self.rp_x,self.rp_y),self.r)
#---------------------初始化食物-------------------------------------------
	def f_restart(self):
		self.rp_x = random.randint(1,59)*10
		self.rp_y = random.randint(1,59)*10
		self.rc = (random.randint(100,255), random.randint(100,255), random.randint(100,255))

#--------------------------设置函数---------------------------------------------------------------------------

#----------------------判断--是否碰中食物-------------------------------------------
def CheckEat():
	if (s.c[0][0] == f.rp_x) and (s.c[0][1] == f.rp_y):
		return True
#----------------------判断--是否碰撞墙壁--------------------------------------------	
def CheckPen():
	if (s.c[0][0] > 600-s.r) or (s.c[0][1] > 600-s.r) or (s.c[0][0] < s.r) or (s.c[0][1] < s.r):
		return True 
#----------------------判断--是否碰中蛇身--------------------------------------------
def CheckTouch():
	for i in range(s.index-1):
		if (s.c[i+1][0] == s.c[0][0] and s.c[i+1][1] == s.c[0][1]):
			return True
#---------------------设置游戏常数------------------------------------------------------------------------------
#设置游戏窗口大小
width,height=(600,600)
#新建一个游戏窗口,窗口大小为(width,height)
screen=pygame.display.set_mode((width,height))	
#设置游戏窗口标题
pygame.display.set_caption("tan-shi-she")
#游戏运行时的字体		
font = pygame.font.Font(None, 32)										
#游戏结束时的字体		
font_over = pygame.font.Font(None, 128)
#游戏状态
gameover=False
#重玩按钮--R----
restart_game=False
s=Snake()
f=Food()
#---------------------游戏主循环------------------------------------------------------------------------------	
while 1:
	for event in pygame.event.get():
		if event.type==pygame.QUIT:
			pygame.quit() 
			exit(0)
#将没有图像的空间填满(白色)
	screen.fill((255,255,255))
	
	if not gameover:
		s.move()
		s.s_weizhi()
		f.f_weizhi()
		if CheckTouch():
			gameover=True
		if CheckEat():
			f.f_restart()
			s.index+=1
		if CheckPen():
			gameover=True
	else:
		#文本-游戏restart
		text_restart = font.render("按 R 键重新游戏", 1, (0, 0, 0))
		#载入文本(游戏restart)
		screen.blit(text_restart, (200,350))
		#文本-游戏结束
		text_over = font.render("Game Over", 1, (0, 0, 0))	
		#载入文本(游戏结束)
		screen.blit(text_over, (200,250))							
		
		#按R键重新游戏
		if event.type==pygame.KEYDOWN:
			if event.key==K_r:										
				restart_game=True
		#初始化游戏		
		if restart_game:
			s.s_restart()
			f.f_restart()
			restart_game=False
			gameover = False
			
	pygame.display.flip()
	pygame.display.update()

你可能感兴趣的:(python)