① 鎬庝箞java瀹炵幇榧犳爣鐐瑰嚮鐨勪簲瀛愭嬪晩 锛熷悇浣嶅ぇ渚 甯甯蹇
import java.awt.*;
import java.awt.event.*;
import java.awt.color.*;
class wuzi {
public static void main(String[] args) {
frame myFrame =new frame("浜斿瓙妫");
}
}
class frame extends Frame implements ActionListener{
MenuBar mbar=new MenuBar();
Menu mgame=new Menu("閫夐」");
Menu mhelp=new Menu("甯鍔");
MenuItem mstart=new MenuItem("寮濮 ");
MenuItem mclose=new MenuItem("缁撴潫");
MenuItem mabout=new MenuItem("鍏充簬");
myCanvas canvas;
frame(String t) {
super(t);
canvas = new myCanvas(this);
mgame.add(mstart);
mgame.add(mclose);
mhelp.add(mabout);
mgame.addActionListener(this);
mstart.addActionListener(this);
mclose.addActionListener(this);
mhelp.addActionListener(this);
mabout.addActionListener(this);
mbar.add(mgame);
mbar.add(mhelp);
this.setMenuBar(mbar);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
this.add(canvas);
this.pack();
this.show();
this.setLocation(380,100);
this.setResizable(false);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==mstart)
{
repaint();
}
else if(e.getSource()==mclose){
this.dispose();
System.exit(0);
}
if(e.getSource()==mabout){
about frm=new about();
}
pack();
}
}
class chessman{
private boolean isExist;
private boolean isColor;
public chessman(boolean isExist){
this.isExist = isExist ;
}
boolean getChessExist() {
return isExist;
}
boolean getChessColor() {
return isColor;
}
void setChessExist(boolean m){
isExist = m;
}
void setChessColor(boolean m) { //璁剧疆妫嬬殑棰滆壊
isColor = m;
}
}
class myCanvas extends Canvas implements MouseListener {
frame myFrame;
//淇濆瓨妫嬪瓙
private chessman chessMan[][] = new chessman[19][19];
int mx,my;//鑾峰彇浣嶇疆
int x,y;
boolean state = true;
myCanvas(frame myFrame) {
this.myFrame = myFrame;
setBackground(Color.cyan);
addMouseListener(this);
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
chessMan[i][j] = new chessman(false);
}
public void start() {
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
chessMan[i][j].setChessExist(false);
}
public void paint(Graphics g) {//鐢荤嚎
Dimension size = this.getSize();
g.drawRect(0,0,size.width-1,size.height-1);
g.draw3DRect(1,1,size.width-3,size.height-3,true);
for(int i=0;i<19;i++)
g.drawLine(30,i*24+30,462,i*24+30);
for(int j=0;j<19;j++)
g.drawLine(j*24+30,30,j*24+30,462);
x=(int)((mx-20)/24);
y=(int)((my-20)/24); //璁$畻钀藉瓙浣嶇疆
if(!chessMan[y][x].getChessExist()&&(mx>=18||my>=18)){
chessMan[y][x].setChessExist(true);
chessMan[y][x].setChessColor(state);
state = !state;
}
for(int i =0;i<19;i++)
for(int j=0;j<19;j++){
if(chessMan[i][j].getChessExist())
{
if(chessMan[i][j].getChessColor()==true){
g.setColor(Color.black); //榛樿ら粦妫嬪厛涓
}
else{
g.setColor(Color.white);
}
g.fillOval(j*24+21,i*24+21,18,18);
// whowin(x, y) ;
}
}
}
/* public void whowin(int x, int y) {
int m1 = 0, m2 = 0, m3 = 0, m4 = 0;
for (int i = 1; i < 5; i++) {//鍒ゆ柇-------鍚戝乏-------
if (x - i > 0 && chessMan[x - i][y] == chessMan[x][y]) {
m1++;
}
}
for (int j = 1; j < 5; j++) {//鍒ゆ柇-------鍚戝彸-------
if (x + j < 20 && chessMan[x + j][y] == chessMan[x][y]) {
m1++;
}
}
//鍒ゆ柇杈撹耽------shu绾
for (int i = 1; i < 5; i++) {//鍒ゆ柇-------鍚戜笅-----------
if (y + i < 20 && chessMan[x][y + i] == chessMan[x][y]) {
m2++;
}
}
for (int i = 1; i < 5; i++) {//鍒ゆ柇-------鍚戜笂------------
if (y - i > 0 && chessMan[x][y - i] == chessMan[x][y]) {
m2++;
}
}
//鍒ゆ柇杈撹耽------\绾
for (int i = 1; i < 5; i++) {//鍒ゆ柇-------鍚戝乏涓-------------
if (x - i > 0 && y - i > 0 && chessMan[x - i][y - i] == chessMan[x][y]) {
m3++;
}
}
for (int i = 1; i < 5; i++) {//鍒ゆ柇-------鍚戝彸涓-------------
if (x + i < 20 && y + i < 20 && chessMan[x + i][y + i] == chessMan[x][y]) {
m3++;
}
}
//鍒ゆ柇杈撹耽------/绾
for (int i = 1; i < 5; i++) {//鍒ゆ柇-------鍚戝乏涓------------
if (x - i > 0 && y + i < 20 && chessMan[x - i][y + i] == chessMan[x][y]) {
m4++;
}
}
for (int i = 1; i < 5; i++) {//鍒ゆ柇-------鍚戝彸涓--------------
if (y - i > 0 && x + i < 20 && chessMan[x + i][y - i] == chessMan[x][y]) {
m4++;
}
}
//***************鏈鍚庡垽鏂杈撹耽********************
if (m1 > 3 || m2 > 3 || m3 > 3 || m4 > 3) {
if (chessMan[x][y] == ) {//----鍥犱负涓嬫嬪悗灏嗘嬪瓙棰滆壊鏀逛负瀵规柟鐨勯滆壊锛屾墍浠ヨ繖閲屼簰鐩歌皟涓涓---
JOptionPane.showMessageDialog(this, "hei-----win");
isgamealive = 0;
}
if (chessMan[x][y] == false) {
JOptionPane.showMessageDialog(this, "-----win");
isgamealive = 0;
}
}
}*/
public Dimension getPreferredSize() {
return new Dimension(492,492); //杩斿洖鍥惧舰澶у皬
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){
mx = e.getX();
my = e.getY();
repaint();
}
}
class about extends Frame implements WindowListener //璁剧疆鍏充簬
{
about() {
this.setSize(300,170);
this.setTitle("鍏充簬浜斿瓙妫嬫父鎴");
this.addWindowListener(this);
this.setVisible(true);
this.setLocation(400,200);
this.setResizable(false);
this.setLayout(new FlowLayout());
Label text1 =new Label();
Label text2 =new Label();
Label text3=new Label();
text1.setText("娓告垙浠嬬粛锛");
text1.setFont(new Font("榛戜綋",Font.ITALIC,25));
text1.setAlignment(text1.CENTER);
text1.setVisible(true);
text2.setText("妯鎺掞紝绔栨帓锛屾枩鎺掞紝璋佸厛鏀惧埌5涓灏辫耽銆");
text2.setFont(new Font("榛戜綋",Font.PLAIN,15));
text2.setAlignment(text1.LEFT);
text2.setVisible(true);
text3.setText("鍒朵綔鑰咃細0957207鍚村悰");
text3.setFont(new Font("妤蜂綋",Font.PLAIN,15));
text3.setVisible(true);
this.add(text1,"North");
this.add(text2,"West");
this.add(text3,"South");
this.show(true);
}
public void windowActivated(WindowEvent e){}
public void windowClosed(WindowEvent e){
}
public void windowClosing(WindowEvent e){
this.dispose();
}
public void windowDeactivated(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
}
② 跪求JAVA五子棋源代码
很sb的电脑五子棋:
import java.io.*;
import java.util.*;
public class Gobang {
// 定义一个二维数组来充当棋盘
private String[][] board;
// 定义棋盘的大小
private static int BOARD_SIZE = 15;
public void initBoard() {
// 初始化棋盘数组
board = new String[BOARD_SIZE][BOARD_SIZE];
// 把每个元素赋为"╋",用于在控制台画出棋盘
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
// windows是一行一行来打印的。坐标值为(行值, 列值)
board[i][j] = "╋";
}
}
}
// 在控制台输出棋盘的方法
public void printBoard() {
// 打印每个数组元素
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
// 打印数组元素后不换行
System.out.print(board[i][j]);
}
// 每打印完一行数组元素后输出一个换行符
System.out.print("\n");
}
}
// 该方法处理电脑下棋:随机生成2个整数,作为电脑下棋的坐标,赋给board数组。
private void compPlay() {
// 构造一个随机数生成器
Random rnd = new Random();
// Random类的nextInt(int n))方法:随机地生成并返回指定范围中的一个 int 值,
// 即:在此随机数生成器序列中 0(包括)和 n(不包括)之间均匀分布的一个int值。
int compXPos = rnd.nextInt(15);
int compYPos = rnd.nextInt(15);
// 保证电脑下的棋的坐标上不能已经有棋子(通过判断对应数组元素只能是"╋"来确定)
while (board[compXPos][compYPos].equals("╋") == false) {
compXPos = rnd.nextInt(15);
compYPos = rnd.nextInt(15);
}
System.out.println(compXPos);
System.out.println(compYPos);
// 把对应的数组元素赋为"○"。
board[compXPos][compYPos] = "○";
}
// 该方法用于判断胜负:进行四次循环扫描,判断横、竖、左斜、右斜是否有5个棋连在一起
private boolean judgeWin() {
// flag表示是否可以断定赢/输
boolean flag = false;
// joinEle:将每一个横/竖/左斜/右斜行中的元素连接起来得到的一个字符串
String joinEle;
// 进行横行扫描
for (int i = 0; i < BOARD_SIZE; i++) {
// 每扫描一行前,将joinEle清空
joinEle = "";
for (int j = 0; j < BOARD_SIZE; j++) {
joinEle += board[i][j];
}
// String类的contains方法:当且仅当该字符串包含指定的字符序列时,返回true。
if (joinEle.contains("●●●●●")) {
System.out.println("您赢啦!");
flag = true;
// 停止往下继续执行,提前返回flag。
// 如果执行了这个return,就直接返回该方法的调用处;
// 不会再执行后面的任何语句,包括最后那个return语句。
// (而break仅仅是完全跳出这个for循环,还会继续执行下面的for循环。)
return flag;
} else if (joinEle.contains("○○○○○")) {
System.out.println("您输啦!");
flag = true;
// 提前返回flag
return flag;
}
}
// 进行竖行扫描
for (int i = 0; i < BOARD_SIZE; i++) {
joinEle = "";
for (int j = 0; j < BOARD_SIZE; j++) {
// 竖行的元素是它们的列值相同
joinEle += board[j][i];
}
if (joinEle.contains("●●●●●")) {
System.out.println("您赢啦!");
flag = true;
return flag;
} else if (joinEle.contains("○○○○○")) {
System.out.println("您输啦!");
flag = true;
return flag;
}
}
// 进行左斜行扫描
for (int i = -(BOARD_SIZE - 2); i < BOARD_SIZE - 1; i++) {
joinEle = "";
for (int j = 0; j < BOARD_SIZE; j++) {
int line = i + j;
// 只截取坐标值没有越界的点
if (line >= 0 && line < 15) {
joinEle += board[j][line];
}
}
if (joinEle.contains("●●●●●")) {
System.out.println("您赢啦!");
flag = true;
return flag;
} else if (joinEle.contains("○○○○○")) {
System.out.println("您输啦!");
flag = true;
return flag;
}
}
// 进行右斜行扫描
for (int i = 1; i < 2 * (BOARD_SIZE - 1); i++) {
joinEle = "";
for (int j = 0; j < BOARD_SIZE; j++) {
int line = i - j;
if (line >= 0 && line < 15) {
joinEle += board[j][line];
}
}
if (joinEle.contains("●●●●●")) {
System.out.println("您赢啦!");
flag = true;
return flag;
} else if (joinEle.contains("○○○○○")) {
System.out.println("您输啦!");
flag = true;
// 最后这个return可省略
}
}
// 确保该方法有返回值(如果上面条件都不满足时)
return flag;
}
public static void main(String[] args) throws Exception, IOException {
Gobang gb = new Gobang();
gb.initBoard();
gb.printBoard();
// BufferedReader类:带缓存的读取器————从字符输入流中读取文本,并缓存字符。可用于高效读取字符、数组和行。
// 最好用它来包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。
// 下面构造一个读取器对象。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 定义输入字符串
String inputStr = null;
// br.readLine():每当在键盘上输入一行内容按回车,刚输入的内容将被br(读取器对象)读取到。
// BufferedReader类的readLine方法:读取一个文本行。
// 初始状态由于无任何输入,br.readLine()会抛出异常。因而main方法要捕捉异常。
while ((inputStr = br.readLine()) != null) {
// 将用户输入的字符串以逗号(,)作为分隔符,分隔成2个字符串。
// String类的split方法,将会返回一个拆分后的字符串数组。
String[] posStrArr = inputStr.split(",");
// 将2个字符串转换成用户下棋的坐标
int xPos = Integer.parseInt(posStrArr[0]);
int yPos = Integer.parseInt(posStrArr[1]);
// 校验用户下棋坐标的有效性,只能是数字,不能超出棋盘范围
if (xPos > 15 || xPos < 1 || yPos > 15 || yPos < 1) {
System.out.println("您下棋的坐标值应在1到15之间,请重新输入!");
continue;
}
// 保证用户下的棋的坐标上不能已经有棋子(通过判断对应数组元素只能是"╋"来确定)
// String类的equals方法:比较字符串和指定对象是否相等。结果返回true或false。
if (gb.board[xPos - 1][yPos - 1].equals("╋")) {
// 把对应的数组元素赋为"●"。
gb.board[xPos - 1][yPos - 1] = "●";
} else {
System.out.println("您下棋的点已有棋子,请重新输入!");
continue;
}
// 电脑下棋
gb.compPlay();
gb.printBoard();
// 每次下棋后,看是否可以断定赢/输了
if (gb.judgeWin() == false) {
System.out.println("请输入您下棋的坐标,应以x,y的格式:");
} else {
// 完全跳出这个while循环,结束下棋
break;
}
}
}
}
③ 求一个简单的JAVA五子棋代码!! 网上复制的别来了!
以下是现写的 实现了两人对战 自己复制后运行把 没什么难度 类名 Games
import java.util.Scanner;
public class Games {
private String board[][];
private static int SIZE = 17;
private static String roles = "A玩家";
//初始化数组
public void initBoard() {
board = new String[SIZE][SIZE];
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
// if(i==0){
// String str = "";
// str += j+" ";
// board[i][j]= str;
// }else if(i!=0&&j==0){
// String str = "";
// str += i+" ";
// board[i][j]= str;
// }else{
board[i][j] = "╋";
// }
}
}
}
//输出棋盘
public void printBoard() {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
System.out.print(board[i][j]);
}
System.out.println();
}
}
//判断所下棋子位置是否合理
public boolean isOk(int x, int y) {
boolean isRight = true;
if (x >= 16 || x < 1 || y >= 16 | y < 1) {
//System.out.println("输入错误,请从新输入");
isRight = false;
}
if (board[x][y].equals("●") || board[x][y].equals("○")) {
isRight = false;
}
return isRight;
}
//判断谁赢了
public void whoWin(Games wz) {
// 从数组挨个查找找到某个类型的棋子就从该棋子位置向右,向下,斜向右下 各查找5连续的位置看是否为5个相同的
int xlabel;// 记录第一次找到某个棋子的x坐标
int ylabel;// 记录第一次找到某个棋子的y坐标
// ●○╋
// 判断人是否赢了
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (board[i][j].equals("○")) {
xlabel = i;
ylabel = j;
// 横向找 x坐标不变 y坐标以此加1连成字符串
String heng = "";
if (i + 5 < SIZE && j + 5 < SIZE) {
for (int k = j; k < j + 5; k++) {
heng += board[i][k];
}
if (heng.equals("○○○○○")) {
System.out.println(roles+"赢了!您输了!");
System.exit(0);
}
// 向下判断y不变 x逐增5 连成字符串
String xia = "";
for (int l = j; l < i + 5; l++) {
xia += board[l][j];
// System.out.println(xia);
}
if (xia.equals("○○○○○")) {
System.out.println(roles+"赢了!您输了!");
System.exit(0);
}
// 斜向右下判断
String youxia = "";
for (int a = 1; a <= 5; a++) {
youxia += board[xlabel++][ylabel++];
}
if (youxia.equals("○○○○○")) {
System.out.println(roles+"赢了!您输了!");
System.exit(0);
}
}
}
}
}
// 判断电脑是否赢了
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (board[i][j].equals("●")) {
xlabel = i;
ylabel = j;
// 横向找 x坐标不变 y坐标以此加1连成字符串
String heng = "";
if (j + 5 < SIZE && i + 5 < SIZE) {
for (int k = j; k < j + 5; k++) {
heng += board[i][k];
}
if (heng.equals("●●●●●")) {
System.out.println(roles+"赢输了!您输了!");
System.exit(0);
}
// 向下判断y不变 x逐增5 连成字符串
String xia = "";
for (int l = i; l < i + 5; l++) {
xia += board[l][ylabel];
// System.out.println(xia);
}
if (xia.equals("●●●●●")) {
System.out.println(roles+"赢了!您输了!");
System.exit(0);
}
// 斜向右下判断
String youxia = "";
for (int a = 1; a <= 5; a++) {
youxia += board[xlabel++][ylabel++];
}
if (youxia.equals("●●●●●")) {
System.out.println(roles+"赢了!您输了!");
System.exit(0);
}
}
}
}
}
}
public static void main(String[] args) {
Games wz = new Games();
Scanner sc = new Scanner(System.in);
wz.initBoard();
wz.printBoard();
while (true) {
System.out.print("请"+roles+"输入X,Y坐标,必须在0-15范围内,xy以空格隔开,输入16 16结束程序");
int x = sc.nextInt();
int y = sc.nextInt();
if (x == SIZE && y == SIZE) {
System.out.println("程序结束");
System.exit(0);
}
if (x > SIZE || x < 0 || y > SIZE | y < 0) {
System.out.println("输入错误,请从新输入");
continue;
}
//如果roles是A玩家 就让A玩家下棋,否则就让B玩家下棋。
if (wz.board[x][y].equals("╋")&&roles.equals("A玩家")) {
wz.board[x][y] = "○";
wz.printBoard();
//判断输赢
wz.whoWin(wz);
}else if(wz.board[x][y].equals("╋")&&roles.equals("B玩家")){
wz.board[x][y] = "●";
wz.printBoard();
//判断输赢
wz.whoWin(wz);
} else {
System.out.println("此处已经有棋子,从新输入");
continue;
}
if(roles.equals("A玩家")){
roles = "B玩家";
}else if(roles.equals("B玩家")){
roles = "A玩家";
}
}
}
}