java通過方向鍵控制小球移動的小游戲
本文需求實現(xiàn)了java通過方向鍵控制小球移動的具體過程,供大家參考,具體內(nèi)容如下
需求分析:
第一 要畫出一個小球
第二 要能通過控制方向鍵控制它的移動
第一部分的實現(xiàn)
1.首先要畫一個大窗體
public class BallMove extends JFrame
在開發(fā)Java應(yīng)用程序時,通常情況下利用JFrame創(chuàng)建大窗口。利用JFrame創(chuàng)建的窗口分別包含一個標(biāo)題、最小化按鈕、最大化按鈕和關(guān)閉按鈕
用主類去繼承JFrame類就可以使用它的方法啦
2.接著用一個類來繼承JPanel 如果說JFrame是一個窗口 JPanel就相當(dāng)于一個畫板 我們可以在上面添加不同的按鈕 文字等元素
class MyPanel extends JPanel
3.接下來我們就可以在畫板上畫畫啦
int x = 10;
int y = 10;
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x,y,20,20);
}
利用JPanel中的方法paint 可以畫出小球 Graphics相當(dāng)于一支畫筆 它有許多的方法 比如畫圓 畫矩形 我們畫了一個半徑為20像素點的小球 在距離x軸y軸各10個像素點的地方
4.此時小球已經(jīng)畫好了 我們只需要在主方法中調(diào)用就可以
首先定義一個MyPanel的對象
MyPanel myPanel = null; myPanel = new MyPanel();//面板
然后利用構(gòu)造函數(shù)將它add添加進入JFrame大框架
this.add(myPanel);
設(shè)置框架的大小
this.setSize(400,300);
關(guān)閉按鈕的設(shè)置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
顯示設(shè)置
this.setVisible(true);
源碼在下面,這樣我們就可以得到一個小球 ,但是它此時還是不會動
沒關(guān)系馬上讓它動起來!
第二部分的實現(xiàn)
class MyPanel extends JPanel implements KeyListener
1.首先要實現(xiàn)KeyListener接口 KeyListener可以捕捉鍵盤的輸入并返回輸入的信息
2.其中有一個方法我們必須實現(xiàn)
public void keyPressed(KeyEvent e)
也就是當(dāng)按鈕按下時的方法
3.方法體中的內(nèi)容
if(e.getKeyCode()==KeyEvent.VK_DOWN){//向下的鍵
y++;
}
//讓面板重繪
else if(e.getKeyCode()==KeyEvent.VK_UP){//向下的鍵
y--;
}
//讓面板重繪
else if(e.getKeyCode()==KeyEvent.VK_LEFT){//向下的鍵
x--;
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x++;
}
這個很好理解 就是操控小球的x y坐標(biāo) 從而進行移動
4.別忘記要重繪
相當(dāng)于刷新頁面
this.repaint();
好的 關(guān)于本次小游戲就給大家分享到這里了,你也可以給自己的小球涂上顏色,或者加快速度都可以的,希望大家多多三連支持哦
源碼如下,大家可以先玩一玩,再去做,學(xué)編程的過程可能并沒有那么好玩,往往是枯燥的,甚至?xí)屓藛适判?,但請相信,你一定可以的,每個高手都是從菜雞走過來的,他們厲害只是因為接觸的時間長罷了。共勉!
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* @author shijiu
*/
//演示小球通過鍵盤控制上下左右的移動》java事件控制
public class BallMove extends JFrame{//框架
MyPanel myPanel = null;
public static void main(String[] args) {
BallMove ballMove = new BallMove();
}
public BallMove(){
myPanel = new MyPanel();//面板
this.add(myPanel);
this.setSize(400,300);
this.addKeyListener(myPanel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//KeyListener 是監(jiān)聽器 可以監(jiān)聽鍵盤事件
class MyPanel extends JPanel implements KeyListener {
//為了小球可以移動 賦個變量
int x = 10;
int y = 10;
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x,y,20,20);
}
//有字符輸出時 該方法就會觸發(fā)
@Override
public void keyTyped(KeyEvent e) {
}
//當(dāng)某個鍵按下時 該方法會觸發(fā)
@Override
public void keyPressed(KeyEvent e) {
System.out.println((char)e.getKeyCode()+"被按下去");
//根據(jù)用戶按下的不同鍵 來處理小球的移動(上下左右)
//在java中 會給每一個鍵 分配一個值
if(e.getKeyCode()==KeyEvent.VK_DOWN){//向下的鍵
y++;
}
//讓面板重繪
else if(e.getKeyCode()==KeyEvent.VK_UP){//向下的鍵
y--;
}
//讓面板重繪
else if(e.getKeyCode()==KeyEvent.VK_LEFT){//向下的鍵
x--;
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x++;
}
//讓面板重繪
this.repaint();
}
//當(dāng)某個鍵釋放了(松開) 該方法會觸發(fā)
@Override
public void keyReleased(KeyEvent e) {
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springcloud結(jié)合bytetcc實現(xiàn)數(shù)據(jù)強一致性原理解析
這篇文章主要介紹了springcloud結(jié)合bytetcc實現(xiàn)數(shù)據(jù)強一致性原理解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Java 進階使用 Lambda 表達式實現(xiàn)超強的排序功能
今天要說的是第二種排序方式,在內(nèi)存中實現(xiàn)數(shù)據(jù)排序。這篇文章主要介紹了Java 進階使用 Lambda 表達式實現(xiàn)超強的排序功能,需要的朋友可以參考下2021-11-11
Java循環(huán)隊列與非循環(huán)隊列的區(qū)別總結(jié)
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識總結(jié),文章圍繞著Java循環(huán)隊列與非循環(huán)隊列的區(qū)別展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06
使用@Builder導(dǎo)致無法創(chuàng)建無參構(gòu)造方法的解決
這篇文章主要介紹了使用@Builder導(dǎo)致無法創(chuàng)建無參構(gòu)造方法的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

