猫史档案馆


【Python作品分享】贪吃蛇V0.9【求助帖】

用户:醉卧沙场君莫笑醉卧沙场君莫笑查看:0 回复:7 评论:0 创建时间:2020-07-07T18:19:50


【作品展示】

center_image

 

【作品介绍】

贪吃蛇 Python3开发,有点纰漏,请指出

 

【作品源代码】

import pygame
import sys
import random
import 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第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.co喵


回复

上一页1 页 / 共 1下一页
蒟蒻OIer1048576蒟蒻OIer1048576

不错,可以在简洁些

点赞0


评论


程序侯程序侯

出现了error

点赞0


评论


程序侯程序侯

出现了error

点赞0


评论


程序侯程序侯

import pygame, sys, time, random
from pygame.key import *

pygame.init()
sceen = pygame.display.set_mode((500, 500))
sceen.fill((255, 255, 255))
pygame.draw.rect(sceen, (0, 0, 0), (0, 0, 500, 500), 100)
pygame.display.flip()
pygame.display.set_caption('经典贪吃蛇游戏即将开始')

class draw:#用来画画的类 #20×20像素为一个格子
    def hand(x, y, direction):#画头
        pygame.draw.rect(sceen, (85, 85, 85), (x * 20 + 51, y * 20 + 51, 18, 18), 0)#画头
        if direction == 'up':#画眼
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 55, y * 20 + 55, 3, 3))
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 62, y * 20 + 55, 3, 3))
        elif direction == 'down':
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 55, y * 20 + 62, 3, 3))
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 62, y * 20 + 62, 3, 3))
        elif direction == 'left':
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 55, y * 20 + 55, 3, 3))
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 55, y * 20 + 62, 3, 3))
        elif direction == 'right':
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 62, y * 20 + 55, 3, 3))
            pygame.draw.rect(sceen, (255, 255, 255), (x * 20 + 62, y * 20 + 62, 3, 3))
    def body(x, y):#画蛇身
        pygame.draw.rect(sceen, (170, 170, 170), (x * 20 + 51, y * 20 + 51, 18, 18), 0)
    def food(x, y):#画食物
        pygame.draw.circle(sceen, (170, 170, 170), (x * 20 + 60, y * 20 + 60), 8, 0)
def mobile(direction):#移动整条蛇
    global snaks, revious#revious变量:用来存储那段“消失”的坐标,可以说是备份,或者电脑系统里的“回收站”
    if direction == 'up':
        snaks.insert(0, (snaks[0][0], snaks[0][1] - 1))
        revious = snaks.pop()
    elif direction == 'down':
        snaks.insert(0, (snaks[0][0], snaks[0][1] + 1))
        revious = snaks.pop()
    elif direction == 'left':
        snaks.insert(0, (snaks[0][0] - 1, snaks[0][1]))
        revious = snaks.pop()
    elif direction == 'right':
        snaks.insert(0, (snaks[0][0] + 1, snaks[0][1]))
        revious = snaks.pop()
snaks = [(10, 9)]#蛇的坐标们 #第一项是头,然后是身子们
food = (10, 9)#食物的坐标
while food in snaks:#避免食物和蛇重合
    food = (random.randint(0, 19), random.randint(0, 19))
direction = 'left'#方向,用来画头和移动
score = 0#得分

time.sleep(1)
pygame.display.set_caption('3')
time.sleep(1)
pygame.display.set_caption('2')
time.sleep(1)
pygame.display.set_caption('1')
time.sleep(1)
pygame.display.set_caption('Go!')
time.sleep(1)
while True:
    for event in pygame.event.get():
        if event == pygame.QUIT:
            sys.exit()
    sceen.fill((255, 255, 255))
    pygame.draw.rect(sceen, (0, 0, 0), (0, 0, 500, 500), 100)
    mobile(direction)
    if food == snaks[0]:
        score += 1
        snaks.append(revious)
        while food in snaks:
            food = (random.randint(0, 19), random.randint(0, 19))
    draw.food(food[0], food[1])
    draw.hand(snaks[0][0], snaks[0][1], direction)
    for body in snaks[1:]:
        draw.body(body[0], body[1])
    pygame.display.flip()
    if snaks[0] in snaks[1:]:
        pygame.display.set_caption('你撞到了自己,失败了。')
        time.sleep(1)
        pygame.display.set_caption('本次游戏你得到了' + str(score) + '分。')
        time.sleep(1)
        sys.exit()
    if snaks[0][0] < 0 or snaks[0][0] > 19 or snaks[0][1] < 0 or snaks[0][1] > 19:
        pygame.display.set_caption('你撞到了墙,失败了。')
        time.sleep(1)
        pygame.display.set_caption('本次游戏你得到了' + str(score) + '分。')
        time.sleep(1)
        sys.exit()
    if get_pressed()[pygame.K_UP]:
        direction = 'up'
    if get_pressed()[pygame.K_DOWN]:
        direction = 'down'
    if get_pressed()[pygame.K_LEFT]:
        direction = 'left'
    if get_pressed()[pygame.K_RIGHT]:
        direction = 'right'
    pygame.display.set_caption('得分:' + str(score))
    time.sleep(0.2)

咋样

点赞0


评论


四维光速四维光速

emotion_编程猫_点赞

点赞0


评论


冷静点冷静点

try:
    pass
except TypeError:
    pass

点赞0


评论


冷静点冷静点

Type Error:'module' object is callable

 

点赞0


评论