游戏编程基础day11贪吃蛇

贪吃蛇小游戏制作 一、准备 贪吃蛇小游戏所需要的图片: 二、编码 2.1、StartGame类 package com.massimo.snake; import javax.swing.*; public class StartGame { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setBounds(10 , 10 , 900 , 720); //设 阅读详情

贪吃蛇

思路

1. 主角 矩形绘制  三个矩形
2. 蛇的食物 随机生成, 避免食物出现的位置与主角重合
3. 通过键盘事件 控制主角蛇移动 
	注意 贪吃蛇无法直接向反方向移动
		移动时 蛇身体的矩形同时向移动方向偏移
		移动时 头部先动
		当 吃掉一个食物时 蛇的尾部要增加一个矩形
		头部不能碰到蛇的身体
		头不能超出游戏窗口
4. 蛇一直自己移动 朝蛇头的方向移动

代码


# pygame游戏库,sys操控python运行的环境
import pygame ,sys ,random
# 这个模块包含所有pygame所使用的常亮
from  pygame.locals import  *

# 1,定义颜色变量
# 0-255  0黑色  255白色
redColor = pygame.Color(255 ,0 ,0)
# 背景为黑色
blackColor = pygame.Color(0 ,0 ,0)
# 贪吃蛇为白色
whiteColor = pygame.Color(255 ,255 ,255)


# 定义游戏结束的函数
def gameover():
    pygame.quit()
    sys.exit()


# 定义main函数--》定义我们的入口函数
def main():
    # 初始化pygame
    pygame.init()
    # 定义一个变量来控制速度
    fpsClock =pygame.time.Clock()
    # 创建pygame显示层,创建一个界面
    playsurface =pygame.display.set_mode((640 ,480))
    pygame.display.set_caption('贪吃蛇')
    # 初始化变量
    # 贪吃蛇初始坐标位置   (先以100,100为基准)
    snakePosition = [100 ,100]
    # 初始化贪吃蛇的长度列表中有个元素就代表有几段身体
    snakeBody = [[100 ,100] ,[80 ,100] ,[60 ,100]]
    # 初始化目标方向额位置
    targetPosition = [300 ,300]
    # 目标方块的标记 目的:判断是否吃掉了这个目标方块1 就是没有吃 0就是吃掉
    targetflag = 1
    # 初始化方向   --》往右
    direction = 'right'
    # 定义一个方向变量(人为控制  按键)
    changeDirection = direction
    while True:

        for event in pygame.event.get():  # 从队列中获取事件
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_d:
                    changeDirection = 'right'
                if event.key == K_a:
                    changeDirection = 'left'
                if event.key == K_w:
                    changeDirection = 'up'
                if event.key == K_s:
                    changeDirection = 'down'
                    # 对应键盘上的esc文件
                if event.key == K_ESCAPE:
                    pygame.event.post(pygame.event.Event(QUIT))

        # 确定方向
        if changeDirection =='left' and not direction =='right':
            direction = changeDirection
        if changeDirection =='right' and not direction =='left':
            direction = changeDirection
        if changeDirection =='up' and not direction =='down':
            direction = changeDirection
        if changeDirection =='down' and not direction =='up':
            direction = changeDirection

        # 根据方向移动蛇头
        if direction =='right':
            snakePosition[0] +=20
        if direction =='left':
            snakePosition[0] -=20
        if direction =='up':
            snakePosition[1] -=20
        if direction =='down':
            snakePosition[1] +=20
        # 增加蛇的长度
        snakeBody.insert(0 ,list(snakePosition))
        # 如果贪吃蛇和目标方块的位置重合
        if snakePosition[0] == targetPosition[0] and snakePosition[1] ==targetPosition[1]:
            targetflag= 0
        else:
            snakeBody.pop()
        if targetflag ==0:
            x = random.randrange(1 ,32)
            y = random.randrange(1 ,24)
            targetPosition = [int( x *20) ,int( y *20)]
            targetflag =1
        # 填充背景颜色
        playsurface.fill(blackColor)
        for position in snakeBody:
            # 第一个参数serface指定一个serface编辑区,在这个区域内绘制
            # 第二个参数color:颜色
            # 第三个参数:rect:返回一个矩形(xy),(width,height)
            # 第四个参数:width:表示线条的粗细  width0填充  实心
            # 化蛇
            pygame.draw.rect(playsurface, redColor, Rect(position[0], position[1], 20, 20))
            pygame.draw.rect(playsurface, whiteColor, Rect(targetPosition[0], targetPosition[1], 20, 20))

        # 更新显示到屏幕表面
        pygame.display.flip()
        # 判断是否游戏结束
        if snakePosition[0] > 620 or snakePosition[0] < 0:
            gameover()
        elif snakePosition[1] > 460 or snakePosition[1] < 0:
            gameover()
        # 控制游戏速度
        fpsClock.tick(2)


#   启动入口函数
if __name__ == '__main__':
    main()
【Mind+】掌控入门 项目13 贪吃蛇 项目小结 掌握掌控板函数、变量的使用 学习列表,存储和调用多组字符,完成复杂任务 了解数据类型,掌握数据类型转换方法 阅读详情

相关推荐

C++游戏编程之贪吃蛇(新手向,大量注释)

C++win32窗口应用程序下的游戏工程,里面有很多注释,一般新手应该能学到些东西,注意不是MFC写的,学习游戏编程请尝试脱离MFC,这对你会有不少的好处~

童年的回忆小游戏来了——贪吃蛇,快来自己动手写一个属于自己的小游戏吧

在我的记忆里,小时候经常趁父母不在家的时候,偷偷拿爷爷奶奶的手机玩贪吃蛇,推箱子等游戏,这是童年记忆里的游戏。现在我已经好久没有玩过这个游戏了,但是!!!马上就可以拥有一个独一无二是属于自己的贪吃蛇了,快来和博主一起动手设计这个简易的贪吃蛇游戏吧一个大盒子.bigBox宽高都为640px(可以跟随自己的想法设置)属性有宽20px、高20px属性宽20px、高20px、direction(蛇头的方向)right(初始方向)属性宽20px、高。...

m0_53619602的博客 2205

贪吃蛇游戏编程

一个完整的贪吃蛇游戏代码,本人感觉很好,

c语言实现贪吃蛇小游戏(巨细详解,附完整代码)

使用c语言实现贪吃蛇小游戏(以链表为主要结构),内容讲解巨细,含完整代码,包看包会。

TTKunn的博客 1万+

SAP IDOC实战:如何用EDI实现跨公司采购订单自动生成销售订单(附完整配置步骤)

本文详细解析了如何利用SAP IDOC与EDI技术,实现跨公司采购订单自动生成销售订单的完整流程。通过实战案例,从业务蓝图设计、输出条件配置、伙伴参数设定到IDOC消息类型处理,提供了清晰的配置步骤与故障排查指南,帮助企业打通内部业务流,构建高效的自动化闭环。

weixin_29215815的博客 727

ubuntu 24.04安装ros1 noetic

上面是参考链接给的修改内容。除了上面要修改的地方,我在编译的生活还有一个地方报错,修改成如下形式。因为我已经对文件rosconsole_log4cxx.cpp作了上面的修改,所有是不是188行不太确认了,如果报“log4cxx::spi::LocationInfo”问题,按照下面修改就可以了。我在编译时还报了一个问题,就是我之前安装的是jazzy。所以在编译时会报ros变量名不对,这时对变量名做修改就可以了。具体怎么修改,百度。a、将源文件中所有CMakelist中编译标准改为c++ 17.

yangpan011的博客 3199

简单贪吃蛇小游戏

制作一个简单的贪吃蛇游戏 1.首先做出一条蛇出来,在随机生成一个果子(可以用button) 2.让蛇动起来(可以做一个定时器 改变按钮的位置) 3.按下相应的按钮让蛇能够相应的动起来 (KeyDown事件) 4.蛇与果子相撞时–(蛇身体增长,果子消失在随机产生一个) 5.结束游戏 具体实现代码 先创建一个蛇的类 class Snake { //构造方法 public Snake(int maxLength, Point point) { this.maxLength = maxLength; this.

m0_51422301的博客 601

从零搭建VGGNet

在 forward 方法中实现了前向传播过程,包括卷积、激活、池化和平铺操作,最后通过全连接层得到分类结果。使用 torch.onnx.export 将模型导出为 ONNX 格式的文件 vgg.onnx。导出 ONNX:将模型导出为 ONNX 格式,便于在其他平台或框架中使用。定义 VGG 网络:构建了一个包含多个卷积层、池化层和全连接层的网络。使用 torch.save 将整个模型保存为 vgg.pth 文件。前向传播:对输入数据进行前向传播,得到输出结果。保存模型:将模型保存为 .pth 文件。

开源驱动,创造价值;坦诚清晰,快速失败;让复杂可计算。 521

Python百日百行代码挑战-day5,day6,贪吃蛇游戏实战记录

python实现贪吃蛇小游戏

若能了达阴阳理,天地都来一掌中 973

0.1 专栏导读:为什么需要从 MM 理解 HMM

本文探讨了GPU计算框架中CPU与GPU内存管理的困境,介绍了Linux内核的HMM(Heterogeneous Memory Management)解决方案。传统显式拷贝模型存在编程复杂、指针失效等问题,而HMM通过共享虚拟地址空间、自动页面迁移等机制实现透明内存管理。文章分析了HMM依赖的Linux内存管理基础设施,包括页表遍历、MMU通知、ZONE_DEVICE等核心组件,并梳理了从经典MM到支持异构设备的进化历程。最后给出了学习HMM的8层知识体系,强调理解底层MM机制是掌握HMM的关键。

图形/计算GPU的驱动与虚拟化技术分享园地 761

量化 insider 爆料! 散户打板必亏?(打板必看!量化资金如何“隔日砸盘”收割散户)

量化开发 insider 爆料💥 散户追的涨停板📉,可能是机构故意做的陷阱!本文从技术视角拆解“涨停陷阱”,帮你看清市场真实逻辑🧠。

XiaoqiangClub的博客 450

C 语言实现经典贪吃蛇游戏

贪食蛇(也叫贪吃蛇)是一款经典的小游戏。初始是像素版本,后来又衍生出3D版本、多人对战版本等。

春天熊的技术博客 1077

主题035:计算流体力学(CFD)

计算流体力学(Computational Fluid Dynamics, CFD)是利用数值方法求解流体流动、传热传质等问题的学科。CFD已成为化学反应工程中反应器设计和优化的重要工具。∂ρ∂t+∇⋅(ρu)=0 \frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \mathbf{u}) = 0 ∂t∂ρ​+∇⋅(ρu)=0对于不可压缩流动:∇⋅u=0 \nabla \cdot \mathbf{u} = 0 ∇⋅u=0动量方程:∂(ρu)∂t+∇⋅(ρ

kkchenjj的博客 266

Day16 GUI编程:贪吃蛇

贪吃蛇 素材地址: https://gitee.com/kuangstudy/openclass/blob/master/%E3%80%90%E9%81%87%E8%A7%81%E7%8B%82%E7%A5%9E%E8%AF%B4%E3%80%91%E8%B4%AA%E5%90%83%E8%9B%87%E4%BB%A3%E7%A0%81/%E3%80%90%E7%8B%82%E7%A5%9E%E8%AF%B4%E3%80%91%E8%B4%AA%E5%90%83%E8%9B%87%E6%B8%B8%E6%8

蒋亚文的博客 287

11.嵌入式控制器EC实战 KBC矩阵键盘Keyboard开发流程

文章目录笔记本矩阵键盘概述矩阵键盘的扫描方式行列扫描方式逐行逐列扫描方式EC中矩阵键盘是如何扫描并得到码值的(代码分析) 笔记本矩阵键盘概述 在EC中支持两种形式的键盘,一种是PS/2接口的键盘,这种键盘几乎已经被USB接口的键盘所取代,所以PS/2接口的键盘不在我们的讨论范围。 另一种键盘则是矩阵键盘,也是笔记本电脑的内置键盘,该键盘类似于学习单片机时使用的4*4的那种键盘,笔记本使用的矩阵键盘有三种规格,分别是16*8、17*8和18*8。16、17和18代表着该款键盘的列数,8代表着键盘的行数,我们这

qq_30135687的博客 3809

【补充篇】三万字了解AUTOSAR软件架构(一)

主要讲解了AUTOSAR软件架构的分层及各个栈的作用

weixin_47571898的博客 1117

Java贪吃游戏的实现!

1.简介:      贪吃蛇是经典游戏,既简单又耐玩 2.玩法:        玩家通过键盘控制蛇在地图上寻找食物,吃下食物会使蛇变长,吃到一定数量的食物就会过关. 3.说明:      在游戏开发的过程中,只实现了地图的绘制,按键的控制,吃下食物会使蛇变长,边界碰撞问题等基本功能,有兴趣的同学请继续在此基础上开发. 4.贪吃蛇开发思路  1.首先自定定义

leap fly 技术博客 1953

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

杭电网安复试编程Day24

题目描述:输入一个十进制的数,把它转成十六进制。方法一:利用内置函数方法二:手动转换。

优快云_kada的博客 361

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

二模 06day2

很长时间没更新有意义的题目了呢,这是一套题撒,于是乎我便开心的边刷题边发题解了撒. 第一题: interval 比较好玩的一题撒, 分分钟过了, 就是模拟贪吃蛇但是没有食物(嗯,只要你判断冲突). 整个数组拿来移当然是不行的撒, 只要在末尾移去一个方格再向头部正对出放一个方格就行了撒. 编程复杂度挺低的, 可以直接修改一下做贪吃蛇游戏的后台. (最坑的地方就是坐标系.无图无**) 其实...

weixin_30906701的博客 85

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java入门第三天 switch case 运算符 小游戏准备

四.运算符: 数学运算符:+ - * / % ++ -- 比较(关系 )运算符:> = 逻辑运算符:& | ! && ||(短路)   if(true || false/true)   if(false && false/true) 赋值运算符: = 扩展赋值运算符:+= -= *= /=  %=  int n = 5 ;  n = n+6 ; // n+=6;

shanghylx的博客 444

c++提高学习笔记——05-c++STLday13_贪吃蛇案例

在学习c++提高-STL总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。 05-c++STLday13_贪吃蛇案例 目录:一、上节作业——综合案例(学校演讲比赛)二、贪食蛇案例 一、上节作业——综合案例(学校演讲比赛) 》比赛规则:某市举行一场演讲比赛( speech_contest ),共有24个人参加。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。...

Alliswell_WP 419

《C语言、C++、C# 从基础到进阶:三大编程语言系统学习指南》

本指南系统讲解 C语言、C++ 与 C# 的核心基础、语法特性、应用领域、学习路线和面试重点。内容涵盖变量、数据类型、流程控制、数组、函数、指针、结构体、面向对象、STL、集合、LINQ、异步编程、.NET 开发等知识,适合零基础入门、编程基础巩固、后端与系统开发方向学习者参考。

zzwokstyle的博客 482

06day2

蠕虫游戏 模拟 【问题描述】 蠕虫是一个古老的电脑游戏,它有许多版本。但所有版本都有一个共同规则:操纵一条蠕虫在屏幕上转圈,并试着去避免撞到自己或障碍物。 这里我们将模拟一个简单的版本。游戏将在 50×50 的棋盘上进行,棋盘的左上角为(1,1),蠕虫在初始时是一串 20 个相连的方格。所谓连接是指方格在水平或垂直方向上相接。蠕虫开始时是水平地伸展开的,从(25,11)到(25,30)。其...

weixin_30486037的博客 94

12天学好C语言——记录我的C语言学习之路(Day 7)

12天学好C语言——记录我的C语言学习之路 Day 7: 昨天进行了一天的数组学习,今天大家可以先写几个昨天的程序热热身,回顾回顾,然后今天第一个新程序也是关于数组的,比较难,准备好就开始啦! //输出奇数魔方阵,每一列、每一行以及对角线之和均相等(输入n为魔方阵的阶数,n为奇数) //首先说明一下魔方阵的形成规律:①将元素1放在第一行中间一列;②依次将数字放在前一个数字的

CoderZYWang 1814

FPGA零基础保姆级学习路线:从硬件思维到项目实战

数字电路设计是嵌入式系统和硬件加速领域的核心技术基础,其核心原理在于通过硬件描述语言将算法逻辑映射为可编程硬件结构。这项技术的核心价值在于实现软硬件协同设计,提供高性能并行计算能力和灵活的硬件定制性,广泛应用于通信、图像处理、人工智能加速等场景。本文聚焦于FPGA开发,通过系统化的学习路径,涵盖Verilog硬件描述语言、时序分析、仿真验证等关键技能,帮助学习者掌握从基础理论到项目实战的完整闭环,特别适合希望从软件转向硬件的工程师构建硬件思维体系。

weixin_33901926的博客 381

基于EasyX图形库的C语言桌面钟表程序设计

基于C语言图形库的可视化钟表程序设计

姬子老师的博客 1861
上一篇: 游戏编程基础day10
下一篇: 游戏编程基础day12贪吃蛇进阶版
金心靖晨
博客等级 码龄9年 460粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值