質問編集履歴

3

回答をいただいたあとの修正版

2015/06/02 10:33

投稿

Rino-T_C
Rino-T_C

スコア95

test CHANGED
File without changes
test CHANGED
@@ -397,3 +397,303 @@
397
397
 
398
398
 
399
399
  現在、実行した段階でなぜか毎回決まった線が描画されてしまっています。
400
+
401
+
402
+
403
+ 修正後
404
+
405
+ Turtle.java
406
+
407
+ ```lang-<Java>
408
+
409
+ public class Turtle{
410
+
411
+
412
+
413
+ //インスタンス変数の宣言
414
+
415
+
416
+
417
+ int x, y;
418
+
419
+ double angle = 0;
420
+
421
+
422
+
423
+ ArrayList<Point> points = new ArrayList<Point>();
424
+
425
+
426
+
427
+
428
+
429
+ //コンストラクタの定義
430
+
431
+
432
+
433
+ Turtle(int i, int j){
434
+
435
+ x = i;
436
+
437
+ y = j;
438
+
439
+ points.add(new Point(x, y));
440
+
441
+
442
+
443
+ }
444
+
445
+ //各種メソッドの定義
446
+
447
+ public void move(double x, double y){
448
+
449
+ int i = points.size() - 1;
450
+
451
+ Point pt = points.get(i);
452
+
453
+
454
+
455
+ points.add(new Point( (int)x+pt.x, (int)y+pt.y));
456
+
457
+ }
458
+
459
+
460
+
461
+ //亀の軌跡の描画
462
+
463
+
464
+
465
+ public void paint(Graphics g){
466
+
467
+
468
+
469
+ g.setColor(pencolor);
470
+
471
+
472
+
473
+ int i;
474
+
475
+ int px[] = new int[points.size()];
476
+
477
+ int py[] = new int[points.size()];
478
+
479
+ for( i = 0; i < points.size(); i++){
480
+
481
+ Point p_i = points.get(i);
482
+
483
+ px[i] = p_i.x;
484
+
485
+ py[i] = p_i.y;
486
+
487
+ }
488
+
489
+ g.drawPolyline(px, py, points.size());
490
+
491
+
492
+
493
+ }
494
+
495
+ }
496
+
497
+ ```
498
+
499
+ Turtle2.java
500
+
501
+ ```lang-<Java>
502
+
503
+ public class Turtle2{
504
+
505
+
506
+
507
+ Turtle kame[] = new Turtle[4];
508
+
509
+
510
+
511
+ Turtle2(Turtle k[]){
512
+
513
+ kame = k;
514
+
515
+ }
516
+
517
+
518
+
519
+ void move(double x, double y){
520
+
521
+ kame[1].move(x/2, y/2);
522
+
523
+ kame[2].move(x/3, y/3);
524
+
525
+ kame[3].move(x*2, y*2);
526
+
527
+
528
+
529
+
530
+
531
+ void paint(Graphics g){
532
+
533
+ for(int i = 0; i < 4; i++){
534
+
535
+ kame[i].paint(g);
536
+
537
+ }
538
+
539
+ }
540
+
541
+
542
+
543
+ }
544
+
545
+ ```
546
+
547
+ Rabbit.java
548
+
549
+ ```lang-<Java>
550
+
551
+ public class Rabbit extends Applet implements MouseListener, MouseMotionListener{
552
+
553
+ int current_x; //マウスの現在のx座標
554
+
555
+ int current_y; //マウスの現在のy座標
556
+
557
+ Turtle kame[] = new Turtle[4];
558
+
559
+ Turtle2 Usagi = new Turtle2(kame);
560
+
561
+ Image imgs;
562
+
563
+
564
+
565
+
566
+
567
+ public void init(){
568
+
569
+ setBackground(Color.white);
570
+
571
+ imgs= getImage(getDocumentBase(), "kame2.gif");
572
+
573
+
574
+
575
+ kame[0] = new Turtle(100, 100);
576
+
577
+ kame[1] = new Turtle(300, 100);
578
+
579
+ kame[2] = new Turtle(100, 300);
580
+
581
+ kame[3] = new Turtle(300, 300);
582
+
583
+
584
+
585
+ addMouseListener(this);
586
+
587
+
588
+
589
+ addMouseMotionListener(this);
590
+
591
+
592
+
593
+ }
594
+
595
+
596
+
597
+ public void mouseDragged(MouseEvent e){
598
+
599
+
600
+
601
+ int size = kame[0].points.size() - 1;
602
+
603
+ Point p_0 = kame[0].points.get(size);
604
+
605
+ if(current_x >= p_0.x && current_x <= p_0.x+68 && current_y >= p_0.y && current_y <= p_0.y + 48){
606
+
607
+ current_x = e.getX();
608
+
609
+ current_y = e.getY();
610
+
611
+ kame[0].points.add(new Point(current_x, current_y));
612
+
613
+ repaint();
614
+
615
+ }
616
+
617
+ }
618
+
619
+
620
+
621
+ public void mouseMoved(MouseEvent e){
622
+
623
+
624
+
625
+ }
626
+
627
+
628
+
629
+ public void mouseClicked(MouseEvent e){
630
+
631
+
632
+
633
+ }
634
+
635
+ public void mouseEntered(MouseEvent e){
636
+
637
+
638
+
639
+ }
640
+
641
+ public void mouseExited(MouseEvent e){
642
+
643
+
644
+
645
+ }
646
+
647
+
648
+
649
+ public void mousePressed(MouseEvent e){
650
+
651
+
652
+
653
+ }
654
+
655
+
656
+
657
+ public void mouseReleased(MouseEvent e){
658
+
659
+
660
+
661
+ }
662
+
663
+
664
+
665
+ public void paint(Graphics g){
666
+
667
+ for(int i = 0; i < 4; i++){
668
+
669
+
670
+
671
+ int size = kame[i].points.size() - 1;
672
+
673
+
674
+
675
+ Point p_cur = kame[i].points.get(size - 1);
676
+
677
+ Point p_prev = kame[i].points.get(size - 1);
678
+
679
+ double dx = p_cur.x - p_prev.x;
680
+
681
+ double dy = p_cur.y - p_prev.y;
682
+
683
+ Usagi.move(dx, dy);
684
+
685
+ g.drawImage(imgs, kame[i].points.get(size).x, kame[i].points.get(size).y,this);
686
+
687
+ }
688
+
689
+ g.setColor(Color.black);
690
+
691
+ Usagi.paint(g);
692
+
693
+ }
694
+
695
+ }
696
+
697
+ ```
698
+
699
+ こんなかんじになりました。現在実行時エラーです(´;ω;`)

2

追記

2015/06/02 10:33

投稿

Rino-T_C
Rino-T_C

スコア95

test CHANGED
File without changes
test CHANGED
@@ -390,6 +390,10 @@
390
390
 
391
391
  ```
392
392
 
393
- 現在は実行時エラーです。
393
+ 解決「現在は実行時エラーです。
394
-
394
+
395
- また、実行時エラーにならずとも、足跡が描画されなかったり、右下にしか亀が動かなかったりします。
395
+ また、実行時エラーにならずとも、足跡が描画されなかったり、右下にしか亀が動かなかったりします。
396
+
397
+
398
+
399
+ 現在、実行した段階でなぜか毎回決まった線が描画されてしまっています。

1

式の修正

2015/06/02 07:28

投稿

Rino-T_C
Rino-T_C

スコア95

test CHANGED
File without changes
test CHANGED
@@ -362,7 +362,7 @@
362
362
 
363
363
  deg = Math.atan2(dy, dx);
364
364
 
365
- if( deg == 0 || deg == pi || deg == -pi){
365
+ if( deg != 0 || deg != pi || deg != -pi){
366
366
 
367
367
  length = dx;
368
368
 
@@ -386,8 +386,10 @@
386
386
 
387
387
 
388
388
 
389
+
390
+
391
+ ```
392
+
389
393
  現在は実行時エラーです。
390
394
 
391
395
  また、実行時エラーにならずとも、足跡が描画されなかったり、右下にしか亀が動かなかったりします。
392
-
393
- ```