计算机软件技术实习项目二(一) 贪吃蛇项目准备
前言
大家好,我将为大家介绍我学习贪吃蛇的准备知识,做软件是我之前没有接触过的领域做得不好,大家不要见怪。本文着重介绍原理知识,具体实现请结合《计算机软件技术实习项目二(二) 贪吃蛇项目实现》
一、贪吃蛇介绍
贪吃蛇游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。。
二、开发工具
编程语言:c++
开发工具:Visual Studio 2019
类库:MFC
三、实现原理
我们定义一个类来表示贪吃蛇,通过键盘控制他的方向,他吃豆子就会边长。那我们怎么就能通过键盘就能控制贪吃蛇呢?我们又是怎么把蛇给画出来的呢?贪吃蛇又是如何实现移动的呢?
1.消息与消息队列
Windows程序设计是一种完全不同于传统的DOS方式的程序设计方法。它是一种事件驱动方式的程序设计模式,主要是基于消息的。
每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息。
例如,当用户在窗口中画图的时候,按下鼠标左键,此时,操作系统会感知到这一事件,于是将这个事件包装成一个消息,投递到应用程序的消息队列中,等待应用程序的处理。
然后应用程序通过一个消息循环不断地从消息队列中取出消息,并进行响应。·
在这个处理过程中,操作系统也会给应用程序“发送消息”。所谓“发送消息”,实际上是操作系统调用程序中一个专门负责处理消息的函数,这个函数称为窗口过程。
2.消息映射
消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC 将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTONDOWN消息的处理程序OnLButtonDown,然后就调用OnLButtonDown。
下面是将消息映射添加到一个类中所做的全部工作:
1)所操作类中,声明消息映射宏。
2)通过放置标识消息的宏来执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。
3.设备环境
关于设备场景,叫法颇多,有些书上说为设备环境、显示场景,更常见的叫做设备描述表或设备描述体。这里叫设备场景。
那么究竟什么是设备场景呢? 设备场景是一种windows对象,而windows则是一种图形环境,其图形系统令人难以自信地灵活和强大。而实质上,widnows下的所有绘图都是通过设备场景进行的,而不是直接对窗口和设备本身进行。为了说明设备场景,很多书都拿一些现实生活中的现象来进行对照说明。其中,最常见的是把它比喻为一 位画家在作画。我想大家都看过画家是如何画画的,最起码是在电影里或者是在道旁的广告牌上作画的画家。我们可以想象一下∶有个风景秀丽的山上,有位画家一只手拿着调色板,另一只手则拿着画笔,面对一个画板正在写风景画。有些书认为画家的调色板相当于设备场景,有些书则认为画板相当于设备场景,说法不一。鉴于这种情况,我认为还是直接去说明设备场景比较好。
作为windows的对象,设备场景实际上是一种windows内部的数据结构。就象pointapi数据结构具有x和y两个属性一样,设备场景同样具有着它自身的属性,只是属性比较多而已。
请你多看看这张表,对设备场景都有哪些属性,脑子里应当有个印象。可以说,设备场景是windows编程中最重要的概念之一。
对于设备场景,可以把它想象成一种配套的(包括画板、调色 板、画笔、刷子等)的绘画工具。其中画板是最重要的,其他的东西都是为这个画板服务的。如过你创建了一个设备场景,就等于是你从百货商店买来了这一套绘画 工具,从而具备了绘画的条件。但你的房间总不是那么宽敞的。为了继续绘出别的画、继续购买新的绘画工具,无用的工具应当及时清理掉。因为设备场景本身是占用内存的。对于绘图,你应当认识的一点是,绘图并不是简单地指绘画,输出文本也是一种绘图过程。尽管如此,api函数中图形函数与文本函数大体都是分开的。绘画和写文本都是在同样的设备场景中进行,这一点很重要。
4.定时器
定时器简介:
定时器,可以帮助开发者或者用户定时完成某项任务。在使用定时器时,我们可以给系统传入一个时间间隔数据,然后系统就会在每个此时间间隔后触发定时处理程序,实现周期性的自动操作。例如,我们可以在数据采集系统中,为定时器设置定时采集时间间隔为1个小时,那么每隔1个小时系统就会采集一次数据,这样就可以在无人操作的情况下准确的进行操作。
MFC定时器:
vs2019编程中,我们可以使用MFC的CWnd类提供的成员函数SetTimer实现定时器功能,也可以使用Windows API函数SetTimer来实现。
CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用,而API函数SetTimer则没有这个限制,这是一个很重要的区别。
四、参考资料
【1】百度百科 贪吃蛇
https://baike.baidu.com/item/贪吃蛇/9510203?fr=aladdin
【2】B站视频 黑马程序员MFC教程(已完结)
https://www.bilibili.com/video/BV1JW41147NX?from=search&seid=6025365628252572562
【3】Windows编程入门-设备环境属性
https://blog.youkuaiyun.com/zb774095236/article/details/86490716
【4】windows设备上下文的概念
https://blog.youkuaiyun.com/u010796650/article/details/52139193
【5】VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
http://www.jizhuomi.com/software/232.html
【6】课程ppt 计算机软件技术实习技术提示