java写游戏脚本(编程一个最简单游戏代码)
在 java 中,如何用swing实现打字游戏.需要掌握多线程,jframe的创建方法。多线程的创建方法,一个是继承thread类,一个是实现runnable接口。框架的实现,直接创建一个类继承jframe.
基本思路是,1.创建一个jframe 2.启动十个线程,每个线程携带了一个jlabel,用到了随机函数,每个jlabel的刚出现的时候,他们的y坐标都是一样的,x坐标是随机的(随机范围在jframe的宽度内.jlabel显示的值,是ascii对应的拉丁字母 .3.线程控制每个jlael的y坐标增加,这样字母就在往下掉 4.响应键盘事件
//载入包
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.applet.*;
// 创建一个线程
class mythread extends thread {
int height=0;
// jlabel的x坐标
int intx=0;
// jlabel 的y坐标
int inty=0;
static int com=0;
jlabel lb1;
public mythread(threadgroup g,string name,int width,int fheight){
this.setname(name);
height=fheight;
// 设置jlabel显示的大写字母,通过随机值控制.65是大写a的ascii值
lb1=new jlabel(“”+(char)(int)(math.random()*26+65));
// 设置jlabel的背景颜色,红,绿,蓝组成自然界所有色彩
lb1.setforeground(new color((int)(math.random()*250),(int)(math.random()*250),(int)(math.random()*250)));
intx=(int)(math.random()*(width-20));
//线程启动
start();
}
public void run(){
try{
while(true){
//睡眠50毫秒往下掉
sleep((int)(math.random()*50));
lb1.setbounds(intx,inty,15,15);
//改变y坐标
inty++;
if(inty>=(height-20)){
lb1.show(false);
mythread.com++;
break;
}
}
}catch(exception e){}
}
}
//创建窗口
class testkey extends jframe
{
jbutton b1,b2;
static int index=0;
container conent=getcontentpane();
static int idd=0;
static int count=0;
int ixx;
static threadgroup dg = new threadgroup(“group1”);
static threadgroup dg1;
static mythread t1;
thread list[];
public testkey() throws arraystoreexception
{
setsize(400,600);
b1=new jbutton(“开始”);
b2=new jbutton(“结束”);
conent.setlayout(null);
b1.setbounds(getwidth()/2-100,getheight()-70,80,30);
b2.setbounds(getwidth()/2+50,getheight()-70,80,30);
conent.add(b1);
conent.add(b2);
conent.setbackground(color.blue);
container cont=getcontentpane();
conent.setbackground(color.white);
show();
//响应按钮事件
b1.addactionlistener(new actionlistener()
{
public void actionperformed(actionevent even)
{
for(int i=0;i<10;i++)
{
t1 =new mythread(dg,”t”+i,getwidth(),getheight());
getcontentpane().add(t1.lb1);
}
}
});
b2.addactionlistener(new actionlistener()
{
public void actionperformed(actionevent even)
{
int num=conent.getcomponentcount()-2;
for(int i=2;i<num+2;i++)
{
conent.remove(2);
conent.repaint();
}
if((float)num/count<=0.02)
joptionpane.showmessagedialog(null,”共有”+count+”个字母n”+”只有”+num+”个未打掉!n您真是高手,佩服,佩服!”);
else if((float)num/count<=0.15)
joptionpane.showmessagedialog(null,”共有”+count+”个字母n”+”有”+num+”个未打掉!n水平不错,继续努力吧!”);
else if((float)num/count<=0.3)
joptionpane.showmessagedialog(null,”共有”+count+”个字母n”+”有”+num+”个未打掉!n您很有潜力,不要虚度光阴哦!”);
else if((float)num/count<=0.4)
joptionpane.showmessagedialog(null,”共有”+count+”个字母n”+”有”+num+”个未打掉!n挺危险的,加把劲啊!”);
else
joptionpane.showmessagedialog(null,”共有”+count+”个字母n”+”有”+num+”个未打掉!n不蛮你,你真的很差劲,抓紧练习吧!”);
}
});
//监听窗口事件
addwindowlistener(new windowadapter()
{
public void windowclosing(windowevent event)
{
if(conent.getcomponentcount()==2)
joptionpane.showmessagedialog(null,”您真的要退出吗?n记得经常来练习啊!”);
else
joptionpane.showmessagedialog(null,”您确定要退出吗?n我还没为您评分的啊!”);
system.exit(0);
}
});
b1.addkeylistener(new keyadapter()
{
public void keytyped(keyevent event)
{
list = new thread[dg.getparent().activecount()];
int count = dg.getparent().enumerate(list);
for(int i=0;i<list.length;i++)
{
try
{
mythread mt=null;
mt = (mythread)(list[i]);// instanceof mythread)
if(event.getkeychar()== mt.lb1.gettext().charat(0))
{
mt.lb1.setvisible(false);
mythread hh=new mythread(dg,”t”+i,getwidth(),getheight());
getcontentpane().add(hh.lb1);
}
}catch(exception e){}
}
}
});
}
public static void main(string args[]){
testkey mf=new testkey();
container cont=mf.getcontentpane();
cont.setbackground(color.white);
cont.setlayout(null);
//创建十个线程,携带十个字母往下掉
for(int i=0;i<10;i++)
{
t1 =new mythread(dg,”t”+i,mf.getwidth(),mf.getheight());
cont.add(t1.lb1);
}
}
}
大家有不同的实现方式,欢迎在下面留言