Java课程设计

您所在的位置:网站首页 五子棋cp Java课程设计

Java课程设计

2024-07-13 19:47| 来源: 网络整理| 查看: 265

五子棋介绍

    五子棋是起源于中国古代的传统黑白棋种之一。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源远流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。

游戏玩法

    五子棋规则:棋盘采用15条横线×15条坚线组成交叉的每个点都可以放棋。

    游戏分黑白两方,每局由规定黑方先行。黑方玩家移动鼠标在棋盘中点击行棋。当黑方行棋完毕,转由白方行棋。同色棋子在棋盘上形成横、竖、斜形成 “五子相连”则获胜。如果弃权,则判为输。

系统需求分析

    五子棋游戏的基本功能如下:

    下棋功能:此功能是五子棋的基本功能之一,主要是实现了鼠标点击的棋盘位置出现棋子

    悔棋功能:下棋时下错棋子,则可以通过这个功能来取消下错棋子的步骤,从而达到悔棋的效果。

    重新开局功能:当其中一个玩家无法继续完成一场游戏,或者当判断胜负之后棋盘扔保留的情况,可以通过这个功能来实现重新开新的一局游戏。

系统的设计与实现

项目工程结构

e6e6bfbb96300ded5c8735dd00e6b7e1.png

运行环境

    Eclipse4.7、jre1.8

代码设计

Chess.java

package impl; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RadialGradientPaint; import java.awt.RenderingHints; public class Chess { Chessboard cp; //棋盘 int row; //横坐标 int col; //纵坐标 Color color; //棋子颜色 public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } public static final int BANJING = 18; public Chess(Chessboard cp, int col, int row, Color color) { this.cp = cp; this.col = col; this.row = row; this.color = color; } //画棋子 public void draw(Graphics g) { //定义棋子圆心 int xPos = col * 20 + 15; int yPos = row * 20 + 15; Graphics2D g2d = (Graphics2D) g; RadialGradientPaint paint = null; Color[] c = { Color.WHITE, Color.BLACK }; float[] f = { 0f, 1f }; int x = xPos + 3; int y = yPos - 3; if (color == Color.WHITE) { paint = new RadialGradientPaint(x, y, BANJING * 3, f, c); } else { paint = new RadialGradientPaint(x, y, BANJING, f, c); } g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setPaint(paint); g2d.fillOval(xPos - BANJING / 2, yPos - BANJING / 2, BANJING, BANJING); } }

Chessboard.java

package impl; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Chessboard extends JPanel { public static final int MARGIN = 15; public static final int SPAN = 20; public static final int ROWS = 19; public static final int COLS = 19; Chess[] chessList = new Chess[19 * 19]; int chessCount = 0; boolean iso = false; boolean isBlack = true; String message = "黑棋先下"; public Chessboard() { this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub if (iso) { return; } int col, row; col = (e.getX() - 15 + 10) / 20; row = (e.getY() - 15 + 10) / 20; if (col > 19 || col < 0 || row > 19 || row < 0) { return; } else { if (haschess(col, row)) { return; } else { Color c = Color.BLACK; if (isBlack) { c = Color.BLACK; message = "轮到白棋"; } else { c = Color.WHITE; message = "轮到黑棋"; } Chess cc = new Chess(Chessboard.this, col, row, c); chessList[chessCount++] = cc; repaint(); if (isWin(col, row)) { if (c == Color.BLACK) { JOptionPane.showMessageDialog(Chessboard.this, "黑棋获胜!"); } else if (c == Color.WHITE) { JOptionPane.showMessageDialog(Chessboard.this, "白旗获胜!"); } iso = true; return; } isBlack = !isBlack; } } } }); } @Override public void paint(Graphics e) { e.setColor(Color.ORANGE); e.fillRect(0, 0, 410, 460); e.setColor(Color.black); for (int i = 0; i < 20; i++) { e.drawLine(MARGIN, MARGIN + SPAN * i, MARGIN + 19 * 20, MARGIN + 20 * i); } for (int i = 0; i < 20; i++) { e.drawLine(15 + SPAN * i, 15, 15 + SPAN * i, 15 + 19 * 20); } e.fillRect(15 + 3 * 20 - 2, 15 + 3 * 20 - 2, 5, 5); e.fillRect(15 + 9 * 20 - 2, 15 + 3 * 20 - 2, 5, 5); e.fillRect(15 + 15 * 20 - 2, 15 + 3 * 20 - 2, 5, 5); e.fillRect(15 + 3 * 20 - 2, 15 + 9 * 20 - 2, 5, 5); e.fillRect(15 + 9 * 20 - 2, 15 + 9 * 20 - 2, 5, 5); e.fillRect(15 + 15 * 20 - 2, 15 + 9 * 20 - 2, 5, 5); e.fillRect(15 + 3 * 20 - 2, 15 + 15 * 20 - 2, 5, 5); e.fillRect(15 + 9 * 20 - 2, 15 + 15 * 20 - 2, 5, 5); e.fillRect(15 + 15 * 20 - 2, 15 + 15 * 20 - 2, 5, 5); Graphics2D e2 = (Graphics2D) e; e2.setStroke(new BasicStroke(3f)); e2.drawLine(10, 10, 10, 400); e2.drawLine(10, 10, 400, 10); e2.drawLine(400, 10, 400, 400); e2.drawLine(10, 400, 400, 400); for (int i = 0; i < chessCount; i++) { chessList[i].draw(e); } e.setFont(new Font("黑体", Font.BOLD, 15)); e.drawString("游戏提示:" + message, 20, 420); } private boolean haschess(int col, int row) { boolean result = false; for (int i = 0; i < chessCount; i++) { Chess cc = chessList[i]; if (cc != null && cc.getCol() == col && cc.getRow() == row) { return true; } } return result; } private boolean haschess(int col, int row, Color c) { Boolean result = false; for (int i = 0; i < chessCount; i++) { Chess ch = chessList[i]; if (ch != null && ch.getCol() == col && ch.getRow() == row && ch.getColor() == c) { result = true; } } return result; } private boolean isWin(int col, int row) { boolean result = false; int CountCh = 1; Color c = null; if (isBlack) { c = Color.BLACK; } else { c = Color.WHITE; } // 水平向左 for (int x = col - 1; x >= 0; x--) { if (haschess(x, row, c)) { CountCh++; } else { break; } } // 水平向右 for (int x = col + 1; x = 5) { result = true; message = "游戏结束"; } else { result = false; CountCh = 1; } // 竖直向上 for (int y = row - 1; y >= 0; y--) { if (haschess(col, y, c)) { CountCh++; } else { break; } } // 竖直向下 for (int y = row + 1; y = 5) { result = true; message = "游戏结束"; } else { result = false; CountCh = 1; } // 斜向右上 for (int x = col + 1, y = row - 1; x = 0; x++, y--) { if (haschess(x, y, c)) { CountCh++; } else { break; } } // 斜向左下 for (int x = col - 1, y = row + 1; x >= 0 && y = 5) { result = true; message = "游戏结束"; } else { result = false; CountCh = 1; } // 斜向左上 for (int x = col - 1, y = row - 1; x >= 0 && y >= 0; x--, y--) { if (haschess(x, y, c)) { CountCh++; } else { break; } } // 斜向右下 for (int x = col + 1, y = row + 1; x


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3