2015年5月29日 星期五

Eclipse BMI

1.開啟 strings.xml ,替換以下程式碼

<resources>
    <string name="app_name">BMI</string>    
    <string name="menu_settings">Settings</string>
    <string name="title_activity_bmi">BMI</string>
    <string name="bmi_height">身高 (cm)</string>
    <string name="bmi_weight">體重 (kg)</string>
    <string name="bmi_calculate">計算 BMI 值</string>

</resources>


2.開啟advice.xml,替換以下程式碼

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="advice_light">你該多吃點</string>
    <string name="advice_average">體型很棒喔</string>
    <string name="advice_heavy">你該節食了</string>
</resources>

3.開啟activity_bmi.xml,替換以下程式碼

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textHeight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/bmi_height" />

    <EditText
        android:id="@+id/inputHeight"
        style="editTextStyle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textHeight"
        android:inputType="number" />

    <TextView
        android:id="@+id/textWeight"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/inputHeight"
        android:text="@string/bmi_weight" />

    <EditText
        android:id="@+id/inputWeight"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textWeight"
        android:ems="10"
        android:inputType="number" />

    <Button
        android:id="@+id/buttonCalculate"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/inputWeight"
        android:text="@string/bmi_calculate" />

    <TextView
        android:id="@+id/textResult"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/buttonCalculate" />

    <TextView
        android:id="@+id/textSuggest"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textResult" />
    
</RelativeLayout>


4.開啟BMI.java,替換以下程式碼

package com.practice.bmi;
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class BMI extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bmi);
        
        //Listen for button clicks
        Button button = (Button)findViewById(R.id.buttonCalculate);
        button.setOnClickListener(calcBMI);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_bmi, menu);
        return true;
    }


    private OnClickListener calcBMI = new OnClickListener()
    {
         public void onClick(View v)
         {
              DecimalFormat nf = new DecimalFormat("0.00");
              EditText fieldheight = (EditText)findViewById(R.id.inputHeight);
              EditText fieldweight = (EditText)findViewById(R.id.inputWeight);
              double height = Double.parseDouble(fieldheight.getText().toString())/100;
              double weight = Double.parseDouble(fieldweight.getText().toString());
              double BMI = weight / (height * height);
      
              TextView result = (TextView)findViewById(R.id.textResult);
              result.setText("Your BMI is " + nf.format(BMI));
      
              //Give health advice
              TextView fieldsuggest = (TextView)findViewById(R.id.textSuggest);
              if(BMI>25){
               fieldsuggest.setText(R.string.advice_heavy);
              }else if(BMI<20){
               fieldsuggest.setText(R.string.advice_light);
              }else {
               fieldsuggest.setText(R.string.advice_average);
          }
       }
    };
}





2015年5月28日 星期四

期末作業2

參考文獻 :
http://www.sdk.tw/2014/12/android-sdk-android-studio.html

http://chiachiku.pixnet.net/blog/post/64235911-android%E7%A8%8B%E5%BC%8F%E7%AF%84%E4%BE%8B%EF%BC%88%E4%B8%80%EF%BC%89bmi%E8%A8%88%E7%AE%97%E7%A8%8B%E5%BC%8F---%E8%A4%87%E8%A3%BD%E7%AF%87

題目: BMI

安裝 Android Studio : https://developer.android.com/sdk/index.html

步驟 :
(一)建立新專案

(二)Application name裡的「example」可改成名字(或程式的名字),在此使用「BMI」為Application name,點選next直到finish。。

(三)點選values裡的strings.xml,將以下此段程式碼貼上。

<resources>
<string name="app_name">BMI</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_bmi">BMI</string>
<string name="bmi_height">身高 (cm)</string>
<string name="bmi_weight">體重 (kg)</string>
<string name="bmi_calculate">計算 BMI 值</string>
<string name="hello_world"></string>
</resources>

(四)在values底下創立一個名為advice的「Values resource file」。

(五)將以下程式碼貼上剛剛創好的advice裡。


<?xml version="1.0" encoding="UTF-8"?>

<resources>

<string name="advice_light">你該多吃點</string>
<string name="advice_average">體型很棒喔</string>
<string name="advice_heavy">你該節食了</string>

</resources>



(六)接著,將以下程式碼貼在「layout」裡的「activity_main.xml」裡,點進activity_main.xml後選擇下方的text


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView

android:id="@+id/textHeight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bmi_height" />

<EditText

android:id="@+id/inputHeight"
style="editTextStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textHeight"
android:inputType="number" />

<TextView

android:id="@+id/textWeight"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/inputHeight"
android:text="@string/bmi_weight" />

<EditText

android:id="@+id/inputWeight"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textWeight"
android:ems="10"
android:inputType="number" />

<Button

android:id="@+id/buttonCalculate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/inputWeight"
android:text="@string/bmi_calculate" />

<TextView

android:id="@+id/textResult"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/buttonCalculate" />


<TextView

android:id="@+id/textSuggest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textResult" />

</RelativeLayout>



(七)再來進到java裡的MainActivity(若名稱有更改會不一樣),貼上以下程式碼。


package com.practice.bmi;
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class BMI extends Activity {


@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_bmi);

//Listen for button clicks


Button button = (Button)findViewById(R.id.buttonCalculate);


button.setOnClickListener(calcBMI);


}


@Override


public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.activity_bmi, menu);

return true;

}





private OnClickListener calcBMI = new OnClickListener()


{


public void onClick(View v)


{


DecimalFormat nf = new DecimalFormat("0.00");


EditText fieldheight = (EditText)findViewById(R.id.inputHeight);


EditText fieldweight = (EditText)findViewById(R.id.inputWeight);


double height = Double.parseDouble(fieldheight.getText().toString())/100;


double weight = Double.parseDouble(fieldweight.getText().toString());


double BMI = weight / (height * height);





TextView result = (TextView)findViewById(R.id.textResult);


result.setText("Your BMI is " + nf.format(BMI));





//Give health advice


TextView fieldsuggest = (TextView)findViewById(R.id.textSuggest);


if(BMI>25){


fieldsuggest.setText(R.string.advice_heavy);


}else if(BMI<20){


fieldsuggest.setText(R.string.advice_light);


}else {


fieldsuggest.setText(R.string.advice_average);


}


}


};


}

目前樣式
螢幕快照 2014-01-23 下午4.52.36




將裡面的package後面改成你設定的名字。
螢幕快照 2014-01-23 下午4.54.37

再把public class後面的BMI刪掉,改成左邊的名字。
螢幕快照 2014-01-23 下午4.57.03

再來圖內有兩處紅字,分別改為下圖中的名字。
螢幕快照 2014-01-23 下午5.30.00

再來,將menu裡的main打開,把圖內那行刪掉。
螢幕快照 2014-01-23 下午5.44.11

最後將手機連結上電腦,照圖點選,將USB device打開,點開始後選擇自己的手機即可。


完成圖


2015年5月27日 星期三

期末作業1

參考文獻 : http://www.cc.ntu.edu.tw/chinese/epaper/0022/20120920_2209.html

題目 : Hello World

安裝 : 
執行Eclipse,於Window內點選Android SDK Manager。
勾選所需的開發版本、Tools和Extras按下Install。
點選Accept All後再按下Install即可開始下載安裝。

步驟 :
建立Android專案方式如下:
1. File -> New -> Project
2. Android -> Android Application Project -> Next
3. 在Application Name欄位上填上Hello,再按Next
4. Next –> Next -> Finish




















2015年5月24日 星期日

期末作業3


參考位置: 範例教學 - App Inventor 中文學習網 

題目: 1A2B數字遊戲



遊戲規則說明

答案為不重複的四位數,猜四個數字,
A前面的數字為位置與數字正確的個數,B前面的數字為數字正確但位置不正確的個數



畫面製作說明

HorizontalArrangement
Label 1(input)
TextBox(輸入)
Button(OK)

HorizontalArrangement
Label 2(answer)
Label 3(顯示答案)

HorizontalArrangement
TextBox(顯示結果)



程式說明
num1、num2、num3、num4為四個0~9的隨機亂數
A為計算數字與位置正確的個數
B為計算數字正確但位置不正確的個數
answer為答案
guess_num為輸入的數字
show為顯示猜的數字與A、B的個數
count為計算個數
m、n為計算後的答案









模擬器畫面




2015年5月16日 星期六

期末作業




圖片智慧拼盤


1.360*360圖片(.png)

2.將圖片切成16份
http://rs5257.pixnet.net/blog/post/24358691-%E7%B7%9A%E4%B8%8A%E5%9C%96%E7%89%87%E5%88%87%E5%89%B2%E8%88%87%E5%89%AA%E8%A3%81

3.程式碼
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

class J_JPanel extends JPanel

  /**
   *
   */
  private static final long serialVersionUID = 1L;
  Image m_image;
  int showpicture=0;
  @SuppressWarnings("static-access")
  public J_JPanel()throws IOException
  {      J_Puzzle a = new J_Puzzle();
    if(a.changetime==-1)
      showpicture = 1;
      File f = new File("11111.png");
      m_image = ImageIO.read(f); 
  }
  public void paintComponent(Graphics g)
  {     
    g.drawImage(m_image, 0, 0, 700, 700, this);
  }
}
public class J_Puzzle extends JFrame implements ActionListener
{
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  int i,j;
  static int changetime = 0;
  Container c = getContentPane();
  JButton b[] = new JButton[16];
  ImageIcon ic[][] = new ImageIcon[2][15];
  public J_Puzzle() throws IOException
  {
      
    super("拼圖小遊戲");
    
    String pic_name[] = new String[15];
    for(i = 0;i < 2;i ++)
     for(j = 0;j < 15;j ++)
      {
       pic_name[j] = String.valueOf(j+1+i*15)+".png";
       ic[i][j] = new ImageIcon(pic_name[j]);
      }

    JMenuBar mBar = new JMenuBar();
    setJMenuBar(mBar);
    
    int k = 0;
    
    JMenu []m = {new JMenu("菜單(M)"),new JMenu("幫助(H)")};
    char mC[][] = {{'M','H'},{'S','X','C','Z'},{'E','T'}};
    JMenuItem mItem[][] = {{new JMenuItem("開始(S)"),new JMenuItem("重置(X)"),new JMenuItem("背景更換(C)"),new JMenuItem("退出(Z)")},{new JMenuItem("查看樣圖(E)"),new JMenuItem("關於(T)")}};
    for(i = 0;i < 2;i ++)
     {
      mBar.add(m[i]);
      m[i].setMnemonic(mC[0][i]);
      if(i==0)k = 0;
      else k = 1;
      for(j = 0;j < 4-i-k;j ++)
      {
        m[i].add(mItem[i][j]);
        mItem[i][j].setMnemonic(mC[i+1][j]);
        mItem[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mC[i+1][j]));
        mItem[i][j].addActionListener(new ActionListener(){

          public void actionPerformed(ActionEvent e)
          { 
            JMenuItem mItem = (JMenuItem)e.getSource();
            if(mItem.getText().equalsIgnoreCase("重置(X)")||mItem.getText().equalsIgnoreCase("開始(S)"))
             {             
            int location[][] = {{17,13},{17,103},{17,193},{17,283},{107,13},{107,103},{107,193},{107,283}
                   ,{197,13},{197,103},{197,193},{197,283},{287,13},{287,103},{287,193},{287,283}};
            int rd_number[] = new int[16];       
            rd_number = randomnumber();
            for(i = 1;i < 16;i ++)
              b[i].setLocation(location[rd_number[i-1]-1][0],location[rd_number[i-1]-1][1]);
             }
            else if(mItem.getText().equalsIgnoreCase("背景更換(C)"))
            {
              
              changetime++;
              for(i = 0;i < 15;i ++)
                {
                b[i+1].setIcon(null);               
                b[i+1].setIcon(ic[changetime][i]);
                }
              if(changetime==1)
                changetime = -1;
            }
            else if(mItem.getText().equalsIgnoreCase("退出(Z)"))
            {
              int a = JOptionPane.showConfirmDialog(null, "您確定退出遊戲?");
              if(a==0)
                System.exit(0);
            }
            else if(mItem.getText().equalsIgnoreCase("查看樣圖(E)"))
            {
              
                JFrame jj = new JFrame("樣圖");
                jj.setSize(700, 700);
                jj.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3-700,
                    Toolkit.getDefaultToolkit().getScreenSize().height/4);
                jj.setVisible(true);
                Container c1 = jj.getContentPane();
                
                try {
                  c1.add(new J_JPanel(),BorderLayout.CENTER);
                }
                catch (IOException e1) {
                  // TODO Auto-generated catch block
                  e1.printStackTrace();
                }
            }
            if(mItem.getText().equalsIgnoreCase("關於(T)"))
            {
              JOptionPane.showMessageDialog(null, "簡單小遊戲\n製作人:菜鳥");
            }
          
          }
            
        });
      }
      
    }
    m[0].insertSeparator(1);m[1].insertSeparator(1);
      
    GridBagLayout gr = new GridBagLayout();
    c.setLayout(gr);
    
    int gx[] = {0,1,2,3};
    int gy[] = {0,1,2,3};
    int k1;
    Dimension d = new Dimension(90,90);
    String s_number;
    GridBagConstraints gc = new GridBagConstraints();
    for(i = 1;i < 5;i ++)
     {
      if(i==4)k1=4;
      else k1=5;
      for(j = 1;j < k1;j ++)
       {
        gc.gridx = gx[j-1];
        gc.gridy = gy[i-1];
        gc.fill = GridBagConstraints.NONE;
        s_number = String.valueOf(j+(i-1)*4);
        b[j+(i-1)*4] = new JButton(s_number,ic[0][j+(i-1)*4-1]);
        b[j+(i-1)*4].setPreferredSize(d);
        b[j+(i-1)*4].setFont(new Font("宋體",Font.PLAIN,0));
        gr.setConstraints(b[j+(i-1)*4],gc); 
        c.add(b[j+(i-1)*4]);
      
       }
     } 
     for(i = 1;i <16;i ++)
      b[i].addActionListener(this);           
  } 
  public void actionPerformed(ActionEvent e)
   {
      int j;
      JButton b = (JButton)e.getSource();   
      Point p = b.getLocation();
       Point p1 = null;
        for(j = -1;j < 2;j ++)
        {         
          if(p.y+j*90>283||p.y+j*90<13)
            continue;
          else
          {
            Component a = c.getComponentAt(p.x, p.y+j*90);
            if(a.getHeight()!=90)
              p1 = new Point(p.x,p.y+j*90);
          } 
        }
        for(j = -1;j < 2;j ++)
        { 
          if(p.x+j*90>287||p.x+j*90<17)
            continue;
                  
          else
          {
            Component a = c.getComponentAt(p.x+j*90, p.y);
            if(a.getHeight()!=90)       
               p1 = new Point(p.x+j*90,p.y);
          }       
        }
        if(p1!=null)
        b.setLocation(p1.x, p1.y);
       if(check()==true)
         JOptionPane.showMessageDialog(null, "恭喜您成功了");
   }
/*?生?机?*/
  public int[] randomnumber()
  {
     Random rd = new Random();
      int n[] = new int[15];
     for(int i = 0 ;i < 15;i ++)
      {
        int temp = rd.nextInt(15)+1;
        n[i] = temp;
        for(int j = 0;j < i;j ++)
          if(n[j]==temp)
          {       
            i--;
            break;
          }           
      }
    return n;
  }
  /*判?是否排序成功*/
  public boolean check()
  {
     Point location[] = new Point[16];
     boolean bo = false;
     int count=0;
     for(int i = 0;i < 4;i ++)
       for(int j = 0;j < 4;j ++)
        location[i*4+j] = new Point(17+j*90, 13+i*90);
    
     for(int i = 0;i < 15;i ++)
     {
       if(b[i+1].getLocation().x==location[i].x&&b[i+1].getLocation().y==location[i].y)
         count++;
       if(count==15)
         bo=true;
     }   
    return bo;
  }
  
  public static void main(String args[]) throws IOException
  {
    J_Puzzle app = new J_Puzzle();
    app.setDefaultCloseOperation(EXIT_ON_CLOSE);
    app.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3, Toolkit.getDefaultToolkit().getScreenSize().height/4);
    app.setSize(700,700);
    app.setVisible(true);
    app.setResizable(false);
  }
}