2011年6月21日 星期二

期末考題

一、JAVA Applet 波浪

利用五芒星來畫出波浪,
並以number變數控制其波數。

提示:
不需放在CMSimple內,直接執行程式即可,五芒星可以不必旋轉。

參考:
『Java - Wave Applet 範例』、『Java - Draw Star 範例方法』

範例結果如下:


二、CMSimple AJAX 表單輸入

在CMSimple中建立一個form表單包含三個input輸入框,
能夠輸入你自己的 班級、姓名、學號 驗證身份是否正確,
若答案正確則在CMSimple中印出身份正確,
若其中一個答案錯誤則印出身份錯誤。

條件:
1. 必須包含AJAX menu選單。

參考:
『CMSimple - my_main_function 範例plugins程式』

提示:
PHP使用if多個條件成立的使用方法如下...
if(a=="字串1" && b=="字串2" && c=="字串3") {
 echo "內容1";
} else {
 echo "內容2";
}

三、CMSimple AJAX 即時顯示

請參考『Java - Draw Applet Gear 範例方法』將其編譯並產生Class檔案,
在CMSimple中建立一個form表單包含四個input輸入框,
能夠輸入 座標x、座標y、節圓半徑rp、齒數n,
再使用Applet來顯示齒輪並能夠藉由以上參數來控制,
最後必須能夠由AJAX即時顯示在CMSimple中。

條件:
1. 必須包含AJAX menu選單。

參考:
『CMSimple - my_main_function 範例plugins程式』、『CMSimple - my_main_function 範例plugins子程式』

四、以Java Applet繪製動畫

請繪製一個寬為100的小正方形,
讓小正方形能夠持續繞著寬為500的大正方形行走,

參考:
『Java - Draw Anime Star 範例』

提示:
大正方形可以不用畫出來。

範例結果如下:



參考範例目錄

Java - Wave Applet 範例

// 在 Eclipse 執行, 以滑鼠右鍵, Run as Applet
// 在 NetBeans 執行, 則以滑鼠右鍵, 按下 Run File (系統會建立對應的 html)
// 若 Application 與 Applet 同時存在, 在 Eclipse 可以分別以滑鼠右鍵, 選擇執行
// 若 Application 與 Applet 同時存在, 在 NetBeans 按下 Run File, 僅會執行 Application
import java.applet.Applet;
import java.awt.*;

public class HelloWorld extends Applet {
 Stroke drawingStroke = new BasicStroke(2);
 // static 變數才可以在各方法中共用
 String peakNumber = "";
 int number;

 public void init() {
  peakNumber = getParameter("peakNumber");
  if(peakNumber != null) {
   // 轉成整數使用 Integer.parseInt()
   // 轉為浮點數使用 Float.parseFloat()
   number = Integer.parseInt(peakNumber);
  } else {
   // 若 peakNumber 取不到值, 則內定為 5
   number = 5;
  }
 }

 public void paint(Graphics g) {
  int i;
  Graphics2D graph = (Graphics2D)g;
  graph.setStroke(drawingStroke);
  graph.setPaint(Color.black);
  for(i=1;i<=number;i++) {
   // 每一行向下增量 20 單位
   graph.drawString("Hello World", 10, 10+i*20);
   printC(graph,i, 80, 10+i*20);
  }
  for(i=number-1;i>=1;i--) {
   // 必須考慮前半部已經增量 number*20
   graph.drawString("Hello World", 10, 10+(number+number-i)*20);
   printC(graph,i, 80, 10+(number+number-i)*20);
  }
 }

 public void stop()
 {
 }

 public void printC(Graphics g, int m, int x, int y) {
  Graphics2D graph = (Graphics2D)g;
  int i;
  for(i=0;i<m;i++) {
   graph.drawString("!", x+i*10, y);
  }
 }
}

Java - Draw Star 範例方法

 //drawstar(graph, x座標, y座標, 半徑, 旋轉角度);
 public void drawstar(Graphics g, int x, int y, int r, int angle){
  Graphics2D graph = (Graphics2D)g;
  int i,j;
  double deg = 3.14159/180.;
  double temp1, temp2, temp3, temp4;
  double[] ptt_x = new double[10];
  double[] ptt_y = new double[10];
  double[] pt_x = new double[10];
  double[] pt_y = new double[10];

  for (i=0;i<7;i++) {
   pt_x[i] = x+r*Math.sin(72.*deg*i+angle*deg);
   pt_y[i] = y-r*Math.cos(72.*deg*i+angle*deg);
   temp1 = Math.cos(54.*deg-72.*deg*i-angle*deg);
   temp2 = Math.sin(54.*deg-72.*deg*i-angle*deg);
   temp3 = Math.sin(18.*deg);
   temp4 = Math.cos(36.*deg);
   ptt_x[i] = x+r*temp3*temp1/temp4;
   ptt_y[i] = y-r*temp3*temp2/temp4;
  }

  for (i=0;i<5;i++) {
   graph.drawLine((int)pt_x[i], (int)pt_y[i], (int)ptt_x[i], (int)ptt_y[i]);
   j=i+1;
   graph.drawLine((int)ptt_x[i], (int)ptt_y[i], (int)pt_x[j], (int)pt_y[j]);
  }
 }

CMSimple - my_main_function 範例plugins程式

<?php
// 檔名:index.php
// 編寫成類別格式的程式樣版 (ready for CMSimple plugin)
// CMSimple呼叫格式「#CMSimple $output.=my_main_function();#」
// 程式的主函式
function my_main_function() {
 $myplugin = new Cmyplugin;
 return $myplugin->myplugin_main();
}

// 程式類別
class Cmyplugin{
 public $common1 = "common1";
 public $common2 = "common2";
 
 function myplugin_main() {
  $menu=$_GET["menu"];
  $printonce=0;
  
  if ($menu) {
   switch($menu) {
    case "function1":
    // could be html form or action scripts
    $output .= $this->myplugin_function1();
    $output .= $this->myplugin_printmenu();
    break;
    case "function2":
    // could be html form or action scripts
    $output .= $this->myplugin_function2();
    $output .= $this->myplugin_printmenu();
    break;
    case "function3":
    // AJAX 即時顯示範例
    $output .= $this->myplugin_function3();
    $output .= $this->myplugin_printmenu();
    break;
    case "printmenu":
    $output .= $this->myplugin_printmenu();
    break;
    default:
    // use function3 as default function
    $output .= $this->myplugin_printmenu();
   }
  } else {
   // 未指定 menu 則列出表單
   $output .= $this->myplugin_printmenu();
  }
  return $output;
 }
 
 //範例程式1 - 印出文字測試
 function myplugin_function1() {
  $output = "function 1 and some html ".$this->common1." and ".$this->common2;
  $output .= " some more html";
  return $output;
 }
 
 //範例程式2 - 印出文字測試
 function myplugin_function2() {
  $output = "function 2 and some html ".$this->common1." and ".$this->common2;
  $output .= " some more html";
  return $output;
 }
 
 //範例程式3 - AJAX 即時顯示結果
 function myplugin_function3() {
  global $sn, $su;
  $output.="
<script src=\"./jscript/prototype.js\" language=\"JavaScript\" type=\"text/javascript\"></script>
<script language=\"JavaScript\" type=\"text/javascript\">
 function submitEntryForm(event) {
  var updater = new Ajax.Updater({success:'var_list',error:'error_list'}, './plugins/my_main_function/addaction.php', {
   parameters: {num1:$('num1').value, num2:$('num2').value, num3:$('num3').value}
  });
  event.preventDefault();
 }
 function addObservers(event) {
  $('entry').observe('submit', submitEntryForm);
 }
 Event.observe(window, 'load', addObservers);
</script>
<form id='entry' action='' method='post'>
 num1: <input type='text' name='num1' id='num1' value='10' /><br />
 num2: <input type='text' name='num2' id='num2' value='20' /><br />
 num3: <input type='text' name='num3' id='num3' value='30' /><br />
 <input type='submit' id='submit' value='Send' />
</form>
<div id='var_list'></div>
<div id='error_list'></div>
  ";
  return $output;
 }
 
 // 以下成員函式, 用來測試 AJAX 表單的使用
 function myplugin_printmenu() {
  global $sn,$su;
  $output.="
<script src=\"./jscript/prototype.js\" language=\"JavaScript\" type=\"text/javascript\"></script>
<script src=\"./jscript/Menu.js\" language=\"JavaScript\" type=\"text/javascript\"></script>
<script language=\"JavaScript\" type=\"text/javascript\">
 Menu.init(\"menu2\");
</script>
<style type=\"text/css\">
 #menu2,
 #menu2 ul { margin: 0; padding: 0; }
 #menu2 li { list-style-type: none; }
 #menu2 { font: 12px Verdana, Arial; }
 #menu2 li,
 #menu2 a { float: left; }
 #menu2 a { display: block; padding: 6px; text-decoration: none; background-color: #FFF; color: #2362AF; }
 #menu2 a:hover,
 #menu2 a.menu_open { background-color: #2362AF; color: #FFF; }
 #menu2 ul { visibility: hidden; position: absolute; width: 150px; border: 1px solid #CCC; margin-top: 1px; }
 #menu2 ul li { width: 150px; }
 #menu2 ul a { width: 144px; padding: 3px; }
 * html #menu2 ul a { width: 150px; }
 #menu2 ul a.submenu { background-image: url(\"./jscript/menu_arrow_right.gif\"); background-repeat: no-repeat; background-position: 138px 6px; }
 #menu2 ul a.submenu:hover,
 #menu2 ul a.submenu.menu_open { background-image: url(\"./jscript/menu_arrow_right_mo.gif\"); }
 #menu2 ul ul { margin-top: -1px; }
</style>

<ul id=\"menu2\">
 <li><a href=\"".$sn."?".$su."&menu=function1\">Data 1</a></li>
 <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2</a>
  <ul>
   <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-1</a></li>
   <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-2</a>
    <ul>
     <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-2-1</a></li>
     <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-2-2</a></li>
    </ul>
   </li>
   <li><a href=\"".$sn."?".$su."&menu=function2\">Data 2-3</a>
  </ul>
 </li>
 <li><a href=\"".$sn."?".$su."&menu=function3\">AJAX即時顯示</a></li>
</ul>
  ";
  return $output;
 }
}

CMSimple - my_main_function 範例plugins子程式

<?php
//檔名:addaction.php
$total = $_POST['num1'] + $_POST['num2'] + $_POST['num3'];
echo $_POST['num1']."+".$_POST['num2']."+".$_POST['num3']."=".$total;
?>

Java - Draw Gear 範例方法

 //drawgear(graph, x座標, y座標, 節圓半徑, 齒數);
 public void drawgear(Graphics g, int midx, int midy, int rp, int n){
  Graphics2D graph = (Graphics2D)g;
  int imax=15;
  int i=0;
  int j=0;
  double a=0, d=0, ra=0, rb=0, rd=0, dr=0, num=0, sigma=0,
    ang=0, ang2=0, lxd=0, lyd=0, r=0, theta=0, alpha=0,
    xpt=0, ypt=0, xd=0, yd=0, lfx=0, lfy=0, rfx=0, rfy=0;
  double pi = Math.acos(-1);
  double deg = pi/180.;

  graph.drawLine(midx, midy, midx, midy-rp);
  a = 2*rp/n;
  d = 2.5*rp/n;
  ra = rp+a;
  rb = rp*Math.cos(20*deg);
  rd = rp-d;
  dr = (ra-rb)/imax;
  num = n;
  sigma = 3.14159/(2*num)+Math.tan(20*deg)-20*deg;

  for(j=0;j<n;j++) {
   ang = -2.*j*pi/num+sigma;
   ang2 = 2.*j*pi/num+sigma;
   lxd = midx+rd*Math.sin(ang2-2.*3.14159/num);
   lyd = midy-rd*Math.cos(ang2-2.*3.14159/num);
   xd = rd*Math.sin(-ang);
   yd = rd*Math.cos(-ang);
   for(i=0;i<=imax;i++) {
    r = rb+i*dr;
    theta = Math.sqrt((r*r)/(rb*rb)-1.);
    alpha = theta - Math.atan(theta);
    xpt = r*Math.sin(alpha-ang);
    ypt = r*Math.cos(alpha-ang);
    if(i==0) {
     graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xd), (int)(midy-yd));
    }
    graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xpt), (int)(midy-ypt));
    if(i==imax) {
     lfx = midx+xpt;
     lfy = midy-ypt;
    }
   }
   /*the line from last end of dedendum point to the recent
   end of dedendum point*/
   graph.drawLine((int)lxd, (int)lyd, (int)(midx + xd), (int)(midy - yd));

   for(i=0;i<=imax;i++) {
    r = rb+i*dr;
    theta = Math.sqrt((r*r)/(rb*rb)-1.);
    alpha = theta-Math.atan(theta);
    xpt = r*Math.sin(ang2-alpha);
    ypt = r*Math.cos(ang2-alpha);
    xd = rd*Math.sin(ang2);
    yd = rd*Math.cos(ang2);
    if(i==0) {
     graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xd), (int)(midy-yd));
    }
    graph.drawLine((int)(midx+xpt), (int)(midy-ypt), (int)(midx+xpt), (int)(midy-ypt));
    if(i==imax) {
     rfx = midx+xpt;
     rfy = midy-ypt;
    }
   }
   graph.drawLine((int)lfx, (int)lfy, (int)rfx, (int)rfy);
  }
 }

Java - Draw Anime Star 範例

import java.applet.Applet;
import java.awt.*;

public class MovingHelloWorld extends Applet implements Runnable{
 Stroke drawingStroke = new BasicStroke(2);
 String peakNumber = "";
 int number;
 int frame, delay = 13;
 Thread animator;
 boolean frozen = false;
 Dimension offDimension;
 Image offImage;
 Graphics offGraphics;
 double deg=3.14159/180.;
 int pos_x=0;
 int vel_x=1;
 int pos_y=0;
 int vel_y=1;
 int bound_x=200;
 int bound_y=200;

 public void init() {
  setBackground(Color.white);
  peakNumber = getParameter("peakNumber");
  if(peakNumber != null) {
   number = Integer.parseInt(peakNumber);
  } else {
   number = 3;
  }
 }

 public void start() {
  if (frozen) {
  } else {
   if (animator == null) {
    animator = new Thread(this);
   }
   animator.start();
  }
 }

 // 利用繪圖物件變數 g 執行每一影格的繪圖
 public void paintFrame(Graphics g) {
  int i;
  // 將 g 轉換為 Graphics2D 物件格式, 然後將位址指給 graph 繪圖物件
  // 實際執行繪圖的物件為 graph
  Graphics2D graph = (Graphics2D)g;
  // 有關繪筆種類 (選擇筆觸格式)
  Stroke stroke =
  //new BasicStroke (15.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 
  new BasicStroke (2.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); 
  //graph.setStroke(drawingStroke);
  graph.setStroke(stroke);
  graph.setPaint(Color.black);
  
  if (pos_x < 0) {    // 列印位置碰到左邊界時, 位置歸零, 並且改變速度方向
   pos_x = 0;      // 將 x 列印位置歸零
   vel_x = -vel_x;    // 改變速度方向.
  } else if (pos_x > bound_x) {   // 列印位置碰到右邊界時, 位置設為右邊頂值, 並且改變速度方向
   pos_x = bound_x;   // 將 x 列印位置停在右邊邊界
   vel_x = -vel_x;    // 改變速度方向
  }
  // x 列印位置, 以 vel_x 的速度進行增量
  pos_x += vel_x;
  
  if (pos_y < 0) {    // 列印位置碰到左邊界時, 位置歸零, 並且改變速度方向
   pos_y = 0;      // 將 y 列印位置歸零
   vel_y = -vel_y;    // 改變速度方向.
  } else if (pos_y > bound_y) {   // 列印位置碰到右邊界時, 位置設為右邊頂值, 並且改變速度方向
   pos_y = bound_y;   // 將 y 列印位置停在右邊邊界
   vel_y = -vel_y;    // 改變速度方向
  }
  // y 列印位置, 以 vel_y 的速度進行增量
  pos_y += vel_y;

  // 畫出旋轉的 drawstar
  drawstar(graph, 100+pos_x, 100+pos_y, 30, frame);
 }

 public void stop() {
  animator = null;
  offImage = null;
  offGraphics = null;
 }
 
 public void run() {
  long startTime = System.currentTimeMillis();
  while (Thread.currentThread() == animator) {
   frame++;
   repaint();
   try {
    startTime +=delay;
    Thread.sleep(Math.max(0, startTime-System.currentTimeMillis()));
   } catch (InterruptedException e) {
    break;
   }
  }
 }

 public boolean mouseDown(Event e, int x, int y) {
  if (frozen) {
   frozen = false; start();
  } else {
   frozen = true; stop();
  }
  return true;
 }

 // 更新繪圖畫面
 public void update( Graphics g ) {
  Dimension d = getSize();
  offImage = createImage(d.width, d.height);
  offGraphics = offImage.getGraphics();
  offGraphics.setColor(getBackground());
  offGraphics.fillRect(0, 0, d.width, d.height);
  offGraphics.setColor(Color.black);
  paintFrame(offGraphics);
  g.drawImage(offImage, 0, 0, null);
 }
 
 //drawstar(graph, x座標, y座標, 半徑, 旋轉角度);
 public void drawstar(Graphics g, int x, int y, int r, int angle){
  Graphics2D graph = (Graphics2D)g;
  int i,j;
  double deg = 3.14159/180.;
  double temp1, temp2, temp3, temp4;
  double[] ptt_x = new double[10];
  double[] ptt_y = new double[10];
  double[] pt_x = new double[10];
  double[] pt_y = new double[10];

  for (i=0;i<7;i++) {
   pt_x[i] = x+r*Math.sin(72.*deg*i+angle*deg);
   pt_y[i] = y-r*Math.cos(72.*deg*i+angle*deg);
   temp1 = Math.cos(54.*deg-72.*deg*i-angle*deg);
   temp2 = Math.sin(54.*deg-72.*deg*i-angle*deg);
   temp3 = Math.sin(18.*deg);
   temp4 = Math.cos(36.*deg);
   ptt_x[i] = x+r*temp3*temp1/temp4;
   ptt_y[i] = y-r*temp3*temp2/temp4;
  }

  for (i=0;i<5;i++) {
   graph.drawLine((int)pt_x[i], (int)pt_y[i], (int)ptt_x[i], (int)ptt_y[i]);
   j=i+1;
   graph.drawLine((int)ptt_x[i], (int)ptt_y[i], (int)pt_x[j], (int)pt_y[j]);
  }
 }
}

2011年6月7日 星期二

POST & PHP外部輸入值給java

function control()
  {
 global $sn,$su;
 $output="<form method=\"post\" action=".$sn."?".$su."&menu=entercontrol>";
 $output.="x:<input type=\"text\" name=\"x\" value=\"350\"><br/>";
 $output.="y:<input type=\"text\" name=\"y\" value=\"150\"><br/>";
 $output.="r:<input type=\"text\" name=\"r\" value=\"30\"><br/>";
 $output.="angle:<input type=\"text\" name=\"angle\" value=\"0\"><br/>";
 $output.="<input type=\"submit\" value=\"send\">";
 $output.="</form>";
    return $output;
  }

 function entercontrol(){
  $x=$_POST["x"];
  $y=$_POST["y"];
  $r=$_POST["r"];
  $angle=$_POST["angle"];
  $output.="<applet codebase=\"plugins/my_main_function\" code=\"drawstar.\" height=\"450\" width=\"450\">";
  $output.="<param name=\"peakNumber\" value=x/>"; //param name 對應給值之變數名稱 value 值
  $output.="<param name=\"origx\" value=\"$x\"/>";
  $output.="<param name=\"origy\" value=\"$y\"/>";
  $output.="<param name=\"r\" value=\"$r\"/>";
  $output.="<param name=\"angle\" value=\"$angle\"/>";
  $output.="</applet>";
  return $output;
 }

2011 c2期中考後的小考-題目

第一題 (30%)
請使用 java+awt套件 繪製出三角形、梯形、菱形,圖形尺寸自訂。
並利用number變數控制展示圖形,如 number=1 時展示三角形,number=2 時展示梯形、number=3 時展示菱形。
參考資料:[url]http://blog.kmol.info/?p=385[/url]

第二題 (30%)
請將下列PHP程式碼由函式形式改為類別形式。
參考資料:[url]http://blog.kmol.info/?p=376[/url]

程式碼:
<?php
$m=10;
//$m=$_GET["m"];
//$color=$_GET["color"];
$color="red";

printallH($m);
for($i=0;$i<$m-2;$i+=1)
{
    printheadtailH($m);
}
printallH($m);

function printallH($m)
{
    // 函式目的,由 $m 變數控制列印 H 的個數,全部列印相同的 H
    for($i=1;$i<=$m;$i+=1)
    {
        echo "H";
    }
    // 印完後,跳行
    echo "<br>";
}
function printheadtailH($m)
{
    global $color;
    // 列印只有頭尾是 H ,其餘是空白
    echo "H";
    for($i=1;$i<=$m-2;$i+=1)
    {
        // 採用 css 控制列印字元顏色,將 orange 改為 white,可以列出白色字元
        echo "<span style=\"color:".$color."\">H</span>";
        //echo "<span style="color:white">H</span>";
    }
    echo "H";
    echo "<br>";
}
?>

第三題 (20%)
請將下列 java 程式碼編譯,並改成 CMSimple Plugins 且在 CMSimple 底下執行,可與第四題一起展示。
Hint:注意package drawstar,須放置在drawstar目錄底下,可自由更改。
Hint:注意檔案名稱必須為Main.java。
參考資料:[url]http://blog.kmol.info/?p=437[/url]

程式碼:
package drawstar;

import java.applet.Applet;
import java.awt.*;

// for Frame Exit
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Main extends Applet {

    Stroke drawingStroke = new BasicStroke(2);
    // static 變數才可以在各方法中共用
    static String setorigx = null;
    static String setorigy = null;
    static String setr = null;
    static String setangle = null;
    static float origx,origy,r,angle;

    public void init() {
        // getParameter 取得字串值
        setorigx = getParameter("origx");
        setorigy = getParameter("origy");
        setr = getParameter("r");
        setangle = getParameter("angle");
        if(setorigx!=null && setorigy!= null && setr!=null && setangle!= null ) {
            // 轉成整數使用 Integer.parseInt()
            // 轉為浮點數使用 Float.parseFloat()
            origx = Integer.parseInt(setorigx);
            origy = Integer.parseInt(setorigy);
            r = Integer.parseInt(setr);
            angle = Integer.parseInt(setangle);
        } else {
            // 若 peakNumber 取不到值, 則內定為 5
            origx=150;
            origy=150;
            r=30;
            angle=180;
        }
    }

    public void paint(Graphics g) {
        int i,j;
        float x,y;
        double temp1,temp2,temp3,temp4;
        double degree=3.14159/180.0;
        double[] ptx=new double[6];
        double[] pty=new double[6];
        double[] pttx=new double[6];
        double[] ptty=new double[6];
        Graphics2D graph = (Graphics2D)g;
        graph.setStroke(drawingStroke);
        graph.setPaint(Color.black);

        for(i=0;i<6;i++) {
            ptx[i]=origx+r*Math.sin(72.*i*degree+angle*degree);
            pty[i]=origy+r*Math.cos(72.*i*degree+angle*degree);

            temp1= Math.cos(54.*degree-72.*degree*i-angle*degree);
            temp2= Math.sin(54.*degree-72.*degree*i-angle*degree);
            temp3= Math.sin(18.*degree);
            temp4= Math.cos(36.*degree);
            pttx[i]=origx+r*temp3*temp1/temp4;
            ptty[i]=origy+r*temp3*temp2/temp4;
        }
        for(i=0;i<5;i++) {
            graph.drawLine((int)ptx[i], (int)pty[i], (int)pttx[i], (int)ptty[i]);
            j=i+1;
            graph.drawLine((int)pttx[i], (int)ptty[i], (int)ptx[j], (int)pty[j]);
        }
    }

    public void stop() {
       
    }

    public void printC(Graphics g, int m, int x, int y){
        Graphics2D graph = (Graphics2D)g;
        int i;
        for(i=0;i<m;i++) {
            graph.drawString("!", x+i*10, y);
        }
    }

    public static void main(String[] args) {
        Applet applet = new Main();
        Frame frm = new Frame("我的主方法(函式)框架");
        frm.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        frm.setSize(100, 100);
        frm.setVisible(true);
        // 將 applet 加入 Frame 中
        frm.add(applet);
        frm.setSize(300, 300);
        frm.setVisible(true);
        applet.init();
    }
}

第四題 (20%)
利用第三題編譯好之java程式,透過 CMSimple Plugins 控制其參數,並在 CMSimple 底下執行,可與第三題一起展示。
Hint:控制變數之名稱分別為 origx(x軸位置)、origy(y軸位置)、r(半徑)、angle(旋轉角度)。
參考資料:[url]http://blog.kmol.info/?p=437[/url]