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()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贪食蛇游戏是一款经典的游戏,玩家通过控制一条蛇在一个有边界的区域内移动,吃掉食物来增长身体长度,同时要避免撞到自己的身体或者撞到边界。下面是贪食蛇游戏软件的详细设计: 1. 游戏界面设计: - 游戏区域:一个矩形区域,用于显示游戏的进行,包括蛇和食物的位置。 - 分数显示:显示玩家当前的得分。 - 游戏状态显示:显示游戏的状态,如开始、暂停、结束等。 2. 蛇的设计: - 蛇的身体:由一系列相连的方块组成,每个方块代表蛇的一个身体部分。 - 蛇的移动:根据玩家的输入控制蛇的移动方向,蛇每次移动一个方块的距离。 - 蛇的生长:当蛇吃到食物时,蛇的身体长度增加一个方块。 3. 食物的设计: - 食物的位置:随机生成在游戏区域内的一个空白位置。 - 食物的消失与生成:当蛇吃到食物后,食物消失并重新生成在另一个位置。 4. 碰撞检测: - 蛇与自身的碰撞:当蛇的头部与身体的其他部分重叠时,游戏结束。 - 蛇与边界的碰撞:当蛇的头部碰到游戏区域的边界时,游戏结束。 - 蛇与食物的碰撞:当蛇的头部与食物重叠时,蛇的身体增长,并生成新的食物。 5. 游戏控制: - 开始游戏:玩家点击开始按钮或者按下空格键开始游戏。 - 暂停游戏:玩家点击暂停按钮或者按下空格键暂停游戏。 - 结束游戏:当蛇与自身或边界碰撞时,游戏结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值