易码技术论坛

 找回密码
 加入易码
搜索
查看: 531442|回复: 12

[归档] 贪食蛇(Windows游戏编程演示)

[复制链接]
发表于 2006-10-20 10:18:13 | 显示全部楼层
看看先~~

其实感觉比较混乱...看起来有些费力...或许是我道行还不够...
发表于 2006-10-20 13:08:42 | 显示全部楼层
牵扯到C++、STL、Win32API、OO、Game……
看你教程准备怎么写。
发表于 2006-10-20 13:25:02 | 显示全部楼层
::
我一直不懂::这种表达法
 楼主| 发表于 2006-10-20 13:36:12 | 显示全部楼层
引用第1楼yzk03702006-10-20 10:18发表的“”:
看看先~~

其实感觉比较混乱...看起来有些费力...或许是我道行还不够...

嗯,是花3个小时勾勒出来的,大部分时间还是用在框架的搭建上,我尽量把windows的那套必备的代码包起来,只露出来游戏逻辑。是有些乱,我也很久没有这样写代码了,教程里我会一块块地讲的。
发表于 2006-10-20 14:03:51 | 显示全部楼层
引用第3楼Cloty2006-10-20 13:25发表的“”:
::
我一直不懂::这种表达法
::就是命名空间,比如std::等等,如果::前面什么也没有就是全局的命名空间。
发表于 2006-10-20 14:12:22 | 显示全部楼层
引用第3楼Cloty2006-10-20 13:25发表的“”:
::
我一直不懂::这种表达法
简单的说,::就是“作用域操作符”,首先要有名字空间的概念。
比如写了这样一段代码:
  1. namespace MyApp
  2. {
  3.   void foo(){};
  4. }
  5. void global(){};
复制代码
这个foo函数是在MyApp这个名字空间下的,所以要用MyApp::foo来调用。
如果直接写::的话,表示全局的或者已经被使用的名字空间。
所以那个global函数可以写::global来调用,也可以不写::

假如有这样的代码
using namespace MyApp;
说明MyApp这个名字空间已经被设为使用中,调用时可以隐去。那么当MyApp里面的东西在名称不冲突的情况下,可以用::来调用,也可以不写。

一般情况下在最前面的::可以不写,之所以总是看到这样写的代码,我个人觉得是因为输入::后VC的智能感知可以将全局的东西都列出来。

当然作用域不一定就是名字空间,类定义中也常常用到。
  1. class Human
  2. {
  3.    class Arm
  4.    {
  5.       // code...
  6.    }
  7.    // code...
  8. }
复制代码
在class Human的类定义之外如果要用Arm也得写成Human::Arm,同样在类之外实现类的成员变量或者函数的时候也要如此。
比如类定义在这里:
  1. class Human
  2. {
  3.    void Action();
  4. };
复制代码
Aciton()的实现写在其他地方了,那么需要这样来写函数名称:
  1. void Human::Action()
  2. {
  3.    // do something
  4. }
复制代码
这样表示在这里实现的是Human这个类中的成员函数Action(),而不是一个全局的Aciton()。

还有调用一个类的静态成员函数或者成员变量的时候,也要用::,比如下面的:
  1. class SampleClass
  2. {
  3. public:
  4.    static const int id = 0;
  5. };
  6. void main()
  7. {
  8.    int a = SampleClass::id;
  9. }
复制代码
这里的SampleClass::id就像一个全局变量的感觉,当然静态成员的使用不是为了把全局变量搞成这副德性。

总结一下,所谓::表示后面的东西是属于前面的那个"域"的,"域"永远是抽象的,就像一个人的姓氏,这和.不一样,操作符.前面的是一个具体的东西,比如一某个类的实例。

题外话,貌似在c#里面,符号.也有作用域操作符的含义=v=

以上是随手打的,说的不对的地方欢迎指出……
发表于 2006-10-20 18:19:45 | 显示全部楼层
8错!虽然看不懂,还是支持!
 楼主| 发表于 2006-10-21 22:08:55 | 显示全部楼层
还有就是子类要调用爸爸的成员,而自己有覆盖时,也要这么写:
code:
  1. class A
  2. {
  3. public:
  4.   void f()
  5.   {
  6.     cout<<"Hello from A";
  7.   }
  8. };
  9. class B:public A
  10. {
  11. public:
  12.   void f()
  13.   {
  14.     A::f();
  15.     cout<<"Hello from B";
  16.   }
  17. };
复制代码


~~~~~~无论如何这段代码变不好看了……谁来帮我搞搞
发表于 2006-10-22 21:56:09 | 显示全部楼层
挺好看的~~~我Applet这个的时候一边看一边写 灭哈哈。。。
发表于 2006-10-22 22:37:27 | 显示全部楼层
解释的很清楚,明白了!
发表于 2006-10-22 22:39:47 | 显示全部楼层
引用第9楼混乱羽翼2006-10-22 21:56发表的“”:
挺好看的~~~我Applet这个的时候一边看一边写 灭哈哈。。。
看着C++写Java,你有那么NB吗...
发表于 2006-10-22 23:00:57 | 显示全部楼层
引用第11楼yzk03702006-10-22 22:39发表的“”:

看着C++写Java,你有那么NB吗...

居然被你发现了。。。。。。。。。。真不好意思。。。
 楼主| 发表于 2006-10-20 00:14:31 | 显示全部楼层 |阅读模式
随篇教程和代码注释将随后放出,先放一个demo大家看看。

这套东西中我把Win32 API和消息循环做了一层包装,让大家可以只关注游戏逻辑,有兴趣的可以关注一下:)

开始的话只要看看Main.cpp就可以了:)

使用VC 6.0(.dsw) 或者 .net2005(.sln) 都可以打开

SimpleGame1020.rar

13 KB, 下载次数: 157

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 16:51 , Processed in 0.015994 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表