|
|
发表于 15-3-2011 12:53 PM
|
显示全部楼层
本帖最后由 geekman 于 15-3-2011 01:49 PM 编辑
回复 65# arios
你是整个源代码不明白还是里面的哪一部分不明白?你是想让人给你完全解析整个程式?你可曾明白里面的任何一部分?如果你没清楚地说明你哪里明白哪里不明白,那我解释你已经明白的部分不就是在做无用功吗?请别浪费我的时间。
再次重申:
请学习正确和清晰的发问技巧。
至于那个程式有什么用?你compile & run它不就知道了吗?难道你连它执行后的结果也无法理解?Please,虽说我说过我会帮助你,但也不是好心到拿汤匙对你说“啊”的喂你。有一些显而易见,你只要动一动手或想一想就能得到答案的事,我是不会回答的。我不介意在看到你在坑洞里挣扎的时候拉你一把,但我不会在每一个坑洞旁等着你接近并把你拉开,没摔倒过的人是不会成长的。
而如果你选择蒙着眼走这条路,抱歉,我没打算当导盲犬。所以,拜托,请清楚明晰地提问,这对于你将来进入大学学习会很有帮助的。看戏或看小说里也会有看到过,为何有的教授对某些学生特别厌恶?除了爱捣蛋和不听话的学生以外,发问笨问题的学生也会让教授抓狂的。
原本我不打算向你解释你的代码的,但是为了让你明白你到底犯了什么错误 ,以及什么是清晰地发问,看下去吧:
#include <iostream> 这一行你应该已经明白了吧?如果你再问我什么是#include,我也会像大学教授一样抓狂的。但是你的问题却依然把它含括在内了。
int main() 这一行正确的发问方式是:
1)“int main()是什么意思,为什么前面有个int,它的作用是什么?”
2)“为什么我看到之前的例子里面有放void这个字的?有什么差别?”
3)“为什么这个function要叫作main?我在好几个例子里面都看到这个名字,它到底有什么作用?”
4)“为什么后面的那个括弧里面是空的?我在别的例子里面看到里面都有些东西的。。。啊,我记得你说过那里面的应该是Argument,到底是什么?”(虽然我猜想有99%几率,你真的不记得我有这么说过了)
{这个你也不会想再问了吧?(掏出散弹枪上膛,只要你一点头就扣扳机)
using namespace std; using namespace是什么意思?std又是什么?
cout << "Hey now brown cow."; cout是什么? 为什么要用<<符号?
cout << endl; 什么是endl?
cout << "dont junp that fence!" <<endl;
system("pause" ) ; 这行又是什么意思?不过你若问这个问题的话就会被弹的了,答案是:“请按F1键寻找答案。”
return 0; return有什么作用?为何后面会有个0?
}
其实你所有的问题都可以通过按F1键得到答案。 |
|
|
|
|
|
|
|
|
|
|
发表于 15-3-2011 03:10 PM
|
显示全部楼层
其实我也曾经经历过这些。我的解决方法是压抑自己的冲动,别一遇到问题就急急忙忙的提出来,而是先想想,分析自己的问题,把问题分解成更小的问题,然后一个个的去寻找答案,最后你就会得到一个完整的答案。有时想过之后你就会发现,原来你已经知道答案,只是一时之间脑筋转不过来,没联想到其他方面去罢了。其实这也是Programming的思考技巧,把大问题分解成小问题,一个一个去解决。
举个你自身最有兴趣的例子:
问:如何学做电脑游戏?
你如果问出这个问题,就会像楼主刘小弟那样,被射的体无完肤。
如果你自己想想,就站在一个电脑白痴的角度想:
1)做游戏肯定要先懂得和电脑沟通,到底要怎样和电脑沟通?所以你问了。
2)答案说要和电脑沟通,得懂得电脑语言,可是到底有些什么电脑语言呢?所以你问了。
3)答案说有很多,A(Assembly)B(Basic)C(C/C++/C#/COBOL)任你选择,可是那一个比较好呢?所以你问了。
4)答案说现在最流行的是C系列的语言,尤其是C++,那到底两者有什么分别?所以你问了。
5)答案说在Windows环境下,C++较占优势。至此,你知道如何和电脑沟通了,你选择了C,然后我被弹了,知道你错了,你重新选了C++。
然后你开始学习C++语言。你不懂什么是#include,什么是(),什么是{} ,所以你问了。
你得到答案,因为你清楚地问你的问题。然后你又问,很笼统的,这个程式码是什么意思?里面很笼统的包含了我已经解释过的部分,所以我射了,掏出散弹枪,狠狠的射的你体无完肤。
然后你再想想,电脑游戏里面有什么?
1)游戏里有图画,所以你应该问,如何在电脑荧幕上画图画。
2)游戏里有音乐,有音响效果,所以你应该问,如何在电脑播放音效/音乐。
3)游戏里要接收玩家的操控,然后你又更进一步的想,一般电脑游戏都用键盘控制,所以你问了如何读取键盘的数据。然后你又注意到,键盘旁边往往有个滑鼠,所以你又问了,如何读取滑鼠的数据。
4)游戏要有三维模型,你又问了,如何在电脑上显示三维模型。然后你又问了,电脑要如何才会生出三维模型。你又被射了,然后得知,你得自己用立体建模程式来制作模型,或者花钱去买。
5)。。。(我懒得打字了)
看的到了吗?“我想学做游戏!!!” 是个怎么样傻憨的论坛帖子标题?如果换成“我想学习做游戏,需要具备什么知识?”或许就不会被射的体无完肤了,当然,难免也会有些正在更年期里患上抑郁症的高手跑来射你,你只能自认倒霉。 |
|
|
|
|
|
|
|
|
|
|
发表于 15-3-2011 03:44 PM
|
显示全部楼层
本帖最后由 geekman 于 15-3-2011 03:46 PM 编辑
回复 geekman
看来我真的是会让人发狂了。。。
真的是不好意思的,我是有记住你说过的话,但是 ...
arios 发表于 15-3-2011 02:13 PM 
1)“int main()是什么意思,为什么前面有个int,它的作用是什么?”
这是function prototype,function的命名的格式。return_type Function_Name(Argument list)。Return type 是你的function要传回给呼叫这个function的呼叫者(可以是作业系统,也可以使你的程式,也就是你的main(),也可以使你所写的任何其他Function。)在这个例子里面,你得Function会传回一个Integer给任何呼叫这个Function的程式。还记得你的源代码的最后一行:return 0吗?这个指令就是告诉你的Function,离开前把0这个数据传回给呼叫着。
2)“为什么我看到之前的例子里面有放void这个字的?有什么差别?”
void在C语言里代表 “什么都没有” 的意思,嗯,就跟字面上的意思一样。如果在return type那里使用void这个type,就表示这个Function没有任何回复给呼叫者。
3)“为什么这个function要叫作main?我在好几个例子里面都看到这个名字,它到底有什么作用?”
在C语言里,main作为Function名字,是由特殊意义的,main是每一个电脑程式(至少在Microsoft所开发的作业系统里都是)的切入点。当你在电脑输入执行一个程式,例如My_Program.EXE的时候,你的作业系统会打开这个档案,把数据载入到电脑的记忆体里面,然后寻找__main这个function的位置,并从那里开始执行接下来的机械指令。在Windows环境里,这个切入点被命名为 WinMain。
4)“为什么后面的那个括弧里面是空的?我在别的例子里面看到里面都有些东西的。。。啊,我记得你说过那里面的应该是Argument,到底是什么?”
当你没有任何Argument要传送给这个Function时,自然就不必在Argument list里写些什么嘛,不是吗?在C语言里面,原本你应该在Argument list,也就是Function Name后面的括弧里面写上void,代表没有Argument,例如 void main(void),不过在C++里面就省略这个多余的void,所以括弧就空了。Argument就是你要传送给Function的数据,例如你要写一个计算A数值和B数值的总和的Function:- int sum(int A, int B)
- {
- int total = A + B;
- return total;
- }
复制代码 A和B就是你的Argument,当你呼叫这个Function时你得负责提供这两个数值的内容。- void main(void)
- {
- int Answer;
- Answer = sum(76, 2735);
- ...
- }
复制代码 在main里面你呼叫sum()这个Function,并把A数值定为76,把B数值定为2735,当程式运行到sum()的内部时,就会使用这两个数值来计算A + B这个方程式,然后把答案return回去给main,而在main里面这个回复的数值会被代入到Answer这个函数里面。 |
|
|
|
|
|
|
|
|
|
|
发表于 15-3-2011 04:54 PM
|
显示全部楼层
本帖最后由 geekman 于 15-3-2011 05:07 PM 编辑
你不必全都懂,你只需把你想做的部分(目前来说,你是朝Programmer方向进军)做好就行了。
现在的年代,除非是有强烈的宅男/女+自虐属性的人,不然没有人会打算自己一个人开发一个商业级数的游戏。单人开发组并不需要也不可能把目标放在像CoD之类的大作的。如果你想开发一个具备商业级数素质的游戏,找人合作是唯一的途径,也就是说当你想组织开发团队时,don't play play,毕竟你得对团队里的其他人负责的,别让自己的不负责任拖死整个团队,会被群殴的。
动画,图画,立体模型 - 这些你都不必懂得怎样作,这是美术员/建模师的工作,你只需要懂得如何把模型/图画/动画载入你的程式,怎样播放,怎样停止,怎样移动,怎样Transform模型来达到动作动画等等。
音乐/音效 - 你也不必懂得录音,更不必懂得作曲,那是乐师/录音师的工作,你只需要懂得如何播放,如何控制声量,高级一点的你得学习如何运用三维空间声音API的运用就行了。
制作游戏的另一个途径,就是走非技术路线(你目前是走技术路线),也就是管理层路线,成为Manager,Director等职位 |
|
|
|
|
|
|
|
|
|
|
发表于 15-3-2011 05:23 PM
|
显示全部楼层
回复 74# arios
你的程式需要return 0是因为你把你的Function declare为 int function_name()。你已经告诉COmpiler:“这个Function必须回复一个Integer”,所以你无论如何都得return 一个数字。return这个指令除了回复数值之外,也可以作为打断程式流程的方法之一。
当你把return type设为void,return后面不需要有任何数值。- void main(void)
- {
- ...//do something
- return;
- }
复制代码 当你想打断程式的流程例如当你计算除式,你必须注意分母不可为0,否则就会发生Divide by Zero Error,如果你的Function发现分母为0,就打断运算,以免发生大件事:- float divide(float A, float B)
- {
- if(B == 0)
- return -1; //你不在乎以后的运算,并把代表错误的-1回复给呼叫者
- return (A / B); //要是B不等于0,就会运行到这里,把A/B的结果回复给呼叫者
- }
复制代码 你看到的和你学的不一样是因为电脑语言的运用千变万化啊。
还有,相信电影里面的神奇电脑的,是傻瓜。FBI的网站登入是肯定不会有dididudu的声音的。 |
|
|
|
|
|
|
|
|
|
|
发表于 22-3-2011 11:35 AM
|
显示全部楼层
回复 77# arios
要return什么数值是看你自己想要传达什么而定的啊。例如- if(marks >= 50)
- return 'P'; //pass
- else
- return 'F'; //fail
复制代码 或者- //something bad happened...
- return -1; //denotes error
复制代码 又或者- return; //just simply return from function
复制代码 |
|
|
|
|
|
|
|
|
|
|
发表于 24-3-2011 12:18 PM
|
显示全部楼层
回复 79# arios
怎么又扯到数学那里去?到目前为止我都没提到任何function和数学有关的话题啊
电脑领域?那得修炼到电脑之神的境界才能够拥有的技能啊!
不开玩笑了。*咳*
粗分的话,可以分为创作(软件编程,硬件设计),管理(系统管理,系统分析),技术(系统组合,网络支援)等方面吧。
Computer Engineering 涵盖系统设计(包括硬体),整个电脑系统的Infrastructure之类的,系统软件,应用软件也都包括在内。
Software Engineering 专注于软件的设计,分析和品质管理。
详细的分别你还是去维基那里看吧。
如果你想当Programmer,当然应该选择Software Engineering啰。如果有机会的话,就选 Multimedia & Designing 作为副修科,学习一些如3D Modelling,Graphics Design,Animation之类的,对于游戏制作都有帮助的。 |
|
|
|
|
|
|
|
|
|
|
发表于 13-4-2011 11:55 AM
|
显示全部楼层
回复 82# arios
很高兴听到你不再迷惘。学校的确不可能把你教成电脑大师,学校只能告诉你如何踏上你所选的路,至于在路上怎么走,一路平坦还是崎岖不平都得你自己去克服。就好像驾驶学院能够教你如何开车,如何遵守交通规则,但是他们不可能教你如何漂移甩尾,如何在马路上赛车跑个第一名,也不可能教你车子抛锚了要怎样修理,顶多只是告诉你,小心的把车子停靠在路边,然后打电话联络修车厂。
相同的,电脑学校只能教你如何运用电脑,如何命令电脑做你想做的事情,至于要电脑做什么,如何利用电脑达成你的梦想,就是你自己得努力的了。
至于我,我并不是什么都懂,至少你问我如何使用3D显示卡的Shader功能,我也只能扒扒头,告诉你:不好意思,我还没学会这个呢。。。哈哈哈
一步一步来吧,即使现在电脑软件已经发展到多线程多功处理环境,在底子里,电脑依然是Sequencial Machine,也就是根据指令一步一步的执行下去的。 |
|
|
|
|
|
|
|
|
|
|
发表于 13-4-2011 01:21 PM
|
显示全部楼层
本帖最后由 geekman 于 13-4-2011 01:25 PM 编辑
如果你被人鄙视,你该怎么办,请选择以下任一答案:
A)无视之,继续自我感觉良好的被人继续鄙视。
B)也加入鄙视的行列,自己鄙视自己。
C)弄明白被鄙视的原因,然后改善,进而超越鄙视你的人,然后转过身来鄙视他。
我已经不用MSN了,自从曾经被MSN跳窗吃掉我几个输入的字,把 “我也不是对你的问题有兴趣” 吃掉 “的问题” 三个字而变成 “我也不是对你有兴趣” 而被某个自我感觉良好的小妹妹当成 怪蜀黍 后,我所有的电脑就永久性的禁用MSN了。
我现在只用Facebook,不过一个礼拜也不过上去看两三次吧。 |
|
|
|
|
|
|
|
|
|
|
发表于 5-5-2011 08:06 PM
|
显示全部楼层
嗯,祝你好运,希望你能够实现你的梦想。不过如果你设计的游戏无法让我满意,我还是不会买的哦,哈哈哈 |
|
|
|
|
|
|
|
|
|
|
发表于 11-5-2011 10:30 AM
|
显示全部楼层
佳礼机房管理员无意间修练成时间之神,产生神格的时候引发异象,造成时间乱流,导致佳礼服务器全面回溯48小时。
你想问101010的什么?来源?原由?意义?请明确提问。切记,论坛里最忌就是涵盖面太大(简单说就是没头没脑)的提问,毕竟没人喜欢花太多心思去猜测发文者心里在想什么,或者花费数个小时去打几千字来解释整个电脑硬件原理+电子讯号原理+二进制原理+电脑机械码原理。 |
|
|
|
|
|
|
|
|
|
|
发表于 11-5-2011 04:29 PM
|
显示全部楼层
你的老师很不负责任。请问他/她是你的电脑语言/电脑工程课程的导师吗?如果是的话,我可以很负责任的告诉你,他/她在混饭吃。
这是任何电脑工程(不管是软件还是硬件)最基础的知识。再说,身为一个导师,在面对学生的发问,最不能够说出口的答案就是 “我不知道”。或许你应该告诉他/她,这世界有网际网络的存在,而网上有很厉害几乎无所不知的两个大神:谷歌大神和维基大神。如果学生发问了他/她不懂的问题,他/她应该去了解和找出答案,然后教导学生,而不是把 “不知道” 这三个字甩给学生。
101010并不是电脑的全部,更不是一个可以拿来这样子用的 “名词” 。所谓的1和0,是电脑运行的电子讯号的最小单位,也就是位元(bit)的两种可能状态。电脑的逻辑运算建基于二进制,二进制只包含两个数值:0和1。换句话说电脑的信息和运算都是建基于二进制(逢二进十)。至于为什么是0和1,那是因为半导体电子讯号建基于半导体闸门的开关,闸门打开电流通过,即为1,闸门关闭电流中断(或者降至极低的状态)即为0。电脑集成电路主要都是以半导体闸门建成的,这就是为什么电脑的运算都是以二进制进行。
至于为什么不设计出0,0.5,1的三态(tri-state)或者更多的电子信号呢?那是因为早期的技术还无法在微小的电子信号里捕抓到这么细小的电压差别,所以就选用了最明显的0(电压0~0.5v)和1(电压4.5v~5.5v)。再加上二进制的黑白分明,便利于电路的设计,再加上直到现在,再复杂的运算都可以通过二进制的编码和模拟达成,那就没必要屁股痒去找不痛快,逼近三态运算的复杂度比二态(也就是二进制)复杂得多了。
电脑语言则是为了让人类能够更方便的运用机械码来指示电脑如何工作的工具。就打个比方,某个电脑工程师决定,10101011这个二进制组合代表让电脑去读取寄存器A(register A,不懂的话去搜寻CPU Architecture)的数据,然后11001011这个组合代表把寄存器A的数值加上寄存器B的数值,诸如此类。这就是早期电脑使用打孔机(punch card)作为输入工具的原因:字条分为8个区域,每个区域是一个bit,没打孔的代表0,打孔的代表1。当时为电脑输入指令是十分繁复的工作,因为输入员必须熟记每个二进制组合的意义,而且一系列的指令一旦有一个打错,就得废弃已经打了一半的纸卡重新从头打过。
为了减少这种错误的损耗,也为了减少因为记忆错误造成的损失,就有人给每个八位元(又称位元组 Byte)的组合赋予一个比较形象的代号,方便记忆,例如上面说的10101011称为 Read A,把 11001011 称为 Add A,B 之类的,从而发展出最早的电脑语言:组合语言(Assembly)。后来又发现组合语言还是很难记忆,而且也不利于编写复杂的程式,于是就有更高阶的电脑语言出现(低阶语言指的是语言构造很接近机械码,不必经过大量的编译就可以被电脑执行,而高阶语言则是比较接近人类的语言构造,更容易明白,可是需要经过数次的编译转换才能换成电脑能够明白的机械码)。
电脑语言说穿了,就是用来指示电脑运作的密码的密码。电脑程式就是这些密码的组合。 |
|
|
|
|
|
|
|
|
|
|
发表于 11-5-2011 07:43 PM
|
显示全部楼层
回复 93# arios
给电脑输入指令就是通过电脑语言啊。。。感觉我好像在兜圈子。。。
例如:- #include <stdio.h>
- void main(void)
- {
- printf("Hello World!");
- }
复制代码 就是告诉电脑:在标准输出配件(Standard Output)上显示 “Hello World!” 这个字串,也就是12个字符组成的数据。
至于这些电脑语言的指令如何转换成机械码,如何写进硬碟,在被启动后(用户用滑鼠点击图标)如何从硬碟载入到主记忆体,在如何把那12个字符的代码转换成荧幕上的像素,在如何被刷新在荧幕上,那不是一个Programmer需要担心的。那些是Hardware Designer 和 OS Developer 的事情。身为 Application Programmer,你只需要知道上面的代码可以让你指示电脑在荧幕上显示出你想显示的信息,那就够了。
相同的,弄明白电脑是如何从算盘发展到ENIAC,再发展到IBM PC,再发展到现在这个样子,对于一个Programmer来说并不重要,也没必要,那只是闲暇之余的课外活动,知道了也不过是图个趣味罢了。如果你坚持想知道这些东西,那就自己花心思从谷歌和维基百科哪里去挖掘吧,毕竟这里是软件开发论坛,这个帖更是游戏软件开发贴。我只承诺指导你编程和游戏开发东西,其余的已经是跑题了。
p/s:如果你相信电脑里面有个像 TRON 这样的世界。。。我劝你还是别接触电脑,尤其是Programmer这种会深入了解电脑是什么的行业,因为有一天你会发觉你的梦碎了,你会承受不了真相的打击而精神崩溃的。
好莱坞编剧和导演们是这个世界上最不了解电脑的一群人。 |
|
|
|
|
|
|
|
|
|
|
发表于 11-5-2011 08:47 PM
|
显示全部楼层
我没说电脑让人痛苦(老是去某些网站而让电脑染上病毒的人例外 ),只是说,好莱坞电影里出现的一些和电脑有关的情节都让不懂电脑的人觉得很新奇(哇!好厉害哦!我也要这样的电脑!),让懂得一点电脑知识的人觉得好奇(咦?是这样的吗?怎么我家里的那台好像不是这样的?),让真正熟悉电脑的人喷饭(噗哇哈哈哈。。。我什么时候能够买一台这样会发出滴滴嘟嘟的声音的电脑啊?哈哈哈。。。)。虽然不排除这是为了唬观众,但还是觉得很不现实,尤其是以现代为背景的电影。
大专课程往往有一些让人摸不着脑的课程,就好像我以前也得上电力工程(电脑电子工程是不必知道如何拉 220v AC 的电线的啊啊啊 12v DC就已经是我们的极限了)和工商管理(或许是希望我们毕业后自己当老板吧),但既然是学院指定的我也没办法,只好上了再说啰。
网页也是建立在电脑上的啊啊啊啊。。。凡是能够指示电脑做事情的语言都是电脑语言,哪怕是用来编写网页的语言。再说PHP并不只限于用来制作网页,它也可以用来建立后台,构筑数据库系统的连接界面,甚至制作出 Standalone 的软件也是可以的。
达到巅峰的唯一途径就是专注。我不是说你不必知道其它的知识,只是如果你连自己该学的都还没熟练地掌握,那又何必分心去学不是必须的东西呢? |
|
|
|
|
|
|
|
|
|
|
发表于 11-5-2011 10:46 PM
|
显示全部楼层
先把基本的学好吧。把C语言弄明白,学会如何运用if,for,while,switch,理解什么是Logical Operation,学习各种Algorithm,掌握如何运用各种Input/Output,这才是正理。如果你对这些基础都还无法熟悉运用,那就别想一步登天。要知道,制作论坛牵涉的东西很多也很复杂的。你得懂得Database,HTML,CSS,Java script/ASP/PHP,Flash等等。。。你连一种电脑语言都还没学会,如何去建这空中楼阁?
有一句话,你可能已经听到耳朵都生茧了:还没学走,别急着学飞。 |
|
|
|
|
|
|
|
|
|
|
发表于 12-5-2011 10:35 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 12-5-2011 11:45 AM
|
显示全部楼层
本帖最后由 geekman 于 12-5-2011 11:49 AM 编辑
你不是说你选择C吗?再说,要C++的就自己找啊,我都已经指引你去Google Books那里了。
退一步说,大学也有99%几率,会教你C,而不是C++,除非你选的Course指定教C++。
嗯。。。点击链接会开启Google Web Search,不过你点旁边的Books的链接,就会显示和你的搜索相关的书籍,有的书籍可以免费在线阅读的。 |
|
|
|
|
|
|
|
|
|
|
发表于 12-5-2011 12:33 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 12-5-2011 05:11 PM
|
显示全部楼层
那你只好向圣诞老人许愿了。。。
VB.NET我并不是很熟悉,因为从来不用VB,.NET我也无需用VB,因为有C#。不过两者都是针对.NET framework 的开发工具,所以应该有共同的地方吧。 |
|
|
|
|
|
|
|
|
|
|
发表于 12-5-2011 05:35 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|