再此记录实验2的实现过程
按照实验要求进行补充完整即可
按照如上要求填写具体实现即可
在实验中要求最后要将内容改成泛型,只需要将所有String改写成L即可
在这里特此放出实现判断输入给定字符串否合法的代码,使用正则表达式
private String setLegal(String s) {
// 任意实数加后面的标点为合法
if (s.matches("(-)?[0-9]+(\\.[0-9]+)?(\\.{3}|\\.|\\?|!|,)?")) {
return s;
}
// 任意字母带一个',或者带多个-连字符,或者带标点符号为合法,将其全部转化成小写
else if (s.matches("[A-Za-z]+('[A-Za-z]*)?((-[A-Zaa-z]+)*)(\\.{3}|\\.|\\?|!|,)?")) {
return s.toLowerCase();
}
else
return "";
}
P2中要求重新实现 Social Network ,可以直接套用P1中的实现,对之前实验一写好的代码进行修改即可。此部分较为容易
此部分为最难的部分,也是耗时最长的部分,需要自己设计一套ADT来实现所有功能。
在这里给出我的思想:如下图
在其中重要的类下我的实现方法:
package P3;
import com.sun.deploy.security.SelectableSecurityManager;
public class Game {
// 游戏主体,主要功能:对游戏进行初始化,存储所有需要的类及数据
// 包括方法:initialChess,setName,getPlayerColor,getName,action,seeHistory
// 几乎覆盖了所有的可能执行的操作
private final String gamename;
private final Board board;
private Player player1;
private Player player2;
private Action action = new Action();
public Game(String gamename) {
this.gamename = gamename;
if (gamename.equals("chess"))
this.board = new Board(8);
else
this.board = new Board(19);
}
// 功能:初始化国际象棋游戏
public void initialChess() {}
// 功能:设置人名及颜色
public void setName(String player, String name, String color) {}
// 功能:获取某人执子颜色
public String getPlayerColor(String player) {}
// 功能:实现方法的主体,调用Action类实现具体操作
public void action(String player, String motion) {}
// 功能:获取走步历史
public void seeHistory(String player) {}
}
package P3;
import java.util.Scanner;
public class Action {
// 用于存储每一个动作的具体实现方法,包括落子,移子,吃子,提子,查询,统计等功能的具体实现
// 功能:判断输入是否在棋盘范围内
public boolean isLegalNumber(String s) {
String[] strings = s.split(" ");
return strings.length == 2 && strings[0].matches("[0-9]+") && strings[1].matches("[0-9]+");
}
// 功能:落子
public void set(String gamename, Player player, Board board) {}
// 功能:移动
public void move(String gamename, Player player, Player playertoRemove, Board board) {}
// 功能:移除(吃子)
public void remove(Player player, Board board) {}
// 功能:查询
public void inquire(Player player, Board board) {}
// 功能:查询两人各自拥有多少棋子
public void status(Player playerCallStatus, Player player1, Player player2) {}
}
package P3;
import java.util.ArrayList;
public class Player {
// 玩家类,用于存储该玩家的名字,执子颜色,拥有棋子和走步历史
private final String name;
private final String color;
private ArrayList<Piece> pieces = new ArrayList<>();
private ArrayList<String> history = new ArrayList<>();
public Player(String name, String color) {
this.name = name;
this.color = color;
}
// 功能:添加该玩家拥有的棋子
public void addPiece(String type, int x, int y) {}
// 功能:移除该玩家拥有的一枚棋子
public void removePiece(int x, int y) {}
// 功能:添加set或remove历史操作
public void addHistory(String action, String type, int x, int y) {}
// 功能:添加move历史操作
public void addHistory(String type, int x0, int y0, int x1, int y1, String type0) {}
// 功能:添加inquire历史操作
public void addHistory(int x, int y) {}
// 功能:添加status历史操作
public void addHistory() {}
public void printHistory() {}
// 包含吃子的移动
public void movePiece(Player playertoRemove, int x0, int y0, int x1, int y1) {}
// 不包含吃子的移动
public void movePiece(int x0, int y0, int x1, int y1) {}
}
package P3;
import java.util.ArrayList;
public class Board {
// 存储棋盘的主要信息,包括每个格子的棋子情况,棋盘大小等
private final int size;
private ArrayList<Piece> pieceOnBoard = new ArrayList<>();
public Board(int size) {
this.size = size;
}
public void addPiece(String type, String name, String color, int x, int y) {}
// 功能:查询这个位置是否有棋子
public boolean hasPiece(int x, int y) {}
// 功能:查询这个位置是否有传入人的棋子
public boolean hasCorrectPiece(Player player, int x, int y) {}
// 功能:移动棋子
public void movePiece(int x0, int y0, int x1, int y1) {}
// 功能:移除棋子
public void removePiece(int x, int y) {}
// 功能:输出棋子信息
public void printPiece(int x, int y) {}
}
实现情况如上,具体内容请自行设计
任务比较重,相比于第一次实验,代码量增加了特别多,为了防止思路中断,必须挑选大块时间进行编程,受限较大。编程过程中会出现烦躁,没有思路,参数传不进去等问题,导致心态有些崩溃,好在上网查询后基本全部解决。这次实验极大地丰富了编程经历,对ADT和OOP有了更深的理解