KPL青少年电脑编程语言--一步一步学KPL【7】:如何在屏幕上随机显示字母精灵?

[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]  //用于保存图片移动的偏移量

接着往下看代码,还是回到刚才的循环代码内:

   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 )

同样:移动精灵,显示精灵,保存图片位置,产生随机移动偏移量。为下步随机移动精灵做好准备。

这一节很简单,到此为止,全部的代码如下:

Program Demo

 //自定义数据结构
 Structure EnglishChar
  index As Int  //序号
  name As String  //字母
  using As Bool  //是否已被使用
 End Structure
 
 //屏幕上的点的数据结构
 Structure Point
  x As Decimal
  y As Decimal
 End Structure


  
 //最大字母数
 Var MaxCharNum As Int=26
 
 
 Var oldPoint As Point[MaxCharNum]   //用于保存图片移动前的位置
 Var curPoint As Point[MaxCharNum] //用于保存图片的当前位置
 Var xPoint As Point[MaxCharNum]  //用于保存图片移动的偏移量
 
 Method Main()

  // 初始化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]  
  
  Var CharNum As Int
  
  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("---------------------------------------")
  Next
  
  
  //保存随机字母顺序的数组
  Var CurIndexArray As Int[MaxCharNum]
  
  
  Var CurNum As Int=1
  Var CurIndex As Int
  
  While CurNum<=MaxCharNum
   //随机抽取
   CurIndex=Random(1,MaxCharNum)
   
   //以下代码保证字母抽取不重复
   If EnglishCharArray[CurIndex].using=False Then
    EnglishCharArray[CurIndex].using=True
    CurIndexArray[CurNum]=CurIndex
    
    CurNum=CurNum+1
    
    Trace("CurIndexArray["+CurNum+"]:"+EnglishCharArray[CurIndex].name+"---CurIndex:"+CurIndex)
   End If
   
   
  End While
  
  //初始化精灵
  Var count As Int
  
  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  
  
 End Method

End Program

转发到新浪微博

 

网上书店:当当图书  卓越亚马逊  新华书店  中国图书网  蔚蓝书店

  |  KPL QQ 群:39562753 
 




KPL QQ 群:39562753 

  验证申请请输入:KPL

  公告

敏捷培训视频培训教程,版权所有,未经授权,禁止转载

     现在国内无法访问KPL官方网站,喷嚏网(www.dapenti.com)提供的KPL资料为国内首份公开的KPL汉化资料。

该资料转载并注明作者和译者出处。如:来源:喷嚏网-www.dapenti.com

欢迎从事中小学信息技术的教师转载和引用,论坛或媒体须经书面许可

欢迎媒体合作!


邮箱:dapenti2006@gmail.com


  我的分类(专题)
  最近日志
程序员怎样学数学:半路出家也能让编程
汉语编程-汉芯之后的中国软件界大骗局
一步一步学KPL【9】:如何对按键进
一步一步学KPL【8】:如何让字母精
一步一步学KPL【7】:如何在屏幕上
一步一步学KPL【6】:如何随机产生
一步一步学KPL【5】:如何随机产生
一步一步学KPL【4】:如何编写一个
KPL开发环境中的一个bug
一步一步学KPL【3】:如何调试KP
一步一步学KPL[2]:编码的习惯和
structure有什么用?
为什么编程要用英文?
如何用任意的图形来画线?
一步一步学KPL[1]:初学者入门
吴文虎:别让“程序设计”成第二门“英
如何使用系统函数?
版权和转载申明
孩子什么时候学编程比较合适?
《KPL游戏示例代码讲解》电子书在线

  最新评论

  留言板
 

  链接

  Blog AD
 



|站点首页 | 联系我们 | 博客登陆
蜀ICP备11003155号 公安部备案号:51019002000333

特别声明:本站不提供任何视听上传服务,所有视频内容均来自视频分享站点所提供的公开引用资源

Powered by oBlog 2.52 © Copyright 2004. All rights reserved.