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改了,友友们可以对比一样看看喔

经验分享 程序员 微信小程序 职场和发展