是男人就坚持20秒 java的swing弹弹球GAME

package com.day09.am01;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/*
 * 1--窗口+面板+固定
 * 2--在面板上画出一个小球(中央处)
 * 3--让小球动起来
 * 4--对小球的运动方向和方向值进行判断,并进行处理方向的修正,实现小球的反弹
 * 5--添加挡板并实现鼠标控制挡板移动
 * 6--小球碰到挡板和没有碰到挡板的情况处理
 *
 *
 */
public class TTQGame extends JFrame implements MouseMotionListener{
	private static final long serialVersionUID = 1L;
	private int fw = 800 ; //窗口的尺寸
	private int fh = 600 ;
	private TTQP ttqp = null ;
	private int bx = 200 ; //球的初始位置
	private int by = 200 ;
	private int b2r = 50 ; //球的尺寸
	private String direction = "right_down" ; //初始方向 右下
	private Timer timer = new Timer();
	private int block_x = 350 ;
	private int block_y = 580 ;
	private int block_w = 100 ;
	private int block_h = 20 ;

	private int speed = 1 ;
	private int score = 0 ;

	public TTQGame() {
		this.setAlwaysOnTop(true);
		this.setUndecorated(true);
		this.getContentPane().setBackground(Color.BLACK);
		this.setSize(fw, fh);
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		ttqp = new TTQP();
		this.add(ttqp);
		this.setVisible(true);
		this.addMouseMotionListener(this);
		this.addKeyListener(new KeyListener() {
			@Override
			public void keyTyped(KeyEvent e) {}
			@Override
			public void keyReleased(KeyEvent e) {}
			@Override
			public void keyPressed(KeyEvent e) {if(e.getKeyCode()==32){System.exit(0);}}});
	}
	class TTQP extends JPanel{
		private static final long serialVersionUID = 1L;
		public TTQP() {
			this.setOpaque(false);
			timer.schedule(new TimerTask() {
				@Override
				public void run() {  //实现小球的移动
					/*
					 * 定义好每一个方向的坐标处理
					 */
					if("right_down".equalsIgnoreCase(direction)){ //右下方向的位置处理
						bx += speed ;  by += speed  ;
					}
					if("right_up".equalsIgnoreCase(direction)){ //右上方向的位置处理
						bx += speed ;  by -= speed ;
					}
					if("left_up".equalsIgnoreCase(direction)){//左上方向的位置处理
						bx -= speed ;  by -= speed ;
					}
					if("left_down".equalsIgnoreCase(direction)){//左下方向的位置处理
						bx -= speed ;  by += speed ;
					}
					/*
					 * 定义好发生什么情况时,如何修正小球的方向
					 */
//					如果小球底部y坐标值》=挡板上边的y坐标	by + b2r >= block_y
//					并且小球底部x坐标值》=挡板上边的x坐标	bx + b2r/2 >= block_x
//					并且《=挡板上边的x坐标值+挡板的宽度       bx + b2r/2 <= block_x + block_w
//					那么 正常改变方向
//					否则 程序停止 GAME OVER
//					if(by+b2r>=fh){ //底边的判断
//						if("right_down".equalsIgnoreCase(direction)){ //小球来自右下
//							direction = "right_up" ;
//						}else{ //小球来自左下
//							direction = "left_up" ;
//						}
//					}
					if(by + b2r >= block_y && bx + b2r/2 >= block_x && bx + b2r/2 <= block_x + block_w){
						if("right_down".equalsIgnoreCase(direction)){ //小球来自右下
							direction = "right_up" ;
							speed ++ ;
							score ++ ;
						}else{ //小球来自左下
							direction = "left_up" ;
							speed ++ ;
							score ++ ;
						}
					}
					if(by + b2r >= fh){
						JOptionPane.showMessageDialog(ttqp, "GAME OVER !", "玩家提示信息",JOptionPane.DEFAULT_OPTION);
						Runtime.getRuntime().exit(0);
					}

					if(bx+b2r>=fw){ //右边的判断
						if("right_up".equalsIgnoreCase(direction)){ //小球来自 右上
							direction = "left_up" ;
						}else{  //小球来自右下
							direction = "left_down" ;
						}
					}
					if(by<=0){ //顶边的判断
						if("left_up".equalsIgnoreCase(direction)){ //小球来自 左上
							direction = "left_down" ;
						}else{  //小球来自右上
							direction = "right_down" ;
						}
					}
					if(bx<=0){ //左边的判断
						if("left_up".equalsIgnoreCase(direction)){ //小球来自 左上
							direction = "right_up" ;
						}else{  //小球来自左下
							direction = "right_down" ;
						}
					}
					TTQP.this.repaint() ;
				}
			}, 0 , 10) ;
		}
		@Override
		public void paint(Graphics g) {
			g.setColor(Color.WHITE);
			g.fillOval(bx, by, b2r, b2r);

			g.setColor(Color.PINK);
			g.fillRect(block_x, block_y, block_w, block_h);

			g.setColor(Color.RED) ;
			g.drawString("SCORE : " + score, 20, 20) ;
		}
	}
	public static void main(String[] args) {
		new TTQGame();
	}
	@Override
	public void mouseDragged(MouseEvent e) { //拖拽方法 实现控制挡板的移动
		block_x = e.getX() ;
		if(block_x <=0){
			block_x = 0 ;
		}
		if(block_x+block_w >=fw){
			block_x = fw-block_w ;
		}
		this.repaint() ;
	}
	@Override
	public void mouseMoved(MouseEvent e) {}
}

时间: 2024-11-05 19:42:02

是男人就坚持20秒 java的swing弹弹球GAME的相关文章

是男人就坚持20秒java的swing弹弹球小游戏代码

package com.day09.am01; import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.util.Timer; import ja

CocosCreator手记04——是男人就坚持20秒Remastered (TypeScript版)

CocosCreator v1.5.0 tsc Version 2.3.4 密集恐惧症慎用 是男人就坚持20秒属于经典的弹幕游戏,做例子研究也很有价值,足够小且完整,还有相当的游戏性.这是很多Demo所不具备的.这两天用TypeScript语言Remastered了一下,之前那个是C++写的. 感觉上,CocosCreator+TypeScript写起东西来非常顺手.CocosCreator内部提供了很多成熟的快速开发功功能,比起以前效率提高不少.TypeScript的各种提示识别,变量函数增删

java学习日记-----------------------------弹弹球

好玩的小程序,弹弹弹.................... import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; public class BallsCanvas extends Canvas implements ActionListener,FocusListener{ private Ball balls[]; private Timer timer;//

云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求

这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程. 请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> SLB -> 客户端浏览器. 下面是分析的过程: 1. 启动Wireshark,针对内网网卡进行抓包. 2. 在IIS日志中找出要分析的请求(借助Log Parser Studio) 通过c-ip(Client IP Address)可以获知SLB的内网IP,在分析Wireshar抓包时需要依据这个IP进

惊天爆料:绿茶红茶瓜子违法添加工业滑石粉 浸泡20秒全褪色

各位听众,眼下市场上,各种风味瓜子十分畅销,绿茶的.红茶的.菊香味的,不过上海电视台记者前往申城市场销售炒货的主要生产地-安徽宣城调查后发现,这些所谓"风味瓜子",违法添加严重,质量堪忧.   有消费者向记者反映,买到的绿茶瓜子让人实在吃得不放心.(采访 王鹏(化名))消费者 :舌头上 或者说吐出来口水的话 都有绿色的 //)记者把这样的绿茶瓜子浸泡到常温的纯净水中,不到20秒,原本透明的纯净水就变成了绿色.剥开壳一看,瓜子仁上也沾满绿颜色.那么这些绿颜色的物质究竟是什么呢?记者特地前

提示用户输入一个时间的秒数,比如500秒就输入500,然后输出对应的分钟和秒,比如500s就是8分钟20秒

#include <stdio.h> /* */ int main() { /* // 将c的值固定在10以内 int a = 96546546; int c = a % 10; */ // 1.提示用户输入时间 printf("请输入一个时间值(秒):\n"); // 2.接收用户输入的时间 int time; scanf("%d", &time); // 3.转换成对应的分钟和秒 int minute = time / 60; // 分钟 i

一个20秒SQL慢查询优化的经历与处理方案

背景 前几天在项目上线过程中,发现有一个页面无法正确获取数据,经排查原来是接口调用超时,而最后发现是因为SQL查询长达到20多秒而导致了问题的发生. 这里,没有高深的理论或技术,只是备忘一下经历和解读一些思想误区. 复杂SQL语句的构成 这里不过多对业务功能进行描述,但为了突出问题所在,会用类比的语句来描述当时的场景.复杂的SQL语句可以表达如下: SELECT * FROM a_table AS a  LEFT JOIN b_table AS b ON a.id=b.id  WHERE a.i

棋牌外挂年入千万,20秒小视频骗遍宅男,揭秘诱导欺诈_转

转自:棋牌外挂年入千万,20秒小视频骗遍宅男,揭秘诱导欺诈   https://news.cnblogs.com/n/618203/ 文/木子梨 来源:一本黑(ID:darkinsider) 在如今这个“流量为王”的时代,毫不夸张的说,流量就等同于金钱. 话虽如此,但如何最大限度的把流量换成金钱,这是一门学问. 金钱在诱惑骗子,骗子只能来诱惑你. 那些你也许从来都不屑的软件,实则充满着令人不可思议的套路和暴利. 01 一款棋牌辅助软件中,竟隐藏着年收入近 5000 万的诱导支付交易 最近,在一次

你用java的swing可以做出这么炫的mp3播放器吗?

这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 java开发_闹钟 和 pygame系列_百度随心听_完美的UI设计 的驱使下产生了编写这个mp3的灵感. 也许大伙儿可能认为我脑袋是不是被骡子踢了,闲着真没事,干嘛非得再往工作(工作上面也是coding)上面靠,其实可以 搞一些其他的东西嘛,如运动啊,旅游啊,看书啊(看书倒是一直坚持着的,如果可以我