站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题Java活动图像程序和游戏编写(1)

Java活动图像程序和游戏编写(1)

摘要: Java活动图像程序和游戏编写(1)
<tr><td>
http:///tech/article812.html
一 关于用Java构造游戏.
在本文中我用Java编写一个小游戏软件.为什么写游戏软件?游戏软件要求的编程能力较高,也很少有比写游戏软件更加激动人心的创造性工作了.因此,写游戏是很好的学习编程的手段:笔者相信一句老话:"取法乎上,得乎其中". 假如读者可以弄懂本文给出的各种算法,并举一反三,相信可以很快掌握目前流行的活动主页的编写方法.
[] 显然,用Java构造商品化的游戏软件目前不可能.为什么?C++编程的游戏,其最终运行文件是运行平台的中央处理机的机器码,运行速度相当高.而Java将以字节码的形式运行于Java虚拟机上,效率低下.但笔者希望通过本篇文章能对Java的初学者提供帮助,弄清一些Java编程技巧,如事件,线程,动画,双缓冲图像,复合键控制,等.一方面有助于Java编程学习,另一方面即使使用C或C++编程,本文的算法和技巧也都有相当价值.
本文假定读者有一定的Java编程常识,也初步理解面向对象的含义.同时,为便于实践,读者最好能自己使用PhotoShop之类的图像处理软件编辑图片.程序在IE5.0下运行.
二 最简单的雏形:支持复合键控制的小方块.
首先我们要写出一个能在屏幕上随心所欲移动的小方块.用户用键盘控制小方块的移动,但支持复合键控制.比如,假如用户按下向上键,小方块向上移动.用户又按下了向右键,小方块向右上方移动.随后用户松开向右键,小方块恢复向上移动.
关键是程序中有四个表示方向的布尔变量.变量的值随键盘的状态改变而改变,按下某个方向键,相应的方向布尔变量置位;松开,就清零.小方块的移动根据四个方向布尔变量的值确定,某方向为true,就向哪个方向移动.读者可以设想,假如用户按下向上键,向上布尔变量为true,小方块向上移动,又按下向右键,向右布尔变量为true,小方块又向右移动,总体效果就是向右上移动.用户再按下向左键,小方块向上,向右,再向左,总体结果就是向上.要注意的是,用户必须使用数字键盘区的方向键! 此外,读者应先用鼠标器在程序运行画面上点击一次,使屏幕焦点落在本程序上.
程序中用键盘事件来控制表示方向的布尔变量的值,按下键,置true;松开,置false.小方块的移动由线程完成,因为线程可以不要任何激励周而复始的不断运行.下面是程序代码.注意:文件名要叫wumin1.java
输入编译后,还要输入一个HTML文件使它在浏览器中可以运行.本文一样给出范例.
import java.awt.*;
import java.applet.*;
public class wumin1 extends Applet
{;
carton carton_1=null;//声明一个carton类的实例.

public void start()
{;
if (carton_1==null)//假如未初始化
{;
[] carton_1=new carton(getGraphics(),this);//初始化
carton_1.start();//启动
};
};
[] public void stop()
{;
carton_1.stop();//停止
carton_1=null;//释放资源
};
[] //键被按下事件的处理.
public boolean keyDown(Event e,int key)
{;
[] if (key==Event.UP)//假如是向上键被按下
carton_1.set_direction(0);//向上的布尔变量置true
if (key==Event.DOWN)//假如是向下键被按下
carton_1.set_direction(1);//向下的布尔变量置true
if (key==Event.LEFT)//假如是向左键被按下
carton_1.set_direction(2);//向左的布尔变量置true
if (key==Event.RIGHT)//假如是向右键被按下
carton_1.set_direction(3);//向右的布尔变量置true
return true;
};
//键被松开事件的处理.
public boolean keyUp(Event e,int key)
{;
if (key==Event.UP)//假如是向上键被松开
carton_1.clear_direction(0);//向上的布尔变量置false
if (key==Event.DOWN)//假如是向下键被松开
carton_1.clear_direction(1);//向下的布尔变量置false
if (key==Event.LEFT)//假如是向左键被松开
carton_1.clear_direction(2);//向左的布尔变量置false
[] if (key==Event.RIGHT)//假如是向右键被松开
[] carton_1.clear_direction(3);//向右的布尔变量置false
return true;
};
};
//小方块所属类的描述
class carton extends Thread//从Thread类派生
{;
boolean up=false,down=false,left=false,right=false;//四个表示方向的布尔变量
[] int position_x=200,position_y=150;//坐标.初始位置是(200,150)
Applet applet;
Graphics g;
int sleep_time=5;//睡眠时间
Color my_color;
//初始化时要将各种环境准备好
public carton(Graphics a,Applet app)
{;
g=a;
applet=app;
};
//这是主运行函数.
public void run()
{;
while(true)//此函数一直运行
{;
set_position();//计算小方块坐标
draw_image();//画小方块
try//标准的暂停方式
{;
sleep(sleep_time);
};
catch(InterruptedException e)
{;
};
};
};

[] //计算小方块的坐标
public void set_position()
{;
[] if(up==true && position_y>1)//假如向上的键被按下并且小方块的纵坐标大于1
position_y--;//小方块向上移动
if(down==true && position_y<330)//假如向下的键被按下并且小方块的纵坐标小于330
position_y++;//小方块向下移动
[] if(left==true && position_x>1)//假如向左的键被按下并且小方块的横坐标大于1
position_x--;//小方块向左移动
if(right==true && position_x<380)//假如向右的键被按下并且小方块的横坐标小于380
position_x++;//小方块向右移动
};
//画屏幕
public void draw_image()
{;
my_color=new Color(179,179,179);
g.setColor(my_color);
g.fillRect(0,0,400,350);//画背景
my_color=new Color(100,100,100);
g.setColor(my_color);
g.fillRect(position_x,position_y,20,20);//根据小方块的坐标画小方块
};
//表示方向的布尔变量的置true方法
public void set_direction(int direction_)
{;
switch(direction_)
{;
case(0)://向上键被按下则向上的布尔变量置位
up=true;
break;
case(1)://向下键被按下则向下的布尔变量置位
[] down=true;
break;
case(2)://向左键被按下则向左的布尔变量置位
left=true;
break;
case(3)://向右键被按下则向右的布尔变量置位
right=true;
[] break;
[] default:
break;
[] };
};
//表示方向的布尔变量的置false方法
public void clear_direction(int direction_)
{; switch(direction_)
{;
case(0)://向上键被松开则向上的布尔变量置false
up=false;
break;
case(1)://向下键被松开则向下的布尔变量置false
down=false;
[] break;
case(2)://向左键被松开则向左的布尔变量置false
left=false;
break;
case(3)://向右键被松开则向右的布尔变量置false
right=false;
break;
default:
break;
};
};
};
下面是HTML文件

http:///tech/article812.html
</td></tr></table></td> </tr> <tr> <td background="/pic/split.gif" height=1></td> </tr> <tr> <td class="tdMargin1">
↑返回目录
前一篇: Java活动图像程序和游戏编写(2)
后一篇: 使用MIDP实现图片动画(英文)