今天刚刚学习线程,昨天晚上我们小组的小伙伴特别欢快地讨论要做什么线程游戏,大家聊得很欢脱呀,在犹豫做植物大战僵尸那种还是什么愤怒的小鸟啊或者我特别喜欢玩的节奏大师,各种讨论,小文子迷上了那个叫什么皇家守卫军,小李子喜欢玩那个森林冰火,总之各种纠结呀,不过我觉得还是先走一步看一步吧,到时候等我们学了线程的初步运用,说不定就会知道自己想做什么 了……
不过今天下午强哥给我们上线程的时候,我特别的犯困,昨晚竟然湿着头发就睡着了,起来的时候就赶脚各种头晕,然后下午一上课眼皮就耷拉了下来,之后听的课赶脚就有点糊涂 ,今晚还是咬咬牙写一写,虽然不知道写出来的是对还是错,先附上来,到时候发现了问题就马上编辑修改,也希望各位大神能不吝赐教……
说到线程的功能,就离不开进程这个概念,我们从任务管理器中可以看到很多进程,但是线程明显更多,有时候一个进程里面有多个线程,线程的最大好处就是可以同时进行多个工作但是不受干扰,这样可以大大提高运行效率,我今天写了一个很挫小球运动的程序,代码如下:
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Mymoving extends JFrame{
private JButton jb;
Graphics g;
public static void main(String[] args) {
Mymoving my=new Mymoving();
my.init();
}
public void init(){
this.setBounds(350, 90, 600, 550);
this.setTitle("球球");
this.setLayout(null);
this.setDefaultCloseOperation(3);
jb=new JButton("动起来");
jb.setBounds(230, 10, 100, 30);
this.add(jb);
jb.addActionListener(al);
this.setVisible(true);
}
//匿名内部类
ActionListener al=new ActionListener(){
private MyThread d;
public void actionPerformed(ActionEvent e){
d=new MyThread(Mymoving.this);
d.start();
}
};
}
上面的内部类意思是在一个类里面调用一个接口,按理说应该要另外写一个类来实现接口,但是,这里并没有类名,而是直接调用,在后面的大括号里继续写,省略了传参的过程,简化了代码……
接下来就是定义一个类来继承Thread父类的方法属性
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
public class MyThread extends Thread{
Mymoving my;
private JButton jb;
Graphics g;
int x=10,y=0;//这个是球或图片的出发点位置,可以随意设置
public MyThread(Mymoving my) {
// super();
this.my = my;//这里把前面写的那个类的方法属性给传进来
}
public void run(){
g=my.getGraphics();
while(true){//加一个死循环,让球动起来,不然就会停在原地
g.setColor(my.getBackground());
g.fillOval(x, y, 50, 50);
x++;
y++;//这个是控制球的方向
g.setColor(Color.blue);
g.fillOval(x, y, 50, 50);
try {
Thread.sleep(1);//利用这个休眠方法可以设置限时功能,还可以控制球的速度
} catch (InterruptedException e) {
e.printStackTrace();//try catch来捕捉异常情况……
}
if(y>500){//这里就是只是想让他原路返回,数字可以任意定,如果定的合适,可以有那种反弹的效果
while(true){
g.setColor(my.getBackground());
g.fillOval(x, y, 50, 50);
x--;
y--;
g.setColor(Color.blue);
g.fillOval(x, y, 50, 50);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
虽然现在只能实现很简单一个物体移动(上下左右斜都可以),但是,相信之后的课程上完之后,我们小组的小伙伴们能更加熟练地运用线程,做出更炫更好玩的游戏!干巴爹!!!