下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:课课家教育     来源: http://www.kokojia.com点击数:1545发布时间: 2018-11-25 09:13:42

标签: JAVA游戏设计编程语言游戏控制

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

  如何运用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程序游戏设计进行键盘控制游戏,设计起来不难,我们可以用一个游戏框架就可以了,那么难的是,你如何去修改你想要的类型。

赞(21)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程