double b, c; double cc; double k; //bat no katamuki double pbd; //pitching ball direction; point bep; //batting end point; point bcp; // batting center point; point bap; // batting angle point; point pbap; //pre batting angle point; point dbap; //during batting angle point; point bhp; //batting home point; point php; //pitching home point; point pbp; //pitchin ball point; point jp; //judge point; boolean batting; boolean pitching; boolean hit; boolean hitins; boolean hithit; //�T���v�� [setup, 600, 600]{ bep = point(100, 450); bcp = point(230, 450); bhp =point(100, 450); bap = point(0, 0); pbap = point(0, 0); dbap = point(0, 0); batting = false; pitching = false; hit = false; hitins = false; hithit = false; php = point(300, 50); pbp = point(300, 50); jp = point(150, 450); pbd = Math.PI/2; bep.rotate(bcp.x, bcp.y, Math.toRadians(45)); setBackColor(0, 255, 0); } [paint]{ clearAll(); //bat setColor(0, 0, 200); setPenSize(10); drawLine(bcp.x, bcp.y, bep.x, bep.y); //ball setColor(255, 255, 255); fillOval(pbp.x-8, pbp.y-8, 16, 16); } [interval, 3]{ if(pitching == true){ pbp.stop(); pbp.x = php.x; pbp.y = php.y; b = 0.0; pbd = Math.PI/2; hit = false; hithit = false; pitching = false; }else{ pitching = true; } } [always]{ //bat wo swing if(batting == true){ b = bap.distanceTo(Math.toRadians(-300), 0); c = bap.directionTo(Math.toRadians(-300), 0); bap.push(b/1.5,c); dbap.x = bap.x - pbap.x; bep.rotate(bcp.x, bcp.y, dbap.x); pbap.x = bap.x; }else{ bap.stop(); bap.x = 0.; pbap.stop(); pbap.x = 0.; dbap.stop(); dbap.x = 0.; bep.stop(); bep.x = bhp.x; bep.y = bhp.y; bep.rotate(bcp.x, bcp.y, Math.toRadians(45)); } //ball wo pitch if(pitching == true){ pbp.push(50, pbd); }else{ pbp.x = php.x; pbp.y = php.y; pbp.stop(); } //hit judge k = (bep.y - bcp.y)/(bep.x - bcp.x); jp.y = k *(pbp.x - bcp.x) + bcp.y; c = bcp.distanceTo(pbp); if(bcp.x < pbp.x && pbp.x < bep.x&& c < 130 && jp.y < pbp.y && hithit == false){ hit = true; }else{ hit = false; } if(hit != hitins){ cc = bcp.directionTo(bep); pbd = cc * 2 - pbd; pbp.y = jp.y; pbp.bound(cc, 2.); hithit = true; hit =false; } hitins = hit; } [mousePressed]{ if(batting == true){ bap.stop(); bap.x = 0; pbap.stop(); pbap.x = 0; dbap.stop(); dbap.x = 0; bep.stop(); bep.x = bhp.x; bep.y = bhp.y; bep.rotate(bcp.x, bcp.y, Math.toRadians(45)); batting = false; }else{ batting = true; } }