如何运用JAVA程序设计进行键盘控制游戏

    作者:课课家教育更新于: 2018-11-24 14:20:05

    大神带你学编程,欢迎选课

      如何运用java程序设计进行键盘控制游戏

      下面我们学习使用键盘来控制图形的运动。

      在上一节的教程中,如何运用java程序设计认识了碰撞检测,那么现在我们在深入去制作,那么就是对于键盘控制游戏(相当于按键一样)。

      在游戏中常常需要用键盘进行对游戏的控制,例如超级玛丽,贪吃蛇等等,这些游戏都需要我们也能够键盘去控制,那么我们现在学习一下,如何用JAVA程序设计键盘控制游戏。

      1.新建一个java项目Ball2:

    如何运用JAVA程序设计进行键盘控制游戏_JAVA游戏设计_编程语言_游戏控制_课课家

    import java.awt.*;

    import java.awt.image.*;

    import java.util.*;

    public class MyPanel extends Panel implements Runnable {

        private int x;

        private int y;

        private int dx,dy;

        private int diameter;

        private int width;

        private int height;

        private Image im;

        private Graphics dbg;

     

     

        public MyPanel() {

            x=50;

            y=50;

            dx=10;dy=10;

            diameter=50;

            width=300;

            height=200; 

            setPreferredSize(new Dimension(width, height));//设置组件的大小

     

        }

     

     

        public void gamePaint() { //前屏绘制

            Graphics g;

            try {

                g = this.getGraphics(); //获取当前屏幕的Graphics对象

                if (g != null && im != null) {

                    g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来

                }

                g.dispose();//释放当前屏幕的Graphics对象

            } catch (Exception e) {

            }

        }

     

        public void gameRender() { //离屏绘制

            if (im == null) {

                im = createImage(width, height);

                if (im == null) {

                    System.out.println("im is null");

                } else {

                    dbg = im.getGraphics();

                }

            }

            dbg.setColor(Color.WHITE);

            dbg.fillRect(0, 0, width, height);//用底色矩形填充画版,擦去图案

            dbg.setColor(Color.blue);

            dbg.fillOval(x, y, diameter, diameter); //画出椭圆

        }

     

        public void gameUpdate() { //更新游戏逻辑

        x=x+dx;

        y=y+dy;

        if((x<0)||(x>width-diameter)){

        dx=-dx;

        }

        if((y<0)||(y>height-diameter)){

        dy=-dy;

        }  

        }

        

        public void run() {

         while(true){

            gameUpdate();

            gameRender();

            gamePaint();

            //以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快

            try {

                Thread.sleep(200);} //括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间

            catch (InterruptedException e) {

                e.printStackTrace();}          

            }

       }

    }

      2.然后新建一个MyPanel类,代码如下:

    import java.awt.*;

    import java.awt.event.KeyEvent;

    import java.awt.event.KeyListener;

    import java.awt.image.*;

    import java.util.*;

     

    public  class MyPanel extends Panel implements Runnable, KeyListener  {

        private int x;

        private int y;

        private int dx,dy,direction;

        private int diameter;

        private int width;

        private int height;

        private Image im;

        private Graphics dbg;

        private Thread gamethread;

     

        public MyPanel() {

            x=50;

            y=50;

            dx=10;

            dy=10;

            diameter=50;

            width=500;

            height=500; 

            setPreferredSize(new Dimension(width, height));//设置组件的大小

            

            this.setFocusable(true);//设置焦点

            this.requestFocus();//获取焦点

            this.addKeyListener(this);//添加键盘监听事件

        }

     

     

        public void gamePaint() { //前屏绘制

            Graphics g;

            try {

                g = this.getGraphics(); //获取当前屏幕的Graphics对象

                if (g != null && im != null) {

                    g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来

                }

                g.dispose();//释放当前屏幕的Graphics对象

            } catch (Exception e) {

            }

        }

     

        public void gameRender() { //离屏绘制

            if (im == null) {

                im = createImage(width, height);

                if (im == null) {

                    System.out.println("im is null");

                } else {

                    dbg = im.getGraphics();

                }

            }

            dbg.setColor(Color.WHITE);

            dbg.fillRect(0, 0, width, height);//用底色矩形填充画版,擦去图案

            dbg.setColor(Color.blue);

            dbg.fillOval(x, y, diameter, diameter); //画出椭圆

        }

     

        public void gameUpdate() { //更新游戏逻辑

        switch (direction){

        case 1:

        y=y+dy;//向下移

        direction=0; //移动情况清零

        break;

        case 2:

        y=y-dy; //向上移

        direction=0;//移动情况清零

        break;

        case 3:

        x=x+dx;//向右移

        direction=0;//移动情况清零

        break;

        case 4:

        x=x-dx;//向左移

        direction=0;//移动情况清零

        break;

        }

        }

        public void keyPressed(KeyEvent e){

        int keycode = e.getKeyCode();

        if (keycode ==KeyEvent.VK_DOWN)

        direction=1; //用1代表下

        if (keycode ==KeyEvent.VK_UP)

        direction=2;//用2代表上

       if (keycode == KeyEvent.VK_RIGHT)

        direction=3;//用3代表右

        if (keycode == KeyEvent.VK_LEFT)

        direction=4;//用4代表左

        }

     

        public void keyTyped(KeyEvent e){

        }

        public void keyReleased(KeyEvent e){

        }

        public void run() {

            while(true){

            gameUpdate();

                gameRender();

                gamePaint();

            //以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快

            try {

                Thread.sleep(10);} //括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间

            catch (InterruptedException e) {

               e.printStackTrace();}          

            }

       }

     

            public void gameStart(){

            gamethread = new Thread(this);

            gamethread.start();

       }

     

    }

     

    上面代码可以当成新的游戏框架,它加上了键盘的监控事件。

      五.练习:

      根据上面的题目,做出一个动画,显示文件夹中的pic1.gif图像,用鼠标的上下左右能控制它的移动,而且移动到窗口边缘,就不能再继续移动。

      提示:画图代码:

      Imageimage=getToolkit().getImage("pic1.gif");//先载入图片

      dbg.drawImage(image,x,y,100,130,this);//在x,y坐标处显示宽高为130的图像。

      小编结语:其实对于这一节教程,运用JAVA程序游戏设计进行键盘控制游戏,设计起来不难,我们可以用一个游戏框架就可以了,那么难的是,你如何去修改你想要的类型。

课课家教育

未登录

1