请教简易java五子棋的思路
1,分析对象共有三个类 棋盘类,点类,棋子类
2,画棋盘棋盘类继承Frame,重写paint方法按照从第一个点到最后一个点划线,画出所以横线和竖线
3,棋盘类有个鼠标响应事件,点击是有个计数器第一次点击显示黑气,第二次单机出白棋子,可以用计数器count%2==0来判断是黑是白,其中棋子有个boolean black 属性;
怎样确保第一次和第二次画的棋子不会画到同一个点上去?
怎么判断五个棋子连在一起回赢?
其中棋子有 属性Point 点,和black 属性
点有x,y 坐标,和是否这个点可以使用flag属性
棋盘有棋子和点的属性
1,分析对象共有三个类 棋盘类,点类,棋子类
2,画棋盘棋盘类继承Frame,重写paint方法按照从第一个点到最后一个点划线,画出所以横线和竖线
3,棋盘类有个鼠标响应事件,点击是有个计数器第一次点击显示黑气,第二次单机出白棋子,可以用计数器count%2==0来判断是黑是白,其中棋子有个boolean black 属性;
怎样确保第一次和第二次画的棋子不会画到同一个点上去?
怎么判断五个棋子连在一起回赢?
其中棋子有 属性Point 点,和black 属性
点有x,y 坐标,和是否这个点可以使用flag属性
棋盘有棋子和点的属性
解决方案 »
- 不同文件夹内的java文件相互调用的javac 编译问题
- return -1和 return 0 的區別
- 编译.java文件,出现“找不到符号”的错误
- 求助~
- 我在自学,始终弄不懂类型char,String之类的,下面的程序所以找不出来哪里出了问题,高手帮忙一下
- 求采用3DES加密, ECB模式/使用PKCS7方式填充不足位JAVA程序?
- 软件初始化完成前,如何加载一个图片类型的欢迎界面
- 文本框回车事件监听
- html#文件怎么打开?再线等
- 我自己写的输入口令的TextField控件在Solaris下跑的时候getText()获得不了实际的内容,高分悬赏!!!
- 如何判断telnet执行结束
- 代码性能分析
2.判断输赢,应该采用遍历当前落子四周(水平,竖直,及对角线位置)的方法;
贴一个以前写过的,控制台的五子棋,你可以参考下。(其实Java写界面很费力的啊!)
import java.util.Scanner;public class WuZiQi { /**
* @param args
*/
public static void main(String[] args) {
char[][] arr = new char[16][16];
// 准备数组
for (int i = 1; i < arr.length; i++) {
for (int j = 1; j < arr.length; j++) {
arr[i][j] = '*';
}
} print1();// 打印首行
print2(arr);// 打印其余15行
boolean flag = true;
System.out.println("游戏开始!"); int i = 1;
int x;
int y;
int a;
int b;
while (flag) {
if (i % 2 != 0) {
System.out.println("请黑方落子!");
Scanner sc1 = new Scanner(System.in);
x = sc1.nextInt();
y = sc1.nextInt();
if (x <= 0 || y <= 0 || x > 15 || y > 15) {
System.out.println("请在适当位置落子!");
} else if (arr[x][y] == '@' || arr[x][y] == '&') {
System.out.println("此处有子,请重新落子!");
} else {
arr[x][y] = '@';
print1();// 打印棋谱
print2(arr);
i++;
}
if (isWin1(x, y, arr, 0) || isWin2(x, y, arr, 0)
|| isWin3(x, y, arr, 0) || isWin4(x, y, arr, 0)) {
System.out.println("黑方赢!游戏结束!");
flag = false;
break;
}
}
// 判断输赢
if (i % 2 == 0) {
System.out.println("请白方落子!");
Scanner sc2 = new Scanner(System.in);
a = sc2.nextInt();
b = sc2.nextInt();
if (a <= 0 || b <= 0 || a > 15 || b > 15) {
System.out.println("请在适当位置落子!"); } else if (arr[a][b] == '@' || arr[a][b] == '&') {
System.out.println("此处有子,请重新落子!"); } else {
arr[a][b] = '&';
print1();
print2(arr);
i++;
if (isWin1(a, b, arr, 1) || isWin2(a, b, arr, 1)
|| isWin3(a, b, arr, 1) || isWin4(a, b, arr, 1)) {
System.out.println("白方赢!游戏结束!");
flag = false;
break;
}
} } } }
//打印棋谱
static void print1() {
for (int i = 0; i < 16; i++) {
System.out.print(Integer.toHexString(i) + " ");
}
System.out.println();
}
static void print2(char[][] arr) {
int i = 0;
int j = 0;
for (i = 1; i < 16; i++) {
System.out.print(Integer.toHexString(i) + " ");
for (j = 1; j < 16; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
//判断输赢
static boolean isWin1(int x, int y, char[][] arr, int wanJia) {
char ch;//黑白玩家落子
int i = x;
int count = 0;
if (wanJia == 0) {
ch = '@';
} else {
ch = '&';
}
while (arr[x][y] == ch && x > 0 && x <= 15) {
x++;
count++;
}
while (arr[i][y] == ch && i > 0 && i <= 15) {
i--;
count++;
}
if (count == 6) {
return true;
} else
return false;
} static boolean isWin2(int x, int y, char[][] arr, int wanJia) {
char ch;
int i = y;
int count = 0;
if (wanJia == 0) {
ch = '@';
} else {
ch = '&';
}
while (arr[x][y] == ch && y > 0 && y <= 15) {
y++;
count++;
}
while (arr[x][i] == ch && i > 0 && i <= 15) {
i--;
count++;
}
if (count == 6) {
return true;
} else
return false;
} static boolean isWin3(int x, int y, char[][] arr, int wanJia) {
char ch;
int i = x;
int j = y;
int count = 0;
if (wanJia == 0) {
ch = '@';
} else {
ch = '&';
}
while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
x++;
y++;
count++;
}
while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
x--;
y--;
count++;
}
if (count == 6) {
return true;
} else
return false;
} static boolean isWin4(int x, int y, char[][] arr, int wanJia) {
char ch;
int i = x;
int j = y;
int count = 0;
if (wanJia == 0) {
ch = '@';
} else {
ch = '&';
}
while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
x++;
y--;
count++;
}
while (arr[i][j] == ch && i > 0 && i <= 15 && j > 0 && j <= 15) {
i--;
j++;
count++;
}
if (count == 6) {
return true;
} else
return false;
}
}