多字符游戏

	package paint;
	
	import java.awt.event.ActionEvent;
	import java.awt.event.ActionListener;
	import java.awt.event.KeyEvent;
	import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.JButton;
	import javax.swing.JFrame;
	
	public class PaintMain {
		JFrame jFrame;
		String []strings= {"a","b","c"};
		public static void main(String[] args) {
			// TODO 自动生成的方法存根
			PaintMain paintMain=new PaintMain();
			paintMain.initView();
		}
		
	public void initView()
	{
		
		jFrame =new JFrame();
		jFrame.setBounds(500, 500, 500, 500);
		jFrame.setLayout(null);//必不可少,若没有这一行, 则布局紊乱
		
		MyCanvas myCanvas=new MyCanvas(100,"w");//画布 
		// 这个方法只适合单一的一个字符下落
		myCanvas.setBounds(0,0, 500, 500);
		myCanvas.addKeyListener(new KeyListener() {
			//键盘事件 
			@Override
			public void keyTyped(KeyEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
				//按键响应
				// TODO 自动生成的方法存根
				char ch=e.getKeyChar();//存按下的字符;
				String string=String.valueOf(ch);
				
					if(string.equals(myCanvas.getS()))
						{
							Random random=new Random();
							int k=random.nextInt(26);
							//取出这次产生的随机整数;  0-25范围内的  取余26确保范围 而后面nextInt()里的参数就是他的极限,此时范围为0-25;
							myCanvas.setS(strings[k]);
							myCanvas.setY(100);
						}
				
			}
		});	
		
		jFrame.add(myCanvas);
		/*
		 *  不能在这里直接while 1.若不执行 显示不出图像 (顺序运行);
		 *  
		 */
		
		
		JButton jButton=new JButton("启动");
		jButton.setBounds(0, 0, 100, 50);
		/*
		 * 看不到或者不完整,就说明被图画覆盖了,这时候,我们将按钮与图形不重合即可, 我推荐的是修改图形的,因为像string这种我们并不能准确知道他的上定点
		 */
		jButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				Thread thread=new Thread(new Runnable() {
					
					@Override
			
					public void run() {
						// TODO 自动生成的方法存根
						
					while(true)
					{
						try {
							Thread.sleep(1000);
							int y=myCanvas.getY();
							y+=5;
							myCanvas.setY(y);//更新坐标
							myCanvas.repaint();
						} catch (InterruptedException e1) {
							// TODO 自动生成的 catch 块
							e1.printStackTrace();
						}
						
						
						
						try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							// TODO 自动生成的 catch 块
							e.printStackTrace();
						}
					}
					}
				});
				thread.start();
			}
		});
	
		jFrame.add(jButton);
		jFrame.setVisible(true);
	}
		
	}

子类

package paint;

import java.awt.Canvas;
import java.awt.Font;
import java.awt.Graphics;

public class MyCanvas extends Canvas{
	//用构造函数进行初始化,但是又有局限性,写死了
	private int y;
	private String s;
	public MyCanvas (int y,String s) {
		this.y=y;
		this.s=s;
	}
	public MyCanvas() {
		// TODO 自动生成的构造函数存根
	}
	@Override
	public void paint(Graphics g) {
		// TODO 自动生成的方法存根
		super.paint(g);//直接输入paint提示出来函数;
		//print方法,创建对象时自动调用;
		g.drawString(s, 200, y);
	}
	
	public void setY(int y) {
		this.y=y;
	}
	public int getY() {
		return this.y;
	}
	
	public void  setS(String string) {
		this.s=string;
	}
	public String getS() {
		return this.s;
	}
	/* 											图形覆盖
	 * 我认为,是后写的覆盖先写的,这里,我们可以把画布想象为原本透明的,并不会覆盖任何东西
	 * 
	 */

	
}

你可能感兴趣的:(java)