基于MFC对话框的2048游戏

在之前一篇《简单数字拼板游戏学习》基础上修改,地址:http://www.cnblogs.com/fwst/p/3706483.html

运行效果:

(4 X 4)

(7 X 7)

(1)已完成 2048 游戏基本功能,需要解决的几个关键问题是

a. 首先是数据结构。先定义矩形类,然后定义矩形类对象的二维数组,长度由宏定义,可修改,即可自定义成N*N的游戏。这样游戏就是由N*N个矩形对象组成。

b. 然后是游戏逻辑处理,也是最重要的一部分。方向键的响应。键盘上下左右四个方向键的逻辑一样,代码部分只是稍微修改一下。这部分逻辑有点纠结,应该有多种方法,这里介绍我的处理,有不同方法欢迎分享。以左键为例,这部分逻辑对每一行的处理步骤如下:

I. 清空空格, 并将所有数字按次序移到最左边。每个矩形有一个值,当值为0时,不显示,这些矩形就是空格。如一开始是0 2 0 2,那么经这一步处理后就应该是

2 2 0 0;

II. 从左边开始,依次将与右边相邻值相等的矩形的值加倍,并将该相邻值置为0。如 2 2 0 0,处理后应该是 4 0 0 0; 再如 2 2 2 2 处理后应该是 4 0 4 0 ;再如 4 2 2 8处理后是 4 4 8 0;

III. 再做一次第一步。这一步是为了处理做完第二步后新出现的空格。比如2 2 2 2做完第二步是4 0 4 0, 再经过这一步后就变成最终的4 4 0 0。

c. 生成新数字。每做完一个动作后需要生成一个新数字,本来原来游戏中新生成的为2或者4, 我这里就直接全都用2了,相对于原来游戏算是降低了难度,要生成4也很简单,加个概率随机生成就行。新生成数字的位置用一个循环,当生成的位置的值不为0 的时候就再次重新随机生成,直到随机到的位置的值为0。

另外,生成之前必须要加一个判断,就是如果最近的按键没有引起游戏面盘上的变化,则不能生成新数字。

d. 游戏结束的判断。 用一个全局函数,游戏结束的条件是游戏面盘上有空格,或者没有空格且任意两个相邻的数字的值都不相同,这里的相邻是指行和列两个方向上的相邻。这里用三个循环,第一个循环判断是否有空格,如果有空格,那么游戏肯定没有结束,函数直接返回false。第二个循环是从行的方向上,依次判断相邻的两个值。同理第三个循环是从列的方向上判断。游戏结束判断为true后用messagebox弹出对话框。

(2) 还没有做的事

a. 可以用圆角矩形。

b. 界面色彩太花,伤眼,可以弄成原作那样数字从小到大,颜色由浅到深。

c. 没有记分功能。

d. 没做重新开始。没做回一步。

e. 界面框框大小可以拖动。。。

源代码部分:

时间: 2024-10-13 22:48:47

基于MFC对话框的2048游戏的相关文章

基于网页版的2048游戏

前段时间有个很火的游戏叫2048,刚好趁着暑假想练习前端,顺带就把它作为练习项目做成Web Applications 该游戏基于HTML5+JS+CSS 文件结构: index.html 游戏界面展示 index.css 主界面的CSS样式,16方格采用绝对布局的方式 main.js 游戏的主要逻辑 show.js 游戏的一些动画效果 support.js 底层支撑 jquery.js 页面做了响应式布局,游戏效果如下: 代码如下: index.hml <!DOCTYPE html PUBLIC

基于MFC 对话框的 PCL、VTK 、OPENCV岩体识别系统构建(1)

最近在忙于点云系统的构建,主要结合点云库PCL.可视化库VTK以及图像处理开源库OpenCV来做结合图像和点云数据协同的岩体分析系统.这里希望跟大家分享一下自己的整体构建流程,不足的地方希望大家能够帮忙指出以便改进.由于还在搭建过程中,所以文章的更新时间不一定,但是有关键性的进展一定会写出来讨论,谢谢大家. 整个系统构建的分析过程包括模块划分,模块之间的耦合,数据库构建,相关类的创建.继承等理论细节不在这里讨论.这篇文章先从系统的界面框架开始: 一.菜单栏 关于系统的菜单由于之前讨论完成,主要分

MFC技术积累——基于MFC对话框类的那些事儿

1. 创建对话框类 (1)打开VC++6.0环境,点击:文件→新建: (2)在弹出的新建对话框中选择:工程→MFC AppWizard (exe)→输入工程名称(例如:功能调试)→工程保存路径名→确定(其他勾选项一律默认): (3)在弹出的MFC AppWizard- Step1对话框中选择:(你喜爱创建的应用程序类型?)点击基本对话框→(使用语言?)选择中文→点击下一个: (4)在弹出的MFC AppWizard- Step2 of 4对话框中选择:这里基本保持默认选择,比较有用的一项是输入标

MFC技术积累——基于MFC对话框类的那些事儿2

3. 绘图 3.1 对话框资源编辑 首先通过添加控件的方式来创建一个简单的绘图对话框如图所示,创建步骤为: 第一.在VC++6.0软件环境的灰色空白区域右击,选中Controls,然后会弹出一个控件对话框: 第二.点击需要的控件,鼠标箭头类型就会变成十字形,然后在主对话框里通过点击.拖拽绘制出需要的控件,这里也可以通过鼠标调整控件大小直到满意为止. 第三.在主对话框里右击打开属性对话框(一般情况下可以点击属性对话框左上角的形如大头针样式的小按钮来锁定属性对话框,解锁也是点击同样的按钮,只是按钮样

基于MFC对话框程序中添加菜单栏 (CMenu)

vs2013MFC对话框程序中添加菜单栏的过程,我大致分了这五步. 一.将Menu加入Resource视图中 在WorkSpace中的Resource视图下,在任意一个文件夹图标上,右击选择Insert(插入)选项,在弹出的对话框中选择Menu以后,再点击,new按钮,菜单就会添加成功了,但是现在还没有完成,还不能进行编译,因为现在的菜单时空的,在编译的时候会被清除的. 二.用菜单编辑器添加菜单栏及菜单项 菜单添加成功后,菜单编辑器自动打开,可以在其中添加菜单栏及菜单项,比较简单. 三.将菜单加

MFC技术积累——基于MFC对话框类的那些事儿4

3.3.4 借助兼容DC加载DIB位图 创建一个与设备环境相兼容的DC,通过将位图暂时导入至兼容DC,然后利用CDC::BitBlt 或者CDC::StretchBlt函数将位图绘制到设备环境中. 示例代码如下: void CFDlg::OnLoadbitmap() { // TODO: Add your control notification handler code here HBITMAP hbitmap; BITMAP bitmapinfo; CBitmap cbitmap; RECT

MFC实现2048游戏(一)

MFC先实现2048游戏: 总共有两个场景,欢迎场景与游戏场景,在MFC下面,一个场景也就是一个对话框: 第一步: 实现欢迎场景: 很简单的插入一个对话框:防止两个按钮,一个进入游戏,一个退出游戏,其他界面上自己可以加载图片好看一点: 这个类为:CStartDlg 因为我们运行程序首先出来的是欢迎界面,所以在2048App当中要把主对话框改为 CStartDlg 第二步:实现游戏场景: 这里界面几乎没有设置,界面部分没有发时间去弄,就是简单的数组数字显示:主要是弄游戏逻辑,下一篇讲游戏的逻辑!

游戏开发视频教程_基于MFC设计的MINI快跑游戏

基于MFC设计的MINI快跑游戏(游戏开发.MFC精讲.线程与进程通信) 课程分类:游戏开发 适合人群:初级 课时数量:36课时 用到技术:MFC涉及项目:MINI快跑游戏 咨询QQ:1840215592 一.模块介绍 1.MFC基础篇:主要讲解c++的一些技术难点以及重点 容器与算法精讲 类与数据抽象精讲 模板与泛型编程精讲 标准IO库知识点深入浅出 2.MFC进阶篇:主要讲解MFC的深入浅出 CObject类详解 消息映射的实现 MFC的DLL精讲 MFC的进程和线程精讲 3.MFC设计篇:

Android 2048游戏开发

根据教程写的简单的2048游戏. 极客学院教程地址:http://www.jikexueyuan.com/course/43.html 我的源代码地址:https://github.com/myCodingTrip/2048Game 项目有3个类. Card extends FrameLayout{ private int num; private TextView label; public Card(Context context) public int getNum() public vo