### **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 实现效果**
  五子棋游戏的实现效果如下所示:
![](http://h.yiniuedu.com/9cb7f8d4b72ede7297b9e9b6f8994575)
图1 开始界面
![](http://h.yiniuedu.com/c503689e498ec83cdaa4b9a896ee51a6)
图2退出界面
![](http://h.yiniuedu.com/3029511ae9dfe4a9acbf5d9ac1c0106d)
图3 帮助界面
![](http://h.yiniuedu.com/1c9f1d2734333e27153104b04cbe03c3)
图4 选择开始界面
![](http://h.yiniuedu.com/36a4ea0b56dc5b2be0b7e19545b66de6)
图5 下棋界面
![](http://h.yiniuedu.com/7bd5e345feb113538d4cdd0c13c04f18)
图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****详细设计**
![](http://h.yiniuedu.com/8912f3fdfed40dbfe2175ac104560fef)
类图
### **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:汽车销售系统