java界面化编程1(简单的弹球小游戏)
游戏运行界面
游戏结束界面
游戏源码
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改了,友友们可以对比一样看看喔
上一篇:
IDEA上Java项目控制台中文乱码