马里奥杂谈

马里奥线程小游戏实现效果如下:
这里写图片描述

马里奥实现思路:
首先分包:ui(界面),mario.bean(马里奥人物包),costant(配置文件常量),until(工具包),music(音频,声效)

这里写图片描述

第一部写界面:
什么添加组件在此也就不多说了,里面一个重要的知识点就是二级缓冲区的创建,为什么要创建这个,动画都是通过界面刷新,实现为了不出现闪屏的问题,创建缓存取,把所有的图片放在缓冲区,一次性画出来代码如下。

这里写代码片public void paint(Graphics g) {
        /** 第一步创建二级缓冲 **/
        Image bg = createImage(this.getWidth(), this.getHeight());


        /** 获取背景画笔 */
        Graphics bg_g = bg.getGraphics();
        //画背景图
    bg_g.drawImage(backimg.img, backimg.x, backimg.y, null);
        //一种类型的东西放在list的集合中,通过遍历一个个画出来
        for (int i = 0; i < MyCantent.list.size(); i++) {

            bg_g.drawImage(MyCantent.list.get(i).img, MyCantent.list.get(i).x,
                    MyCantent.list.get(i).y, MyCantent.list.get(i).width,
                    MyCantent.list.get(i).height, null);
        }

        for (int i = 0; i < MyCantent.bulists.size(); i++) {
            Bullit bullit = MyCantent.bulists.get(i);
            bg_g.drawImage(bullit.img, bullit.x, bullit.y, bullit.width,
                    bullit.height, null);
        }

        bg_g.drawImage(mario.img, mario.x, mario.y, mario.width, mario.height,
                null);
        bg_g.drawString("金币数目" + MyCantent.coin_number, 50, 50);
        g.drawImage(bg, 0, 0, null);

    }

第二部:实现游戏人物的一些功能:移动 跳,发子弹

第一:创建一mario类,继承Thread,也可以实现Runnabel(接口),本人推荐实现接口,单继承多实现。重写父类run方法。
思路:怎么判断人物的移动的方向呢?说到判断肯定是boolean, 向左isLeft,向右isRight,跳isUp,要移动改变的是x,y坐标值

这里写代码片
public class Test {
  public class Mario{
    int x,y,speed;
    //怎么去改变布尔值,要加一个键盘监听,下面在慢慢道来。
    boolean isRight,isLeft,isUp,isJump;
    //图片
    Image img = new ImageIcon("路径").getImage();
    public void run(){
        while(true){
        //线程休眠,这里会报一个异常,不要抛,最好抓。抛要层层向上抛,很麻烦
            if(isRight){
                x+=speed;
                    //改变人物图片
                img =  new new ImageIcon("路径").getImage();
            }else if(isLeft){
                x-=speed;
                img = new ImageIcon("路径").getImage();
            }else if(isUp){
                //向上其实是一个跳的功能,写一个方法跳
                //没有跳,进来
                if(!isJump){
                 //为了避免连跳,进来就改变布尔值
                isJump = true;
                jump();
            }
        }   
            try{
                    Thread.sleep(30);
                }catch(InterruptedException e){
                    e.printStackTrace();
            }

        }
    }
}
  public void jump(){
            //跳是线程,用匿名内部类开个线程
    new Thread(){
        public void run(){
            while(true){
                for(int i=0; i<120; i++){
                    y+=speed;
                    Untli.MyThread.sleep(10);
                }
                for(int i=0;i<120;i++){
                    y-=speed;
                    Untli.MyThread.sleep(10);
            }
                //为了不让人物连跳,加个boolean值
                    isJump=false;
                Untli.MyThread.sleep(10);
            }
        }   

    }.start();

}
        //程序休眠抽取出来,创建工具类,工具类的的特点:不能new,方法是静态的,通用性,``
  public class Until{
            //构造私有的
            private Until(){}
    public void myThreadSleep(int  mix){
        Thread.sleep(mix);

        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }

        今天暂时写到这吧,未完待续。
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值