atskyline-BLOG
心里有就有,心里没有就没有。
posts - 11,comments - 2,trackbacks - 0

精华在于按钮事件机制

一个是长按一个是按下,另外值得一题的是除了0-9的数字键外都认为是游戏见

keyCode需要用getGameAction()转换一下在进行判断

 

import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MIDlet1 extends MIDlet
{
	private Display dis;
	private Mycanvas mc =new Mycanvas();



	protected void startApp() throws MIDletStateChangeException
	{
		dis=Display.getDisplay(this);
		dis.setCurrent(mc);
	}
	
	class Mycanvas extends Canvas
	{
		private Image img;
		int x,y,dir=Sprite.TRANS_NONE;;
		
		protected Mycanvas()
		{
			x=0;y=0;
			try
			{
				img=Image.createImage("/img.gif");
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		
		protected void paint(Graphics g)
		{
			g.setColor(255, 255, 255);
			g.fillRect(0, 0, this.getWidth(), this.getHeight());
			g.drawRegion(img, 0, 0, img.getWidth(), img.getHeight(), dir, x, y, Graphics.LEFT|Graphics.TOP);
		}
		
		protected void keyRepeated(int keyCode)
		{
			int action;
			action=this.getGameAction(keyCode);
			switch(action)
			{
				case Canvas.UP:   y-=5;break;
				case Canvas.DOWN:   y+=5;break;
				case Canvas.LEFT:   x-=5;break;
				case Canvas.RIGHT:   x+=5;break;
			}
			this.repaint();
		}
		
		protected void keyPressed(int keyCode)
		{
			int action;
			action=this.getGameAction(keyCode);
			if(action==Canvas.FIRE)
			{
				switch(dir)
				{
					case Sprite.TRANS_NONE: dir=Sprite.TRANS_MIRROR_ROT270; break;
					case Sprite.TRANS_MIRROR_ROT90: dir=Sprite.TRANS_MIRROR_ROT180; break;
					case Sprite.TRANS_MIRROR_ROT180: dir=Sprite.TRANS_MIRROR_ROT270; break;
					case Sprite.TRANS_MIRROR_ROT270: dir=Sprite.TRANS_NONE; break;
				}
				this.repaint();
			}
		}
	}
	
	protected void destroyApp(boolean unconditional)
			throws MIDletStateChangeException
	{

	}

	protected void pauseApp()
	{

	}

}
posted @ 2008-07-21 22:07 atskyline 阅读(637) | 评论 (0)编辑 收藏
厦门一中百年校庆典礼一度确定在26日,这天是厦门一中校庆的“正日”,不过,校方考虑到26日是星期四,不方便校友回学校参加,所以确定在28日。Wind和lolanv却不做好事.....
厦门一中百年校庆的时候,学校大发慈悲让全校同学放了一天假。Wind和lolanv又在一起玩游戏了~。
因为以往的游戏决策都太少。Wind觉得几天就能研究透了,所以,他又发明了一个新的游戏。
首先,地板上有k堆石子,Wind和lolanv轮流进行如下操作:
选择一堆石子,从中拿走若干个(至少一个),并可以把剩下的这堆石子拿若干(或全部)自由分到其他堆石子(包括原来没有石子的"堆",而且可以同时分配石子给若干堆)。
谁如果取走最后一个石子,谁就赢了。
Wind很大方的对lolanv说:“就让你先取吧。”
Wind已经对这个游戏了如指掌,但是lolanv也想赢,他吃了一罐菠菜,但是还是想不出来(大力水手),他想知道是不是他永远赢不了,他需要你来帮忙。

--------------------------------------------------------------------------------------------------------------------------
输入格式 Input Format
  每组测试数据第一行为k(k<=10),表示有k个数据
对于每个数据,
第一行为n,表示有n堆石子(n<=5000)
第二行n个数,表示每堆石子有多少(1<=每堆石子<=maxlongint)。
输出格式 Output Format
  每组数据k行,
为"Wind"或"lolanv",表示谁能获得胜利。


http://www.vijos.cn/Problem_Show.asp?id=1298
posted @ 2008-07-20 14:05 atskyline 阅读(343) | 评论 (0)编辑 收藏

Canvas类 低级界面开发的一个初步程序

 

package DrawSin;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet1 extends MIDlet
{
	private Display dis;
	private Draw d = new Draw();
	
	protected void startApp() throws MIDletStateChangeException
	{
		d.setTitle("DrawSin");
		dis = Display.getDisplay(this);
		dis.setCurrent(d);		

	}
	
	class Draw extends Canvas
	{

		protected void paint(Graphics g)
		{
			g.setColor(255, 0, 0);
			g.drawLine(0, 150, 300, 150);//x轴
			g.drawLine(100, 0, 100, 300);//y轴
			int y=0;
			for(int x=0;x<=3600;x++)
			{
				y= (int)(150+10*Math.sin(x*Math.PI/180));
				g.drawLine((int)(x/10), y, (int)(x/10), y);
			}
		}
		
	}

	protected void destroyApp(boolean unconditional)
			throws MIDletStateChangeException
	{
	}

	protected void pauseApp()
	{
	}


}
posted @ 2008-07-19 23:20 atskyline 阅读(494) | 评论 (0)编辑 收藏

其实就是J2SE异常的那些东西.

代码中把字符串s样转换成int 明显会抛出异常

我们定义了一个继承于Exception 的自定义异常类

并将异常抛给客户端处理

import java.util.Date;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class MIDlet1 extends MIDlet
{

	protected void startApp() throws MIDletStateChangeException
	{
		String s="a";
		try
		{
			this.print(s);
		} catch (CustomException e)
		{
			System.out.println(e.getMessage());
			System.out.println(e.getDate());
		}

	}
	public void print(String str) throws CustomException
	{
		try
		{
			int intValue = Integer.parseInt(str);
			int result = intValue*intValue;
			System.out.println(result);
		}
		catch(Exception ex)
		{
			CustomException ce =new CustomException("错误",new Date());
			throw ce;
		}

	}
	
	class CustomException extends Exception
	{
		private Date date;
		public CustomException(String message,Date date)
		{
			super(message);
			this.date=date;
		}
		public Date getDate()
		{
			return this.date;
		}
	}
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException
	{

	}

	protected void pauseApp()
	{

	}

}
posted @ 2008-07-16 21:17 atskyline 阅读(275) | 评论 (0)编辑 收藏

notifyDestroyed()方法可以用来退出程序

代码如下

MIDlet1.this.notifyDestroyed();
posted @ 2008-07-14 22:52 atskyline 阅读(1052) | 评论 (0)编辑 收藏

代码中演示了ChoiceGroup和TextField(列表框和文本框)的使用及其事件响应方式的使用

和Dispalyable类不同的是Item类是无法占据整个屏幕的

通常是使用Form类的append(Item item)添加到Form上的

Item的事件处理方式和Command的事件有几分类似

是通过ItemCommandListenerItemStateListener接口实现的

一个是命令事件一个是状态改变的事件 具体的使用方法参看代码

/**
* project :aboutItem
* @author atskyline
* @FirstWriteTime 2008.07.12
* @LastWriteTime 2008.07.12
*/
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemCommandListener;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class MIDlet1 extends MIDlet implements ItemCommandListener,ItemStateListener
{
   private Display dis;
   private Form frm = new Form("Form");
   private ChoiceGroup cg1 =new ChoiceGroup("ChoiceGroup", Choice.POPUP);
   private TextField text1 =new TextField("TEXT1", "text1", 20, TextField.ANY);
   private TextField text2 =new TextField("TEXT2", "text2", 20, TextField.ANY);
   private Command cmdDel =new Command("删除字符",Command.ITEM,1);
   protected void startApp() throws MIDletStateChangeException
   {
      dis=Display.getDisplay(this);
      dis.setCurrent(frm);
      frm.append(cg1);
      cg1.append("选项A", null);
      cg1.append("选项B", null);
      frm.append(text1);
      frm.append(text2);
      text1.addCommand(cmdDel);
      text2.addCommand(cmdDel);
      text1.setItemCommandListener(this);
      text2.setItemCommandListener(this);
      frm.setItemStateListener(this);//注意是用frm绑定而非cg1
   }
   public void commandAction(Command c, Item item)
   {
      if(c==cmdDel)
      {
         TextField tf=(TextField)item;
         int Position=tf.getCaretPosition();
         tf.delete(Position-1, 1);
      }
   }
   public void itemStateChanged(Item item)
   {
      if(item==cg1)
      {
         String s=cg1.getString(cg1.getSelectedIndex());
         frm.setTitle(s);
      }
   }
   protected void destroyApp(boolean arg0) throws MIDletStateChangeException
   {
   }
   protected void pauseApp()
   {
   }
}
posted @ 2008-07-12 21:42 atskyline 阅读(1140) | 评论 (1)编辑 收藏

右击项目名选择"Properties"

001

在J2ME项中的"Device"选择要改变的模拟器

002

posted @ 2008-07-10 22:27 atskyline 阅读(311) | 评论 (0)编辑 收藏

JDK6+SunWTK+Eclipse+EclipseMe

第一步:下载

http://www.sun.com/(要下载JDK和WTK)

http://www.eclipse.org/

http://eclipseme.org/

我现在使用的版本是

jdk-6u6-windows-i586-p.exe

sun_java_wireless_toolkit-2_5_2-ml-windows.exe

eclipse-SDK-3.3.2-win32.zip

eclipseme.feature_1.7.9_site.zip

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

第二步:安装

首先运行jdk-6u6-windows-i586-p.exe

001

 

002

通常选择全部安装就是了 记住安装地址哦~

003

会要你选择一些自定义安装的东西 全选就是了

这样就完成了JDK的安装

 

接下来运行sun_java_wireless_toolkit-2_5_2-ml-windows.exe

这是一个模拟器 当然诺基亚 索爱 MOTO等等品牌也有属于自己的手机模拟器

这些在网上都是可以找到的安装配置的方法大同小异

也因为刚刚入门J2ME,还有教程中是用模拟器,就暂时不安装其他品牌的模拟器

安装狂点"下一步"就是了,它会自动找到你JDK的位置

 

接下来解压eclipse-SDK-3.3.2-win32.zip

运行目录中的eclipse.exe文件

004

会要求你选择工作目录

点OK就是了

这样就可以进入到Eclipse

005 

接下来就是安装EclipseMe插件

在Eclipse的菜单中选择Help->Sofware Updates->Find and Install...

006

 

接下来选择"Search for new feature to install" 后,单击"Next"

007

进入下图界面

008

单击右上边的"New Archived Site"找到eclipseme.feature_1.7.9_site.zip文件

009

 

最后按下"Finish"

来到Updates界面 把eclipseme.feature_1.7.9_site.zip全部打勾

010

 

单击几个"Next"

来到这个界面

011

单击"Install All" 之后会需要重启Eclipse

这样EclipseMe就算安装完成了

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

第三步:配置

我们完成了JDK WTK Eclipse EclipseMe的安装

并且JDK与WTK已经关联到一起了

EclipseMe插件也安装成功了 接下来我们需要把Eclipse和WTK进行关联

这样我们的配置工作就算完成了

运行Eclipse

选择菜单Window->Preferences...

看到如下界面

012

 

选择J2ME树下的Devic Management

单击右边的"Import"

013

单击"Browe.."选择你WTK的安装目录 然后单击右边的"Refresh"这样就可以看到和截图一样的内容,最后单击"Finish"

回到Preferences的界面这是右边多了几个选项 也就是几个不同的模拟器 选择自己喜欢的一个 我是跟这[郭克华]的教程选择了DefaultColorPhone

014

单击"OK"这样就算完成了基本的配置

接下来顺便一下与WTKdocs关联的配置

在WTK的目录中已经带有doc了

其中又以WTK2.5.2\docs\api\midp下的资料最为常用

回到我们刚才那个界面 选中你常用的模拟器单击右边的"Edit..."

015

选择第二个标签"Libraries"找到一个"midpapi21.jar"的项单击表格中的"Javadoc"的扩展按钮

016

单击"External Folder..."选择你WTK目录下的\docs\api\midp

单击"OK"这样就完成doc的配置了

关于更多Eclipse的配置可以参考

Eclipse中文教程.pdf

下载地址http://download.csdn.net/source/351943

或者直接BAIDU

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

第四步:第一个程序

安装配置结束也总该开始写我们的第一个程序了

单击菜单File->New->Other...

017

选择J2ME->J2ME Midlet Suite 单击"Next"

018

输入项目名称 剩下都是用默认设置就好了

完成后再左侧可以看到我们新建的项目

019

右击src选择New->Other...

020

这回选择J2ME Midlet

021

输入类名称

然后完成新建任务 会自动生成初始的代码

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class MIDlet1 extends MIDlet {
public MIDlet1() {
// TODO Auto-generated constructor stub
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
}

代码的意思在下一篇笔记中会有解释

现在先看看怎么运行

右键你新建的.java文件 Run As->Emulated J2ME Midlet

022

然后出现如下界面 也就是运行成功了

023

posted @ 2008-07-10 20:46 atskyline 阅读(1686) | 评论 (0)编辑 收藏

Live Writer下载地址:http://get.live.com/writer/overview

安装过程让人相当的不爽,也算是秉承微软的传统

进入到设置界面

001

选择"其他日志服务" 单击"下一步"

 

002

日志主页:http://www.cnitblog.com/atskyline/

用户名 密码 填写完整 单击"下一步"

003

来到这的操作

日志类型要选择"MetaWeblog"

发布地址填写 http://www.cnitblog.com/atskyline/services/metaweblog.aspx

这些信息在BLOG的后台 Options » Configure的最下面有体现

004

这样就算是把Live Writer给设置完成了

操作过程中只要把"atskyline"换成自己的用户名就可以了

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

 

接下来介绍几个感觉不错的插件

 

 005

效果不错 而且效果复制到Word的时候不会消失 方便存为DOC文件备份

Live Writer的最大缺陷就是不能把日志另存为 在本机无法保留备份

插件的缺憾就是不能自动添加行标
还有一点就是代码中有中文是会出现乱码

 

 

006

也是个高标代码的差价 可以显示行标每行可以用不同的颜色区分 但复制到word 效果就都消失了

 

007

一个可以插入文件的插件

多个文件一起上传会出现错乱

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

FSCapture.rar

最后多介绍一款截图软件 功能强大

使用也算方便支持窗体截图和不规则截图

支持水印 也带有简单的图片编辑功能

posted @ 2008-07-09 22:39 atskyline 阅读(421) | 评论 (1)编辑 收藏
编程之道全本
http://download.csdn.net/source/506130
posted @ 2008-07-09 19:44 atskyline 阅读(235) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2