线程游戏v0.1
线程:程序的执行过程
单任务:按照顺序执行
单任务例子:
public class Thread01{
public static void main(String[] args){
int count = 0;
for(int i = 0; i < 10; i++){
count++;
}
System.out.println ("任务1执行完成" + count);
int count1 = 100;
for(int i = 100; i > 0; i--){
count1--;
}
System.out.println ("任务2执行完成!" + count1);
}
运行完任务1再运行任务2
若要同时实现多个线程:
继承:Thread类
实现:Runnable接口
以上都需要重写run方法(run方法:将需要同时执行的代码放到run方法中)
启动线程:需要使用到Thread类的start方法
ThreadDemo1 td1 = new ThreadDemo1 ();
RunnableDemo1 rd1 = new RunnableDemo1 ();
完整代码:
public class ThreadDemo1 extends Thread {
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("线程1执行中:"+i);
}
}
}
public class RunnableDemo1 implements Runnable{
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("线程2执行中:"+i);
}
}
}
public class TestThread {
public static void main(String[] args) {
ThreadDemo1 td1=new ThreadDemo1();
RunnableDemo1 rd1=new RunnableDemo1();
Thread t1=new Thread(td1);
Thread t2=new Thread(rd1);
t1.start();
t2.start();
}
}
注意:任何的Java程序都是多线程!
游戏实战:可以在页面不停游动的小球
UI部分:
1.继承JFrame
2.实现界面的可视化
3.启动小球的线程对象
public class GameUI extends JFrame {
public void initUI(){
setTitle("线程游戏-v0.1");
setSize(800,600);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
for (int i = 0; i < 10; i++) {
ball1=new Ball_1(this);
ball1.start();
}
for (int i = 0; i < 10; i++) {
ball2=new Ball_2(this);
ball2.start();
}
}
Ball_1 ball1;
Ball_2 ball2;
int x,y;
int x1,y1;
@Override
public void paint(Graphics g){
super.paint(g);
}
public static void main(String[] args) {
new GameUI().initUI();
}
}
绘制小球:
1.创建线程类
2.重写run方法
3.利用循环 不断更改球的坐标 并绘制出来
public class Ball_2 extends Thread{
int x1,y1;
Graphics g;
public Ball_2(JFrame jf){
this.g=jf.getGraphics();
}
int speedx1=2;
int speedy1=2;
@Override
public void run() {
//随机生成整数使小球的轨迹随机性
Random ran =new Random();
x1= ran.nextInt(800);
y1=ran.nextInt(600);
speedx1=ran.nextInt(10)-5;
speedy1=ran.nextInt(10)-5;
Color color=new Color(ran.nextInt(Integer.MAX_VALUE));
for (int i = 0; ; i++) {
g.setColor(color);
g.fillOval(x1,y1,80,80);
try {
Thread.sleep(30);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
g.setColor(Color.white);
g.fillOval(x1,y1,80,80);
x1+=speedx1;
y1+=speedy1;
if(x1<0||x1>=720){
speedx1=-speedx1;
}
if(y1<=0||y1>=520){
speedy1=-speedy1;
}
}
}
}
代码中的扩展部分
1.使用循环生成多个小球
for (int i = 0; i < 10; i++) {
ball1=new Ball_1(this);
ball1.start();
}
for (int i = 0; i < 10; i++) {
ball2=new Ball_2(this);
ball2.start();
2.使用Random获得随机的整数来使颜色和坐标随机
Random ran =new Random();
x1= ran.nextInt(800);
y1=ran.nextInt(600);
speedx1=ran.nextInt(10)-5;
speedy1=ran.nextInt(10)-5;
总结:
多线程的使用有很多的扩展性,使得不同的程序可以同时执行。