游戏应该是:
上面有排列成不同阵型的砖块,下面有一个可以活动的木条,把上面的小球抛出去,然后小球撞击到的砖块都会消失,每次都要用下面的可活动木条接住小球,再弹上去。直到所有砖块被击碎,则成功。
这款游戏当初就叫打砖块,应该类似于下图。现在已经经过很多改版了,之前的那款游戏已经搜索不到了,可以找一些类似的“打砖块”游戏。
你好,你说的是不是那个小球被屏幕底部的杠杆弹上去,可以打上面的东西,这应该是打砖块系列的游戏,要是想在现在再找那种像以前的一样很经典的几乎是找不到了,不过你可以试试图里这个,是我后来玩过的这类游戏里属于经典的了,在应用宝上安装就可以了官方版质量有保证,希望你能喜欢吧_(:зゝ∠)_
import java.applet.Appletimport 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 = 0i <line * brickNumOfLinei++)
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 = 0j <linej++) {
for (i = 0i <brickNumOfLinei++) {
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 = 0j <linej++) {
for (i = 0i <brickNumOfLinei++) {
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这个变量去控制移动。。但你根本没用这个变量去画图。。所以不能移动。。你自己去改把。。