编写java程序,模拟汽车比赛,汽车从左向右移动,当达到右终点时,从左边重新开始,一直重复

rosboy 2013-01-28 11:05:01
也不知道是什么原因。总是走到一半就不走了,而且车的位置不对。求各位帮忙解答一下,纠结好久了
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
//框架
public class RaceCar extends JFrame {
private CarPanel cp = new CarPanel();
/**
* @param args
*/
public RaceCar(){
add(cp);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
RaceCar rc = new RaceCar();
rc.setSize(1000, 300);
rc.setTitle("Race Car");
rc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rc.setLocationRelativeTo(null);
rc.setVisible(true);
}

}
//小车类,继承JPanel
class CarPanel extends JPanel{
private int x;
private int y = 100;
private int[] xPoints = new int[4];
private int[] yPoints = {y - 20, y - 30, y - 30, y - 20};
public int getX(){
return x;
}
public void setX(int x){
this.x = x;
}
public int getY(){
return y;
}
public void setY(int y){
this.y = y;
}

public CarPanel(){
Timer timer = new Timer(50, new TimerListener());
timer.start();
}
//画小车
protected void paintChildren(Graphics g){
//super.paintChildren(g);
}
protected void paintborder(Graphics g){
//super.paintBorder(g);
}
protected void paintComponent(Graphics g){
super.paintComponent(g);

if(x > getWidth()){
x = -20;
}
setX(getX() + 5);

g.setColor(Color.BLACK);
g.fillOval(x + 10, y - 10, 10, 10);
g.fillOval(x + 30, y - 10, 10, 10);
g.setColor(Color.YELLOW);
g.fillRect(x, y - 20, 50, 10);
g.setColor(Color.BLUE);
for(int i = 1; i <= 4; i++) xPoints[i-1] = x + i * 10;
g.fillPolygon(xPoints, yPoints, 4);
System.out.println(x);

}

class TimerListener implements ActionListener{
public void actionPerformed(ActionEvent e){
repaint();
}
}
}
...全文
1907 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Baby302 2015-05-10
  • 打赏
  • 举报
回复
虽然过去这么久了,但是我依然想问,有改好的程序吗?可以发给我吗?
rosboy 2013-01-30
  • 打赏
  • 举报
回复
引用 4 楼 AA5279AA 的回复:
引用 3 楼 rosboy 的回复:引用 1 楼 AA5279AA 的回复:看着东西挺有趣,本来想改出来的。。 可发现你的程序好像是吧整个画面看成一个对象,而不是运动的那辆汽车。 不知道为什么你选择这样做,只是个人感觉把汽车看成一个对象更合适一些。。 System.out.println(x); 你这有测试程序,把你结果发上来我看看。 另外能不能再详细的描述一下……
额,好吧。因为自己还只能模仿书上的其他例子,所以只能把一个面板当作画布。 你说的那个括号是不必要的。这个题的目的就是只有一辆车。那个 for(int i = 1; i <= 4; i++) xPoints[i-1] = x + i * 10; 是为了更新那数组,是用来画上面梯形的4个点的x坐标,后面那句用来画梯形。
rosboy 2013-01-30
  • 打赏
  • 举报
回复
额,好吧。因为自己还只能模仿书上的其他例子,所以只能把一个面板当作画布。 你说的那个括号是不必要的。这个题的目的就是只有一辆车。那个 for(int i = 1; i <= 4; i++) xPoints[i-1] = x + i * 10; 是为了更新那数组,是用来画上面梯形的4个点的x坐标,后面那句用来画梯形。
失落夏天 2013-01-29
  • 打赏
  • 举报
回复
引用 3 楼 rosboy 的回复:
引用 1 楼 AA5279AA 的回复:看着东西挺有趣,本来想改出来的。。 可发现你的程序好像是吧整个画面看成一个对象,而不是运动的那辆汽车。 不知道为什么你选择这样做,只是个人感觉把汽车看成一个对象更合适一些。。 System.out.println(x); 你这有测试程序,把你结果发上来我看看。 另外能不能再详细的描述一下你的现在程序跑的情况? 就是现在的……
好了 看完之后我崩溃了。。 这谁写的代码呀,把GUI当成画板了。。 当然,一个人有一个人的思维方式吧,不过真心不习惯把一个画面当做一个对一个对象的编码方式。 你的错好像就在这里: for(int i = 1; i <= 4; i++) xPoints[i-1] = x + i * 10; g.fillPolygon(xPoints, yPoints, 4); System.out.println(x); 这里。 你好像少加了一个括号: for(int i = 1; i <= 4; i++) { xPoints[i-1] = x + i * 10; g.fillPolygon(xPoints, yPoints, 4); } System.out.println(x); 本来4辆车的,少加了之后就变成一辆车了。
rosboy 2013-01-29
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
看着东西挺有趣,本来想改出来的。。
可发现你的程序好像是吧整个画面看成一个对象,而不是运动的那辆汽车。
不知道为什么你选择这样做,只是个人感觉把汽车看成一个对象更合适一些。。
System.out.println(x);
你这有测试程序,把你结果发上来我看看。
另外能不能再详细的描述一下你的现在程序跑的情况?
就是现在的效果。。
睡了。
真的最后一贴了。。……



谢谢你这么晚还来帮忙~~
把整个画面看成一个对象,是模仿书上的例子,自己是个小菜鸟。
把println(x)改成print(x + " ")后的结果如下: 到885就不懂了
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265 270 275 280 285 290 295 300 305 310 315 320 325 330 335 340 345 350 355 360 365 370 375 380 385 390 395 400 405 410 415 420 425 430 435 440 445 450 455 460 465 470 475 480 485 490 495 500 505 510 515 520 525 530 535 540 545 550 555 560 565 570 575 580 585 590 595 600 605 610 615 620 625 630 635 640 645 650 655 660 665 670 675 680 685 690 695 700 705 710 715 720 725 730 735 740 745 750 755 760 765 770 775 780 785 790 795 800 805 810 815 820 825 830 835 840 845 850 855 860 865 870 875 880 885
跑的情况:在框架的下面出现一辆小车,然后一瞬间的功夫,上面出现一辆小车,开始运动,直到如下图的状态,就不动了。
感觉下面的小车是第一次时候画的,然后动的时候是上面那个小车的高度,x=0的位置开始
最终停止了的时候的图片如下:

当改变大小为400*300时,最终的x是385
rosboy 2013-01-29
  • 打赏
  • 举报
回复
先谢谢你~~
把整个画面看成一个对象,是模仿书上的例子,自己是个小菜鸟。
把println(x)改成print(x + " ")后的结果如下: 到885就不懂了
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265 270 275 280 285 290 295 300 305 310 315 320 325 330 335 340 345 350 355 360 365 370 375 380 385 390 395 400 405 410 415 420 425 430 435 440 445 450 455 460 465 470 475 480 485 490 495 500 505 510 515 520 525 530 535 540 545 550 555 560 565 570 575 580 585 590 595 600 605 610 615 620 625 630 635 640 645 650 655 660 665 670 675 680 685 690 695 700 705 710 715 720 725 730 735 740 745 750 755 760 765 770 775 780 785 790 795 800 805 810 815 820 825 830 835 840 845 850 855 860 865 870 875 880 885
跑的情况:在框架的下面出现一辆小车,然后一瞬间的功夫,上面出现一辆小车,开始运动,直到如下图的状态,就不动了。
感觉下面的小车是第一次时候画的,然后动的时候是上面那个小车的高度,x=0的位置开始
最终停止了的时候的图片如下:

当改变大小为400*300时,最终的x是385
失落夏天 2013-01-28
  • 打赏
  • 举报
回复
看着东西挺有趣,本来想改出来的。。 可发现你的程序好像是吧整个画面看成一个对象,而不是运动的那辆汽车。 不知道为什么你选择这样做,只是个人感觉把汽车看成一个对象更合适一些。。 System.out.println(x); 你这有测试程序,把你结果发上来我看看。 另外能不能再详细的描述一下你的现在程序跑的情况? 就是现在的效果。。 睡了。 真的最后一贴了。。 。今天得分不少,不知道明天能不能上排行榜。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧