java打字母的小游戏

   这是自己做的第二个小游戏,有趣。

游戏规则:

  从屏幕上方以一定速度掉下5个字母,然后你应当敲击键盘敲出最下方的字母,该字母为金色,若敲击正确,则加五分,否则减二十分。如果有字母离开屏幕,每个字母减20分。游戏开始为100分,当得分小于等于0时,游戏结束。注意:字母下降的速度会越来越快。


package mypro01;

import java.util.*;
import java.awt.*;
import java.awt.event.*;

class Main
{
	public static void main(String[]args)
	{
		Frame w = new Frame();
		w.setSize(1350, 700);
		MyPanel my = new MyPanel();
		w.add(my);
		w.addKeyListener(my);
		my.addKeyListener(my);
		
		Thread t = new Thread(my);
		t.start();
    
		w.show();
	}
}
class MyPanel extends Panel implements Runnable, KeyListener
{
	int[]x = new int[5];
	int[]y = new int[5];
	char[]c = new char[5];
	int score = 100;
	int sleep=100;
	long time=0;
	MyPanel()
	{
		for (int i = 0; i<5; ++i)
		{
			x[i] = (int)(Math.random() * 1300+10);
			y[i] = (int)(Math.random() * 200);
			c[i] = (char)(Math.random() * 26 + 97);
		}
	}
	public void paint(Graphics g)
	{
	int minn=-10,minpos=0;
	for (int i = 0; i<5; ++i)
	{
		if(y[i]>minn)
		{
			minn=y[i];
			minpos=i;
		}
	}
	   g.setFont(new Font("宋体",Font.BOLD,50));    //改变字体大小
	   
	   for (int l = 0; l<5; ++l)
	   {
		   if(l!=minpos)
		      g.drawString("" + c[l], x[l], y[l]);
		   else
		   {
			   g.setColor(new Color(225,215,0));
			   g.drawString("" + c[l], x[l], y[l]);
			   g.setFont(new Font("宋体",Font.BOLD,50));  
			   g.setColor(new Color(0,0,0));
		   }
	   }
		int cs = score;
		String s = "";
		while (cs != 0)
		{
			s = (char)('0' + (cs % 10)) + s;
			cs = cs / 10;
		}
		g.drawString(s, 30, 30);
		
		
	}
	@Override
	public void keyPressed(KeyEvent arg0)
	{
		char n = arg0.getKeyChar();
		int minn=-10,minpos=0;
		for (int i = 0; i<5; ++i)
		{
			if(y[i]>minn)
			{
				minn=y[i];
				minpos=i;
			}
		}
		if(c[minpos]==n)
		{
			score+=8;
			x[minpos] = (int)(Math.random() * 1300+10);
			y[minpos] = 0;
			c[minpos] = (char)(Math.random() * 26 + 97);
		}
		else
			score-=20;
		repaint();
	}
	@Override
	public void keyReleased(KeyEvent arg0)
	{
	}
	@Override
	public void keyTyped(KeyEvent arg0)
	{	
	}
	public void run()
	{
		if(score<=0)
			return ;
		while (true)
		{
			for (int i = 0; i<5; ++i)
			{
				y[i]+=5;
				if (y[i]>700)
				{
					x[i] = (int)(Math.random() * 1300+10);
					y[i] = 0;
					c[i] = (char)(Math.random() * 26 + 97);
					score = score - 20;
				}
			}
			try{
				Thread.sleep(sleep);
			}catch (Exception e) {};
			repaint();
			time++;
			if(sleep>15&&time>10)
			{
				time=0;
				sleep--;
			}
			if(score<=0)
				return ;
		}
	}
}


  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值