`
wangshu3000
  • 浏览: 135782 次
  • 性别: 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可能是为了表达对春节这一传统节日的情感,分享回家过年的故事,或者是作为年终总结或者...

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

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

    过年请假申请书精选.doc

    第三篇申请书进一步提供了一个详细的请假时间表,这样的做法有助于公司做好工作交接和人员安排。从1月16日开始至2月7日结束,共计23天的假期安排,涵盖了春节前后的所有重要日期。申请人在此基础上再次强调了遵守...

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

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

    2016年过年回家模板

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

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

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

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

    首先,“就地过年”成为2022年轻人过年新趋势的一个重要特点。受疫情影响,多地推行“就地过年”政策,这一政策在很大程度上改变了传统的年货采购方式。以往,家庭成员会不远万里赶回家中与亲人团聚,年货也多是在...

    20第二十课 ---过年啦.pptx

    总而言之,通过“20第二十课 ---过年啦”这一幼小衔接课程,孩子们不仅能够深入体验和学习中国的春节文化,还能在游戏和学习中提升自己的认知和语言技能。这些宝贵的学习经历将为孩子们的小学学习打下坚实的基础,...

    一年级作文大全过年.docx

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

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

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

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

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

    2015微信自动抢红包工具

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

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

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

    过年的一件事作文.doc

    综上所述,“过年的一件事”不仅仅是一个关于春节的小故事,它还是一个关于家庭温暖、节日传统、安全意识、情感表达、写作技巧、生活教训以及教师指导的故事。这篇作文虽然简单,但它的内涵丰富,适合作为小学生的...

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

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

    过年网页设计

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

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

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

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

    2022年春节,中国年轻人的过年方式出现显著变化,与以往传统方式有所不同,他们展现出新的年货采办习惯、过年体验以及消费选择,呈现出鲜明的消费趋势。在这份“2022年轻人过年新趋势洞察”的报告中,我们深入分析了...

Global site tag (gtag.js) - Google Analytics