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

【作品介绍】
贪吃蛇 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喵
程序侯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
评论