### **1.1 項目目標**
**1.1.1 知識目標**
(1)Java基礎語法
(2)字符串和數組
(3)類和對象
**1.1.2 能力目標**
(1)熟練使用Java基礎語言進行編碼
(2)熟練對字符串和數組進行操作
(3)熟練掌握類的定義和對象的創建
**1.1.3 素養目標**
(1)養成良好的類設計規范,類命名規范,屬性命名規范,方法命名規范等習慣
(2)培養編程的計算思維,可以使用基礎數據知識解決項目中的計算問題
(3)掌握類的抽象,對象的創建過程。
### **1.2 案例描述**
  通過Java控制臺程序完成一個五子棋游戲,能夠實現黑白子交互下棋,程序自動判斷輸贏(需要完成判斷輸贏的算法),主要運用控制臺輸入坐標來實現。本系統采用數組進行數據管理(隨著技術學習的深入,后續可以使用集合、文件或數據庫進行數據管理)。
  系統主要實現功能:
(1)程序在設計初就定義黑棋先行,白棋隨后。從第一個棋子開始交互順序落子。
(2)通過坐標索引算出最先在棋盤的橫向、豎向、斜向形成連續的相同色五棋子的一方為勝利。
(3)為保持界面潔凈設為游戲界面設為固定。黑白交互下完棋子刷新界面。
(4)在游戲過程中或下完時可選擇重新開始。
(5)贏家對話輸出信息提示,選擇游戲結束還是重新開始。
(6)游戲實現了基本的單機雙人對戰功能。
### **1.3 實現效果**
  五子棋游戲的實現效果如下所示:

圖1 開始界面

圖2退出界面

圖3 幫助界面

圖4 選擇開始界面

圖5 下棋界面

圖6 獲勝界面
### **1.4 知識點**
  本實訓節點涉及到的知識點如下:
(1)Java基礎語法
(2)字符串數組
(3)類和對象
### **1.5 案例分析**
#### **1.5.****1****功能劃分**
<table>
<tr>
<td>功能點</td>
<td>難度</td>
<td>備注</td>
</tr>
<tr>
<td>選擇游戲功能</td>
<td> ★★</td>
<td> </td>
</tr>
<tr>
<td>下棋功能</td>
<td>★★★★★</td>
<td> </td>
</tr>
<tr>
<td>判斷獲勝功能</td>
<td>★★★★</td>
<td> </td>
</tr>
<tr>
<td>退出游戲功能</td>
<td>★★</td>
<td> </td>
</tr>
</table>
#### **1.5.****2****概要設計**
1.設計五子棋類FiveChess
2.設計坐標點類Point
3.設計業務類游戲類Game
4.設計界面類MainView
5.設計輸入工具類InputUtil
#### **1.5.****3****詳細設計**

類圖
### **1.6 實現要點**
  五子棋游戲設計與實現,請參照編碼命名規范進行設計與實現。
項目名稱:FiveChessGame
包名稱:com.yiniuedu.cms.fivechessgame
1.定義五子棋類FiveChess,包含行、列、方向和存放數據的數組屬性,然后分辨實現初始化方法、打印下棋過程界面、獲取用戶輸入的方法、下棋位置方法、獲勝方法、有效性驗證方法、數據轉化方法和是否勝利方法。
2.定義坐標點類Point,包含x坐標和y坐標兩個屬性。
3.定義業務類游戲類Game,包含FiveChess類型屬性,包含幫助方法、開始游戲方法和下棋方法。
4.定義界面類MainClass,實現在控制臺終端界面上打印輸出五子棋棋盤和下棋位置。
5.定義輸入工具類InputUtil,使用Scanner類,實現獲取int類型和獲取字符串類型數據的兩個方法。
### **1.7 重難點解析**
  本項目的重點是熟練使用Java基礎語法,尤其是把基礎教育中數學知識運用到項目中解決問題,掌握Java的數據類型和運算,熟練使用流程控制語句,把數據暫存到數組中,然后對數組中的數據進行增刪改查操作。類的抽象和類的定義。對象的創建。
  本項目的難點是如何實現把不同顏色的棋子存放到二維數組指定位置,然后把二維數組的數據按照指定格式輸出。其次是如何實現判斷8個方向上有連續5個顏色相同棋子,從而判斷出獲勝一方。理解面向過程編程向面向對象編程的轉變。
### **1.8 關鍵代碼**
```
//五子棋類的方法
//下棋的方法
public void playChess() {
init();
while (true) {
printBord();
Point p = null;
if (turn) {
System.out.println("請白棋下,");
p = getInput();
bord[p.getX()][p.getY()] = 1;
} else {
System.out.println("請黑棋下,");
p = getInput();
bord[p.getX()][p.getY()] = -1;
}
if (isWin(p.getX(), p.getY(), bord[p.getX()][p.getY()])) {
printBord();
announceWinner();
init();
break;
}
turn = !turn;
}
}
// 8個方向判斷是否同一顏色
public boolean isWin(int x, int y, int type) {
// 八個方向搜索
// 往 1 8方向
int count = 0;
int k = 0;
int l = 0;
// 往 1 方向算
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
k--;
l--;
}
// 往8方向算
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
k++;
l++;
}
if (count >= 6 || count <= -6) {
return true;
}
// 往 2 方向算
count = 0;
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
k--;
}
// 往7方向算
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
k++;
}
if (count >= 6 || count <= -6) {
return true;
}
// 往3 方向算
count = 0;
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
k--;
l++;
}
// 往6方向算
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
k--;
l++;
}
if (count >= 6 || count <= -6) {
return true;
}
// 往 4方向算
count = 0;
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
l++;
}
// 往5方向算
k = x;
l = y;
for (int i = 0; i < 5; i++) {
if (validation(k, l, type)) {
count++;
} else {
break;
}
l--;
}
if (count >= 6 || count <= -6) {
return true;
}
return false;
}
```
### **1.9 案例總結**
  本項目可以在面向過程編程思想的基礎上實現,結合面向對象思想的編程中類和對象的概念,用來區分兩種編程思想的不同之處,同時也可以很好的體現出面向對象編程的優勢。
代碼獲取請加微信:yiniujiaoyu
- Java基礎企業實踐篇
- 一、Java開發環境搭建
- 1.Java的前世今生
- 2.JVM、JRE和JDK的概念及關系
- 3.Java的跨平臺特性
- 4.Java運行機制
- 5.環境搭建
- 二、程序設計基礎
- 1.掌握代碼基本結構
- 2.熟練寫注釋
- 3.掌握標識符的使用
- 4.掌握關鍵字的使用
- 5.掌握常量的使用
- 6.認識變量
- 7.掌握數據類型的使用
- 8.掌握類型轉換
- 9.掌握作用域
- 10.掌握運算符的使用
- 11.掌握順序結構的使用
- 13.掌握循環結構的使用
- 14.掌握方法的使用
- 15.掌握數組的使用
- 16.掌握修飾符的使用
- 三、面向對象語言基礎
- 1.對象的概念
- 2.類的概念
- 3.類和對象的關系
- 4.面向過程和面向對象的區別
- 5.實訓項目:五子棋游戲設計與實現
- 6.案例練習
- 案例一:地址類
- 案例二:員工類
- 案例三:動物狗類
- 案例四:銀行賬戶類
- 案例五:圖書類
- 四、面向對象概念的理解,類和對象
- 1.類的構成
- 2.屬性
- 3.方法和構造方法
- 4.重載和重寫
- 5.變量的作用域
- 6.成員變量和局部變量
- 7.靜態塊的作用和加載機制
- 8.類生成對象的過程
- 9.對象參數傳遞過程
- 五、封裝,繼承,多態
- 1.理解封裝、繼承、多態的概念和目的
- 2.理解封裝、繼承、多態的實現方法和步驟
- 3.掌握Java訪問修飾符
- 4.理解什么是內部類
- 5.理解this、static、final關鍵字
- 6.實訓項目:租車系統設計與實現
- 六、抽象類和接口
- 1.理解抽象類的概念,為什么要有抽象類
- 2.掌握抽象類的聲明格式
- 3.理解什么是接口,為什么要有接口
- 4.掌握接口的定義與實現
- 5.理解接口和抽象類的區別
- 6.實訓案例
- 案例一:電腦模型(OO實現)
- 案例二:銀行轉賬(OO實現)
- 七、Object類和常用API
- 1.理解什么是API
- 2.掌握Java?API文檔的使用
- 3.理解Java類庫的概念
- 4.掌握Object類并掌握該類中的方法
- 5.掌握String類的應用
- 6.掌握StringBuffer、StringBuilder類的應用
- 7.掌握基本數據類型及其包裝類
- 8.掌握Java日期類
- 八、泛型、集合
- 1.理解泛型的概念和實現語法
- 2.理解Java集合框架三大接口:List、Set、Map
- 3.掌握List接口的實現類ArrayList、LinkedList的使用
- 4.掌握HashSet的使用
- 5.掌握HashMap的使用
- 6.掌握Collections類中提供的靜態方法
- 九、異常和IO技術
- 1.理解異常的概念
- 2.掌握異常的分類和Java常見的異常
- 3.理解掌握Java的異常處理機制
- 4.掌握自定義異常
- 5.理解文件系統和File類
- 6.理解I/O概念和分類
- 7.掌握常見的I/O流對象
- 8.掌握文件流與緩沖流
- 十、泛型的延伸
- 1.理解并掌握泛型的基本原理與具體運作過程
- 2.掌握泛型類的定義
- 3.掌握泛型方法的定義
- 十一、流的延伸
- 1.理解數據流的作用
- 2.掌握對象流的作用
- 3.理解對象序列化的概念
- 5.理解線程死鎖
- 4.理解對象反序列化的概念
- 十二、反射技術
- 1.理解反射的概念
- 2.理解反射的工作原理
- 3.理解Reflection API中相關類的作用
- 十三、多線程技術
- 1.理解多線程的概念
- 2.理解線程的狀態與生命周期
- 3.理解多線程通信
- 4.理解線程同步
- 十四、網絡編程技術
- 1.理解網絡編程常用協議TCP/UDP/HTTP/FTP等基礎知識
- 2.掌握TCP網絡編程連接建立的3次握手和4次揮手的具體過程
- 3.掌握UDP網絡通信工作原理
- 4.掌握Socket通信模型的工作原理
- 十五、圖形化界面
- 5.理解線程死鎖
- 十六、JDBC技術
- 1.熟練掌握JDBCAPI中常用接口的基本概念
- 2.理解JDBC連接數據庫的思路和實現方法
- 3.熟練掌握JDBC連接數據庫的基本步驟
- 4.理解并掌握數據庫連接公共類的設計思路和方法
- 5.熟練掌握JDBC使用公共類連接數據庫的基本步驟
- 6.熟練掌握JDBC操作數據庫的基本步驟
- 7.熟練掌握JDBC操作數據庫的SQL語句
- 8.熟練掌握JDBC操作單表的方法及SQL語句
- 9.熟練掌握JDBC操作多表的方法及SQL語句
- 10.理解事務的基本概念
- 11.熟練掌握JDBC在綜合項目的使用方法(包含:基本數據、業務處理等)
- 十七、課外補充
- 附錄1.各種字符集和編碼詳解
- 項目實訓
- 項目2:汽車銷售系統