汽车比赛,汽车从左到右移动"/>
2020.2.25 模拟汽车比赛,汽车从左到右移动
学习到事件驱动程序,通过Timer创造一个监听类,使得paintComponent函数写出来的小车可以移动,代码如下。在这里插入代码片
主体框架
![在这里插入图片描述](.png)
**内部类画小车的详细代码**
![在这里插入图片描述](.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h5eTE5OThf,size_16,color_FFFFFF,t_70)
**结果**
![在这里插入图片描述](.png)
小车完全可以移动,而且移动速度由Timer类的对象timer的属性所决定源码如下import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;/*** 做一个赛车游戏* @author 16584**/
public class GameCar extends JFrame{//构造器public GameCar(){//添加小车add(new ShowCar());}//mainpublic static void main(String[] args) {GameCar frame=new GameCar();frame.setTitle("Moving Car");frame.setSize(300,300);//frame.pack(); 使用pack可以不设置框架大小setSize,根据组件大小而自动生成框架大小frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}//内部类,存放小车面板和Timer监听器static class ShowCar extends JPanel{//属性x和y,存放小车初始位置private int x=0;private int y;//内部构造器public ShowCar(){//添加Timer监听器Timer timer=new Timer(40,new TimerListener());//开始监听timer.restart();}//画小车protected void paintComponent(Graphics g) {super.paintComponent(g);y=getHeight();//小车由两个圆为车轮,一个长方形为车身,梯形为顶部//画车轮g.fillOval(x+10, y-10, 10, 10);g.fillOval(x+30, y-10, 10, 10);//画车身g.setColor(Color.gray);g.fillRect(x, y-20, 50, 10);//画车顶g.setColor(Color.DARK_GRAY);//先添加线段Polygon p=new Polygon();//添加点p.addPoint(x+10, y-20);p.addPoint(x+20, y-30);p.addPoint(x+30, y-30);p.addPoint(x+40, y-20);//将线段添加到gg.fillPolygon(p);//让x自增5,以显示移动感x+=5;//如果x到达右端,则重新设为左端if(x>getWidth())x=-50;}//Timer监听器class TimerListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {//每次都调用画图repaint();}}}
}
更多推荐
2020.2.25 模拟汽车比赛,汽车从左到右移动
发布评论