`
wangshu3000
  • 浏览: 135304 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

过年没事,一天时间写了一个是男人就撑住20秒的Java版

阅读更多
每年过年都没事,都得写点小东西,今年是是男人就撑过20秒(20秒还是21秒来着,忘了) 可能有点小bug,再完善了.希望大家能支持,支持的就顶一下了
如果努努力也是可以压缩在100行以内的,90行的俄罗斯方块,100行的男人20秒
剩余问题
1.标题
2.开始没有splash
3.不能暂停
4.不能重新开始
5.速度慢
6.左右键有点冲突
7.结束统计
8.新的bomb出现时向飞机当前位置附近发射,现在是向中心附近发射















import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

/**
 * 转载请注明出处 http://mid.iteye.com 2012-01-24
 * 
 * @author http://mid.iteye.com
 * 
 */
public class Fly21S extends JFrame implements Runnable, KeyListener {
	private int isPlaying = 0;
	private int bg[][] = new int[100][4];// x,y,color,speed
	private int bgMove[] = new int[100];
	private Color[] colors = new Color[] { Color.BLUE, Color.CYAN, Color.GREEN, Color.ORANGE, Color.RED, Color.WHITE, Color.PINK,
			Color.YELLOW };
	private int movePlanDir[] = new int[2];
	// private long timeOffSet = new Date().getTime();
	// private long paintBlank = 1;
	private Image bomb = new ImageIcon("D:\\Java\\eclipse\\workspace\\21sFly\\src\\bomb.gif").getImage();
	private Image over = new ImageIcon("D:\\Java\\eclipse\\workspace\\21sFly\\src\\over.gif").getImage();
	private Image[] planImages = new Image[] { new ImageIcon("D:\\Java\\eclipse\\workspace\\21sFly\\src\\plan1.gif").getImage(),
			new ImageIcon("D:\\Java\\eclipse\\workspace\\21sFly\\src\\plan3.gif").getImage(),
			new ImageIcon("D:\\Java\\eclipse\\workspace\\21sFly\\src\\plan5.gif").getImage(),
			new ImageIcon("D:\\Java\\eclipse\\workspace\\21sFly\\src\\crash.gif").getImage() };
	private int[] planPos = new int[] { 150, 230 };// Plan's current position
	private double bombPos[][] = new double[50][4];// bomb's position,x direct, y direct.

	public Fly21S() {
		setSize(300, 300);
		setVisible(true);
		createBufferStrategy(2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		addKeyListener(this);
		this.setResizable(false);
		// init bg star
		for (int i = 0; i < bg.length; i++) {
			bg[i] = new int[] { getRandomLessThen(300), getRandomLessThen(300), getRandomLessThen(7), getRandomLessThen(2) + 1 };
			bgMove[i] = 1;
		}
		// init bomb
		// up and down
		for (int i = 0; i < 25; i++) {
			int xPos = getRandomLessThen(300);
			int yPos = (int) (getPositiveOrNegative() == -1 ? -1 * getRandomLessThen(50) : (300 + getRandomLessThen(50)));
			int xDir = 150 - xPos + (getPositiveOrNegative() * getRandomLessThen(2));
			int yDir = 150 - yPos + (getPositiveOrNegative() * getRandomLessThen(2));
			bombPos[i] = new double[] { xPos, yPos, xDir, yDir };//
		}
		// left right
		for (int i = 0; i < 25; i++) {
			int xPos = (int) (getPositiveOrNegative() == -1 ? -1 * getRandomLessThen(50) : (300 + getRandomLessThen(50)));
			int yPos = getRandomLessThen(300);
			int xDir = 150 - xPos + (getPositiveOrNegative() * getRandomLessThen(2));
			int yDir = 150 - yPos + (getPositiveOrNegative() * getRandomLessThen(2));
			bombPos[25 + i] = new double[] { xPos, yPos, xDir, yDir };//
		}
	}

	private int getPositiveOrNegative() {
		return (Math.round(Math.random()) - 1) == 0 ? 1 : -1;
	}

	private int getRandomLessThen(int num) {
		return (int) Math.round(Math.random() * num);
	}

	public void paint(Graphics g) {
		BufferStrategy bs = this.getBufferStrategy();
		if (bs == null)
			return;
		Graphics tg = bs.getDrawGraphics();
		tg.fillRect(0, 20, 300, 300);
		// paint bg
		for (int i = 0; i < bg.length; i++) {
			tg.setColor(colors[bg[i][2]]);
			tg.drawLine(bg[i][0], bg[i][1], bg[i][0], bg[i][1]);
		}
		// paint bomb
		for (int i = 0; i < bombPos.length; i++) {
			tg.drawImage(bomb, (int) bombPos[i][0], (int) bombPos[i][1], null);
		}
		if (isPlaying == 0) {
			if (movePlanDir[0] == -1)
				tg.drawImage(planImages[0], planPos[0], planPos[1], null);
			else if (movePlanDir[0] == 1)
				tg.drawImage(planImages[2], planPos[0], planPos[1], null);
			else
				tg.drawImage(planImages[1], planPos[0], planPos[1], null);
		} else {
			tg.drawImage(planImages[3], planPos[0], planPos[1], null);
			tg.drawImage(over, 90, 60, null);
			// tg.drawChars(new char[] { 'H' }, 0, 1, 150, 150);
		}
		this.getBufferStrategy().show();
	}

	public static void main(String[] args) {
		new Thread(new Fly21S()).start();
	}

	public void run() {
		while (isPlaying == 0)
			try {
				for (int i = 0; i < bg.length; i++) {
					if (bgMove[i] % bg[i][3] == 0) {
						bg[i][1] = bg[i][1] + 1;
						if (bg[i][1] > 300) {
							bg[i][0] = (int) Math.round(Math.random() * 300);
							bg[i][1] = 0;
							bg[i][2] = (int) Math.round(Math.random() * 7);
						}
						bgMove[i] = 1;
					} else {
						bgMove[i]++;
					}
				}
				// move bomb
				for (int i = 0; i < bombPos.length; i++) {
					double speedXY = Math.sqrt(bombPos[i][2] * bombPos[i][2] + bombPos[i][3] * bombPos[i][3]);
					double xRate = bombPos[i][2] / speedXY;
					double yRate = bombPos[i][3] / speedXY;
					bombPos[i][0] = bombPos[i][0] + xRate * 1.3;// x to
					bombPos[i][1] = bombPos[i][1] + yRate * 1.3;// y to
					// new bomb
					if (bombPos[i][1] > 300 || bombPos[i][1] < 0) {
						int xPos = getRandomLessThen(300);
						int yPos = (int) (getPositiveOrNegative() == -1 ? -1 * getRandomLessThen(50) : (300 + getRandomLessThen(50)));
						int xDir = 150 - xPos + (getPositiveOrNegative() * getRandomLessThen(2));
						int yDir = 150 - yPos + (getPositiveOrNegative() * getRandomLessThen(2));
						bombPos[i] = new double[] { xPos, yPos, xDir, yDir };//
					} else if (bombPos[i][0] > 300 || bombPos[i][0] < 0) {
						int xPos = (int) (getPositiveOrNegative() == -1 ? -1 * getRandomLessThen(50) : (300 + getRandomLessThen(50)));
						int yPos = getRandomLessThen(300);
						int xDir = 150 - xPos + (getPositiveOrNegative() * getRandomLessThen(2));
						int yDir = 150 - yPos + (getPositiveOrNegative() * getRandomLessThen(2));
						bombPos[i] = new double[] { xPos, yPos, xDir, yDir };//
					}
					// check impact
					if (bombPos[i][0] > planPos[0] && bombPos[i][0] < planPos[0] + 10 && bombPos[i][1] > planPos[1]
							&& bombPos[i][1] < planPos[1] + 10) {
						// crash
						isPlaying = 1;
						System.out.println("Crash~");
					}
				}
				planPos[0] = planPos[0] + movePlanDir[0];
				planPos[1] = planPos[1] + movePlanDir[1];
				repaint();
				Thread.sleep(33);
			} catch (InterruptedException e) {
			}
	}

	public void keyPressed(KeyEvent e) {// 38-上 40-下 37-左 39-右
		// movePlanDir left right up down
		if ((e.getKeyCode() == 65 || e.getKeyCode() == 37)) {// left
			movePlanDir[0] = -1;
		} else if ((e.getKeyCode() == 68 || e.getKeyCode() == 39)) {// right
			movePlanDir[0] = 1;
		} else if ((e.getKeyCode() == 87 || e.getKeyCode() == 38)) {// up
			movePlanDir[1] = -1;
		} else if ((e.getKeyCode() == 83 || e.getKeyCode() == 40)) {//
			movePlanDir[1] = 1;
		}
		repaint();
	}

	public void keyReleased(KeyEvent e) {
		if ((e.getKeyCode() == 65 || e.getKeyCode() == 37)) {// left
			movePlanDir[0] = 0;
		} else if ((e.getKeyCode() == 68 || e.getKeyCode() == 39)) {// right
			movePlanDir[0] = 0;
		} else if ((e.getKeyCode() == 87 || e.getKeyCode() == 38)) {// up
			movePlanDir[1] = 0;
		} else if ((e.getKeyCode() == 83 || e.getKeyCode() == 40)) {//
			movePlanDir[1] = 0;
		}
		repaint();
	}

	public void keyTyped(KeyEvent e) {
	}
}


图片资源见附件.. 横向滚动飞机时,有个中间状态,半侧身,截图是在是不好截,暂时就一步到位,转过去了..  @_@
  • 大小: 67 Bytes
  • 大小: 104 Bytes
  • 大小: 1.7 KB
  • 大小: 134 Bytes
  • 大小: 145 Bytes
  • 大小: 106 Bytes
  • 大小: 5.8 KB
2
1
分享到:
评论
2 楼 DarkAbe 2012-01-25  
,支持下。
1 楼 chdlxm 2012-01-24  
学习

相关推荐

    2011年过年是哪一天.doc

    2011年春节的具体日期是公历2月3日,星期四,农历为二零一零年正月初一,这是因为在农历中,新的一年通常始于新月出现后的第一个朔日。 2011年被称为辛卯年,这是基于中国古代的干支纪年系统。干支纪年法是中国传统...

    一年级看图写话之过年了(五篇).docx

    从给定文件的信息来看,这份文档主要是一年级学生关于“过年”的看图写话练习,共包含五篇短文。虽然这些内容与IT技术没有直接关联,但我们可以从中提炼出与教育、写作以及文化传统相关的知识点。以下是针对该文档...

    ppt有关回家过年的,好,自己做的

    标题中的“ppt有关回家过年的,好,自己做的”表明这是一个关于回家过年的主题的PPT演示文稿,由制作者个人创作完成。这个PPT可能是为了表达对春节这一传统节日的情感,分享回家过年的故事,或者是作为年终总结或者...

    过年请假申请书精选.doc

    【标签】“资料”表明这是一个关于信息或模板的资源,适用于需要写请假申请的员工参考。 文档中列出的【部分内容】包含三篇不同的请假申请书,每篇都有其特定的情境和理由: 1. 第一篇请假申请书强调了申请人对...

    人教版小学美术一年级上册《第19课过年啦》word教案.doc

    1. 教案设计:《第19课 过年啦》是一份小学美术一年级上册的人教版教案,旨在通过教学活动帮助孩子们理解和体验过年的传统习俗和氛围。教案包括了课程目标、重点难点、教具准备、教学过程、课堂作业、作业评价、课程...

    2024年春节计时器记录距离过年还有多少天

    而“2024年春节计时器”就是一款专为人们提供精准春节倒计时服务的应用或工具,帮助用户实时了解距离下一个农历新年还有多少天。这个计时器不仅能够满足人们的好奇心,也成为了人们规划假期、准备年货、安排活动的...

    2016年过年回家模板

    总的来说,"2016年过年回家模板"是一个为中国新年量身打造的PPT设计资源,它能够帮助用户轻松创建出具有浓郁节日气息的演示文稿,无论是用于分享家庭故事,还是在企业、学校等场合展现年度成果,都能增添浓厚的节日...

    2022年轻人过年新趋势洞察报告.pdf

    本报告对2022年轻人过年新趋势进行了深入的分析和研究,涵盖了年轻人过年新趋势、年货消费行为、线上渠道选择、年货使用场景等多个方面。 一、年轻人过年新趋势 本报告显示,年轻人过年新趋势的主要特点是提倡...

    人教 小学 一年级 美术 上册 过年啦PPT学习教案.pptx

    人教 小学 一年级 美术 上册 过年啦PPT学习教案.pptx

    一年级作文大全过年.docx

    【标题】和【描述】中提到的文档是一个关于一年级学生写的过年作文的集合,文档的标签为"技术",但实际内容与技术关联性不大,主要是描述了过年的庆祝活动和习俗,包括家庭聚餐、春节联欢晚会、放烟花、贴春联、守岁...

    过年为什么要放鞭炮 过年放鞭炮的由来.doc

    标题和描述中提到的"过年为什么要放鞭炮 过年放鞭炮的由来",主要探讨的是中国春节习俗中的一个重要元素——燃放鞭炮。这个传统有着悠久的历史,不仅蕴含着丰富的文化内涵,也是中国传统节日氛围的重要组成部分。 ...

    帷幕梅花剪纸春节PPT模板.zip

    从腊月二十三(或二十四日)小年节起,人们便开始“忙年”:扫房屋、洗头沐浴、准备年节器具等等,所有这些活动,有一个共同的主题,即“辞旧迎新”。 传统民俗:春节更是民众娱乐狂欢的节日。元日以后,各种丰富...

    大消费行业周观点_:就地过年多方面影响消费,关注业绩确定性支撑.rar

    【标题解析】:“大消费行业周观点_:就地过年多方面影响消费,关注业绩确定性支撑.rar”这个标题揭示了本次讨论的核心是关于大消费行业的周度分析,特别是聚焦在春节期间“就地过年”政策对消费的影响以及如何在...

    2015微信自动抢红包工具

    自动抢红包是一款面向广大微信、QQ用户的自动抢红包工具,只需挂在后台运行就可以实现自动进群抢红包,保证过年期间一个红包都不错过,数钱数到手软! 【实用功能】 全自动抢红包 开启自动抢红包功能后,手机将为...

    CBNData-2022年轻人过年新趋势洞察.pdf

    CBNData-2022年轻人过年新趋势洞察报告 本报告主要关注2022年轻人过年新趋势的洞察,通过对年轻人的调查,了解他们在春节期间的消费行为、过年方式、新年货采购习惯等方面的变化趋势。 一、春节的意义 对年轻人来...

    过年的一件事作文.doc

    这篇文档实际上是一个小学一年级学生写的作文,标题是“过年的一件事”,描述了春节期间作者与家人一起放烟花时发生的意外,并从中汲取了安全的重要性。虽然标签为“范文”,但这篇文章更像是一篇个人经历的叙述,而...

    Android模仿支付宝过年咻一咻效果

    在Android开发中,模仿支付宝过年期间的“咻一咻”效果是一项有趣的挑战,它涉及到多个技术点,包括动画设计、事件处理、用户交互以及自定义视图等。下面将详细介绍如何实现这一效果。 首先,"咻一咻"的核心是动画...

    过年网页设计

    过年网页设计是一个重要的主题,特别是在中国的传统节日春节即将到来之际。网页设计是互联网世界中的关键元素,它不仅决定了网站的外观,还影响用户体验和品牌形象。在这个案例中,我们聚焦于一个以“经典大气红黄色...

    20第二十课 过年啦 简案.DOC

    《过年啦》这一教学简案主要针对幼小衔接阶段的孩子,旨在通过讲述中国传统节日——春节的故事,帮助孩子们在轻松愉快的氛围中学习语言知识,同时加深对中国传统文化的理解和感受。 教学目标设定清晰,首要任务是让...

    2022年轻人过年新趋势洞察CBNData.pdf

    【2022年轻人过年新趋势洞察】 2022年的春节,年轻人的过年方式出现了新的变化,他们在年货采办、过年体验和消费选择上展现出独特的趋势。年轻人逐渐成为年货市场的主力军,尤其是95后,他们不仅积极参与年货购买,...

Global site tag (gtag.js) - Google Analytics