官术网_书友最值得收藏!

  • 實戰Java程序設計
  • 北京尚學堂科技有限公司
  • 2558字
  • 2019-10-16 10:45:14

1.8 30分鐘完成桌球小游戲項目

我們秉承“快速入門、快速實戰”的理念開發這套教材,就是希望讀者在學習過程中能盡快進入實戰環節,盡快介入項目,使學習更有興趣,更容易產生成就感,從而帶來更大的學習動力。

如下的小項目,對于第一次接觸編程的讀者從理解上會有難度。但是這個項目不在于讓大家理解代碼本身,而是“體驗敲代碼的感覺”。

【項目】桌球游戲小項目

練習目標:

(1)找到敲代碼的感覺。

(2)收獲敲代碼的興趣。

(3)做出效果,找到自信。

(4)從一開始就學會調試錯誤。

(5)掌握Java代碼的基本結構。

項目需求:

桌球在球桌中按照一定線路和角度移動,遇到邊框會自動彈回。桌球游戲的運行結果如圖1-39所示。

圖1-39 桌球游戲的運行結果

要求:

即使看不太懂,讀者也要照著輸入游戲代碼,至少5遍。要求所有字符和示例文件一致。如果運行時報異常,請細心看所在行和示例代碼有何區別。初學者現階段不需要理解代碼的語法功能,只要按照代碼結構輸入代碼,經過調試能夠實現代碼的正常運行即可。

下面將分成四個步驟來實現桌球游戲。

第一步:創建項目和窗口。

第二步:加載兩張圖片。

第三步:實現動畫,讓小球沿著水平方向移動并做邊界檢測。

第四步:實現小球沿著任意角度飛行(本示例會用到與初中學習過的三角函數有關的知識)。

示例及代碼和圖片資源的下載地址為http://www.sxt.cn/Java_jQuery_in_action/Billiards_Games.html

第一步:創建項目和窗口。

創建項目并復制圖片:在項目名MyPro01上右擊,在快捷菜單中選擇New→Folder命令,創建一個名稱是images的文件夾,并將兩張圖片復制到該目錄下。然后在src目錄下創建類BallGame.java。在Eclipse下的項目結構如圖1-40所示。

圖1-40 桌球游戲的項目結構

繪制窗口的代碼如示例1-3所示。

【示例1-3】桌球游戲代碼——繪制窗口

import javax.swing.JFrame;
public class BallGame extends JFrame {
      //窗口加載
      void launchFrame() {
      setSize(300, 300);
      setLocation(400, 400);
      setVisible(true);
      }
          //main方法是程序執行的入口
          public static void main(String[ ] args) {
          System.out.println("我是尚學堂高淇,這個游戲項目讓大家體驗編程的快感,"
          + "寓教于樂!");
          BallGame game=new BallGame();
          game.launchFrame();
          }
          }

執行結果如圖1-41所示。

圖1-41 示例1-3運行結果

第二步:加載兩張圖片。

加載兩張圖片:在BallGame類中添加小球和桌面的路徑,并指定小球出現在窗口的初始位置。然后添加paint方法,加載小球和桌面。代碼如示例1-4所示。

【示例1-4】桌球游戲代碼——加載圖片

import java.awt.*;
import javax.swing.JFrame;
public class BallGame extends JFrame {
      //添加小球和桌面圖片的路徑
      Image ball=Toolkit.getDefaultToolkit().getImage("images/ball.png");
      Image desk=Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
      //指定小球的初始位置
double  x=100; //小球的橫坐標
double  y=100; //小球的縱坐標
      //畫窗口的方法:加載小球與桌面
      public void paint(Graphics  g){
      System.out.println("窗口被畫了一次!");
            g.drawImage(desk, 0, 0, null);
            g.drawImage(ball, (int)x, (int)y, null);
            }
            //窗口加載
            void launchFrame(){
            setSize(856,500);
            setLocation(50,50);
            setVisible(true);
            }
            //main方法是程序執行的入口
            public static void main(String[ ] args){
            System.out.println(" 我是尚學堂高淇,這個游戲項目讓大家體驗編程的快感,"
            + "寓教于樂!");
            BallGame game=new BallGame();
            game.launchFrame();
            }
            }

執行結果如圖1-42所示。

圖1-42 示例1-4運行效果

注意

由于懶加載問題,有可能出現第一次加載圖片無效的情況,此時最小化窗口再重新打開即可。在完成第三步后,就完全不存在這個問題了。

第三步:實現動畫。

實現動畫,讓小球沿著水平方向移動并做邊界檢測。要實現動畫效果的關鍵是改變小球的坐標,并且要不停地重畫窗口來更新小球的坐標;邊界檢測用于判斷小球的坐標是否超出桌面的范圍,如果超出則要改變小球原來的運動方向。代碼如示例1-5所示。

【示例1-5】桌球游戲代碼——實現水平方向來回飛行

import java.awt.*;
import javax.swing.JFrame;
public class BallGame extends JFrame {
      //添加小球和桌面圖片的路徑
      Image ball=Toolkit.getDefaultToolkit().getImage("images/ball.png");
      Image desk=Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
      //指定小球的初始位置
double  x=100;              //小球的橫坐標
double  y=100;              //小球的縱坐標
boolean  right=true;      //判斷小球的方向
      //畫窗口的方法:加載小球與桌面
      public void paint(Graphics  g){
      System.out.println("窗口被畫了一次!");
      g.drawImage(desk, 0, 0, null);
      g.drawImage(ball, (int)x, (int)y, null);
      //改變小球坐標
if(right){
      x=x +10;
      }else{
      x=x -10;
      }
      //邊界檢測
      //856是窗口寬度,40是桌子邊框的寬度,30是小球的直徑
if(x>856-40-30){
      right=false;
      }
if(x<40){
      right=true;
      }
      }
      //窗口加載
      void launchFrame(){
      setSize(856,500);
      setLocation(50,50);
      setVisible(true);
      //重畫窗口,每秒畫25次
while(true){
      repaint();               //調用repaint方法,窗口即可重畫
try{
      Thread.sleep(40);     //40ms,1s=1000ms。大約一秒畫25次窗口
      }catch(Exception e){
      e.printStackTrace();
      }
      }
      }
      //main方法是程序執行的入口
      public static void main(String[ ] args){
      System.out.println(" 我是尚學堂高淇,這個游戲項目讓大家體驗編程的快感,"
      + "寓教于樂!");
      BallGame game=new BallGame();
      game.launchFrame();
      }
      }

第四步:實現小球沿任意角度飛行。

實現小球沿著任意角度飛行:此時小球的運動方向不能再單純使用right來表示,需要一個表示角度的變量degree。小球坐標的改變也要依據這個角度。代碼如示例1-6所示(為了保存第三步的代碼,新創建了一個類BallGame2)。

【示例1-6】桌球游戲代碼——實現任意角度飛行

import java.awt.*;
import javax.swing.JFrame;
public class BallGame2 extends JFrame {
      //添加小球和桌面圖片的路徑
      Image ball=Toolkit.getDefaultToolkit().getImage("images/ball.png");
      Image desk=Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
      //指定小球的初始位置
double x=100;               //小球的橫坐標
double y=100;               //小球的縱坐標
double degree=3.14/3;     //弧度:小球的運動角度,此處就是60度
      //畫窗口的方法:加載小球與桌面
      public void paint(Graphics  g){
      System.out.println("窗口被畫了一次!");
      g.drawImage(desk,0,0, null);
      g.drawImage(ball, (int)x, (int)y, null);
      //根據角度degree改變小球坐標
      x= x+ 10*Math.cos(degree);
      y= y +10*Math.sin(degree);
      //邊界檢測:碰到上下邊界
      //500是窗口高度;40是桌子邊框,30是球直徑;最后一個40是標題欄的高度
if(y>500-40-30||y<40+40){
      degree=-degree;
      }
      //邊界檢測:碰到左右邊界
      //856是窗口寬度,40是桌子邊框的寬度,30是小球的直徑
if(x<40||x>856-40-30){
      degree=3.14- degree;
      }
      }
      //窗口加載
      void launchFrame(){
      setSize(856,500);
      setLocation(50,50);
      setVisible(true);
      //重畫窗口,每秒畫25次
while(true){
      repaint();               //調用repaint方法,窗口即可重畫
try{
      Thread.sleep(40);     //40ms,1s=1000ms。大約一秒畫25次窗口
      }catch(Exception e){
      e.printStackTrace();
      }
      }
      }
      //main方法是程序執行的入口
      public static void main(String[ ] args){
          System.out.println(" 我是尚學堂高淇,這個游戲項目讓大家體驗編程的快感,"
          + "寓教于樂!");
          BallGame2 game=new BallGame2();
          game.launchFrame();
          }
          }

本章總結

(1)所有編程語言的最終目的都是提供一種“抽象”方法。抽象的層次越高,越接近人的思維;越接近人的思維,越容易使用。

(2)越高級的語言越容易學習。當然,這只意味著入門容易,不意味著成為高手容易,想成為高手仍然需要修煉。

(3)Java的核心優勢是跨平臺。跨平臺是靠JVM(虛擬機)實現的。

(4)Java各版本的含義:

■ Java SE(Java Standard Edition)標準版,定位于個人計算機的應用。

■ Java EE(Java Enterprise Edition)企業版,定位于服務器端的應用。

■ Java ME(Java Micro Edition)微型版,定位于消費電子產品的應用。

(5)Java程序的開發運行過程依次為:編寫代碼、編譯和解釋運行。

(6)JDK用于開發Java程序,JRE是Java運行環境;JVM是JRE的子集,JRE是JDK的子集。

(7)JDK的配置需要新建JAVA_HOME環境變量和修改Path環境變量。

(8)Java是面向對象的語言,所有代碼必須位于類里面。main方法是Java應用程序的入口方法。

(9)常見的Java集成開發環境有三個:Eclipse、IntelliJ IDE和NetBeans。

本章作業

一、選擇題

1.以下( )不是Java的特點(選擇一項)。

A.平臺無關性

B.高可靠性和安全性

C.指針運算

D.分布式應用和多線程

2.以下選項中關于Java跨平臺原理的說法正確的是( )(選擇二項)。

A.Java源程序要先編譯成與平臺無關的字節碼文件(.class),然后字節碼文件再被解釋成機器碼運行

B.Java語言只需要編譯,不需要進行解釋

C.Java虛擬機是運行Java字節碼文件的虛擬計算機。不同平臺的虛擬機是不同的

D.Java語言具有一次編譯,隨處運行的特點,可以在所有的平臺上運行

3.以下選項中,對一個Java源文件進行正確編譯的語句是( )(選擇一項)。

A.java Test

B.java Test.class

C.javacTest

D.javacTest.java

4.在Java中,源文件Test.java中包含如下代碼,則程序編譯運行的結果是( )(選擇一項)。

public class Test {
    public static void main(String[ ] args) {
    system.out.println("Hello! ");
    }
    }

A.輸出:Hello!

B.編譯出錯,提示“無法解析system”

C.運行正常,但沒有輸出任何內容

D.運行時出現異常

5.有一段Java程序,其中public類名是A1,那么保存它的源文件名可以是( )(選擇一項)。

A.A1.java

B. A1.class

C.A1

D.以上都不對

二、簡答題

1.計算機語言發展史主線。

2.Java跨平臺的實現原理。

3.JDK、JRE、JVM的區別和聯系。

4.Java語言的開發和執行過程。

5.環境變量Path的作用和配置。

三、編碼題

1.使用記事本編寫Java程序(重點練習打印語句System.out.println( )),開發學生管理系統主菜單界面。運行結果如圖1-43所示。

圖1-43 主菜單界面

2.使用Eclipse編寫Java程序,打印九九乘法表的前四行,如圖1-44所示。提示:使用System.out.println( )語句打印各行數據。

圖1-44 程序的打印結果

主站蜘蛛池模板: 永平县| 庆元县| 工布江达县| 屏东县| 老河口市| 航空| 翼城县| 石棉县| 郴州市| 闽清县| 郑州市| 西吉县| 三亚市| 张掖市| 梁河县| 台东市| 雅江县| 日土县| 湖南省| 即墨市| 尚义县| 德庆县| 肇东市| 新竹县| 普格县| 广宗县| 汶川县| 宜丰县| 黎川县| 醴陵市| 孝感市| 开江县| 扎鲁特旗| 龙井市| 辽阳市| 平乡县| 延长县| 岐山县| 弋阳县| 磴口县| 揭阳市|