導航:首頁 > 編程語言 > java彈球程序

java彈球程序

發布時間:2023-11-26 11:09:46

⑴ 自己用java寫了個彈彈球,本來是可以運行的,但是在游戲過程中,點了一下窗口之後,鍵盤監聽就失靈了。

懷疑出現了 exception 導致監聽失效,建議debug調試下,看看是沒有監聽到還是監聽到了,但是過程出錯

⑵ java彈球小程序

在java核心技術卷上有源程序

⑶ eclupse多線程,發射彈球遇邊界彈回java編程

一,設置一個二維數組,數組的每一行代表一個球
二,小球移動的速度設置一個衰減因子,這樣一定次數後會停止
三,小球的碰撞,小球速度改變

⑷ java能做游戲嗎

可以的,可以做Java游戲。
【資料】
主要是用Java分支中的J2ME來寫,但是J2ME中需要Java的基回礎知識 。
現在有答大部分人,都是從零開始學J2ME的,學習J2ME的時候,總是從Java基礎開始學習,而且現在講Java基礎的書籍中都是以J2SE來講基礎,這就給學習造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎知識做一個簡單的說明。
J2ME中使用到的Java基礎知識:
1、Java語法基礎:包括基本數據類型、關鍵字、運算符等等
2、面向對象的思想:類和對象的概念,繼承和多態等等。
3、異常處理
4、多線程

⑸ Java程序解惑,希望大家幫幫忙,打磚塊游戲不能用鍵盤控制。開始和移動都不能。運行是用application嗎

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class ballApplet extends Applet implements Runnable {
Dimension d;
Font bFont = new Font("Helvetica", Font.BOLD, 24);
Font sFont = new Font("Helvetica", Font.BOLD, 14);
FontMetrics fmSmall, fmBig;
Graphics goff;
Image img;
Thread mThread;
boolean ingame = false;
int ballx, bally, batpos;
int batdpos = 0;
int balldx = 0, balldy = 0, dxval;
int iScroe, ballNum;
boolean[] showbrick;
int brickNumOfLine;
final int bWidth = 5;
final int batW = 20;
final int ballsize = 5;
final int batH = 5;
final int scoreH = 25;
final int brickW = 15;
final int brickH = 8;
final int space = 1;
final int backcol = 0x102040;
final int line = 4;
final int startline = 32;

public void init() {
Graphics g;
d=size();
setBackground(new Color(backcol));
brickNumOfLine = (d.width-2*bWidth)/(brickW +space);
d.width = brickNumOfLine*(brickW+space)+(2*bWidth);
g = getGraphics();
g.setFont(sFont);
fmSmall= g.getFontMetrics();
g.setFont(bFont);
fmBig = g.getFontMetrics();
showbrick = new boolean[brickNumOfLine*line];
this.addKeyListener(new BallGameKeyListener());
GameInit();

}

public void GameInit() {
batpos = (d.width - batW) / 2;
ballx = (d.width - ballsize) / 2;
bally = (d.height - ballsize - scoreH - 2 * bWidth);
iScroe = 0;
ballNum = 3;
dxval = 2;
if (Math.random() < 0.5)
balldx = dxval;
else
balldx = -dxval;
balldy = -dxval;
batdpos = 0;
InitBricks();
}

public void InitBricks() {
int i;
for (i = 0; i < line * brickNumOfLine; i++)
showbrick[i] = true;
}

// public boolean keyDown(Event e, int key) {
// if (ingame) {
// if (key == Event.LEFT)
// batdpos = -4;
// if (key == Event.RIGHT)
// batdpos = 4;
// if (key == Event.ESCAPE)
// ingame = false;
// } else {
// if (key == 's' || key == 'S') {
// ingame = true;
// GameInit();
// }
// }
// return true;
// }
//
// public boolean keyUp(Event e, int key) {
// if (key == Event.LEFT || key == Event.RIGHT)
// batdpos = 0;
// return true;
// }

public void paint(Graphics g) {
if (goff == null && d.width > 0 && d.height > 0) {
img = createImage(d.width, d.height);
goff = img.getGraphics();
}
if (goff == null || img == null)
return;
goff.setColor(new Color(backcol));
goff.fillRect(0, 0, d.width, d.height);
if (ingame)
PlayGame();
else
ShowIntroScreen();
g.drawImage(img, 0, 0, this);
}

public void PlayGame() {
MoveBall();
CheckBat();
CheckBricks();
DrawPlayField();
DrawBricks();
ShowScore();
}

public void ShowIntroScreen() {
MoveBall();
CheckBat();
CheckBricks();
BatDummyMove();
DrawPlayField();
DrawBricks();
ShowScore();
goff.setFont(bFont);
goff.setColor(new Color(96, 128, 255));
String s = "彈球游戲";
goff.drawString(s, (d.width - fmBig.stringWidth(s)) / 2, (d.height
- scoreH - bWidth) / 2 - 20);
goff.setFont(sFont);
goff.setColor(new Color(128, 255, 32));
s = "請按下'S'鍵開始游戲";
goff.drawString(s, (d.width - fmSmall.stringWidth(s)) / 2, (d.height
- scoreH - bWidth) / 2 + 30);
goff.setColor(new Color(255, 160, 64));
s = "使用方向鍵控制球拍移動";
goff.drawString(s, (d.width - fmSmall.stringWidth(s)) / 2, (d.height
- scoreH - bWidth) / 2 + 50);
}

public void DrawBricks() {
int i, j;
boolean nobricks = true;
int colorDelta = 255 / (line - 1);
for (j = 0; j < line; j++) {
for (i = 0; i < brickNumOfLine; i++) {
if (showbrick[j * brickNumOfLine + i]) {
nobricks = false;
goff.setColor(new Color(255, j * colorDelta, 255 - j
* colorDelta));
goff.fillRect(bWidth + i * (brickW + space), startline + j
* (brickH + space), brickW, brickH);
}
}
}
if (nobricks) {
InitBricks();
if (ingame)
iScroe += 100;
}
}

public void DrawPlayField() {
goff.setColor(Color.white);
goff.fillRect(0, 0, d.width, bWidth);
goff.fillRect(0, 0, bWidth, d.height);
goff.fillRect(d.width - bWidth, 0, bWidth, d.height);
goff.fillRect(0, d.height - bWidth, d.width, bWidth);
goff.fillRect(batpos, d.height - 2 * bWidth - scoreH, batW, batH);
goff.fillRect(ballx, bally, ballsize, ballsize);
}

public void ShowScore() {
goff.setFont(sFont);
goff.setColor(Color.white);
goff.drawString("得分:" + iScroe, 40, d.height - 10);
String s = "生命:" + ballNum;
goff
.drawString(s, d.width - 40 - fmSmall.stringWidth(s),
d.height - 10);
}

public void MoveBall() {
ballx += balldx;
bally += balldy;
if (bally <= bWidth) {
balldy = -balldy;
bally = bWidth;
}
if (bally >= (d.height - ballsize - scoreH)) {
if (ingame) {
ballNum--;
if (ballNum <= 0)
ingame = false;
}
ballx = batpos + (batW - ballsize) / 2;
bally = startline + line * (brickH + space);
balldy = dxval;
balldx = 0;
}
if (ballx >= (d.width - bWidth - ballsize)) {
balldx = -balldx;
ballx = d.width - bWidth - ballsize;
}
if (ballx <= bWidth) {
balldx = -balldx;
ballx = bWidth;
}
}

public void BatDummyMove() {
if (ballx < (batpos + 2))
batpos -= 3;
else if (ballx > (batpos + batW - 3))
batpos += 3;
}

public void CheckBat() {
batpos += batpos;
if (batpos < bWidth)
batpos = bWidth;
else if (batpos > (d.width - bWidth - batW))
batpos = (d.width - bWidth - batW);
if (bally >= (d.height - scoreH - 2 * bWidth - ballsize)
&& bally < (d.height - scoreH - 2 * bWidth)
&& (ballx + ballsize) >= batpos && ballx <= (batpos + batW)) {
bally = d.height - scoreH - ballsize - bWidth * 2;
balldy = -dxval;
balldx = CheckBatBounce(balldx, ballx - batpos);
}
}

public int CheckBatBounce(int dy, int delta) {
int sign;
int stepsize, i = -ballsize, j = 0;
stepsize = (ballsize + batW) / 8;
if (dy > 0)
sign = 1;
else
sign = -1;
while (i < batW && delta > i) {
i += stepsize;
j++;
}
switch (j) {
case 0:
case 1:
return -4;
case 2:
return -3;
case 7:
return 3;
case 3:
case 6:
return sign * 2;
case 4:
case 5:
return sign * 1;
default:
return 4;
}
}

public void CheckBricks() {
int i, j, x, y;
int xspeed = balldx;
if (xspeed < 0)
xspeed = -xspeed;
int ydir = balldy;
if (bally < (startline - ballsize)
|| bally > (startline + line * (space + brickH)))
return;
for (j = 0; j < line; j++) {
for (i = 0; i < brickNumOfLine; i++) {
if (showbrick[j * brickNumOfLine + i]) {
y = startline + j * (space + brickH);
x = bWidth + i * (space + brickW);
if (bally >= (y - ballsize) && bally < (y + brickH)
&& ballx >= (x - ballsize) && ballx < (x + brickW)) {
showbrick[j * brickNumOfLine + i] = false;
if (ingame)
iScroe += (line - j);
if (ballx >= (x - ballsize)
&& ballx <= (x - ballsize + 3)) {
balldx = -xspeed;
} else if (ballx <= (x + brickW - 1)
&& ballx >= (x + brickW - 4)) {
balldx = xspeed;
}
balldy = -ydir;
}
}
}
}
}

public void run() {
long starttime;
Graphics g = getGraphics();
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
while (true) {
starttime = System.currentTimeMillis();
try {
paint(g);
starttime += 20;
Thread.sleep(Math
.max(0, starttime - System.currentTimeMillis()));
} catch (InterruptedException e) {
break;
}
}
}

public void start() {
if (mThread == null) {
mThread = new Thread(this);
mThread.start();
}
}

public void stop() {
if (mThread != null) {
mThread.stop();
mThread = null;
}
}

public static void main(String[] args) {
Frame frame = new Frame("彈球游戲");
ballApplet app = new ballApplet();
frame.add("Center", app);
frame.setSize(270, 350);
frame.validate();
frame.setVisible(true);
frame.addWindowListener(new WindowControl(app));
app.init();
app.start();
}

class BallGameKeyListener implements KeyListener{

@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
// TODO Auto-generated method stub
if (ingame) {

switch(key){
case KeyEvent.VK_ESCAPE:
ingame = false;
break;
case KeyEvent.VK_RIGHT:
batdpos = 4;
break;
case KeyEvent.VK_LEFT:
batdpos = -4;
break;
}

} else {
if (key == KeyEvent.VK_S) {
ingame = true;
GameInit();
}
}
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT)
batdpos = 0;
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

}
}

class WindowControl extends WindowAdapter {
Applet app;

public WindowControl(Applet app) {
this.app = app;
}

public void WindowClosing(WindowEvent e) {
app.stop();
app.destroy();
System.exit(0);
}

}

給你+了個keyListener 然後按你的理念給你加入了按鍵判定。按S按鍵可以開始游戲但方向鍵不能移動應該是你的方法錯誤了你自己修改去把懶得看了。。太長了 一般畫可以移動的物體是直接按坐標來畫然後移動的時候+= 好哦這-= 控制坐標 我發現你的錯誤是你用batdpos這個變數去控制移動。。但你根本沒用這個變數去畫圖。。所以不能移動。。你自己去改把。。

⑹ java彈球游戲

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

import java.awt.image.BufferedImage;


import javax.swing.JFrame;

import javax.swing.JPanel;


public class CopyOfBallCrash implements Runnable {

public static void main(final String[] args) {

Thread(new CopyOfBallCrash()).start();

}


private final int width = 400;

private final int height = 700;

private int mouse_X, mouse_Y;

private final BufferedImage offscreen = new BufferedImage(width, height,

BufferedImage.TYPE_4BYTE_ABGR);

private final JPanel panel = new JPanel();

private final Shape ball = new Shape(100, 100, 1, 1, 20);

private final Shape rect = new Shape(0, 100, 20);


public CopyOfBallCrash() {

final JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.setPreferredSize(new Dimension(width, height));

ball.setBounds(width, height);

rect.setBounds(width, height);

frame.setContentPane(panel);

panel.addMouseMotionListener(new MouseMotionListener() {

@Override

public void mouseDragged(final MouseEvent e) {}


@Override

public void mouseMoved(final MouseEvent e) {

mouse_X = e.getX();

mouse_Y = e.getY();

}

});

frame.pack();

frame.setVisible(true);

}


public void paint(final Graphics g) {

final Graphics2D g2d = offscreen.createGraphics();

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

g2d.fillRect(0, 0, width, height);

g2d.setColor(Color.blue);

rect.drawRect(g2d, mouse_X);

g2d.setColor(Color.red);

ball.drawOval(g2d, rect);

if (Shape.isLose) g2d.drawString("你輸了!!!", 100, 300);

g2d.dispose();

g.drawImage(offscreen, 0, 0, null);

}


@Override

public void run() {

while (true)

paint(panel.getGraphics());

}

}


class Shape {

public int width, height;

public int x, y, vx, vy, r, w, h;

public static boolean isLose;


public Shape(final int x, final int y, final int vx, final int vy, final int r) {

super();

this.x = x;

this.y = y;

this.vx = vx;

this.vy = vy;

this.r = r;

}


public Shape(final int x, final int w, final int h) {

super();

this.x = x;

this.w = w;

this.h = h;

}


public final void setBounds(final int width, final int height) {

this.width = width;

this.height = height;

}


public final void drawOval(final Graphics2D g2d, final Shape shape) {

if (y + h >= height) {

isLose = true;

return;

}

if (x + vx <= 0 || x + vx + w >= width) vx = -vx;

if (y + vy <= 0) vy = -vy;

if (isCrashOutside(shape.x, shape.y, shape.w, shape.h) && y + w >= shape.y)

vy = -vy;

x += vx;

y += vy;

g2d.fillOval(x, y, r, r);

}


public final void drawRect(final Graphics2D g2d, final int mouseX) {

y = height - h;

if (x + w < width && x < mouseX) x++;

if (x > 0 && x > mouseX) x--;

g2d.fillRect(x, y, w, h);

}


public final boolean isCrashOutside(final int x, final int y, final int w,

final int h) {

return (this.x > x ? this.x <= w + x : x <= r + this.x)

&& (this.y > y ? this.y <= h + y : y <= r + this.y);

}

}


閱讀全文

與java彈球程序相關的資料

熱點內容
501完美越獄工具 瀏覽:119
中間夾菜單裡面不能顯示壓縮文件 瀏覽:952
如何指導小學生參加編程比賽 瀏覽:275
物業的招標文件有哪些 瀏覽:452
保存游戲文件名非法或只讀 瀏覽:258
js怎麼做圖片時鍾 瀏覽:451
華為應用裡面有了app說明什麼 瀏覽:801
資料庫中xy是什麼意思 瀏覽:893
u盤打不開提示找不到應用程序 瀏覽:609
網站功能介紹怎麼寫 瀏覽:954
word在試圖打開文件時錯誤 瀏覽:108
主板無vga插槽怎麼連接編程器 瀏覽:521
錄視頻文件在哪裡刪除 瀏覽:881
word2013如何插入文件 瀏覽:233
proe教程百度網盤 瀏覽:197
如何控制遠程linux伺服器 瀏覽:740
it教學app有哪些 瀏覽:34
怎麼在ps摳的圖變成矢量文件 瀏覽:405
口袋妖怪銀魂安卓v11 瀏覽:1
網站上芒果tv的賬號都是什麼 瀏覽:104

友情鏈接