首页 > 编程语言 >python贪吃蛇模块设计一(真正的游戏效果还未实现)

python贪吃蛇模块设计一(真正的游戏效果还未实现)

时间:2023-09-29 23:31:40浏览次数:46  
标签:do head score python direction window 贪吃蛇 模块 pen

import random
import time
import turtle
#分数
score =0
#最高分
heigh_score =0
# 移动延迟
delay =0.2
#创建屏幕
window=turtle.Screen()
#设置标题
window.title("贪吃蛇")
#背景颜色
window.bgcolor("white")
#窗口大小
window.setup(width=600,height=600)

#创建蛇
head=turtle.Turtle()
head.speed(0)
head.color("grey")
head.shape("square")
head.penup()
head.goto(0,0)
head.direction="Stop"#设置头部为静止
head.shapesize(0.5,0.5,1)#宽度、长度、轮廓

#创建食物
food=turtle.Turtle()
food.speed(0)
food.color("blue")
food.shape("square")
food.penup()
food.goto(0,100)
food.shapesize(0.5,0.5,1)#宽度、长度、轮廓

#创建计数板
pen=turtle.Turtle()
pen.speed(0)
pen.color("red")
pen.penup()
pen.hideturtle()#隐藏海龟
pen.goto(0,260)
pen.write("得分:0 最高分:0",align="center",font=("Courier",27,"normal"))

#定义函数和规范
def do_up():
    if head.direction != "down":
        head.direction ="up"
def do_down():
    if head.direction != "up":
        head.direction ="down"
def do_left():
    if head.direction != "right":
        head.direction ="left"
def do_right():
    if head.direction != "left":
        head.direction ="right"

def move():
    if head.direction=="up": #蛇头往上
        y = head.ycor()#获取当前y轴的坐标
        head.sety(y+20) #向上移动一格
    if head.direction=="down": #蛇头往下
        y = head.ycor()#获取当前y轴的坐标
        head.sety(y-20) #向下移动一格
    if head.direction=="left": #蛇头往左
        x = head.xcor()#获取当前x轴的坐标
        head.setx(x-20) #向左移动一格
    if head.direction=="right": #蛇头往右
        x = head.xcor()#获取当前x轴的坐标
        head.setx(x+20) #向右移动一格

#设置监听事件
window.listen()
window.onkeypress(do_up,"w")#绑定w键,触发do_up函数,蛇向上走
window.onkeypress(do_down,"s")#绑定w键,触发do_down函数
window.onkeypress(do_left,"a")#绑定w键,触发do_left函数
window.onkeypress(do_right,"d")#绑定w键,触发do_right函数

#设置蛇的身体
segments=[]

while True:
    window.update() #更新窗口
    if head.xcor()>290 or head.xcor()< -290  or head.ycor()>290 or head.ycor()< -290:
        time.sleep(1)
        head.goto(0,0)
        head.direction="Stop"
        for segment in segments:
            segment.goto(1000,1000)
        segments.clear()
        score=0
        delay=0.2
        pen.clear()
        pen.write("得分:",score,"最高分:",heigh_score, align="center", font=("Courier", 27, "normal"))
    #判断是否吃到食物
    if head.distance(food) < 20: #如果蛇头与食物的距离是否小于20,小于就吃到
        x=random.randint(-290,290)
        y = random.randint(-290, 290)

        new_segment=turtle.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)
        new_segment.shapesize(0.5,0.5,1)
        delay -= 0.001
        score +=10
        if score>heigh_score:
            heigh_score=score
        pen.clear()
        pen.write("得分:", score, "最高分:", heigh_score, align="center", font=("Courier", 27, "normal"))

        #贪吃蛇移动
        for index in range(len(segments)-1,0,-1):
            x=segments[index-1].xcor()
            y = segments[index - 1].ycor()
            segments[index].goto(x,y)
        if len(segments)>0:
            x=head.xcor()
            y=head.ycor()
            segments[0].goto(0,y)
        move()
#主循环事件
window.mainloop()

运行结果:

python贪吃蛇模块设计一(真正的游戏效果还未实现)_贪吃蛇

标签:do,head,score,python,direction,window,贪吃蛇,模块,pen
From: https://blog.51cto.com/u_15937426/7654445

相关文章

  • 数学建模__线性规划Python实现
    我使用到的是python库中scipy。'''线性规划'''#目标函数的系数#minz=2x1+3x2-5x3c=np.array([-2,-3,5])#不等式限制条件的系数,转化为小于等于#2x1-5x2+x3<=10,x1+3x2+x3<=12Aup=np.array([[-2,5,-1],[-1,-3,-1]])#必须是二维#右侧系数bup=np.array([-1......
  • 数学建模__非线性规划Python实现
    使用到的是scipy库线性规划指的是目标模型均为线性,除此以外的都是非线性规划,使用scipy提供的方法对该类问题进行求解。fromscipy.optimizeimportminimizeimportnumpyasnp#定义目标函数deffun(args):a,b,c,d=argsv=lambdax:(a+x[0])/(b+x[1])-c*x[0]......
  • python生成词云图
    importwordcloudimportmatplotlib.pyplotaspltfromimageioimportimreadprint([1,2]+[3,4])#创建一个词云对象wc=wordcloud.WordCloud()img=imread(r'F:\PyCharm\test\bg.jpg')#要生成词云的文本text='''Whycanpre-trainedlanguagem......
  • 80道高频算法题Python版
    80道高频算法题来源于牛客网,这些答案都经过了我验证,可以复制粘贴后提交通过:掌握这80道题,99%的测试岗位算法考试都能通过。建议收藏后反复练习。本文为Python版本答案,对于Java版本答案,请在电子书《算法挑战》目录中查看。1、NC1大数加法:中等#计算两个数之和#@paramsstrin......
  • python中实现两个列表的交叉合并
     001、>>>list1=["aa","bb","cc","dd"]##列表1>>>list2=[111,222,333,444]##列表2>>>list3=[]>>>foriinrange(len(list1)):...list3.append(lis......
  • python获取年月日时分秒毫秒
     fromdatetimeimportdatetime#获取当前时间now=datetime.now()#获取年、月、日、时、分、秒和毫秒year=now.yearmonth=now.monthday=now.dayhour=now.hourminute=now.minutesecond=now.secondmillisecond=now.microsecond//1000#毫秒需......
  • python,机器学习,代码,三种方法,拟合,物料的冷却规律:温度Y=f(时间X,物料类型A,冷却方
    python,机器学习,代码,三种方法,拟合,物料的冷却规律:温度Y=f(时间X,物料类型A,冷却方式B)+其他因素理解你的问题,你似乎正在探讨如何使用机器学习方法对物料的冷却规律进行拟合,考虑到时间、物料类型、冷却方式以及其他因素。在这里,我将提供一个基本的框架,介绍三种常见的机器学习方......
  • python入门
    1、python数据类型: 列表对应Java中的list可以添加删除元素,格式是中括号,A=['xiaoWang','xiaoZhang','xiaoHua'];元组对应Java中的数组,长度是固定的不能修改,格式是小括号,tuple=('刘备','关于','张飞');字典对应Java中的map,tuple=('刘备','关于�......
  • python简写语法总结
    Lambdadefadd(a,b):returna+bprint(add(1,2))简写成add=lambdaa,b:a+bprint(add(1,2))[]推导式正常写法:s_list=[]foriinrange(5):s_list.append(i)print(s_list)简写:s_list=[iforiinrange(5)]print(s_list)判断正常写法:a=......
  • 基于TOTP算法的Github两步验证2FA(双因子)机制Python3.10实现
    从今年(2023)三月份开始,Github开始强制用户开启两步验证2FA(双因子)登录验证,毫无疑问,是出于安全层面的考虑,毕竟Github账号一旦被盗,所有代码仓库都会毁于一旦,关于双因子登录的必要性请参见:别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有。双因子登录说......