Python小游戏:贪吃蛇——turtle的使用

这篇具有很好参考价值的文章主要介绍了Python小游戏:贪吃蛇——turtle的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  

突然想把去年写的小游戏练习整合一下,写一个简单的教学文章吧。

该篇主要讲解利用python中turtle包制作小游戏,不涉及pygame的使用,仅用pycharm就可实现

0.理清游戏思路

  要实现的效果如下图所示:

Python小游戏:贪吃蛇——turtle的使用

黑色是蛇,红色利用随机函数生成的苹果,蛇没吃到一个苹果,就会增一节,同时下一个苹果随机生成在框内。

蛇的运动通过刷新页面来表示,每刷新一次,画图函数会在蛇头位置多画一个小方格,并删除蛇尾位置的小方格。以此来实现蛇的运动。

蛇不可撞到边框,否则游戏失败(停止运行)。

其中,蛇和苹果利用海龟画图(turtle)实现。

1.turtle库

turtle是python自带的一个库,主要用于画图。(据说是像海龟爬图?

turtle库中自带许多画图函数:(这里只列举贪吃蛇所用到的部分函数)

up() 起笔函数
goto(x,y) 去到(x,y)位置的函数
forward(size) 朝特定方向走,参数表示画线的长度
left(size) 转向函数,参数为调转度数(蛇每次调转90度,则填90)
begin_fill() 无参,开始绘图(落笔)
end_fill() 无参,绘图结束
color(color_name) 设置线条颜色,括号内填写颜色名称

因为该"画图"动作需要循环调用,因此可以写一个函数将该功能包裹起来,以方便多次循环使用。

该部分代码:

from turtle import *
from random import randrange

                        #注意导包,(以下需要用到随机函数,所以也要导包随机函数)

def square(x,y,size,color_name):  #函数名称可自定义,参数:需要用的什么就设置什么
    up()
    goto(x,y)                     #画笔移动到某一点
    color(color_name)             #设置画笔颜色
    begin_fill()                  #落笔开画

    forward(size)                 #画笔画直线
    left(90)                      #转向90度        以下代码段表示每次画一个小方格
    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    end_fill()                    #绘图结束

2.定义小蛇和苹果

蛇的初始长度肯定不能是一个小方格吧

这里我的初始小蛇定义了四个小方格的长度,每个小方格为10;(可自定义,提示:最好为整数,避免蛇头与苹果”对不上“的情况出现。)

snack=[[0,0],[10,0],[20,0],[30,0]]
apple_x=randrange(-20,20)*10          #定义小苹果,和苹果的位置坐标
apple_y=randrange(-20,20)*10
aim_x=0
aim_y=10                              #蛇的起始位置坐标

定义动作函数

def change(x,y):
    global aim_x,aim_y
    aim_x=x
    aim_y=y

3.”撞墙“的判断

先贴一下我的代码段

def inside():
    if -210<=snack[-1][0]<=200 and -210<=snack[-1][1]<210 :
        return True
    else:
        return False

inside函数判断小蛇是否在画布内,即是否撞墙。

这里我把画布的大小设置为420*420(210是均分坐标,从-210到+210)。因为蛇的每一节身子长度为10,所以判断条件为小蛇头部是否小于等于200的大小,小于返回true,可以继续运行,否则false,结束运行。

4.函数循环使用

相当于是把上述函数嵌套在一个新的Loop函数内了,以方便于每刷新一次就调用一次Loop。

clear()和update()连用——刷新:擦除旧的线,画上新的线。

def gameLoop ():                         #自定义循环函数
    global apple_x,apple_y               #需要用到外面的全局变量
    clear()                              #擦除旧图的函数,清理函数
    snack.append([snack[-1][0]+aim_x,snack[-1][1]+aim_y])    #小蛇的出现位置
    if not inside():                                         #判断是否还在画布内
        return
    if snack[-1][0]!=apple_x or snack[-1][1]!=apple_y :
        snack.pop(0)                           #判断小蛇安全前行,擦除尾部,使用pop函数删除
    else:
        apple_x=randrange(-20,20)*10           #吃到苹果,则随机生成另一个新的苹果
        apple_y=randrange(-20,20)*10
    for n in range(len(snack)):
        square(snack[n][0],snack[n][1],10,"black")    #调用画图函数,定义黑色小蛇,红色苹果
    square(apple_x,apple_y,10,"red")
    ontimer(gameLoop,200)                            #调用循环函数,每隔一段时间调用一次
    update()                                         #更新

5.收尾:设置画布、隐藏海龟画图小箭头、监听函数的使用、以及键盘操控

注意:setup(420,420,0,0)意为设置一个420*420大小的平面画布,先前210是正向坐标!! 

setup(420,420,0,0)        #设置画布
hideturtle()              #隐藏海龟画图的小标签,为了美观
tracer(False)             #不显示轨迹路线
listen()                  #监听函数
onkey(lambda :change(0,10),"w")      #键盘操控,点击相应案件实现改变方向操作
onkey(lambda :change(0,-10),"s")
onkey(lambda :change(10,0),"d")
onkey(lambda :change(-10,0),"a")
gameLoop()                            #循环函数
done()                                

———————————————————————————————————————————

来一个代码整合:

from turtle import *
from random import randrange

def square(x,y,size,color_name):
    up()
    goto(x,y)
    color(color_name)
    begin_fill()

    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    end_fill()

snack=[[0,0],[10,0],[20,0],[30,0]]
apple_x=randrange(-20,20)*10
apple_y=randrange(-20,20)*10
aim_x=0
aim_y=10
def change(x,y):
    global aim_x,aim_y
    aim_x=x
    aim_y=y
def inside():
    if -210<=snack[-1][0]<=200 and -210<=snack[-1][1]<210 :
        return True
    else:
        return False
def gameLoop ():
    global apple_x,apple_y
    clear()
    snack.append([snack[-1][0]+aim_x,snack[-1][1]+aim_y])
    if not inside():
        return
    if snack[-1][0]!=apple_x or snack[-1][1]!=apple_y :
        snack.pop(0)
    else:
        apple_x=randrange(-20,20)*10
        apple_y=randrange(-20,20)*10
    for n in range(len(snack)):
        square(snack[n][0],snack[n][1],10,"black")
    square(apple_x,apple_y,10,"red")
    ontimer(gameLoop,200)
    update()

setup(420,420,0,0)
hideturtle()
tracer(False)
listen()
onkey(lambda :change(0,10),"w")
onkey(lambda :change(0,-10),"s")
onkey(lambda :change(10,0),"d")
onkey(lambda :change(-10,0),"a")
gameLoop()
done()

 文章来源地址https://www.toymoban.com/news/detail-430261.html

 

 

到了这里,关于Python小游戏:贪吃蛇——turtle的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python快速实现简易贪吃蛇小游戏

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。  贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式、赏金模式、挑战模式等多种玩法。  另外还有一种名为“贪

    2024年02月13日
    浏览(48)
  • 简单的贪吃蛇小游戏的 Python 代码

    简单的贪吃蛇小游戏的 Python 代码:

    2024年02月08日
    浏览(53)
  • 学生学python编程---实现贪吃蛇小游戏+源码

    前言 这几年人工智能技术大发展,Python因此几乎成了第一位的语言。实际上,多年来,它不仅在软件工程师中得到广泛使用,也是各行业通用的专家语言,就是说,不管孩子以后做什么,都可能用得着。准备针对我自己上小学的孩子,每周抽出些时间,通过学习他们感兴趣的

    2023年04月09日
    浏览(44)
  • python简易贪吃蛇小游戏任务书含代码

     目  录 第一章 绪论 1.1 开发的背景 1.2 开发的目的 1.3 开发的意义 1.4 开发工具简介 第二章 需求分析 (1) 利用方向键来改变蛇的运行方向。 (2) 在随机的地方产生食物。 (3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。 第三章 系统概要设计 3.1 设计目

    2024年02月16日
    浏览(37)
  • 使用TypeScript实现贪吃蛇小游戏(网页版)

    本项目使用webpack+ts所编写 下边是项目的文件目录 /src下边的index.html页面是入口文件 index.ts是引入所有的ts文件 /modules文件夹是用来存放所有类的 index.html index.ts  /style/less /modules/Food.ts /modules/GameControl.ts /modules/ScorePanel.ts /modules/Snake.ts

    2024年02月13日
    浏览(42)
  • 使用Java实现一个简单的贪吃蛇小游戏

    基于java实现贪吃蛇小游戏,主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 开发工具:eclipse java工具包:jdk1.8 代码地址:https://gitee.com/jay_musu/games-and-tools.git 创建一个新的项目,并命名。创建一个名为images的文件夹用来存放游戏相关图片。然后再在项

    2024年02月11日
    浏览(55)
  • 使用QT制作贪吃蛇小游戏(含登录注册界面)

    login.h register.h user.h userlist.h widget.h login.cpp main.cpp register.cpp user.cpp userlist.cpp widget.cpp login.ui register.ui widget.ui

    2024年02月13日
    浏览(41)
  • Python基础教程——贪吃蛇、连连看小游戏(完整版,附源码)

    1. 案例介绍 贪吃蛇是一款经典的益智游戏,简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。 通过上下左右方向键控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬

    2024年02月04日
    浏览(54)
  • 10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目

    贪吃蛇,大家应该都玩过。当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎。今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 所有的游戏最主要的内容都是程序的内循环,这才是保证一个游戏能够正常运行的前提。 以下是编写贪吃

    2024年01月17日
    浏览(52)
  • 【贪吃蛇小游戏】宝塔面板快速搭建贪吃蛇小游戏Web网站 - 无需云服务器

    转载自远程内网穿透的文章:Linux使用宝塔面板搭建网站,并内网穿透实现公网访问 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等,通过Web端轻松管理服务器。 以下教程,我们将演示使用宝塔

    2024年02月05日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包