注册 登录
编程论坛 C++教室

[原创]贪吃蛇由Consule到MFC

wfpb 发布于 2006-08-24 20:42, 4308 次点击

以前写过一个贪吃蛇的控制台程序。
一直就响写有界面的,现在终于完成了一个低级的。
程序如下:

只有本站会员才能查看附件,请 登录





---------------------------------------------------------------------------------------------------------------------------------------------------

上面是更新以后的文件

[此贴子已经被作者于2006-8-28 14:00:37编辑过]

25 回复
#2
yeshirow2006-08-25 06:49

哈哈, 終於完成了.

對於 OnHelp 的問題我有個建議...
你不妨打開 MyMenu.rc
將 VK_F1, ID_HELP, VIRTKEY, NOINVERT 這一行標記爲注釋
就是 // VK_F1, ID_HELP, VIRTKEY, NOINVERT 這樣, 看一下能不能改善

#3
corrupt2006-08-25 07:17

来个.dsw 文件嘛.... debug 文件可以不要,.dew 总该来个吧

#4
wfpb2006-08-25 07:56
不好意思哦,我用的不是VC6了,Visual Studio 2003
#5
wfpb2006-08-25 08:18
我试着改了下,发现了另外的问题。
的确,我注释了以后就只弹出一个了,但是我连着按几次,他就出现几个,不是模态对话框吗?怎么会这样?

还有,你说的注释是什么原因?为什么不用关联VK_F1和ID_HELP_DLG啊?
#6
yeshirow2006-08-25 08:25

它還是一個 modal 對話框, (這點由 view 是 disable 得以證實)

爲甚麽會這樣, 原因應該是 HelpDlg 有 ParentNotify 擴展, 就是 F1 由 HelpDlg 接收, 它會傳給 view.

#7
corrupt2006-08-25 08:55
2003,双击 打开哪个文件??
我也安装了2003
#8
yeshirow2006-08-25 08:57
.vcproj
#9
corrupt2006-08-25 09:11
这个程序最好是 蛇的大小和窗口大小成比例...
不然.. 你判断死亡的条件 是肯定有bug的..
if (m_ptList.GetTail().x<0||m_ptList.GetTail().x>=m_rect.Width()-m_sizeSnake
||m_ptList.GetTail().y<0||m_ptList.GetTail().y>=m_rect.Height()-m_sizeSnake)
return FALSE;
#10
wfpb2006-08-25 09:28
呵呵,我把窗口改变性能能了,cs.style&amp;=~WS_THICKFRAME;窗口不能改变大小,我之所以这样写,认为这种游戏要是可以改变大小就显得很丑了,所以图方便就直接这样写了
#11
corrupt2006-08-25 09:39
哪里 ,最大话 你试试
#12
wfpb2006-08-25 09:42
哦,这个我忘记修改了,谢谢,我再改个
cs.style&=~WS_MAXIMIZEBOX;

[此贴子已经被作者于2006-8-25 9:45:37编辑过]

#13
woodhead2006-08-25 12:14
只能看看了,mfc还不会。
#14
wfpb2006-08-25 19:10
我又加了点东西,一个界面和一个设置速度的功能
#15
myajax952006-08-25 23:43
楼主同学学习速度惊人呀,赞一个。
#16
wfpb2006-08-26 15:35
谢谢夸奖,我还很菜,我昨天就纳闷,为什么我把SetTimer改成速度1ms还是那么慢,后来想了下,才记起来,我的ondraw中的SetBkBitmap(用图象重新覆盖)这个函数中每次都加载了一次图片,浪费了时间,所以改了下(加了两个成员变量m_rect,m_brush):
void CMyMenuView::SetBkBitmap(CDC* pDC,UINT nFlags)
{
    static int j=0;
    if(j==0)
    {
        CBitmap bmp;
        bmp.LoadBitmap(nFlags);
        m_brush.CreatePatternBrush(&amp;bmp);
        GetWindowRect(&amp;m_rect);
        m_rect.top=0;
        m_rect.left=0;
        j++;
    }
    pDC-&gt;FillRect(&amp;m_rect,&amp;m_brush);
}
结果一下快了不少,我只能玩50ms的了。(一样还是比较快)。
#17
wfpb2006-08-28 14:01
我又加了个时间显示,还有生命值显示 以及 设置的功能
#18
wfpb2006-08-29 08:55
我暂时不修改bug了,这个程序有几个bug,我修改以后还剩下一个没解决。

就是在那个OnTimer里的
else
{
...
if(..<..)
{
...
}
else
{...}
...

}
这个地方有问题,大家可以设置生命值,由于我初始化时life为1,显示的生命设置的初始值却为3,所以大家选择一下再开始就会发现问题(死一次之后继续按F4)

前面CMainFrame里的OnPaint()里最后的那个create语句改成:
if (m_progress.m_hWnd==NULL)
{
m_progress.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH,rect,&m_wndStatusBar,123);
}
else
{
m_progress.MoveWindow(&rect);
}
关键就是我前面说的死了一次以后继续开始,就有问题
#19
wfpb2006-09-02 22:11

我没有修改以前的bug了,找得麻烦。

把之前的可用的部分copy过来了点,免得又重新写算法,现在的这个应该看起来舒服点,先前的太乱了。


运行程序:
只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2006-9-3 11:21:57编辑过]

#20
myajax952006-09-02 22:23
又是2003版本的,在家没法看。wfpb你可以把.aps文件删掉再打包,这个文件是可以自动生成的,2M多
#21
wfpb2006-09-03 11:22

哦,我把19楼的改了,把那个删了

#22
优幽2006-09-03 18:30

唉!看不懂,

#23
blpluto2006-11-03 16:32

那个程序没法用

#24
wfpb2006-11-05 12:48
不好意思,用2003编的,是在VC6上运行不了,把代码放进VC6里,编译运行一下就可以了.
#25
codeless2006-12-02 21:12
楼主设置的最慢速度,我吃个豆还要那老长时间 尝试好几次。。。
#26
wuwuwuwu2008-11-03 10:45
顶一下
1