python贪吃蛇游戏代码详解外加中文_贪吃蛇java详解

python贪吃蛇游戏代码详解外加中文_贪吃蛇java详解在写Python游戏项目时,最重要的时python中的pygame库。安装pygame库和用法在我CSDN博客另一篇文章上。这里就不详细说了。下边时运行游戏界面。下边是详细的代码和注释importpygame,sys,random,timefrompygame.localsimport*#从pygame模块导入常用的函数和常量#定义颜色变量black_colour…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在写Python游戏项目时,最重要的时python中的pygame库。安装pygame库和用法在我CSDN博客另一篇文章上。这里就不详细说了。下边时运行游戏界面。

python贪吃蛇游戏代码详解外加中文_贪吃蛇java详解

下边是详细的代码和注释

import pygame,sys,random,time
from pygame.locals import *   #从pygame模块导入常用的函数和常量
#定义颜色变量
black_colour = pygame.Color(0,0,0)
white_colour = pygame.Color(255,255,255)
red_colour = pygame.Color(255,0,0)
grey_colour = pygame.Color(150,150,150)
#定义游戏结束函数
def GameOver(gamesurface):
    #设置提示字体的格式
    GameOver_font = pygame.font.SysFont("MicrosoftYaHei", 16)
    #设置提示字体的颜色
    GameOver_colour = GameOver_font.render('Game Over',True,grey_colour)
    #设置提示位置
    GameOver_location = GameOver_colour.get_rect()
    GameOver_location.midtop = (320,10)
    #绑定以上设置到句柄
    gamesurface.blit(GameOver_colour,GameOver_location)
    #提示运行信息
    pygame.display.flip()
    #休眠5秒
    time.sleep(5)
    #退出游戏
    pygame.quit()
    #退出程序
    sys.exit()
#定义主函数
def main():
    #初始化pygame,为使用硬件做准备
    pygame.init()
    pygame.time.Clock()
    ftpsClock = pygame.time.Clock()
    #创建一个窗口
    gamesurface = pygame.display.set_mode((640,480))
    #设置窗口的标题
    pygame.display.set_caption('tanchishe snake')
    #初始化变量
    #初始化贪吃蛇的起始位置
    snakeposition = [100,100]
    #初始化贪吃蛇的长度
    snakelength = [[100,100],[80,100],[60,100]]
    #初始化目标方块的位置
    square_purpose = [300,300]
    #初始化一个数来判断目标方块是否存在
    square_position = 1
    #初始化方向,用来使贪吃蛇移动
    derection = "right"
    change_derection = derection
    #进行游戏主循环
    while True:
        #检测按键等pygame事件
        for event in pygame.event.get():
            if event.type==QUIT:
                #接收到退出事件后,退出程序
                pygame.quit()
                sys.exit()
            elif event.type==KEYDOWN:
                #判断键盘事件,用w,s,a,d来表示上下左右
                if event.key==K_RIGHT or event.key==ord('d'):
                    change_derection = "right"
                if event.key==K_LEFT or event.key==ord('a'):
                    change_derection = "left"
                if event.key==K_UP or event.key==ord('w'):
                    change_derection = "up"
                if event.key==K_DOWN or event.key==ord('s'):
                    change_derection = "down"
                if event.key==K_ESCAPE:
                    pygame.event.post(pygame.event.Event(QUIT))
        #判断移动的方向是否相反
        if change_derection =='left'and not derection =='right':
            derection = change_derection
        if change_derection =='right'and not derection =='left':
            derection = change_derection
        if change_derection == 'up' and not derection =='down':
            derection = change_derection
        if change_derection == 'down' and not derection == 'up':
            derection = change_derection
        #根据方向,改变坐标
        if derection == 'left':
            snakeposition[0] -= 20
        if derection == 'right':
            snakeposition[0] += 20
        if derection == 'up':
            snakeposition[1] -= 20
        if derection == 'down':
            snakeposition[1] += 20
        #增加蛇的长度
        snakelength.insert(0,list(snakeposition))
        #判断是否吃掉目标方块
        if snakeposition[0]==square_purpose[0] and snakeposition[1]==square_purpose[1]:
            square_position = 0
        else:
            snakelength.pop()
        #重新生成目标方块
        if square_position ==0:
            #随机生成x,y,扩大二十倍,在窗口范围内
            x = random.randrange(1,32)
            y = random.randrange(1,24)
            square_purpose = [int(x*20),int(y*20)]
            square_position = 1
        #绘制pygame显示层
        gamesurface.fill(black_colour)
        for position in snakelength:
            pygame.draw.rect(gamesurface,white_colour,Rect(position[0],position[1],20,20))
            pygame.draw.rect(gamesurface,red_colour,Rect(square_purpose[0],square_purpose[1],20,20))
        #刷新pygame显示层
        pygame.display.flip()
        #判断是否死亡
        if snakeposition[0]<0 or snakeposition[0]>620:
            GameOver(gamesurface)
        if snakeposition[1]<0 or snakeposition[1]>460:
            GameOver(gamesurface)
        for snakebody in snakelength[1:]:
            if snakeposition[0]==snakebody[0] and snakeposition[1]==snakebody[1]:
                GameOver(gamesurface)
        #控制游戏速度
        ftpsClock.tick(5)

if __name__ == "__main__":
    main()








 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169539.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IMU —— MPU9250_DMP原代码移植[通俗易懂]

    最近在使用MPU9250来学习姿态解算,查询了非常多的网上关于MPU6050和MPU9250的资料,发现内置的DMP可以计算出姿态角,可原代码是用在MSP430和STM407上的,手上有块F429的野火板子,移植过程越到非常多的巨坑,现在想记录下来给各位初学者提供一些便利。移植好的工程:https://download.csdn.net/download/zh471021698/1101721…

    2022年4月16日
    103
  • leetcode链表问题_反转一个单链表

    leetcode链表问题_反转一个单链表给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5] 提示:链表中节点数目为 n1 <= n <= 500-500

    2022年8月9日
    3
  • 超详细讲解SpringMVC三层架构

    超详细讲解SpringMVC三层架构SpringMVC三层架构javaSpringMVC的工程结构一般来说分为三层,自下而上是Modle层(模型,数据访问层)、Cotroller层(控制,逻辑控制层)、View层(视图,页面显示层),其中Modle层分为两层:dao层、service层,MVC架构分层的主要作用是解耦。采用分层架构的好处,普遍接受的是系统分层有利于系统的维护,系统的扩展。就是增强系统的可维护性和可扩展性。对于Spring这样的框架,(View\Web)表示层调用控制层(Controller),控制层调用业务层(Servi

    2022年6月25日
    107
  • SpringBoot与SpringCloud的版本对应详细版[通俗易懂]

    SpringBoot与SpringCloud的版本对应详细版[通俗易懂]缘起初学springcloud的朋友可能不知道,其实SpringBoot与SpringCloud需要版本对应,否则可能会造成很多意料之外的错误,比如eureka注册了结果找不到服务类啊,比如某些jar导入不进来啊,等等这些错误。下面列出来springBoot和springcloud的版本对应关系,需要配套使用,才不会出现各种奇怪的错误。关于maven仓库的版本列表spring-cloud…

    2022年4月29日
    242
  • 诺基亚6260读MMC卡测试

    诺基亚6260读MMC卡测试 关键字:诺基亚6260 RS-MMC卡MMC卡NOKIA6260用的是RS-MMC卡,这一点对我来说很不爽。因为本人手头有两张MMC卡,一张32M,一张128的,买了诺基亚6260之后就派不上用场了,而RS-MMC卡的价格实在是太贵了,买了不划算。    http://www.9499.net闲来没事我就想试能不能将这MMC卡用到6260上。其实也很简单,关机,打开卡仓,取出RS-M

    2022年5月22日
    67
  • leetcode 三数之和_leetcode数组

    leetcode 三数之和_leetcode数组原题链接给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[] 提示:0 <= nums.length <= 300

    2022年8月9日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号