java實(shí)現(xiàn)桌球小游戲
本文實(shí)例為大家分享了java實(shí)現(xiàn)桌球小游戲的具體代碼,供大家參考,具體內(nèi)容如下
桌球小游戲

兩張圖片放在src的同級(jí)目錄下
版本一、出現(xiàn)窗口
package cn.xjion.game;
/**
* 出現(xiàn)窗口
* @author xjion
*
*/
import java.awt.*;
import javax.swing.*;
//繼承窗口類
public class BallGame extends JFrame{
// 窗口加載的方法
void launchFrame(){
// 窗口的大小,寬高
setSize(300,300);
// 窗口的位置,距離窗口左上角的位置
setLocation(400,200);
// 窗口可見(jiàn)
setVisible(true);
}
// main方法,執(zhí)行入口
public static void main(String[] args) {
// 新建對(duì)象
BallGame bg = new BallGame();
// 調(diào)用方法
bg.launchFrame();
}
}
版本二、加載圖
這兒的加載圖片有個(gè)緩存問(wèn)題,需要最小化窗口再打開(kāi)
package cn.xjion.game;
/**
* 加載圖片
* @author xjion
*
*/
import java.awt.*;
import javax.swing.*;
//繼承窗口類
public class BallGame extends JFrame{
// 創(chuàng)建兩個(gè)圖片的對(duì)象,代表兩個(gè)圖片
Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg");
// 畫窗口的方法
public void paint(Graphics g){
// 畫桌面
g.drawImage(desk, 0, 0, null);
// 畫ball對(duì)象,坐標(biāo)100,100
g.drawImage(ball, 100, 100, null);
}
// 窗口加載的方法
void launchFrame(){
// 窗口的大小,寬高
setSize(856,500);
// 窗口的位置,距離窗口左上角的位置
setLocation(50,50);
// 窗口可見(jiàn)
setVisible(true);
}
// main方法,執(zhí)行入口
public static void main(String[] args) {
// 新建對(duì)象
BallGame bg = new BallGame();
// 調(diào)用方法
bg.launchFrame();
}
}
版本三、使小球動(dòng)起來(lái)
package cn.xjion.game;
/**
* 水平滾動(dòng)
* @author xjion
*
*/
import java.awt.*;
import javax.swing.*;
//繼承窗口類
public class BallGame extends JFrame{
// 創(chuàng)建兩個(gè)圖片的對(duì)象,代表兩個(gè)圖片
Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg");
int x = 100;
int y = 100;
boolean right = true;
// 畫窗口的方法
public void paint(Graphics g){
// 畫桌面
g.drawImage(desk, 0, 0, null);
// 畫ball對(duì)象,坐標(biāo)100,100
g.drawImage(ball, x, y, null);
// 如果向右走就加10,否則減10
if (right) {
x = x + 10;
}else{
x = x - 10;
}
// 當(dāng)球跑到頭了就返回
if(x>856-40-30){
right = false;
}
if(x<40){
right = true;
}
}
// 窗口加載的方法
void launchFrame(){
// 窗口的大小,寬高
setSize(856,500);
// 窗口的位置,距離窗口左上角的位置
setLocation(50,50);
// 窗口可見(jiàn)
setVisible(true);
// 重畫窗口,無(wú)限重畫
while(true){
// 重畫方法
repaint();
// try catch拋異常
try {
// 40ms重畫一次,1秒25次
Thread.sleep(40);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// main方法,執(zhí)行入口
public static void main(String[] args) {
// 新建對(duì)象
BallGame bg = new BallGame();
// 調(diào)用方法
bg.launchFrame();
}
}
版本四、使小球沿任意角度滾動(dòng)
package cn.xjion.game;
/**
* 任意滾動(dòng)
* @author xjion
*
*/
import java.awt.*;
import javax.swing.*;
//繼承窗口類
public class BallGame2 extends JFrame{
// 創(chuàng)建兩個(gè)圖片的對(duì)象,代表兩個(gè)圖片
Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg");
// 在窗口上的坐標(biāo)
double x = 100;
double y = 100;
double degree = 3.14 / 3;//弧度,60°
// 畫窗口的方法
public void paint(Graphics g){
// 畫桌面
g.drawImage(desk, 0, 0, null);
// 畫ball對(duì)象,坐標(biāo)100,100
g.drawImage(ball,(int) x,(int) y, null);
// x和y坐標(biāo)的變化
x = x + 10*Math.cos(degree);
y = y + 10*Math.sin(degree);
/*判斷什么時(shí)候碰到邊界回彈*/
// 碰到上下邊界回彈
if (y>500-40-30 || y<40 + 40) {
degree = -degree;
}
// 碰到左右邊界回彈
if (x>856-40-30 || x<30) {
degree = 3.14-degree;
}
}
// 窗口加載的方法
void launchFrame(){
// 窗口的大小,寬高
setSize(856,500);
// 窗口的位置,距離窗口左上角的位置
setLocation(50,50);
// 窗口可見(jiàn)
setVisible(true);
// 重畫窗口,無(wú)限重畫
while(true){
// 重畫方法
repaint();
// try catch拋異常
try {
// 40ms重畫一次,1秒25次
Thread.sleep(40);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// main方法,執(zhí)行入口
public static void main(String[] args) {
// 新建對(duì)象
BallGame2 bg = new BallGame2();
// 調(diào)用方法
bg.launchFrame();
}
}
好了,這個(gè)最為簡(jiǎn)單的桌球游戲就算是完成了,能實(shí)現(xiàn)球的滾動(dòng),如果有興趣的可以再研究研究球桿,輔助線,擊球,速度逐漸下降到停止,進(jìn)球及分?jǐn)?shù)的操作,有不對(duì)的地方望大家指出!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java趣味練習(xí)題之輸出兩個(gè)日期之間的相隔天數(shù)
本篇文章介紹了我看到的一個(gè)趣味小題目,怎么求得兩個(gè)日期之間相隔的天數(shù),以及解決該題目的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-10-10
Mybatis如何實(shí)現(xiàn)InsertOrUpdate功能
這篇文章主要介紹了Mybatis如何實(shí)現(xiàn)InsertOrUpdate功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
java.sql.SQLException問(wèn)題解決以及注意事項(xiàng)
這篇文章主要給大家介紹了關(guān)于java.sql.SQLException問(wèn)題解決以及注意事項(xiàng)的相關(guān)資料,這個(gè)問(wèn)題其實(shí)很好解決,文中通過(guò)圖文將解決的辦法介紹的很詳細(xì),需要的朋友可以參考下2023-07-07
加速spring/springboot應(yīng)用啟動(dòng)速度詳解
這篇文章主要介紹了加速spring/springboot應(yīng)用啟動(dòng)速度詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
Mac配置 maven以及環(huán)境變量設(shè)置方式
這篇文章主要介紹了Mac配置 maven以及環(huán)境變量設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

