Java -五子棋游戏


前言

学习了一些java初步知识制作了这款五子棋游戏,本篇博客用于梳理过程`


一、GUI部分

1.Java.Swing 和 Java.awt

Java.Swing 和 Java.awt是两个常用来完成图形用户界面编程的工具包。

Swing是JAVA基础类的一部分。Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。 Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行。

AWT全称是抽象窗口工具集,AWT是一个窗口框架,它从不同平台的窗口系统中抽取共同组件,当使用AWT编写图形界面应用时,程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM 调用操作系统本地的图形界面来创建和平台一致的对等体。

JFrame:java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。

JPanel :JavaGUI工具包swing中的面板容器类,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,可以加入到JFrame窗体

JButton :用于创建按钮。
此外还有JLabel,JTextField等。

2.创建基本窗体

public void showUI() {
   
		
		JFrame jf = new JFrame();
		jf.setSize(880,800);
		jf.setTitle("五子棋1.1");
		jf.setLocationRelativeTo(null);//窗口将置于屏幕的中央
		jf.setDefaultCloseOperation(3);//点击关闭后直接关闭应用程序
		jf.setVisible(true);
		//窗体的基本结构
		
		BorderLayout flow = new BorderLayout();
		jf.setLayout(flow);
		//流式布局
		
		JPanel ePanel = new JPanel();
		ePanel.setPreferredSize(new Dimension(80,0));
		jf.add(ePanel, BorderLayout.EAST);
		//加入面板,放在窗体最东的位置
		
		JButton jbu = new JButton("开始");
		ePanel.add(jbu);
		//加入按钮
		jf.getContentPane().setBackground(Color.lightGray);
		//为棋盘设置背景板颜色方便区分
	}

3.绘制棋盘

对于棋盘的绘制,我们知道棋盘是由若干条线段横竖交错形成的,棋子落在棋盘交界处

在这里我们单独创建一个继承JFrame的MYFrame类用来绘制棋盘,设定好初始坐标,棋盘线数,棋子大小等参数之后我们重写paint()方法,通过super.paint(g);继承父类的方法,接着绘制棋盘即可

记得将GUI类创建窗体部分的JFrame改为MYFrame

public class MYFrame extends JFrame {
   
	
	public int X0 = 50 ,Y0 = 70 ,LINE = 15 ,SIZE = 50 ,CHESS  = 50;
	//X0,Y0为棋盘最左上角坐标,LINE为棋盘线条数,SIZE为线条间距,CHESS为棋子直径
		
	public void paint(Graphics g) {
   
		super.paint(g);
	//super关键字用来访问父类的构造方法、普通方法和属性	
	//下面为重写部分用来绘制棋盘棋子	
		for(int i = 0;i < LINE;i++) {
   
			g.setColor(Color.black);
			g.drawLine(X0, Y0 + i*SIZE, (LINE-1)*SIZE + X0, Y0 + i*SIZE);
			g.drawLine(X0 + i*SIZE, Y0,X0 + i*SIZE , (LINE - 1)*SIZE + Y0);
			
		}
		//绘制棋盘
	}

基本效果如下所示
图一

4.绘制棋子

对于棋子的规划我们可以想象整个棋盘的所有交点位置对应一个二维数组,对于每下入一个棋子就将数组中元素进行更改,然后根据数字不同对应不同的颜色,将下列代码加入刚才创建的MYFrame类里

public int[][] chessArr;
	//此数组用于存放棋子坐标
		for(int i = 0;i < LINE;i++) {
   
			for(int j = 0;j < LINE;j++) {
   
				if(chessArr[i][j] == 1) {
   
					g.setColor(Color.BLACK);
					g.fillOval(i*SIZE + X0 - CHESS/2, j*SIZE + Y0 - CHESS/2, CHESS, CHESS);
				}
				if(chessArr[i][j] == 2) {
   
					g.setColor(Color.WHITE);
					g.fillOval(i*SIZE + X0 - CHESS/2, j*SIZE + Y0 - CHESS/2, CHESS, CHESS);
				}
			}
		}
		//绘制棋子,1对应黑棋,2对应白棋
		

有了以上内容GUI部分的绘制就基本完成了

二、监听器

1.下棋

对于五子棋的落子,我们要知道,每个棋子对应二维数组里的一格,在这里我们详细讲一下整个棋盘的划分。
首先整个窗体我们设定的大小为880800,880我们将其分为800+80,也就是说棋盘大小为800800,控制面板大小为80800用来添加按钮
然后,我们的棋盘设定为横竖15条线,每条间距为50,因而棋盘的实际占用面积为(15
50ÿ

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Java 实现五子棋游戏的简单步骤: 1. 创建一个棋盘类(Board),在棋盘上绘制出 15×15 的网格。 2. 定义一个棋子类(Piece),包括棋子的颜色和位置。 3. 创建一个游戏类(Game),它包括一个棋盘和两个玩家。可以通过键盘输入或鼠标点击来落子。 4. 实现落子规则,每当一个玩家下完一步棋后,判断是否有五个同色棋子相连,如果有则该玩家获胜。 5. 实现 AI 玩家,让计算机能够下棋。可以使用简单的算法,如随机下棋或简单的搜索算法。 以下是示例代码: 棋盘类 Board: ``` public class Board { private int[][] grid; public Board() { grid = new int[15][15]; } public void draw() { // 绘制棋盘 } public boolean isValidMove(int x, int y) { // 判断落子是否合法 } public void placePiece(Piece piece) { // 在棋盘上放置棋子 } public boolean checkWin(Piece piece) { // 判断是否获胜 } } ``` 棋子类 Piece: ``` public class Piece { private int x; private int y; private int color; public Piece(int x, int y, int color) { this.x = x; this.y = y; this.color = color; } public int getX() { return x; } public int getY() { return y; } public int getColor() { return color; } } ``` 游戏类 Game: ``` import java.util.Scanner; public class Game { private Board board; private Player player1; private Player player2; private Player currentPlayer; public Game() { board = new Board(); player1 = new Player("Player 1", 1); player2 = new AIPlayer("AI", 2); currentPlayer = player1; } public void start() { while (true) { board.draw(); System.out.println(currentPlayer.getName() + " turn."); int x, y; if (currentPlayer instanceof AIPlayer) { x = ((AIPlayer) currentPlayer).getNextMove(board); y = ((AIPlayer) currentPlayer).getNextMove(board); System.out.println("AI placed a piece at (" + x + ", " + y + ")"); } else { Scanner scanner = new Scanner(System.in); System.out.print("Enter x: "); x = scanner.nextInt(); System.out.print("Enter y: "); y = scanner.nextInt(); } Piece piece = new Piece(x, y, currentPlayer.getColor()); if (board.isValidMove(x, y)) { board.placePiece(piece); if (board.checkWin(piece)) { System.out.println(currentPlayer.getName() + " wins!"); break; } currentPlayer = (currentPlayer == player1) ? player2 : player1; } else { System.out.println("Invalid move."); } } } } ``` 玩家类 Player: ``` public class Player { private String name; private int color; public Player(String name, int color) { this.name = name; this.color = color; } public String getName() { return name; } public int getColor() { return color; } } ``` AI 玩家类 AIPlayer: ``` import java.util.Random; public class AIPlayer extends Player { private Random random; public AIPlayer(String name, int color) { super(name, color); random = new Random(); } public int getNextMove(Board board) { int x = random.nextInt(15); int y = random.nextInt(15); while (!board.isValidMove(x, y)) { x = random.nextInt(15); y = random.nextInt(15); } return x; } } ``` 以上是一个基本的五子棋游戏实现,可以根据需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值