搜尋此網誌

2013年6月23日 星期日

程式註解 for 甜甜圈.

 import java.util.*;  
 public class A0918 {  
      public static void main(String[] args) {  
           Scanner scan = new Scanner(System.in);//讀取使用者的輸入  
           System.out.print("請輸入三個字串,每個字串中間以空白隔開: ");  
           String[] ary1 = scan.nextLine().split(" ");//以字串間的空白做分隔,把讀入的字串存入字串陣列.  
           System.out.print("請再輸入一次: ");  
           String[] ary2 = scan.nextLine().split(" ");  
           boolean isSame = true;//預設兩次輸入的都是一樣的字  
           for (int i = 0; i < 3 && i < ary1.length && i < ary2.length; i++) {//把兩個陣列中的,三個字拿來比對.  
                if (!ary1[i].equalsIgnoreCase(ary2[i])) {//假如不一樣.  
                     isSame = false;//設定不一樣.  
                     break;//跳離迴圈.  
                }  
           }  
           if (isSame)//假如一樣.  
                System.out.println("兩次輸入相同");  
           else//假如不一樣.  
                System.out.println("兩次輸入不相同");  
      }  
 }  

學c++ , Java 未來發展

C/ C++ ,  主要用在寫韌體或者是軟體和硬體做溝通(driver)的程式設計.

許多底層的功能都是用C/C++寫的 , Windows/Linux , 作業系統底層也是用這兩個語言去寫.

至於Java呢? 比較偏重於網路和多媒體的運用 , 因為Java有很多3rd party的套件,

你不必重新寫一個功能 , 只要在合法的範圍內, 使用這些第三方套件, 再搭配上

自己寫的函式, 就可以寫出一個應用程式.

這兩個語言各擅所長 , 只要你夠厲害 , 這兩個語言都很好.


2013年6月19日 星期三

英雄聯盟 特效介紹

特效

產生特效的來源有很多,使用技能、BUFF (增益效果)、召喚師技能、道具等都可以引發特效。特效會改變目標物的基礎狀態。為了能更加融入《英雄聯盟 LoL》的世界中,對特效的了解是不可或缺的。

護甲:表示目標抵抗傷害的能力。護甲越高,受到損傷越輕。可以用技能、道具、和 BUFF 來增加或減少目標的護甲
攻速:表示目標發動普通攻擊的速度。可以用技能和道具來增加或減少目標的攻速
傷害:表示目標對其攻擊對象造成傷害的能力。有些技能可以直接對攻擊對象造成損傷。另外也可以用技能、道具、和 BUFF 來增加或減少目標的傷害力
恐懼:恐懼效果會讓目標物在一段時間內失去控制,只會漫無目的地移動
金錢:英雄會在戰鬥中隨時間持續獲得金錢,當消滅敵人時更可瞬間得到大量金錢。可以用技能、道具、和天賦來讓英雄獲得金錢的速度加快
抓取:當發動此特效時,目標物會被強制拉近施法者身邊
治癒:讓目標回復生命。效果分為立即性 (立刻回復生命) 和持續性 (在一段時間內加快生命回復速度) 兩種。某些道具能降低目標所受的治癒效果
無敵:保護目標物免於一切傷害,但目標仍可能受到負面特效的影響
擊退:當發動此特效時,目標物會被強制推離施法者身邊
吸血:當英雄攻擊敵人時並造成傷害時,可將一定比例的傷害轉化為自己的生命值
回復:讓目標加速回復生命或魔力
復活:當英雄死亡時能立刻復活,或縮短死亡等候時間
沉默:使目標無法使用技能或召喚師技能
緩速:使目標的移動速度變慢
潛行:當發動此特效時,敵人將無法看見施法者的身影,除非敵方具有偵查隱形目標的特殊能力
暈眩:使目標在一段時間內完全無法移動或使用技能和召喚師技能,並可打斷任何施用中的技能或召喚師技能

來源:http://lol.garena.tw/learn/gameplay/ability-and-effect.php

猜數字範圍註解.

 import java.awt.event.ActionEvent;  
 import java.awt.event.ActionListener;  
 import javax.swing.JButton;  
 import javax.swing.JFrame;  
 import javax.swing.JLabel;  
 import javax.swing.JTextField;  
 class Frame extends JFrame implements ActionListener {  
      JTextField setnum = new JTextField();//範圍欄位  
      JTextField txtinput = new JTextField();//使用者輸入欄位  
      JTextField txtArea = new JTextField();//提示訊息欄位.  
      JLabel j = new JLabel("請輸入範圍0~?");  
      JLabel j2 = new JLabel("請輸入任意數:");  
      JButton OK = new JButton("go");//ok按鈕  
      int set, c, num;  
      int b = 0;  
      boolean setting = true;//已設定好範圍  
      boolean right = false;//答案錯誤  
      Frame() {  
           j.setBounds(20, 10, 100, 20);//設定標籤尺寸和範圍.  
           add(j);//把標籤加入frame  
           setnum.setBounds(110, 10, 80, 20);  
           setnum.addActionListener(this);//把範圍欄位加入行為監聽器  
           add(setnum);//把範圍欄位加入frame  
           j2.setBounds(20, 50, 100, 20);  
           add(j2);  
           txtinput.setBounds(110, 50, 80, 20);  
           txtinput.addActionListener(this);  
           add(txtinput);  
           txtinput.setEditable(false);  
           txtArea.setBounds(20, 80, 170, 20);  
           txtArea.setEditable(false);  
           add(txtArea);  
           OK.addActionListener(this);  
           OK.setBounds(120, 110, 70, 20);  
           add(OK);  
           setTitle("終極密碼");//設定frame名稱.  
           setLayout(null);  
           setBounds(200, 200, 220, 180);  
           setVisible(true);  
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
      }  
      public void actionPerformed(ActionEvent e) {  
           if (e.getSource() == OK || e.getSource() == txtinput//當按下ok 或者 使用者觸發了 範圍設定欄位, 或是輸入猜測數字,則執行下列程式.  
                     || e.getSource() == setnum) {  
                if (setting) {//假如已設定範圍.  
                     set = Integer.parseInt(setnum.getText());//讀入設定的數字.  
                     c = set;//把數字設給c變數,  
                     if (set <= 1) {//假如設定的數字小於1  
                          txtArea.setText("請輸入大於1的任意數字");  
                     } else {  
                          num = (int) (Math.random() * c - 1) + 1;//亂數產生數字.  
                          setting = false;//因為已經設定了正確的範圍, 所以把範圍設定旗標, 設為false,   
                          txtArea.setText("請猜0~" + set + "的任意數字");  
                          txtinput.setEditable(true);//把欄位設為不可編輯.  
                          setnum.setEditable(false);  
                     }  
                } else {  
                     int g = Integer.parseInt(txtinput.getText());//把使用者讀入的字串轉為數字存到變數g.  
                     if (g >= c || g <= b) {//假如數字小於0或是超出設定的範圍.  
                          txtArea.setText("超出範圍" + b + "~" + c + "請從新輸入");  
                     } else {  
                          if (g == num) {  
                               txtArea.setText("恭喜答對拉!");  
                               right = true;  
                               OK.setEnabled(false);  
                          } else if (g > num) {  
                               c = g;  
                               txtArea.setText("錯瞜~小一些" + b + "~" + c);  
                               txtinput.setText("");  
                          } else if (g < num) {  
                               b = g;  
                               txtArea.setText("錯瞜~大一些" + b + "~" + c);  
                               txtinput.setText("");  
                          }  
                     }  
                }  
           }  
      }  
 }  
 public class Davinci_Code {  
      public static void main(String[] args) {  
           new Frame();  
      }  
 }  

2013年6月18日 星期二

數位時鐘

 import java.awt.FlowLayout;  
 import java.awt.event.ActionEvent;  
 import java.awt.event.ActionListener;  
 import java.text.SimpleDateFormat;  
 import java.util.Date;  
 import javax.swing.JFrame;  
 import javax.swing.JLabel;  
 import javax.swing.JPanel;  
 import javax.swing.Timer;  
 public class DigitalClock extends JLabel {  
      private String pattern;  
      private Timer timer;  
      private int delay;  
      public DigitalClock(String pattern) {  
           this.pattern = pattern;  
           this.delay = 1000;  
           createTimer();  
           timer.start();  
      }  
      public DigitalClock(String pattern, int delay) {  
           this.pattern = pattern;  
           this.delay = delay;  
           createTimer();  
           timer.start();  
      }  
      public DigitalClock() {  
           pattern = "hh:mm:ss a";  
           this.delay = 1000;  
           createTimer();  
           timer.start();  
      }  
      private void createTimer() {  
           timer = new Timer(delay, new ActionListener() {  
                public void actionPerformed(ActionEvent arg0) {  
                     setText(new SimpleDateFormat(pattern).format(new Date()));  
                }  
           });  
      }  
      public static void main(String[] args) {  
           JFrame frame = new JFrame();  
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
           frame.setBounds(100, 100, 229, 102);  
           JPanel contentPane = new JPanel();  
           frame.setContentPane(contentPane);  
           contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));  
           DigitalClock digitalClock = new DigitalClock();  
           contentPane.add(digitalClock);  
           frame.setVisible(true);  
      }  
 }  
參考來源 : http://tw.knowledge.yahoo.com/question/question?qid=1013061801638 , strawman

2013年6月16日 星期日

求 JAVA 程式碼註解

 import java.util.Scanner;  
 public class GuessNumber03 {  
      public static void main(String[] args) {  
           int a, b, c, d;// 四位數字a , b , c , d  
           a = (int) (Math.random() * (9)) + 1;// 1~9 , 首位數不為零.  
           b = (int) (Math.random() * (10));// 0~9  
           c = (int) (Math.random() * (10));// 0~9  
           d = (int) (Math.random() * (10));// 0~9  
           String str = String.valueOf(a) + String.valueOf(b) + String.valueOf(c)  
                     + String.valueOf(d);// 把電腦產生的隨機數字 , 組合成字串.  
           String ans = "";// 儲存使用者猜的答案  
           Scanner sc = new Scanner(System.in);// 從命令列讀取輸入的值.  
           boolean check = false;// 預設為沒有猜到答案.  
           System.out.println("請輸入四個數字,數字對且位置正確得A,位置錯誤得B");  
           int count = 0;// 紀錄猜的次數  
           while (++count <= 10) { // 限制猜的次數到10次沒答對自動結束  
                while (!check) {// 如果沒答對 , 則繼續猜  
                     ans = sc.next();// 讀取使用者輸入的數字.  
                     String[] ansTmp = ans.split("");// 把答案abcd,分開存入暫存的字串陣列.  
                     String[] inTmp = str.split("");// 把電腦的答案,分開存入暫存的字串陣列.  
                     int A = 0;  
                     int B = 0;  
                     for (int i = 0; i < ansTmp.length; i++) {// 逐各取出使用者的答案.  
                          for (int j = 0; j < ansTmp.length; j++) {// 逐各取出使用者的答案 ,  
                                                                                 // 拿來和電腦的答案比對.  
                               if (inTmp[j].equals(ansTmp[i]) && i == j)// 假如位置一樣且數字一樣  
                                                                                      // , a++  
                                    A++;  
                               else if (inTmp[j].equals(ansTmp[i]) && i != j)// 有數字但是位置不一樣.b++  
                                    B++;  
                          }  
                     }  
                     System.out.println("判斷結果" + A + "A" + B + "B");  
                     if (A == 4)// 假如4A,  
                          check = true;// 設定猜到答案  
                     if (A == 4 & B == 0)// 假如4A且B等於零 , 則印出,恭喜你,答對ㄌ  
                          System.out.println("恭喜你,答對ㄌ");  
                     break;  
                }  
           }  
           System.out.println("遊戲結束");  
      }  
 }  

Java多重按鍵偵測.

 import java.awt.Dimension;  
 import java.awt.EventQueue;  
 import java.awt.event.KeyAdapter;  
 import java.awt.event.KeyEvent;  
 import javax.swing.JFrame;  
 import javax.swing.JLabel;  
 import javax.swing.JPanel;  
 public class MKPD extends JFrame  
 {  
   public MKPD()  
   {  
    super("MKPD");  
    setDefaultCloseOperation(EXIT_ON_CLOSE);  
    setContentPane(new KeyPanel());  
    pack();  
    setVisible(true);  
   }  
   public static void main(String[] args)  
   {  
    Runnable r = new Runnable()  
           {  
            public void run()  
            {  
              new MKPD();  
            }  
           };  
    EventQueue.invokeLater(r);  
   }  
 }  
 class KeyPanel extends JPanel  
 {  
   private enum GameState { MOVED, JUMPED, MOVED_THEN_JUMPED,  
               JUMPED_THEN_MOVED };  
   private GameState gs = null;  
   private boolean rightPressed = false;  
   private boolean upPressed = false;  
   private JLabel lblStatus = null;  
   KeyPanel()  
   {  
    KeyAdapter ka = new KeyAdapter()  
            {  
              public void keyPressed(KeyEvent ke)  
              {  
               handleKeyPress(ke);  
              }  
              public void keyReleased(KeyEvent ke)  
              {  
               handleKeyRelease(ke);  
              }  
            };  
    addKeyListener(ka);  
    lblStatus = new JLabel("", JLabel.CENTER);  
    lblStatus.setPreferredSize(new Dimension(200, 50));  
    add(lblStatus);  
    setFocusable(true);  
    requestFocus();  
   }  
   private void handleKeyPress(KeyEvent ke)  
   {  
    int keyCode = ke.getKeyCode();  
    if (keyCode == KeyEvent.VK_RIGHT)  
      rightPressed = true;  
    else  
    if (keyCode == KeyEvent.VK_UP)  
      upPressed = true;  
    updateState();  
    updateLabel();  
   }  
   private void handleKeyRelease(KeyEvent ke)  
   {  
    int keyCode = ke.getKeyCode();  
    if (keyCode == KeyEvent.VK_RIGHT)  
      rightPressed = false;  
    else  
    if (keyCode == KeyEvent.VK_UP)  
      upPressed = false;  
    updateState();  
    updateLabel();  
   }  
   private void updateLabel()  
   {  
    if (gs == null)  
    {  
      lblStatus.setText("");  
      return;  
    }  
    switch (gs)  
    {  
      case MOVED_THEN_JUMPED:  
       lblStatus.setText("Moved and then jumped");  
       break;  
      case JUMPED_THEN_MOVED:  
       lblStatus.setText("Jumped and then moved");  
       break;  
      case MOVED:  
       lblStatus.setText("Moved");  
       break;  
      case JUMPED:  
       lblStatus.setText("Jumped");  
    }  
   }  
   private void updateState()  
   {  
    if (rightPressed && upPressed)  
    {  
      if (gs == GameState.MOVED)  
       gs = GameState.MOVED_THEN_JUMPED;  
      else  
      if (gs == GameState.JUMPED)  
       gs = GameState.JUMPED_THEN_MOVED;  
    }  
    else  
    if (rightPressed)  
      gs = GameState.MOVED;  
    else  
    if (upPressed)  
      gs = GameState.JUMPED;  
    else  
      gs = null;  
   }  
 }  

2013年6月15日 星期六

猜拳 麻煩幫我每句做編譯 JAVA

 import java.util.*;  
 public class Sample {  
      public static void main(String[] args) {  
           String[] gg = { "剪刀", "石頭", "布" }; // 猜拳遊戲的三種拳.  
           Scanner scan = new Scanner(System.in);// 讀取命令列輸入的選項  
           Random rand = new Random(); // 隨機數字產生器  
           int p = 0, c = 0; // p:人贏的次數 , c:電腦贏的次數   
           while (p < 2 && c < 2) {//只要電腦或是人, 其中沒有任何一方贏兩次的話, 繼續執行猜拳的迴圈.  
                System.out.println("1.剪刀 2.石頭 3.布"); //印出遊戲的玩法.  
                int player = scan.nextInt() - 1;//使用者讀入的數字減-1  
                int comp = rand.nextInt(3);//電腦傳出0-2之中的其中一個數字.  
                System.out.println("你出" + gg[player]);//顯示人出的拳  
                System.out.println("電腦出" + gg[comp]);//顯示電腦出的拳  
                switch (player - comp) {//拿人的數字減去電腦的數字去比較,  
                case -2://人出剪刀 贏 電腦布 ,   
                     p++;  
                     break;  
                case -1://人出剪刀輸電腦石頭 , 人出石頭輸電腦布.  
                     c++;  
                     break;  
                case 1://人出石頭贏電腦剪刀, 人出布贏電腦石頭.  
                     p++;  
                     break;  
                case 2://人出布輸電腦剪刀.  
                     c++;  
                     break;  
                }  
           }  
           if (p == 2)//假如人贏兩次,印出你贏了  
                System.out.println("你贏了");  
           else //若電腦先贏兩次的話 , 因為迴圈結束,所以你輸了.  
                System.out.println("你輸了");  
      }  
 }  

2013年6月14日 星期五

猜數字遊戲

 import java.io.*;  
 public class GuessNumber {  
  private int[] answerSet = new int[10*9*8*7];  
  public GuessNumber() {  
   int index=0;  
   for (int n1=0; n1<10; n1++) {  
    for (int n2=0; n2<10; n2++) {  
     if ( n2 == n1) continue;  
     for (int n3=0; n3<10; n3++) {  
      if (n3 == n2 || n3 == n1 ) continue;  
      for (int n4=0; n4<10; n4++) {  
       if ( n4==n1 || n4==n2 || n4==n3) continue;  
       answerSet[index++] = n1*1000+n2*100+n3*10+n4;  
      }  
     }  
    }  
   }  
   guess();  
  }  
  private void input(int number) {  
   System.out.print( transform(number) + ", ?A?B = ");  
   int a=0,b=0;  
   try {  
    BufferedReader br = new BufferedReader (new InputStreamReader (System.in));  
    String str = br.readLine();  
    while ( str.length() != 4 ) {  
     System.out.println("輸入錯誤, 格式為 ?A?B ");  
     System.out.print( transform(number) + ", ?A?B = ");  
     str = br.readLine();  
    }  
    a = str.charAt(0) - '0';  
    b = str.charAt(2) - '0';   
   }  
   catch (IOException e) {  
    System.out.println("輸入時發生不可預期的錯誤...");  
    System.exit(0);  
   }   
   if (a == 4) {  
    System.out.println("The answer is " + transform(number));   
    System.exit(0);  
   }  
   reduce(number,a,b);  
  }  
  private void guess() {  
   for (int i=0; i< answerSet.length; i++) {  
    if ( answerSet[i] == -1 ) continue;  
    input ( answerSet[i]);  
   }  
   System.out.println("你騙人!! 根本沒這數字, ***!");  
  }  
  private void reduce(int number, int a, int b) {  
   for (int i=0; i< answerSet.length; i++) {  
    if ( answerSet[i] == -1) continue;  
    if (getA(number,answerSet[i]) != a || getB(number,answerSet[i]) != b )  
     answerSet[i] = -1;  
   }  
   for (int i=0; i < answerSet.length; i++) {  
    if ( answerSet[i] == -1) continue;  
    System.out.print( transform(answerSet[i]) + " ");  
   }   
   System.out.println();   
  }  
  private int getA(int n1, int n2) {  
   int a=0;  
   String str1 = transform(n1);  
   String str2 = transform(n2);  
   for (int i=0; i<4; i++) {  
    if (str1.charAt(i) == str2.charAt(i) )  
     a++;  
   }  
   return a;  
  }    private String transform (int n) {  
   if ( n < 1000 )  
    return "0" + n;  
   else  
    return ""+n;  
  }  
  private int getB(int n1, int n2) {  
   int b = 0;  
   String str1 = transform(n1);  
   String str2 = transform(n2);  
   for (int i=0; i < 4; i++) {  
    for (int j=0; j<4 ; j++) {  
     if ( i == j) continue;  
     if ( str1.charAt(i) == str2.charAt(j) )  
      b++;  
    }  
   }  
   return b;  
  }  
  public static void main (String [] args) {  
   GuessNumber app = new GuessNumber();  
  }  
 }  
參考來源

2013年6月6日 星期四

Java字串比較

第一個true會成立, 是因為 equals這個api就是用來測試兩個字串是否相等, 所使用的. 第二個true會成立, 是因為 Java內部有一個字串常數池 , test2 和 test都是指到參數池裡頭同一個"test"字串 , 所以會相等. 第三個false , 是因為test3這個變數, 指到了一個新的物件, 雖然新物件的值也是"test" , 但是和物件常數池裡的"test"物件是不相同. 所以為false.
 public class StringComparison {  
      public static void main(String[] args)  
      {  
           String test = " test ";  
           String test2 = " test ";  
           String test3 = new String("test");  
           System.out.println(test.equals(test2));  
           System.out.println(test == test2);  
           System.out.println(test == test3);  
      }  
 }