KPL QQ 群:39562753 验证申请请输入:KPL
KPL原专用域名 www.atsoft.com.cn 停用 ,请大家从 www.dapenti.com开始访问
[KPL学习指南] 程序员怎样学数学:半路出家也能让编程是小菜一碟 kpl 发表于 2007-10-30 10:08:00
I've been working for the past 15 months on repairing my rusty math skills, ever since I read a biography of Johnny von Neumann. I've read a huge stack of math books, and I have an even bigger stack of unread math books. And it's starting to come together. 自从我读了Johnny von Neumann的传记,我已经为弥补我糟糕的数学技能花了15个月了.读了大量的数学书籍,不过呢,似乎我还有更多没有读.当然我会接着做的. Let me tell you about it. 现在我就来告诉你这些. Conventional Wisdom Doesn't Add Up 这并不包括传统的智慧 First: programmers don't think they need to know math. I hear that so often; I hardly know anyone who disagrees. Even programmers who were math majors tell me they don't really use math all that much! They say it's better to know about design patterns, object-oriented methodologies, software tools, interface design, stuff like that. 首先:程序员 不认为他们需要了解数学.我常常听到这样的话;我不知道还有会不同意这个的.甚至于以前是主修数学的程序员也告诉我他们真的不是常常使用到数学!他们说 更重要的是要去了解设计模式 ,面向对象原理,软件工具,界面设计,以及一些类似的东西. And you know what? They're absolutely right. You can be a good, solid, professional programmer without knowing much math. 你了解吗?他们完全正确.你不需要了解很多数学你就能做个很棒,很专业的程序员. But hey, you don't really need to know how to program, either. Let's face it: there are a lot of professional programmers out there who realize they're not very good at it, and they still find ways to contribute. 但是呢,同时你也不是真的需要知道如何来编程 .我们要面对的是:有很多专业的程序员,他们认识到他们不是非常擅长数学,但他们还是寻找方法去提升. If you're suddenly feeling out of your depth, and everyone appears to be running circles around you, what are your options? ……
转发到新浪微博
[KPL学习指南] 汉语编程-汉芯之后的中国软件界大骗局 kpl 发表于 2007-10-18 9:57:00
一、闹得沸沸扬扬的汉语编程 二、汉语编程其实是一个大骗局 三.汇编都是英文的,其他变成汉语有什么用 四、其实汉语编程很好创造出来,但是却没什么用 五、中国人编程难的问题和出路在那里
一、闹得沸沸扬扬的汉语编程
这几年以来,特别是最近一段时间,汉语编程闹得沸沸扬扬,大有我中华民族之骄傲,如果不加紧实行汉语编程,中华民族就要消失了。徽剑本对于汉语编程不以为然,一直没有理会。之所以写这篇文章,是因为徽剑前几天接到一电话,是北京一家公司打过来的,大谈推广汉语编程,要跟徽剑的公司合作在深圳推广,于是徽剑查了一下资料,发现这两年所谓的汉语编程这场闹剧居然愈演愈烈,于是徽剑不得不出来揭露下。对比去年的汉芯事件,徽剑认为,所谓的汉语编程只不过是另一场汉芯的重演而已。所以看完本文,特别是程序员朋友,如果您认为徽剑说的有理,请将本文多多转发到各种论坛,揭露这场骗局。
先来看新闻,2007年09月《通信产业报》以“汉语编程异军突起 民族产业出黑马”为题发表了一篇文章。开头是这样:
“当今世界,科技突飞猛进。网络改变了人们的生活和思维,成为人们学习和工作不可或缺的一部分。人们点击鼠标进行学习、工作和接收外界信息的时候,计算机程序设计语言在其中起到了至关重要的作用。很多年来,我们一直在使用国外的编程语言,人们已经习惯了用C语言、JAVA等计算机语言编写应用程序,实现人与计算机的完美对话。但是朋友您知道吗,真正属于我们自己的计算机程序设计语言——汉语编程已经问世,而且已经在诸多领域发挥了重要的作用。”
然后文章介绍了汉语编程:
“汉语编程萌发于1984年,1994年获得国家发明专利。汉语程序设计语言,不是对计算机语言的简单汉化,也不是为某种软件制造一个中文环境,而是中国人自已掌握全部源代码,使用汉字信息指令,从计算机底层入手,使计算机的中央处理器(CPU)能够处理存储器中的汉字词典,从而实现计算机对汉字程序的识别,不受现行操作系统控制的技术系统,且完全拥有独立的自主知识产权。”(呵呵,这段话里面的问题就先不说了)
在文章的末尾,还上升到了民族大义的高度:
……
转发到新浪微博
[KPL学习指南] 一步一步学KPL【9】:如何对按键进行处理?如何处理字母精灵的爆炸效果? kpl 发表于 2007-8-19 16:20:00
为了完成最后的按键处理和爆炸处理过程,我们需要在游戏循环内增加一个新的方法:HandleKeys()
该方法的位置如下:
While GameOver=False Trace("animate!") Animate() Trace("HandleKeys!") HandleKeys() //新增该行 End While Alert("Game Over!","hehe")
HandleKeys的定义如下:
Method HandleKeys() Var key As String=GetKey() Trace("key:"+key) Var i As Int Var num As Int Var explodecount As Int For i=1 To MaxCharNum If key=EnglishCharArray[CurIndexArray[i]].name And EnglishCharArray[CurIndexArray[i]].living=False Then // PlaySound( "Explosion1.wav" ) LoadSprite( "ExplodePlayer", "Explosion.gif" ) MoveSpriteToPoint( "ExplodePlayer", GetSpriteLeft( "char"+i ), GetSpriteTop( "char"+i ) ) SetSpriteZIndex( "ExplodePlayer", 5000 ) ShowSprite( "ExplodePlayer" ) HideSprite( "char"+i ) For num = 1 To GetSpriteFrameCount( "ExplodePlayer" ) SetSpriteActiveFrame( "ExplodePlayer", num ) RefreshScreen() Delay( 10 ) Next UnloadSprite( "ExplodePlayer" ) EnglishCharArray[CurIndexArray[i]].living=True explodecount=explodecount+1 ……
转发到新浪微博
[KPL学习指南] 一步一步学KPL【8】:如何让字母精灵在屏幕的范围内自由碰撞,边界如何处理? kpl 发表于 2007-8-19 16:06:00
在学习中,有一个基本的技巧就是:你并不需要所有的代码都自己写。你可以模仿现成的代码,也可以直接照搬过来。
我们今天写的字母精灵的自由碰撞的代码,就出自KPL本身的一些例程,非常简单。
我们在程序开始时定义了一个游戏结束的标志变量:
Var GameOver As Bool=False
表示游戏未结束。
然后在Main方法的后面,添加如下代码:
While GameOver=False Trace("animate!") Animate() Trace("HandleKeys!") End While
该代码是游戏处理的主要循环部分,包含了一个让字母精灵在屏幕范围内自由碰撞的处理:
Method Animate() BeginFrame() Var i As Int For i=1 To MaxCharNum If curPoint[i].x<0 Or curPoint[i].x>(ScreenWidth()- GetSpriteWidth("char"+i)) Then xPoint[i].x=xPoint[i].x*-1 End If If curPoint[i].y<0 Or curPoint[i].y>(ScreenHeight()- GetSpriteHeight("char"+i)) Then xPoint[i].y=xPoint[i].y*-1 End If curPoint[i].x=curPoint[i].x+xPoint[i].x curPoint[i].y=curPoint[i].y+xPoint[i].y MoveSpriteToPoint("char"+i,curPoint[i].x,curPoint[i].y) Trace("x:"+xPoint[i].x+" y:"+xPoint[i].y) Next RefreshScreen() End Method
在Animate方法内部的循环是精灵的边界处理。
转发到新浪微博
[KPL学习指南] 一步一步学KPL【7】:如何在屏幕上随机显示字母精灵? kpl 发表于 2007-8-19 15:49:00
接下来的工作,是要准备精灵图片。
我们写下如下的代码:
For count=1 To MaxCharNum LoadSprite("char"+count,"snurkel-a-z.gif") SetSpriteActiveFrame("char"+count,CurIndexArray[count]) SetSpriteZIndex("char"+count,count) While curPoint[count].x=oldPoint[count].x And curPoint[count].y=oldPoint[count].y curPoint[count].x=Random(0,ScreenWidth() - 20) curPoint[count].y=Random(0,ScreenHeight() - 20) End While MoveSpriteToPoint("char"+count,curPoint[count].x,curPoint[count].y) ShowSprite("char"+count) oldPoint[count].x=curPoint[count].x oldPoint[count].y=curPoint[count].y xPoint[count].x=Random( -10, 10 ) xPoint[count].y=Random( -10, 10 )
Trace("x:"+xPoint[count].x+" y:"+xPoint[count].y) Next
我们解释一些上面的代码。
在循环的内部,我们首先从图片中定位相应字母的图片:
LoadSprite("char"+count,"snurkel-a-z.gif") SetSpriteActiveFrame("char"+count,CurIndexArray[count]) SetSpriteZIndex("char"+count,count)
为了记录和保存精灵在屏幕上的位置,我们在程序开头定义了一个关于点的数据结构:
//屏幕上的点的数据结构 Structure Point x As Decimal y As Decimal End Structure
然后申明了三个关于点的变量数组:
Var oldPoint As Point[MaxCharNum] //用于保存图片移动前的位置 Var curPoint As Point[MaxCharNum] //用于保存图片的当前位置 Var xPoint As Point[MaxCharNum] //用于保存图片移动的偏移量
接着往下看代码,还是回到刚才的循环代码内:
……
转发到新浪微博
[KPL学习指南] 一步一步学KPL【6】:如何随机产生不重复的26个英文字母? kpl 发表于 2007-8-7 22:20:00
上次我们演示了如何随机产生26个英文字母。现在我们来解决一个遗留问题:如何使产生的字母不重复。
我们需要找到一个办法,来表明产生了的字母已经被使用。
这样,跟字母的相关属性,我们就有了两个要求:一是要知道字母是什么,二是要知道该字母是否已经使用。说不定以后,我们还有一些跟字母相关的属性需要增加。
在这些属性中,有些属性是用于显示的,有些是用于判断的。但他们都是一组相关的属性集合。
所以,我们可以用自定义数据类型的方式,使它们看起来象是一体的。
因此,我们首先新增一个自定义函数在程序的开始部分:
//自定义数据结构 Structure EnglishChar index As Int //序号 name As String //字母 using As Bool //是否已被使用 End Structure
如果是这样的话,我们上次的代码就要做一些调整:我们要声明新的变量,该变量使用我们自定义的数据类型。
下面的代码保留:
// 初始化26个英文字母 //Var CharArray As String[]={"a","b","c"} Var EnglishCharStr As String="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" Var CharArray As String[]=Split(EnglishCharStr,",")
然后,我们申明新的变量:
Var EnglishCharArray As EnglishChar[MaxCharNum]
为了便于整个程序范围内都可以访问,我们把MaxCharNum放在了程序的函数或方法外。
Var MaxCharNum As Int=26
接下来,我们初始化新的变量数组:
For CharNum=1 To MaxCharNum EnglishCharArray[CharNum].index=CharNum EnglishCharArray[CharNum].name=CharArray[CharNum] EnglishCharArray[CharNum].using=False //调试语句 Trace("indx:"+EnglishCharArray[CharNum].index) Trace("name:"+EnglishCharArray[CharNum].name) Trace("using:"+EnglishCharArray[CharNum].using) Trace("---------------------------------------")   ……
转发到新浪微博
[KPL学习指南] 一步一步学KPL【5】:如何随机产生26个英文字母? kpl 发表于 2007-7-28 17:33:00
如何随机产生26个英文字母?
回忆一下我们平时是怎么掷骰子的:假如我们有分别写有26个字母的骰子,从a到z,按顺序装在一个筒里,晃动,然后,我们会发现,出来的顺序跟进去的时候不一样。
掷骰子的步骤中有两点很重要:
【1】你得有分别写有26个字母的骰子;
【2】你得晃动,没有晃动,就不能打乱原先骰子的顺序;
电脑中的随机产生数和字母的原理,跟上面是完全一样的:
【1】你得要选取的东西存放或标识在某个变量或数组里面;
【2】使用系统提供的随机函数,产生随机数。这个随机函数,就相当于现实中的“晃动”。
所以,如何随机产生26个英文字母的方法就很容易了:
【1】把26个英文自己放置在一个数组里;
【2】使用KPL的随机函数生成器,在1和26间产生随机数;
这里有几个问题需要大家推敲和考虑:
【1】可以分别命名26个变量,然后,保存26个字母吗?
在这里是最糟糕的选择,一是因为分别命名,非常麻烦,二是要检索26个字母是第几个字母非常麻烦。
而数组是这样一个好东西:它存放相同数据类型的数据,而且可以通过下标来定位变量的值。比如说如果我们按顺序存放,我们就知道num[1]里面放的是a,num[26]里面是z。数组括号内的数字就是下标。相当于我们说的索引值。跟我们住的楼房的单元房间编号一个道理:你只需要记住301和302,而不去想到底里面住的是张三还是李四。
用数组保存字母,还有一个重要的原因,是因为KPL的随机数产生函数Random,只能提供在数之间的随机生成。既然如此,那么也就是说,可以随机产生的其实是数组的下标。
所以,用数组是最优的方式,也是唯一的一种选择。
我们说太多了,还是来从代码来看看吧:
Program Demo
Method Main()
// Enter your program code here Var CharArray As String[]={"a","b","c"} Var num As Int For num=1 To ArrayLength(CharArray) Trace(CharArray[num]) Next End Method
End Program
……
转发到新浪微博
[KPL学习指南] 一步一步学KPL【4】:如何编写一个打字练习的游戏? kpl 发表于 2007-7-28 17:31:00
(一)开始
我们从今天开始,做一个系列练习。这个练习结束的时候,我们希望得到一个简单的游戏:当程序运行时,KPL屏幕会最大化,在屏幕上会随机地产生很多英文字母,这些字母象台球一样在屏幕内游荡,当你在键盘上敲击相应的字母时,字母会爆炸消失,当你把所有的字母都敲击完成后,游戏结束。
这个小游戏,跟我们平时的打字练习的游戏有点相似。你通过学习后,很容易根据自己的爱好,扩展出其他的方式。
我们完成这个游戏,主要是展示代码是如何逐步完成。在做这个游戏时,我们会看到需要哪些基本的KPL语法知识,而这些知识又是如何在一起使用的。
在任何学习中,最难的一步,其实不是第一步,而是开始迈入综合应用的时候。我们这个程序就是为了帮助大家迈出这一步,做的一个演示。
如果大家能跟着思路一步一步走的话,一定会有很多收获,在学习中达到事半功倍的效果。
(二)工作思路
我们先说说,我们的工作思路:当一个问题比较复杂的时候,你要做的事情,不是一步到位,尤其是当你还不熟悉,技术也不太熟练的时候。你要做的第一件事情,是简化你的工作,把你的工作先缩小范围,降低对技能的要求。直到你遇到一个不得不面对的简单的问题,你才开始去尝试各种方法,重新翻书,去找已经存在的相似的代码,然后,在模仿或者借鉴的过程中,找到自己要的那个部分。唯有这样,你才有可能靠自己取得进展。
所以,我们开始的时候,虽然知道我们最终的结果是上面描述的那个样子,但我们清楚,我们可能一下还达不到那步。我们先把一些问题抛开:比如字母移动,如何按键,如何爆炸。
我们把问题简化为:如何随机产生26个英文字母?
大家想一想:这个是不是整个程序的关键的第一步呢?当然是了,如果不是的话,后面的字母移动,判断,爆炸,就无法做。
因此,简化的过程,其实也是分解步骤的过程,哪些需要先做,哪些需要后做,可以在思考的过程中逐渐清晰起来。
要完成整个KPL的例程,我们分解成这么几个问题:
【1】如何随机产生26个英文字母?
【2】如何随机产生不重复的26个英文字母?
【3】如何把随机产生的字母用对应的图片精灵表示?
【4】如何让字母精灵在屏幕的范围内自由碰撞,边界如何处理?
……
转发到新浪微博
[KPL学习指南] KPL开发环境中的一个bug kpl 发表于 2007-7-27 9:38:00
在KPL开发环境中发现一个系统本身的bug,估计是因为系统设计是英文版的,在中文环境下,对某些字符没有处理过造成的错误。
用来测试错误的例子:
Program Test
Method Main()
// Enter your program code here Var x As Int=0 Var y As Int=0
Loop 600 x=x+1 MoveTo(x,y) End Loop
Loop 100 y=y+1 MoveTo(x,y) End Loop Loop 600 x=x-1 MoveTo(x,y) End Loop End Method
End Program
导致出错的语句是: x=x-1
出错时的报错信息:
解决办法也很简单:
把 x=x-1 修改成 x=x - 1 ,就是在减号后面增加空格。就可以避免上述错误。
希望大家今后遇到该类问题,可以很快绕过。
转发到新浪微博
[KPL学习指南] 一步一步学KPL【3】:如何调试KPL程序? kpl 发表于 2007-7-23 15:07:00
第一个问题:什么是调试?
这里面有个典故。我从网上搜的一个经典的说法,放在下面:
1937年,美国青年霍德华.艾肯找到IBM公司为其投资200万美圆研制计算机,第一台成品艾肯把它取名为:马克1号,又叫“自动序列受控计算机”,从这时起IBM公司由生产制表机,肉铺磅秤,咖啡研磨机等乱七八糟玩意儿的行业,正式跨进“计算机”领地。 为马克1号编制程序的是一位女数学家雷斯.霍波,有一天,她在调试程序时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为“臭虫(BUG)“,把排除程序故障叫DEBUG(捉虫子),而这奇怪的”称呼“,竟成为后来计算机领域的专业行话。
我们重复一下:调试(debug)就是排出程序故障。
刚学电脑编程的人,都会以为程序代码是通过精确构思,一气呵成的,其实,电脑编程跟写文章,做其他的工作完全一样。总是在大的构思下,通过修修补补完成的。
刚开始,哪怕输入错一个关键字符,都有可能导致程序出错。找出程序出错的过程,就叫调试。
编写任何程序都需要调试语句或工具。在KPL里面提供了一些简单的调试语句,如Trace、ShowTrace和Stop等。
私下里说:KPL的调试工具是相当的弱智,跟商业的调试工具不能相比。但因为我们要编写的代码,也不算复杂。所以,我们还是可以克服这个弱点,继续前进的。
既然调试就是排错,那么,换句话说就是要定位出错的位置。我们该如何做呢?
我来告诉大家我是如何做的。
【1】我在阅读一段新的代码或定位错误的时候,我会用到注释语句。大家想想为什么这样?
因为我们知道,注释语句后,代码不会被执行。这样,我就把大的程序化整为零了。
我先把代码后面的部分注释掉 ,让程序一段一段地执行。
有人说了,如果要注释的语句很多,不是很麻烦?
不麻烦,因为在KPL开发环境的工具栏上有两个个工具:一个注释工具,一个取消注释的工具。
你可以在代码窗口选中要注释或取消注释的代码块。
这样是不是很方便了呢?
……
转发到新浪微博
KPL QQ 群:39562753
验证申请请输入:KPL
公告
敏捷培训视频培训教程,版权所有,未经授权,禁止转载
现在国内无法访问KPL官方网站,喷嚏网(www.dapenti.com )提供的KPL资料为国内首份公开的KPL汉化资料。
该资料转载并注明作者和译者出处。如:来源:喷嚏网-www.dapenti.com
欢迎从事中小学信息技术的教师转载和引用,论坛或媒体须经书面许可 。
欢迎媒体合作!
邮箱: dapenti2006@gmail.com