Python贪吃蛇游戏详细讲解-带源码-可直接运行

这篇具有很好参考价值的文章主要介绍了Python贪吃蛇游戏详细讲解-带源码-可直接运行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前写了个python对象和类、封装继承等基础知识,太枯燥,这次补充一个简单的Python源码,更直观的理解,并加以运用。

基础知识讲解在这里:Python基础-面向对象、对象和类、封装、继承、多态、项目练习

一、先了解下Pygame

Pygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏。在使用Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行中安装Pygame:

pip install pygame

二、Pygame框架及步骤

  1. 初始化:先初始化Pygame。 创建窗口:创建窗口是游戏开发的第一步。可使用Pygame提供的set_mode()方法创建一个窗口。
  2. 处理事件:在Pygame中,所有的操作都是通过事件来实现的。可以使用event.get()方法获取所有的事件,并通过事件类型来判断用户的操作。
  3. 更新窗口:在绘制完图形后,需要使用pygame.display.update()方法来更新窗口,使得用户能够看到最新的游戏画面。
  4. 控制游戏帧率:在Pygame中,游戏帧率是非常重要的,可以使用Pygame提供的Clock类来控制游戏的帧率。
  5. 键盘和鼠标输入:在游戏中,键盘和鼠标输入也是非常重要的操作。可以使用Pygame提供的key模块和mouse模块来检测键盘和鼠标的输入。
    基础框架代码。
import pygame
import sys
SCREEN_X = 600
SCREEN_Y = 600

def main():
    pygame.init() # 初始化游戏引擎
    screen_size = (SCREEN_X, SCREEN_Y) # 设置游戏窗口的大小
    screen = pygame.display.set_mode(screen_size) # 创建游戏窗口
    pygame.display.set_caption('Snake') # 设置标题
    clock = pygame.time.Clock() # 控制游戏帧率
    
    while True: # 死循环,确保窗口一直显示
	    for event in pygame.event.get(): # 遍历所有事件
	        if event.type == pygame.QUIT: # 如果单击关闭窗口
	            sys.exit()

	    pygame.display.update() # 更新窗口
        clock.tick(5) # 控制游戏帧率
    # 游戏退出

if __name__ == '__main__':
    main()

三、snake 类、属性及方法

蛇类
方法: 增加/删除 、死亡判断、移动、改变方向
基本框架:

# 点以25为单位
class Snake:
    # 初始化各种需要的属性 [开始时默认向右/身体块x5]
    def __init__(self):
        self.dirction = pygame.K_RIGHT
        self.body = []
        for x in range(5):
            self.addnode()

    # 无论何时 都在前端增加蛇块
    def addnode(self):
    # 删除最后一个块
    def delnode(self):
    # 死亡判断
    def isdead(self):
    # 移动!
    def move(self):
    # 改变方向 但是左右、上下不能被逆向改变
    def changedirection(self, curkey):

四、food 类、属性及方法

食物类
方法: 放置/移除
基本框架:

class Food:
    def __init__(self):
        self.rect = pygame.Rect(-25, 0, 25, 25)
    # 移除实物
    def remove(self):
    # 放置实物
    def set(self):

先看下运行后的游戏界面,有点丑,各位可以继续美化:
Python贪吃蛇游戏详细讲解-带源码-可直接运行,Python基础,python,游戏,pygame

五、完整代码

import pygame
import sys
import random

# 全局定义
SCREEN_X = 600
SCREEN_Y = 600

# 蛇类
# 点以25为单位
class Snake:
    # 初始化各种需要的属性 [开始时默认向右/身体块x5]
    def __init__(self):
        self.dirction = pygame.K_RIGHT
        self.body = []
        for x in range(5):
            self.addnode()

    # 无论何时 都在前端增加蛇块
    def addnode(self):
        left, top = (0, 0)
        if self.body:
            left, top = (self.body[0].left, self.body[0].top)
        node = pygame.Rect(left, top, 25, 25)
        if self.dirction == pygame.K_LEFT:
            node.left -= 25
        elif self.dirction == pygame.K_RIGHT:
            node.left += 25
        elif self.dirction == pygame.K_UP:
            node.top -= 25
        elif self.dirction == pygame.K_DOWN:
            node.top += 25
        self.body.insert(0, node)

    # 删除最后一个块
    def delnode(self):
        self.body.pop()

    # 死亡判断
    def isdead(self):
        # 撞墙
        if self.body[0].x not in range(SCREEN_X):
            return True
        if self.body[0].y not in range(SCREEN_Y):
            return True
        # 撞自己
        if self.body[0] in self.body[1:]:
            return True
        return False

    # 移动!
    def move(self):
        self.addnode()
        self.delnode()

    # 改变方向 但是左右、上下不能被逆向改变
    def changedirection(self, curkey):
        LR = [pygame.K_LEFT, pygame.K_RIGHT]
        UD = [pygame.K_UP, pygame.K_DOWN]
        if curkey in LR + UD:
            if (curkey in LR) and (self.dirction in LR):
                return
            if (curkey in UD) and (self.dirction in UD):
                return
            self.dirction = curkey

# 食物类
# 方法: 放置/移除
# 点以25为单位
class Food:
    def __init__(self):
        self.rect = pygame.Rect(-25, 0, 25, 25)

    def remove(self):
        self.rect.x = -25

    def set(self):
        if self.rect.x == -25:
            allpos = []
            # 不靠墙太近 25 ~ SCREEN_X-25 之间
            for pos in range(25, SCREEN_X - 25, 25):
                allpos.append(pos)
            self.rect.left = random.choice(allpos)
            self.rect.top = random.choice(allpos)
            print(self.rect)

def show_text(screen, pos, text, color, font_bold=False, font_size=60, font_italic=False):
    # 获取系统字体,并设置文字大小
    cur_font = pygame.font.SysFont("宋体", font_size)
    # 设置是否加粗属性
    cur_font.set_bold(font_bold)
    # 设置是否斜体属性
    cur_font.set_italic(font_italic)
    # 设置文字内容
    text_fmt = cur_font.render(text, 1, color)
    # 绘制文字
    screen.blit(text_fmt, pos)

def main():
    pygame.init() # 初始化游戏引擎
    screen_size = (SCREEN_X, SCREEN_Y) # 设置游戏窗口的大小
    screen = pygame.display.set_mode(screen_size) # 创建游戏窗口
    pygame.display.set_caption('Snake') # 设置标题
    clock = pygame.time.Clock() # 控制游戏帧率
    scores = 0
    isdead = False

    # 蛇/食物
    snake = Snake()
    food = Food()

    while True: # 死循环,确保窗口一直显示
        for event in pygame.event.get(): # 遍历所有事件
            if event.type == pygame.QUIT: # 如果单击关闭窗口
                sys.exit()
            if event.type == pygame.KEYDOWN:
                snake.changedirection(event.key)
                # 死后按space重新
                if event.key == pygame.K_SPACE and isdead:
                    return main()
        # 填充窗口颜色
        screen.fill((0, 0, 0))

        # 画蛇身 / 每一步+1分
        if not isdead:
            scores += 1
            snake.move()
        for rect in snake.body:
            pygame.draw.rect(screen, (0, 255, 0), rect, 0)

        # 显示死亡文字
        isdead = snake.isdead()
        if isdead:
            show_text(screen, (100, 200), 'YOU DEAD!', (227, 29, 18), False, 100)
            show_text(screen, (150, 260), 'press space to try again...', (0, 0, 22), False, 30)

        # 食物处理 / 吃到+50分
        # 当食物rect与蛇头重合,吃掉 -> Snake增加一个Node
        if food.rect == snake.body[0]:
            scores += 50
            food.remove()
            snake.addnode()

        # 食物投递
        food.set()
        pygame.draw.rect(screen, (255, 0, 127), food.rect, 0)
        # 显示分数文字
        show_text(screen, (50, 500), 'Scores: ' + str(scores), (255, 0, 0))

        pygame.display.update()
        clock.tick(5)

if __name__ == '__main__':
    main()

既然都看到这里了,请点赞+关注鼓励一下,后续继续更新。文章来源地址https://www.toymoban.com/news/detail-856050.html

到了这里,关于Python贪吃蛇游戏详细讲解-带源码-可直接运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 学生学python编程---实现贪吃蛇小游戏+源码

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

    2023年04月09日
    浏览(41)
  • wasm+pygbag让你在网页上也能运行Python代码:【贪吃蛇游戏】

    最近小伙伴告诉我一种新的方法,可以使用wasm来使浏览器网页能够运行Python代码。这一下子激起了我的兴趣,因为这意味着用户无需安装Python环境就能直接运行我的demo,这真是太方便了。所以,我们的主要目标今天就是让网页能够直接运行我的贪吃蛇游戏。贪吃蛇游戏其实

    2024年02月03日
    浏览(42)
  • 手把手教你使用Python写贪吃蛇游戏(pygame,附源码)

    贪吃蛇游戏是有史以来最受欢迎的街机游戏之一。在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果。在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战。这是每个新手程序员都应该接受的最好的初学者友好项目之一。学习构建视频游戏

    2024年02月16日
    浏览(44)
  • JavaScript做一个贪吃蛇小游戏,无需网络直接玩。

    用JavaScript做一个贪吃蛇小游戏,无需网络 = 打开即可玩。 直接按上下左右键就可以玩起来了 欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精

    2024年03月21日
    浏览(49)
  • python 使用socket制作聊天室-(附带 源码 可以直接运行)

    为什么socket能做聊天室呢 socket提供了通信的服务 比如你可以创建tcp udp的请求 向某个主机发起通信 就像是你想和某人说话 你得会发音 就是提供了服务端的方式和客户端的方式 服务端处理用户发起的请求 客户端发送数据和接收服务端的响应数据 就像你打开浏览器看视频 你

    2024年02月08日
    浏览(38)
  • C++小游戏贪吃蛇源码

    graphics.h是针对DOS下的一个C语言图形库 (c++也可以) 目前支持下载此头文件的常用的有两种: EGE, 全名Easy Graphics Engine, 是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库 EasyX, 全名EasyX Graphics Library, 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,简单

    2024年02月13日
    浏览(36)
  • 前端编写贪吃蛇游戏-附详细代码

    当我们在前端编写贪吃蛇游戏时,可以按照以下步骤进行: 先看截图: 设置游戏板:创建一个HTML元素作为游戏板,可以使用 div 元素,并为其设置合适的样式。 绘制蛇和食物:使用JavaScript代码在游戏板上绘制蛇和食物。可以使用CSS样式设置蛇和食物的样式。 移动蛇:编写

    2024年02月10日
    浏览(42)
  • C语言项目实战——贪吃蛇游戏,附源码

    目录          一、在Visual Studio2010上创建C项目 二、对于新建项目的测试 三、贪吃蛇游戏        1.游戏准备         2.游戏界面大小及背景颜色确定         3. 画出食物          4.画蛇且使蛇移动          5.通过按键控制蛇的移动          6.蛇吃食物的问题  

    2024年01月20日
    浏览(44)
  • 前端技术搭建贪吃蛇小游戏(内含源码)

    上周我们实通过前端基础实现了井字游戏,今天还是继续按照我们原定的节奏来带领大家完成一个贪吃蛇游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的作用, 在前面的文章当中我们也提及到我们在本系列的专栏是

    2024年02月06日
    浏览(55)
  • 【0基础学算法】前缀和 (超详细讲解+私人笔记+源码)

    目录 什么是前缀和 我们为什么要去学习前缀和 前缀和实现 如何求s[i]  S[i]的作用  模板 一维前缀和 二维前缀和 题目 第一题 第二题 哈喽大家好,很长时间忘记更新咱们的学算法系列文章了,今天我们终于迎来了我们零基础学算法的第四期内容,那就是前缀和,前缀和其实

    2024年02月05日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包