游戏运行界面
游戏结束界面
游戏源码
package com.java.Jframe;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Timer;
public class Jframetest15 {
//桌面宽度
final static int tabke_x=400;//长
final static int tabke_y=400;//宽
//拍子
final static int ballct_x=100;//长
final static int ballct_y=20;//宽
//球
final static int ball_size=16;
//定义变量记录球坐标
static int ballx=120;
static int bally=20;
//定义变量记录球的移动速度
static int seepy=10;
static int seepx=5;
static //定义变量记录球拍坐标
int ballctx=120;
final static int ballcty=380;
//定义变量辨识游戏是否结束
static Boolean isover=true;
static //定义时间计时器
Timer timer;
public static void init() {
// 创建窗口
Frame frame = new Frame();
//定义类充当画布
class Mycanvas extends Canvas{
public void paint(Graphics g) {
if(isover) {//游戏中
//绘制小球
g.setColor(Color.black);
g.fillOval(ballx,bally, ball_size, ball_size);//小球大小和起始位置
//绘制球拍
g.setColor(Color.pink);
g.fillRect(ballctx, ballcty, ballct_x, ballct_y);
}else {
//游戏结束
g.setColor(Color.red);
g.setFont(new Font("Times",Font.BOLD,30));//设置字迹大小
g.drawString("游戏结束!", 150, 200);
}
}
}
//创建绘画区域
Mycanvas draw= new Mycanvas();
//组装设计逻辑
//球拍事件
KeyListener listener=new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int keyCode=e.getKeyCode();
if(keyCode ==KeyEvent.VK_LEFT) {
//左移
if(ballctx>0) {
ballctx-=10;
}
}
if(keyCode ==KeyEvent.VK_RIGHT) {
//右移
if(ballctx+ballct_x<tabke_x) {
ballctx+=10;
}
}
}
};
//小球事件
ActionListener task=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
//根据范围修正速度
if(ballx<=0||ballx>=(tabke_x-ball_size)) {
seepx=-seepx;
//x轴速度
}
if(bally<=0||(bally>ballcty-ball_size&&ballx>ballctx&&ballx<ballctx+ballct_x)) {
seepy=-seepy;
//y轴速度
}
if(bally>ballcty-ball_size&&(ballx<ballctx||ballx>ballctx+ballct_x))
{
//结束游戏
timer.stop();
isover=false;
draw.repaint();
}
//更新小球的坐标
ballx+=seepx;
bally+=seepy;
draw.repaint();
}
};
timer=new Timer(100,task);//设置时间计时器控制执行的语句
timer.start();
frame.addKeyListener(listener);
draw.addKeyListener(listener);
draw.setPreferredSize(new Dimension(tabke_x,tabke_y));
frame.add(draw);
// 设置最佳大小 pack方法
frame.pack();
// 设置可视化
frame.setVisible(true);
//设置可以关闭
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String [] agrs) {
init();
}
}
若是有友友和小编一样在黑马视频的学习下写的这个小游戏,不知道有没有发现视频中的源码的小Bug,这里在小编的源码中已将Bug改了,友友们可以对比一样看看喔