- 盘子接球游戏
功能:一个可以移动的盘子去接掉下来的小球,接到了就加一,键盘左右键控制盘子的移动方向,当盘子接到的小球个数达到10个以后,游戏结束!
(自学JAVA,第一次做界面小游戏,大神可以给点意见让我学习学习,但是不喜勿喷)
package frame_one;
import java.awt.Container;
import java.awt.event.*;
import javax.swing.JFrame;
import frame_one.MyPanel;
@SuppressWarnings("serial")
public class GameWindows extends JFrame{
MyWindows()
{
super("自由落体");
Container c1 = this.getContentPane();//为这个窗口获得一个面板
c1.add(new MyPanel());//将自定义类面板加入到这个面板中
this.setBounds(400, 200, 500, 500);//设置这个窗口的位置大小像素点
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//确定窗口关闭功能
this.setResizable(false);//设置窗口不能改变大小
this.setVisible(true);
}
public static void main(String[] args) {
GameWindows window = new GameWindows();
window.addWindowListener(new WindowAdapter()//创建一个匿名类
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
//frame_one.MyPanel;
package frame_one;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class MyPanel extends JPanel implements Runnable , KeyListener{
//外接矩形的左上角坐标
public int ypos = 0;//创建一个初始y轴坐标
public int xpos = 90;//创建一个初始的x轴坐标
public int width = 70;
public int height = 70;
//盘子的左端点坐标
public int xplate = 30;//创建一个盘子的y轴坐标
public int yplate = 460;
public static int count = 0;//定义一个全局变量,计数器
public MyPanel()//构造函数创建进程
{
Thread t = new Thread(this);
t.start();
setFocusable(true);//设定焦点在本平面板
addKeyListener(this);
}
//进程调度实现循环
public void run()
{
while(true)
{
try{
Thread.sleep(30);//进程休眠30ms
}catch (InterruptedException e)
{}
ypos += 5;
xpos += 3;
if(ypos > 500)
{
ypos = -80;
}
if(xpos > 500)
{
xpos = 40;
}
if(xplate+50 >= 500)
{
xplate = 30;
}
if(xplate <= 0)
{
xplate = 450;
}
crash();
repaint();//窗口重绘
xpos -= 2;
}
}
//绘画出需要的图形
public void paint(Graphics g)
{
super.paint(g);//清空以前的东西
g.setColor(Color.red);
g.clearRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.red);
g.fillOval(xpos,ypos,width,height);
g.setColor(Color.black);
g.drawLine(xplate, yplate, xplate+50, yplate);
g.drawLine(xplate, 461, xplate+50, 461);
g.drawLine(xplate, 462, xplate+50, 462);
g.drawLine(xplate, 463, xplate+50, 463);
}
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();//获得一个按键编号
switch(keyCode)
{
case KeyEvent.VK_LEFT :
xplate -= 10;
break;
case KeyEvent.VK_RIGHT :
xplate += 10;
break;
}
repaint();//重新绘制图像
}
public void keyReleased(KeyEvent arg0)
{}
public void keyTyped(KeyEvent arg0)
{}
void crash()
{
//圆的坐标
int xcir = xpos + (width/2 + 1);
//int ycir = (ypos + height)/2 + 1;
if(((ypos + height) == yplate) && (xcir >= xplate && xcir <= xplate + 50))
{
count++;
System.out.println("碰撞发生"+count+"次");
if(count == 10)
{
System.out.println("Game Over!");
System.exit(0);
}
ypos = 0;
//repaint();
}
}
}
运行效果: