java界面化编程1(简单的弹球小游戏)

这是一个关于修复从黑马视频学习的小游戏源码中的错误的博客。作者分享了他们在源码中发现的问题并提供了修改后的版本,确保游戏正常运行。源码涉及到Java Swing的图形界面,包括小球和球拍的移动以及游戏结束状态的显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏运行界面

 游戏结束界面

 游戏源码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值