Python游戏(贪吃蛇)

 

Python游戏(贪吃蛇)_第1张图片

 之前自学了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()#主函数

(此游戏存在问题,望大家见谅)

你可能感兴趣的:(Python)