【Python日记】好丝滑的贪吃蛇

news2024/11/15 13:56:11

文章目录

  • 原文:https://blog.c12th.cn/archives/39.html
  • Python 贪吃蛇(pygame)
  • 前言
    • 部分代码
    • 完整代码

原文:https://blog.c12th.cn/archives/39.html

Python 贪吃蛇(pygame)

前言

源代码参考B站: BV1cs411T7wW


请添加图片描述

效果展示


部分代码

  • 框架
# 初始化
pygame.init()
W = 800
H = 600

ROW = 30
COL = 40

size = (W, H)
window = pygame.display.set_mode(size)
pygame.display.set_caption("贪吃蛇")

bg_color = (255, 255, 255)


# 绘制
def rect(point, color):
    left = point.col * W / COL
    top = point.row * H / ROW

    pygame.draw.rect(
        window, color,
        (left, top, W / COL, H / ROW)
    )
    pass


# 游戏循环
quit = True
while quit:
    # 处理事件
    for event in pygame.event.get():
        # print(event)      # 鼠标测试
        if event.type == pygame.QUIT:
            quit = False

    # 背景
    pygame.draw.rect(window, bg_color, (0, 0, W, H))

    pygame.display.flip()

  • 小键盘
# 小键盘                                         # wasd
if event.key == 1073741906 or event.key == 82:  # if event.key==273 or event.key==119:
    if direct == "left" or direct == "right":
        direct = "up"
elif event.key == 1073741905 or event.key == 81:  # elif event.key==274 or event.key==115:
    if direct == "left" or direct == "right":
        direct = "down"
elif event.key == 1073741904 or event.key == 80:  # elif event.key==273 or event.key==119:
    if direct == "up" or direct == "down":
        direct = "left"
elif event.key == 1073741903 or event.key == 79:  # elif event.key==273 or event.key==119:
    if direct == "up" or direct == "down":
        direct = "right"
  • 碰撞判定
# 碰撞判定
dead = False
# 撞墙
if head.col < 0 or head.row < 0 or head.col >= COL or head.row >= ROW:
    dead = True

# 撞自己
for snake in snakes:
    if head.col == snake.col and head.row == snake.row:
        dead = True
        break

# 死亡
if dead:
    print("game over")
    quit = False
  • FPS
clock = pygame.time.Clock()

# FPS
clock.tick(20)

完整代码

# 工程:test
# 创建时间:2024/8/2 19:05
# encoding:utf-8
# 源代码参考B站:BV1cs411T7wW

import pygame
import random


class Point:
    row = 0
    col = 0

    def __init__(self, row, col):
        self.row = row
        self.col = col

    def copy(self):
        return Point(row=self.row, col=self.col)


# 初始化
pygame.init()
W = 800
H = 600

ROW = 30
COL = 40

size = (W, H)
window = pygame.display.set_mode(size)
pygame.display.set_caption("贪吃蛇")

bg_color = (255, 255, 255)
snake_color = (255, 200, 200)

head = Point(row=int(ROW / 2), col=int(COL / 2))
head_color = (0, 128, 128)

snakes = [
    Point(row=head.row, col=head.col + 1),
    Point(row=head.row, col=head.col + 2),
    Point(row=head.row, col=head.col + 3),
]


# 生成食物
def gen_food():
    while 1:
        pos = Point(row=random.randint(0, ROW - 1), col=random.randint(0, COL - 1))

        is_coll = False

        # 碰撞
        if head.row == pos.row and head.col == pos.col:
            is_coll = True

        # 蛇身子
        for snake in snakes:
            if snake.row == pos.row and snake.col == pos.col:
                is_coll = True
                break

        if not is_coll:
            break

    return pos


# 食物
food = gen_food()
food_color = (0, 255, 0)

direct = "left"


# 绘制
def rect(point, color):
    left = point.col * W / COL
    top = point.row * H / ROW

    pygame.draw.rect(
        window, color,
        (left, top, W / COL, H / ROW)
    )
    pass


# 游戏循环
quit = True
clock = pygame.time.Clock()
while quit:
    # 处理事件
    for event in pygame.event.get():
        # print(event)      # 鼠标测试
        if event.type == pygame.QUIT:
            quit = False
        elif event.type == pygame.KEYDOWN:
            # print(event)      # 按键测试
            # 小键盘                                         # wasd
            if event.key == 1073741906 or event.key == 82:  # if event.key==273 or event.key==119:
                if direct == "left" or direct == "right":
                    direct = "up"
            elif event.key == 1073741905 or event.key == 81:  # elif event.key==274 or event.key==115:
                if direct == "left" or direct == "right":
                    direct = "down"
            elif event.key == 1073741904 or event.key == 80:  # elif event.key==273 or event.key==119:
                if direct == "up" or direct == "down":
                    direct = "left"
            elif event.key == 1073741903 or event.key == 79:  # elif event.key==273 or event.key==119:
                if direct == "up" or direct == "down":
                    direct = "right"

    # 吃东西
    eat = (head.row == food.row and head.col == food.col)

    # 食物刷新
    if eat:
        food = gen_food()
        print("蛇的长度:", len(snakes) + 1)  # 实时显示蛇的长度

    # 处理身子
    snakes.insert(0, head.copy())
    if not eat:
        snakes.pop()

    # 移动
    if direct == "left":
        head.col -= 1
    elif direct == "right":
        head.col += 1
    elif direct == "up":
        head.row -= 1
    elif direct == "down":
        head.row += 1

    # 碰撞判定
    dead = False
    # 撞墙
    if head.col < 0 or head.row < 0 or head.col >= COL or head.row >= ROW:
        dead = True

    # 撞自己
    for snake in snakes:
        if head.col == snake.col and head.row == snake.row:
            dead = True
            break

    # 死亡
    if dead:
        print("game over")
        quit = False

    # 背景
    pygame.draw.rect(window, bg_color, (0, 0, W, H))

    # 蛇头
    for snake in snakes:
        rect(snake, snake_color)
    rect(head, head_color)
    rect(food, food_color)

    pygame.display.flip()

    # FPS
    clock.tick(20)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于微信小程序校园订餐的设计与开发+ssm(lw+演示+源码+运行)

摘 要 人民生活水平的提高就会造成生活节奏越来越快&#xff0c;很多人吃饭都采用点外卖的方式。现在点外卖的平台已有很多&#xff0c;大多都需要安装它们的APP才可以使用&#xff0c;并且没有针对校园。如果一味的使用外卖平台不仅会造成商家成本的增加&#xff0c;还不利于…

django应用JWT(JSON Web Token)实战

文章目录 一、什么是JWT二、为什么使用JWT三、在django项目中如何应用JWT1、安装djangorestframework-simplejwt库&#xff1a;2、在settings.py中配置JWT认证&#xff1a;3、在urls.py中配置JWT的获取和刷新路由&#xff1a; 四、JWT如何使用1、调用生成JWT的接口获取JWT2、客…

C++:类型转换(static_cast、reinterpret_cast、const_cast、dynamic_cast)、RTTI

C&#xff1a;类型转换&#xff08;static_cast、reinterpret_cast、const_cast、dynamic_cast&#xff09;、RTTI 一、C语言类型转换二、C新增强制类型转换2.1 新增类型转换&#xff1a;static_cast2.2 新增类型转换&#xff1a; reinterpret_cast2.3 新增类型转换&#xff1a…

新手上路:在Windows CPU上安装Anaconda和PyCharm

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一. 确认自己是CPU为什么选择CPU教程&#xff1f;GPU与CPU的区别如何判断自己是CPU 二. Anaconda 安装包 和 Pycharm 安装包步骤1&#xff1a;下载Anaconda步骤2&am…

【d46】【Java】【力扣】234.回文链表

思路 判断是否是回文&#xff0c;需要&#xff1a;一个指针指向头&#xff0c;一个指针指向尾&#xff0c;两个指针一边向中间靠拢&#xff0c;一边判断数值是否相同 对于单链表&#xff0c;不方便获得pre&#xff0c;如果将节点放进 数组/list &#xff0c;数组/list可以直接…

2024年9月22日历史上的今天大事件早读

189年9月22日 &#xff08;汉灵帝中平六年八月戊辰&#xff09;大将军何进入宫&#xff0c;策划铲除宦官&#xff0c;事败被杀 1499年9月22日 瑞士独立。 1630年9月22日 明朝抗清将领袁崇焕被崇祯皇帝凌迟处死于北京 1776年9月22日 美国间谍黑尔未经审判即被处绞刑 1860年9…

buucft hashcat

使用文本编辑器打开时乱码 使用010editor打开发现时xml文档 拷贝到kali&#xff0c;使用binwalk查看&#xff0c;发现时xml文档&#xff0c;改后缀名为ppt。打开发现有密码 Accent OFFICE Password Recovery 64位-Office密码恢复软件 v20.09 免费版 - 下载吧 试试这个Accent O…

[云服务器14] 搭建属于你自己的Git服务器

Git是由Linux Torvalds开发的一个版本控制系统(VCS,Version Control System)&#xff0c;而目前最大的Git仓库托管公司就是大名鼎鼎的GitHub啦&#xff01; 而这次&#xff0c;我们主要讲在自己的服务器上&#xff0c;搭建一个GitLab驱动的Git服务器&#xff01; [请CSDN审核…

大模型的威力,远不只是聊天框

自2022年底ChatGPT发布以来&#xff0c;我们真正看到了大模型的威力&#xff0c;也引发了技术圈种种畅想。有相当一部分观点认为&#xff0c;大模型是一种工业革命级的产物&#xff0c;相信更多的人会和笔者一样&#xff0c;认为大模型是一个操作系统级的产品&#xff0c;会彻底…

基于波特图的控制系统设计算法

波特图&#xff08;Bode Plot&#xff09;是一种用于描述线性控制系统频率响应的图形表示方法&#xff0c;通常用于分析和设计控制系统。它以控制系统的传递函数&#xff08;或频域传递函数&#xff09;为基础&#xff0c;将系统的幅频特性&#xff08;振幅-频率响应&#xff0…

统信服务器操作系统【刻录镜像制作U盘启动盘的工具】

统信服务器操作系统各版本上刻录镜像制作U盘启动盘的工具方案 文章目录 应用场景一、问题现象二、问题分析解决方案应用场景 硬件/整机信息:全平台 CPU架构:全架构 OS版本信息:服务器a版,e版,d版(其中d版遇到的刻录类问题较少) 软件信息:dd工具、Fedora Media Writer工…

每日学习一个数据结构-倒排表

文章目录 示意图倒排表的基本概念倒排表的数据结构示例 倒排表的优点应用场景 倒排表&#xff08;Inverted Index&#xff09;&#xff0c;也称为反向索引或倒排文件&#xff0c;在信息检索系统中是一种重要的数据结构。它主要用于快速搜索文档中的关键词&#xff0c;并找到包含…

史上最全!!!大厂面试真题-SpringBoot自动装配的原理是什么?

我想你也在真实面试中被问过无数次这个问题了&#xff0c;我也是&#xff0c;但是不管你怎么搜&#xff0c;都只有那几篇八股文的答案&#xff0c;你问GPT它都解释不清楚&#xff0c;我决定自己写一篇详细的&#xff0c;避免遗忘也想帮助一下患难中的兄弟姐妹们&#xff0c;能把…

读取t x t文件生成exce

读取t x t文件生成excel package com.moka.api.custom.core.controller; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermode…

NLP 文本分类核心问题

解决思路 分解为多个独立二分类任务将多标签分类转化为多分类问题更换 loss 直接由模型进行多标签分类 数据稀疏问题 标注更多数据&#xff0c;核心解决方案&#xff1a; 自己构造训练样本 数据增强&#xff0c;如使用 chatGPT 来构造数据更换模型 减少数据需求增加规则弥补…

ReKep——李飞飞团队提出的让机器人具备空间智能:基于视觉语言模型GPT-4o和关系关键点约束

前言 由于工厂、车厂的任务需求场景非常明确&#xff0c;加之自今年年初以来&#xff0c;我司在机器人这个方向的持续大力度投入(包括南京、长沙两地机器人开发团队的先后组建)&#xff0c;使得近期我司七月接到了不少来自车厂/工厂的订单&#xff0c;比如其中的三个例子&…

草莓团队创造了o1 - Building OpenAI o1 (Extended Cut) 观后笔记

美妙的事物往往需要世界去创造&#xff0c;商业希望大模型越来越快给出回答。或许花费几个月几年的时间持续思考&#xff0c;大模型能够解决更复杂的问题&#xff0c;而不只是回答42 刚发现凌晨OpenAI发布了一个22多分钟的采访&#xff0c;将构建出O1的整个团队拉到一个小屋子&…

基于单片机红外感应智能卫生间系统仿真

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…

基于微信小程序的智慧物业管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

设置VsCode搜索时排除文件,文件列表中隐藏文件

按照《VsCode gdb gdbserver远程调试C程序》中介绍的方法&#xff0c;配置好VsCode后&#xff0c;打开一个C/C工程&#xff0c;发现左侧的面板会显示编译时生成的中间文件&#xff08;比如.d和.o文件&#xff09;。我们可以通过设置隐藏掉一些我们不需要打开的文件以简洁面板…