java控制台 制作五子棋游戏
1.所用基础内容
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
static String line = "十";
static boolean flag = true;
static Scanner sc=new Scanner(System.in);
2.游戏主体
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
WZQ.initQp();
//初始化棋盘
WZQ.printQp();
//打印一次棋盘
WZQ.star();
// 开始下棋
}
3.棋盘初始化
用二维数组来存储"十"来组为棋盘格
初始化15*15的棋盘
同时将最后一行与最后一列赋为数字
使用双重for循环来为数组赋值
i为每一行 当i=qp.length时 将其替换为数字此时二重循环中的j从0开始
j为每一列当j=qp.lengrh时 i从0开始
public static void initQp() { //棋盘初始化
for (int i = 0; i < qp.length; i++) {
for (int j = 0; j < qp[i].length; j++) {
qp[i][j] = "十";
if (i == qp.length - 1) { //最后一行换为 数字
qp[i][j] = num[j];
}
if (j == qp[i].length - 1) { //最后一列换为 数字
qp[i][j] = num[i];
}
}
}
}
4.打印棋盘
使用双重循环遍历数组 打印棋盘 每打印一行进行换行
public static void printQp() { //打印棋盘
for (int i = 0; i < qp.length; i++) {
for (int j = 0; j < qp[i].length; j++) {
System.out.print(qp[i][j]);
}
System.out.println();
}
}
5.判断落子是否正确
将输入的两位坐标传入 如果小于0或大于数组长度 返回false
如果此数组位置不为"十" 说明有棋子 返回false
否则 返回true
public static boolean check(int x,int y){ // 检查落子是否正确
if(x<0||x>qp.length-1||y<0||y>qp.length-1){
return false;
}
if(!qp[x][y].equals(line)){
return false;
}
return true;
}
6.判断输赢
首先 可分为四种 水平,垂直,右斜,左斜
传入下棋位置 与棋子颜色
定义四种情况的变量从1 开始判断时不包含自身
同时注意在向外判断时 注意棋子的临界位置
public static boolean iswin(int x, int y, String s) {
int spsum = 1;
for (int i = y - 1; i >= 0; i--) { //判断水平方向 向左
if (qp[x][i].equals(s)) {
spsum++;
} else {
break;
}
if (spsum >= 5) {
return true;
}
}
for (int i = y + 1; i < qp.length - 1; i++) { //判断水平方向 向右
if (qp[x][i].equals(s)) {
spsum++;
} else {
break;
}
if (spsum >= 5) {
return true;
}
}
int czsum = 1;
for (int i = x - 1; i >= 0; i--) { //判断垂直方向 向上
if (qp[i][y].equals(s)) {
czsum++;
} else {
break;
}
if (czsum >= 5) {
return true;
}
}
for (int i = x + 1; i < qp.length - 1; i++) { //判断垂直方向 向下
if (qp[i][y].equals(s)) {
czsum++;
} else {
break;
}
if (czsum >= 5) {
return true;
}
}
int xsum = 1;
for (int xx = x - 1, yy = y - 1; xx >= 0 && yy >= 0; xx--, yy--) { //判断斜向 向左上
if (qp[xx][yy].equals(s)) {
xsum++;
}else {
break;
}
if (xsum >= 5) {
return true;
}
}for (int xx = x + 1, yy = y + 1; xx <= qp.length-1 && yy <= qp.length-1; xx++, yy++) { //判断斜向 向右下
if (qp[xx][yy].equals(s)) {
xsum++;
}else {
break;
}
if (xsum >= 5) {
return true;
}
}
int ysum=1;
for ( int xx = x - 1, yy = y + 1; xx >= 0 && yy <= qp.length-1; xx--, yy++){ //判断斜向 右上
if (qp[xx][yy].equals(s)) {
ysum++;
}else {
break;
}
if (ysum >= 5) {
return true;
}
}
for ( int xx = x + 1, yy = y - 1; xx <= qp.length-1 && yy >=0; xx++, yy--){ //判断斜向 右上
if (qp[xx][yy].equals(s)) {
ysum++;
}else {
break;
}
if (ysum >= 5) {
return true;
}
}
return false;
}