之前自学了python的基础语法,用此小游戏来检验自己的学习成果。
知识储备:Python中面向对象的概念,创建蛇类、食物类、python的基本数据类型列表的应用、循环,选择语句的使用、
函数的定义与使用、库文件的导入方式等。
class 类名(父类名):
类体 #类的定义
def 函数名(参数列表):
函数体 #函数的定义,函数的type类型与return返回的类型一致
Python的基本语句:顺序、选择、循环;循环有while和for两种,对于列表的遍历for优于while、分支语句为 if-elif-else
Python的基本数据类型:Number类型、String类型、元组类型、List类型、集合类型、字典类型;
(前三种类型不可变、后三种可变)
import pygame,sys,random,time
from pygame.locals import *#导入Pyame/sys/time/random库
class Snack:
snacklens=3#默认长度
snackPosition = [100, 100] # 初始位置
snackBody=[[100,100],[80,100],[60,100]]#20px为一个格子
snackColor=pygame.Color(0,0,0)#蛇颜色
goDriection='right'#前进方向
class Food:
foodnum=0
foodPositopn=[0,0]# 初始位置
foodColor = pygame.Color(255, 0, 0)#食物颜色
def DrawSnack(windowsSize,snack):
for i in snack.snackBody:
pygame.draw.rect(windowsSize,pygame.Color(255,255,255),Rect(i[0],i[1],20,20))
def DrawFood(windowsSize,food,snack):#绘制食物
if food.foodnum == 0:
x=random.randint(0,31)
y=random.randint(0,22)
while [x*20,y*20] in snack.snackBody:
x = random.randint(0, 31)
y = random.randint(0, 22)
food.foodPositopn[0]=x*20
food.foodPositopn[1]=y*20
food.foodnum=1
pygame.draw.rect(windowsSize, pygame.Color(255, 0, 0),Rect(food.foodPositopn[0],food.foodPositopn[1],20,20))
def SnackEat(food,snack):#吃食物
if food.foodPositopn[0]==snack.snackPosition[0] and food.foodPositopn[1]==snack.snackPosition[1]:
food.foodnum=0
snack.snackBody.insert(0, list(food.foodPositopn))
snack.snacklens+=1
def SnackMove(snack):#snack移动
if snack.goDriection=='right':
snack.snackPosition[0]+=20
elif snack.goDriection=='left':
snack.snackPosition[0]-=20
elif snack.goDriection=='up':
snack.snackPosition[1]-=20
elif snack.goDriection=='down':
snack.snackPosition[1]+=20
if snack.snackPosition[0]>620:#蛇身越界处理
snack.snackPosition[0]=0
elif snack.snackPosition[0]<0:
snack.snackPosition[0]=640
if snack.snackPosition[1] > 460:
snack.snackPosition[1]=0
elif snack.snackPosition[1] < 0:
snack.snackPosition[1]=460
def GameOver():
pygame.quit()#游戏退出
sys.quit()
def CheckGame(snack):#游戏检测
if snack.snackPosition in snack.snackBody[1:]:
GameOver()
def main():
starttime=time.time()
pygame.init()#游戏初始化
windowsSize=pygame.display.set_mode((840,480))#窗口大小
pygame.display.set_caption('贪吃蛇')#窗口标题
pygame.font.init()
font = pygame.font.SysFont('宋体', 24)
snack=Snack()
food=Food()
DrawSnack(windowsSize,snack)
pygame.display.update()#界面刷新
while True:#游戏主体部分
for event in pygame.event.get():#按键响应
if event.type==QUIT:
GameOver()#游戏退出
elif event.type==KEYDOWN:
if event.key==K_RIGHT:
snack.goDriection='right'
elif event.key==K_LEFT:
snack.goDriection='left'
elif event.key==K_UP:
snack.goDriection='up'
elif event.key==K_DOWN:
snack.goDriection='down'
elif event.key==K_ESCAPE:
GameOver()
SnackEat(food,snack)#吃食物
snack.snackBody.insert(0,list(snack.snackPosition))
snack.snackBody.pop()#末尾弹出
windowsSize.fill(pygame.Color(0,0,0))
text = font.render("Game Score:"+str(snack.snacklens), True, (255, 255, 255))
windowsSize.blit(text, Rect(660, 30, 200, 120))
text1 = font.render("Time:" + str(int(time.time()-starttime)), True, (255, 255, 255))
windowsSize.blit(text1, Rect(660, 80, 200, 120))
text1 = font.render('Tip: Use the Key \n'
'(up,down,right,left)\n '
'control the snack \n'
'to eat more food!' , True, (255, 255, 255))
windowsSize.blit(text1, Rect(660, 130, 200, 120))
SnackMove(snack)#蛇的移动
CheckGame(snack)#游戏判断
DrawFood(windowsSize, food, snack)
DrawSnack(windowsSize, snack)
time.sleep(0.09)
pygame.display.update()#更新界面
if __name__=='__main__':
main()#主函数
(此游戏存在问题,望大家见谅)