`

多线程与打砖块总结

 
阅读更多
多线程与打砖块游戏总结
当我们打游戏的时候,游戏画面人物能在一个屏幕里面到处各种乱动,其中就是用到了线程。如果把时间放大,那么我们就可以清楚的看到,在某个时间段里面其实也就只有一个人物在运动,然而只是因为这段时间太短了,我们人眼感觉不出来,错觉的认为是同时执行的。多线程,其实就是用到内存共享,在短时间内切换来达到似乎是同时运行的效果。
实现多线程的方法:
继承thread 类
使用runnable接口
两种方法,都要通过重写父类的run()方法,然后在实例化了的对象中,调用start()方法开始线程。

线程的几种状态:
创建
此时刚实例化,新生的线程对象就处于新建状态(此时它已经有了内存空间和其他资源)。
运行
线程此时已经具备了运行的各种条件了,等到下一次时间空闲转换的时候,优先等级高的线程就先占有cpu进行运行。而优先等级低的则还在队伍中排着队。
挂起
当线程占着cpu不放,则会导致cpu一直在运行该线程,而其他就进行不了。这是不合理的,所以就可以用sleep方法,进行休眠,等到过了指定的时间后,才继续安排线程排队。
死亡
当run()方法里面的语句执行完,或者对线程进行关闭。则线程就会释放对内存的使用。



用线程实现闹钟功能
闹钟总体思路
1 获取现在的时间
// 取得现在的时间date
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String time = sdf.format(date);
2 然后输入时间,设置间隔几分钟的时间
3 获取输入的时间,进行现在的时间还有之后的时间进行对比
// 任务执行,时间设定间隔为一分钟
Timer timer = new Timer();
String i = jtf2.getText();//获取到输入框里面的时间
long k = Integer.parseInt(i);
timer.schedule(al, nowtime - date.getTime(), k * 1000 * 60);
//对当前时间和设定的时间进行对比,设定多久之后响
然后触发文本监听器。
public class AlarmListner  extends TimerTask{

public void run() {
System.out.println("hahahahahahha");
}

}

打砖块游戏简介:
步骤
小球的运动
小球的运动是通过线程的休眠,然后每次启动线程后x坐标与y坐标的改变配合上时间,就可以看成是有着速度的小球在游戏画面里面动来动去的了。
小球的x坐标与y坐标的改变量不是一成不变的,在碰到窗体之后,位移改变量就往另一个方向。
/**
* 小球碰到右壁的的运动方法
*/
private void play_right(){
if(now_X>=500-Ball_size){
speed_X=-speed_X;
}
}
其他方向类似该方法,只是坐标有点变化
挡板的运动
挡板类通过继承mouseadapter类,重写了里面的mousemoved方法,可以得到鼠标移动时坐标的值。和小球一样,每当线程因睡眠过后,x坐标值改变,在新的x坐标值的地方重新画一个挡板,并把之前的挡板给覆盖掉。
挡板的运动只是x坐标改变,对于y坐标则是不变的。而且挡板也不能超出游戏界面,必须进行判断,当鼠标移出了界面时,挡板还是在游戏界面里面
//开始画挡板,颜色为界面背景颜色
g.setColor(jpanel.getBackground());
g.fillRoundRect(tx-Dangban_length/2,
  Dangban_Y-5,Dangban_length,Dangban_height+10, 15, 15);
//获取鼠标移动时的横坐标
DangbanX=e.getX();
//实例化一个图像对象
BufferedImage image=ImageIO.read(new File("images/border.jpg"));
g.drawImage(image,DangbanX-Dangban_length/2,
Dangban_Y,Dangban_length,Dangban_height,null);
砖块的实现
砖块重新定一个类,使用队列把砖块的对象装进来,之后在游戏的画面上,如果打到了砖块,则在队列中移除该砖块,经过睡眠之后就没有在画布上画出来了。
/**
* 第一关地图的方法
* @return一个队列
*/
public DuiLie getMap1(){
DuiLie duilie=new DuiLie();
//实例化第一排砖块,并添加到队列中
for(int i=0,j=0;i<5;i++){
Brick brick=new Brick(i*(100+1),j,g);
duilie.add(brick);
}
//实例化第二排砖块,并添加到队列中
for(int i=0,j=51;i<5;i++){
Brick brick=new Brick(i*(100+1),j,g);
duilie.add(brick);
}
//实例化第三排砖块,并添加到队列中
for(int i=0,j=102;i<5;i++){
Brick brick=new Brick(i*(100+1),j,g);
duilie.add(brick);
}
return duilie;
}
小球击中砖块,挡板,窗体的实现方法
上面已经介绍了小球击中窗体右方的方法
当小球击中砖块时,就在装着砖块的队列里面把该砖块给移除,然后小球根据击中砖块四个方向中的哪一个方向,进行相应的位移改变,可能是x坐标相反,或y坐标相反,也可能同时都反方向。同时也得考虑画小球的起始坐标和挡板的坐标之间的差值
小球击中挡板与小球集中砖块的方法类似,也是判断小球与挡板的坐标,判断出小球此时击中挡板的哪个方向。
小球击中砖块时播放声音
public void music(){
File f=new File("musics/shake.wav");//获取音乐文件
try {
URL url=f.toURL();
AudioClip ac=Applet.newAudioClip(url);
ac.play();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
如此一来,小球就可以在游戏画面里运动了,并且可以碰到挡板反弹。而且可以在队列里面分类,通过砖块的坐标不同来进行不同关卡的设置。
分享到:
评论

相关推荐

    以打砖块游戏来理解多线程

    以打砖块游戏来理解多线程 前几天学习了多线程,现在总结自己做的一个打砖块的游戏,以此来加深对多线程的理解(如有不正确的地方欢迎指正!)。

    Java 多线程与并发编程总结.doc

    Java 多线程与并发编程总结.doc

    Java+多线程与并发编程总结

    Java+多线程与并发编程总结.doc

    JAVA多线程与并发学习总结.pdf

    JAVA多线程与并发学习总结.pdf

    Java多线程知识点总结

    该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!

    windows多线程总结

    这是我学习win32多线程的经验结晶,其中比较全面的叙述了WIN32多线程的基本编程方法。

    c_多线程 c_多线程

    c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程...

    corejava多线程学习总结.pdf

    corejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习总结.pdfcorejava多线程学习...

    Java多线程编程总结

    Java 线程系列博文总结word化,编目如下,欢迎互相学习交流: Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:...

    Java_多线程与并发编程总结.doc

    对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同...

    java多线程总结(一)

    java多线程总结

    Java多线程的总结

    Java多线程的重要性可想而知,而对于多线程,某些情况下,又比较难理解,稍微参照网上的资料进行了总结

    MFC 多线程总结

    MFC 多线程总结, 开发为于windows的应用程序开发

    gdb调试多线程程序总结

    gdb调试多线程程序总结 gdb调试多线程程序总结

    多线程基础总结.xmind

    多线程基础理论, 多线程中常用API,多线程的实现方式, 线程池以及创建线程池相关API, 常见的设计模式等内容

    java多线程编程总结

    详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...

    C#多线程 C#多线程

    多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程

    自己总结的多线程

    多线程 , java,多线程并发,对于多线程的原理以及使用做了初步的介绍

Global site tag (gtag.js) - Google Analytics