Java实现简单五子棋程序
五子棋java代码实现

package images;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JOptionPane;public class FiveChessTest extends JFrame implements MouseListener{int x = 0;int y = 0;int[][] allChess = new int[19][19];//标识当前是黑棋还是白棋下下一步boolean isBlack = true;//标识当前游戏是否可以继续boolean canPlay = true;//保存显示的提示信息String message = "黑方先行";BufferedImage bf;FiveChessTest(){super();//设置窗体相关属性this.setTitle("20121683阮颖鹏");this.setSize(500,500);this.addMouseListener(this);try {bf = ImageIO.read(new FileInputStream("C:\\Documents and Settings\\Administrator\\桌面\\FiveChess\\src\\images\\fzq.jpg"));} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}repaint();this.setLocationRelativeTo(null);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }public void paint(Graphics g){g.drawImage(bf,0,20,null);//添加背景信息g.setColor(Color.BLACK);g.setFont(new Font("黑体",Font.BOLD,20));g.drawString("游戏信息:"+message, 130, 60);//绘制棋盘for(int i=0;i<=18;i++){g.drawLine(10, 70+20*i, 370, 70+20*i);g.drawLine(10+20*i, 70, 10+20*i, 430);}//绘制全部棋子for(int i = 0 ; i<19 ; i++)for(int j= 0 ; j<19 ; j++){//定义变量记录当前棋子在数组中的位置int tempX = i*20 + 10;int tempY = j*20 + 70;if(allChess[i][j] == 1){//绘制黑子g.setColor(Color.BLACK);g.fillOval(tempX-7, tempY-7, 14, 14);}if(allChess[i][j] == 2){//绘制白子g.setColor(Color.WHITE);g.fillOval(tempX-7, tempY-7, 14, 14);}}}@Overridepublic void mouseClicked(MouseEvent arg0) {// TODO 自动生成的方法存根if (canPlay) {x=arg0.getX();y=arg0.getY();if (x >= 10 && x <= 370 && y >= 70 && y <=430) {x = x / 20;y = (y - 60) / 20;// 判断落子处是否已有棋子if (allChess[x][y] == 0) {// 判断当前要下的是什么颜色棋子if (isBlack) {allChess[x][y] = 1;isBlack = false;message = "轮到白方";} else {allChess[x][y] = 2;isBlack = true;message = "轮到黑方";}} else {JOptionPane.showMessageDialog(this, " 当前位置已有棋子,请重新落子!");}this.repaint();}}}@Overridepublic void mouseEntered(MouseEvent arg0) {// TODO 自动生成的方法存根}@Overridepublic void mouseExited(MouseEvent arg0) {// TODO 自动生成的方法存根}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO 自动生成的方法存根}@Overridepublic void mouseReleased(MouseEvent arg0) { // TODO 自动生成的方法存根}}。
java语言写一个简易的五子棋

java语⾔写⼀个简易的五⼦棋经过16天的java学习,也学得了不少关于Java⽅⾯的知识,我想分享⼀下我⽤java写的⼀个简单的五⼦棋。
游戏规则:(1)对局双⽅各执⼀⾊棋⼦。
(2)空棋盘开局。
(3)⽩先、⿊后,交替下⼦,每次只能下⼀⼦。
(4)棋⼦下在棋盘的空⽩点上,棋⼦下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。
(5)⽩⽅的第⼀枚棋⼦可下在棋盘任意交叉点上。
(6)任意⼀⽅达成五连⼦即可获胜整体如下:import java.util.Scanner;public class WuZiQi2 {static String[][] a = new String[10][10];public static void main(String[] args) {init();paint();XiaZi();}public static void init() {for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++) {System.out.println(a[i][j]);a[i][j] = "+";}}}public static void paint() {for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++) {System.out.print(a[/**/i][j] + "" + "\t");}System.out.println();}}public static void XiaZi() {boolean flag = true;Scanner s = new Scanner(System.in);int x = 0;int y = 0;while (true) {if (flag) {System.out.println("A下");System.out.println("请输⼊x坐标");x = s.nextInt();System.out.println("请输⼊y坐标");y = s.nextInt();if (x > 10 || y > 10 || x < 1 || y < 1) {System.out.println("请输⼊正确的xy坐标");continue;}if (isRepeat(x, y)) {a[y - 1][x - 1] = "○";paint();} else {continue;}} else {System.out.println("B下");System.out.println("请输⼊x坐标");x = s.nextInt();System.out.println("请输⼊y坐标");y = s.nextInt();if (x > 10 || y > 10 || x < 1 || y < 1) {System.out.println("请输⼊正确的xy坐标");continue;}if (isRepeat(x, y)) {a[y - 1][x - 1] = "●";paint();} else {continue;}}flag = !flag;boolean l = upDown(x - 1, y - 1, a[y - 1][x - 1]);if (l) {break;}boolean p = leftRight(x - 1, y - 1, a[y - 1][x - 1]);if (p) {break;}boolean o = lurd(x - 1, y - 1, a[y - 1][x - 1]);if (o) {break;}boolean f = ruld(x - 1, y - 1, a[y - 1][x - 1]);if (f){break;}}}public static boolean isRepeat(int x, int y) {if (!a[y - 1][x - 1].equals("○") && !a[y - 1][x - 1].equals("●")) { return true;}return false;}public static boolean upDown(int x, int y, String s) {//上下int count = 1;int i = x;int k = y - 1;for (; k >= 0; k--) {if (a[k][i].equals(s)) {count++;}else{break;}}int j = y + 1;for (; j <= 9; j++) {if (a[j][i].equals(s)) {count++;}else{break;}}if (count >= 5) {System.out.println(s + "Win");return true;}return false;}public static boolean leftRight(int x, int y, String s) {//左右int count = 1;int i = x - 1;int k = y;for (; i >= 0; i--) {if (a[k][i].equals(s)) {count++;}else{break;}}int j = x + 1;for (; j <= 9; j++) {if (a[k][j].equals(s)) {count++;}else{break;}}if (count >= 5) {System.out.println(s + "Win");return true;}return false;}public static boolean lurd(int x, int y, String s) {//左上右下int count = 1;int i = x - 1;int k = y - 1;for (; i >= 0 & k >= 0; i--, k--) {if (a[k][i].equals(s)) {count++;}else{break;}}int n = x + 1;int m = y + 1;for (; n <= 9 & m <= 9; n++, m++) {if (a[m][n].equals(s)) {count++;}else{break;}}if (count >= 5) {System.out.println(s + "Win");return true;}return false;}public static boolean ruld(int x, int y,String s){//右上左下 int count = 1;int q = x + 1;int e = y - 1;for (;q<=9&e>=0;q++,e--){if (a[e][q].equals(s)){count++;}else{break;}}int r = x - 1;int t = y + 1;for (;r>=0&t<=9;r--,t++){if (a[t][r].equals(s)){count++;}else{break;}}if (count>=5) {System.out.println(s+"Win");return true;}return false;}}。
java五子棋的简单思路

Java五子棋的简单思路1. 介绍五子棋是一种古老而受欢迎的策略棋类游戏,它的规则简单而容易上手,同时也需要一定的战略和计算能力。
在这个任务中,我们将使用Java编写一个简单的五子棋游戏。
2. 游戏规则五子棋的规则非常简单,两名玩家轮流落子,先形成连续的五个棋子的一方即获胜。
棋盘是一个15×15的网格,玩家可以在空白格子中落下自己的棋子。
3. 实现思路为了实现这个简单的五子棋游戏,我们可以按照以下步骤进行:3.1 创建游戏界面首先,我们需要创建一个游戏界面,用于显示棋盘和游戏状态。
可以使用Java Swing或JavaFX来创建一个窗口,并在窗口中绘制棋盘。
3.2 绘制棋盘在游戏界面中,我们需要绘制一个15×15的棋盘。
可以使用Java的图形库来绘制网格和棋子。
3.3 处理玩家落子在游戏界面中,我们需要处理玩家的落子操作。
可以使用鼠标事件监听器来获取玩家的点击位置,并在对应的位置上放置玩家的棋子。
3.4 判断胜负在每次玩家落子后,我们需要判断是否有一方获胜。
可以编写一个判断函数,检查棋盘上是否存在连续的五个同色棋子。
3.5 实现游戏逻辑在游戏界面中,我们需要实现游戏的逻辑。
包括轮流落子、判断胜负、显示游戏状态等。
3.6 添加AI玩家(可选)如果想要增加游戏的挑战性,我们可以添加一个简单的AI玩家。
可以使用一些简单的算法来实现AI玩家的落子策略。
4. 代码实现这里是一个简单的Java五子棋游戏的代码示例:import javax.swing.*;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class GobangGame extends JFrame {private int[][] board;private int currentPlayer;public GobangGame() {setTitle("五子棋游戏");setSize(500, 500);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);board = new int[15][15];currentPlayer = 1;JPanel panel = new JPanel() {@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);drawBoard(g);}};panel.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {int x = e.getX() / 30;int y = e.getY() / 30;if (board[x][y] == 0) {board[x][y] = currentPlayer;currentPlayer = 3 - currentPlayer;panel.repaint();if (checkWin(x, y)) {JOptionPane.showMessageDialog(null, "玩家 " + (3 - cur rentPlayer) + " 获胜!");resetBoard();panel.repaint();}}}});add(panel);setVisible(true);}private void drawBoard(Graphics g) {for (int i = 0; i < 15; i++) {g.drawLine(15, 15 + i * 30, 435, 15 + i * 30);g.drawLine(15 + i * 30, 15, 15 + i * 30, 435);}for (int i = 0; i < 15; i++) {for (int j = 0; j < 15; j++) {if (board[i][j] == 1) {g.setColor(Color.BLACK);g.fillOval(i * 30 + 3, j * 30 + 3, 24, 24);} else if (board[i][j] == 2) {g.setColor(Color.WHITE);g.fillOval(i * 30 + 3, j * 30 + 3, 24, 24);}}}}private boolean checkWin(int x, int y) {int color = board[x][y];int count = 1;// 横向判断for (int i = x - 1; i >= 0 && board[i][y] == color; i--) { count++;}for (int i = x + 1; i < 15 && board[i][y] == color; i++) { count++;}if (count >= 5) {return true;}// 纵向判断count = 1;for (int i = y - 1; i >= 0 && board[x][i] == color; i--) { count++;}for (int i = y + 1; i < 15 && board[x][i] == color; i++) {count++;}if (count >= 5) {return true;}// 左上-右下判断count = 1;for (int i = x - 1, j = y - 1; i >= 0 && j >= 0 && board[i][j] == colo r; i--, j--) {count++;}for (int i = x + 1, j = y + 1; i < 15 && j < 15 && board[i][j] == colo r; i++, j++) {count++;}if (count >= 5) {return true;}// 右上-左下判断count = 1;for (int i = x + 1, j = y - 1; i < 15 && j >= 0 && board[i][j] == colo r; i++, j--) {count++;}for (int i = x - 1, j = y + 1; i >= 0 && j < 15 && board[i][j] == colo r; i--, j++) {count++;}if (count >= 5) {return true;}return false;}private void resetBoard() {for (int i = 0; i < 15; i++) {for (int j = 0; j < 15; j++) {board[i][j] = 0;}}currentPlayer = 1;}public static void main(String[] args) {new GobangGame();}}5. 总结通过以上的实现思路和代码示例,我们可以使用Java编写一个简单的五子棋游戏。
简单的五子棋java游戏代码

package day17.gobang;import java.util.Arrays;public class GoBangGame {public static final char BLANK='*';public static final char BLACK='@';public static final char WHITE='O';public static final int MAX = 16;private static final int COUNT = 5;//棋盘private char[][] board;public GoBangGame() {}//开始游戏public void start() {board = new char[MAX][MAX];//把二维数组都填充‘*’for(char[] ary: board){Arrays.fill(ary, BLANK);}}public char[][] getChessBoard(){return board;}public void addBlack(int x, int y) throws ChessExistException{ //@//char blank = '*';//System.out.println( x +"," + y + ":" + board[y][x] + "," + BLANK); if(board[y][x] == BLANK){// x, y 位置上必须是空的才可以添棋子board[y][x] = BLACK;return;}throw new ChessExistException("已经有棋子了!");}public void addWhite(int x, int y)throws ChessExistException{if(board[y][x] == BLANK){// x, y 位置上必须是空的才可以添棋子board[y][x] = WHITE;return;}throw new ChessExistException("已经有棋子了!");}//chess 棋子:'@'/'O'public boolean winOnY(char chess, int x, int y){//先找到y方向第一个不是blank的棋子int top = y;while(true){if(y==0 || board[y-1][x]!=chess){//如果y已经是棋盘的边缘,或者的前一个不是chess//就不再继续查找了break;}y--;top = y;}//向回统计所有chess的个数,如果是COUNT个就赢了int count = 0;y = top;while(true){if(y==MAX || board[y][x]!=chess){//如果找到头或者下一个子不是chess 就不再继续统计了break;}count++;y++;}return count==COUNT;}//chess 棋子:'@'/'O'public boolean winOnX(char chess, int x, int y){//先找到x方向第一个不是blank的棋子int top = x;while(true){if(x==0 || board[y][x-1]!=chess){//如果x已经是棋盘的边缘,或者的前一个不是chess//就不再继续查找了break;}x--;top = x;}//向回统计所有chess的个数,如果是COUNT个就赢了int count = 0;x = top;while(true){if(x==MAX || board[y][x]!=chess){//如果找到头或者下一个子不是chess 就不再继续统计了break;}count++;x++;}return count==COUNT;}//chess 棋子:'@'/'O'public boolean winOnXY(char chess, int x, int y){//先找MAX向第一个不是blank的棋子int top = y;int left = x;while(true){if(x==0 || y==0 || board[y-1][x-1]!=chess){//如果x已经是棋盘的边缘,或者的前一个不是chess//就不再继续查找了break;}x--;y--;top = y;left=x;}//向回统计所有chess的个数,如果是COUNT个就赢了int count = 0;x = left;y = top;while(true){if(x==MAX || y==MAX || board[y][x]!=chess){//如果找到头或者下一个子不是chess 就不再继续统计了break;}count++;x++;y++;}return count==COUNT;}//chess 棋子:'@'/'O'public boolean winOnYX(char chess, int x, int y){//先找到x方向第一个不是blank的棋子int top = y;int left = x;while(true){if(x==MAX-1 || y==0 || board[y-1][x+1]!=chess){//如果x已经是棋盘的边缘,或者的前一个不是chess//就不再继续查找了break;}x++;y--;top = y;left=x;}//向回统计所有chess的个数,如果是COUNT个就赢了int count = 0;x = left;y = top;while(true){if(x==0 || y==MAX || board[y][x]!=chess){//如果找到头或者下一个子不是chess 就不再继续统计了break;}count++;x--;y++;}return count==COUNT;}public boolean whiteIsWin(int x, int y) {//在任何一个方向上赢了,都算赢return winOnY(WHITE, x, y) ||winOnX(WHITE, x, y) ||winOnXY(WHITE, x, y) ||winOnYX(WHITE, x, y);}public boolean blackIsWin(int x, int y) {return winOnY(BLACK, x, y) ||winOnX(BLACK, x, y) ||winOnXY(BLACK, x, y) ||winOnYX(BLACK, x, y);}}。
java实现简易的五子棋游戏

java实现简易的五⼦棋游戏本⽂实例为⼤家分享了java实现简易五⼦棋游戏的具体代码,供⼤家参考,具体内容如下先上效果图⼀、问题分析1、五⼦棋游戏分析:五⼦棋作为较为普遍且简易的娱乐游戏,受到众多⼈的热爱,且五⼦棋AI也是⼀个较为容易实现的AI。
下⾯我们先来分析游戏规则。
(哈哈,虽然⼤家都知道,但我还是想写写)双⽅分别使⽤⿊⽩两⾊棋⼦,下在棋盘横线交叉处,先连成五⼦者胜利。
(⿊棋禁⼿啥的规则在我的程序⾥没加,就不赘述了)。
2、程序分析:(1)⾸先,五⼦棋开始,我们需要⼀个棋盘,15*15的棋盘,需要⿊⽩棋⼦。
(2)其次,我们需要实现棋⼦顺序的改变,就是实现先下⿊棋,再下⽩棋,然后实现⼀个基本的修正功能,就是通过点击交叉点周围的位置,使棋⼦下到交叉处。
(3)再之后呢,有了棋⼦棋盘,(其实这个时候已经能进⾏下棋了,⾃⼰判断胜负,哈哈),但是呢,我们接下来需要加⼀个判断输赢的功能。
(4)接下来,我们就来丰富我们的五⼦棋游戏,加⼀些功能键,例如重新开始,悔棋,认输,计时啥啥啥的。
(5)最后来⼀个⾼级点的,就是实现⼈机对战,实现AI下棋。
⼆、模块分析1、棋盘棋⼦模块棋盘嘛就⽤直线画就好,横线15条,竖线15条,棋⼦也就两个,可以画得花哨⼀点,⽐如3D棋⼦,也可以简单⼀点就⽤填充圆就好。
博主画了⼀个⿊⾊3D棋⼦,⽩的没画。
(这⾥继承了我之前的⼀个画板,实现直线的重绘,可以去翻⼀翻我的之前有关画板的博客)。
创建⼀个⼆维数组,存放棋⼦,⽤1代表⿊棋,2代表⽩棋,0代表没棋。
⽤count变量来计算到谁下棋了,以及记录下了第⼏颗棋⼦了。
以下是窗体代码public void outUI(){//设置标题this.setTitle("五⼦棋");this.setSize(1680,1380);this.setLayout(null);JButton btn = new JButton();JButton btn1 = new JButton();JButton btn2 = new JButton();JButton btn3 = new JButton();JButton btn4 = new JButton();btn.setBounds(1340, 780, 210, 65);btn1.setBounds(1340,860,210, 65);btn2.setBounds(1340,940,210, 65);btn3.setBounds(320,1200,210, 65);btn4.setBounds(780,1200,210, 65);//获取⼀个图⽚ImageIcon square=new ImageIcon(this.getClass().getResource("JButton1.jpg"));ImageIcon square1=new ImageIcon(this.getClass().getResource("JButton.jpg"));ImageIcon square2=new ImageIcon(this.getClass().getResource("JButton2.jpg"));ImageIcon square3=new ImageIcon(this.getClass().getResource("JButton3.jpg"));ImageIcon square4=new ImageIcon(this.getClass().getResource("JButton4.jpg"));//设置图⽚的⼤⼩square.setImage(square.getImage().getScaledInstance(210, 65, 0));square1.setImage(square1.getImage().getScaledInstance(210, 65, 0));square2.setImage(square2.getImage().getScaledInstance(210, 65, 0));square3.setImage(square3.getImage().getScaledInstance(210, 65, 0));square4.setImage(square4.getImage().getScaledInstance(210, 65, 0));//把图⽚放到按钮上btn.setIcon(square);btn1.setIcon(square1);btn2.setIcon(square2);btn3.setIcon(square3);btn4.setIcon(square4);btn.setText("开始");btn1.setText("悔棋");btn2.setText("认输");btn3.setText("⼈机对战");btn4.setText("⼈⼈对战");this.add(btn);this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);MyGameListen bn=new MyGameListen();this.addMouseListener(bn);btn.addActionListener(bn);btn1.addActionListener(bn);btn2.addActionListener(bn);btn3.addActionListener(bn);btn4.addActionListener(bn);Graphics f= this.getGraphics();AI Ai=new AI();AI2 Ai2=new AI2();AIPlus Ai3=new AIPlus();bn.ai=Ai;bn.ai2=Ai2;bn.ai3=Ai3;bn.f1=f;Ai.f1=f;Ai2.f1=f;Ai3.f1=f;bn.sn=this;Ai.arr2=bn.arr;Ai2.arr2=bn.arr;Ai3.arr=bn.arr;arragain=bn.arr;showtime a=new showtime();a.count1=bn.count;}int[][] arragain;@Overridepublic void paint(Graphics g) {// TODO Auto-generated method stub//加背景图ImageIcon square5=new ImageIcon(this.getClass().getResource("game.jpeg"));ImageIcon square6=new ImageIcon(this.getClass().getResource("title.jpg"));square5.setImage(square5.getImage().getScaledInstance( 1200,1162,0));square6.setImage(square6.getImage().getScaledInstance( 366,683,0));g.drawImage(square5.getImage(),40,60,this);g.drawImage(square6.getImage(),1280,100,366,683,this);for(int i=1;i<=15;i++){g.drawLine(80, i*80, 1200, i*80);g.drawLine(i*80,80,i*80,1200);}g.drawLine(60,60 , 1220, 60);g.drawLine(60,60 , 60, 1220);g.drawLine(60, 1220, 1220,1220);g.drawLine(1220, 1220, 1220,60);g.fillOval(630, 630, 20, 20);g.fillOval(310, 950, 20, 20);g.fillOval(310, 310, 20, 20);g.fillOval(950, 950, 20, 20);g.fillOval(950, 310, 20, 20);// 绘制棋盘MyGameListen bn1=new MyGameListen();bn1.f1=g;for(int i=0;i<arragain.length;i++) {for(int j=0;j<arragain.length;j++){if(arragain[i][j]==1){Blackchessman(i*80-40,j*80-40,g);}else if(arragain[i][j]==2){whitechessman(i*80-40,j*80-40,g);}}}}public void Blackchessman(int x,int y,Graphics g){for(int i=0;i<80;i++){Color c=new Color(i*3,i*3,i*3);g.setColor(c);g.fillOval(x+i/3, y+i/3, 80-i, 80-i);}}public void whitechessman(int x,int y,Graphics g){g.setColor(Color.white);g.fillOval(x,y,80,80);}以下是⿏标监听器的代码,这⾥有部分变量没有给出,在⽂章末尾会附上完整代码public void mousePressed(MouseEvent e){x1=e.getX();y1=e.getY();m=correct(x1);n=correct(y1);if(x1<=1240&&y1<=1240){if(arr[m/80][n/80]==0){if(count%2!=0){x1=e.getX();y1=e.getY();m=correct(x1);n=correct(y1);Blackchessman(m-40,n-40);arr[m/80][n/80]=1;arr1[m/80][n/80]=count;count++;if( gobangiswin.isWin(arr, m/80, n/80)) {JOptionPane.showMessageDialog(null, "⿊棋WIN!!");}//ai下棋ai3.playchess();arr[ai3.q][ai3.w]=2;arr1[ai3.q][ai3.w]=count;count++;if( gobangiswin.isWin(arr,ai3.q ,ai3.w )) {JOptionPane.showMessageDialog(null, "⽩棋WIN!!");}}}else{x1=e.getX();y1=e.getY();m=correct(x1);n=correct(y1);whitechessman(m-40,n-40);arr[m/80][n/80]=2;arr1[m/80][n/80]=count;count++;if( gobangiswin.isWin(arr, m/80, n/80)) {JOptionPane.showMessageDialog(null, "⽩棋WIN!!");}}}elsereturn;}else {return;}}2、位置修正这个功能其实有很多种实现的⽅法,可以根据⾃⼰的棋盘位置啥的进⾏修正。
java五子棋小游戏

五子棋小游戏1.功能模块图2.游戏说明(1)黑棋先行,白棋随后。
从第一个棋子开始相互顺序落子。
五子棋游戏 开始游戏 执棋子颜色 黑子先行 判断胜负 游戏结束 图1.功能模块图(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。
(3)设定游戏界面大小。
(4)在游戏过程中或下完时可选择开局重新开始。
(5)赢家对话框提示。
(6)游戏实现了基本的单机功能但为实现人机对战和人人对战。
3.游戏界面(1)五子棋游戏的主界面,如图2所示。
图2 程序主界面(2)五子棋游戏的结束界面,如图3所示。
图3 游戏结束界面(3)游戏游戏栏中的各个选项,如图4所示。
图4 Game栏中的选项(4)视图设置栏中的各个选项,如图5所示。
图5 Configure栏中的各个选项(5)Help帮助栏中的选项,如图6所示。
图6 Help栏中的选项(6)点击Help栏中的About选项弹出的界面,如图7所示。
图7 About选项弹出时的界面4.设计任务与目的用java语言编程并检验一个学期以来学习java语言的成果,通过编写一个简单的五子棋游戏实践,检验在学习java语言的过程中的特点及不足,进行集资料、查阅文献、方案制定等实践,促进对所学知识应用能力的提高,灵活运用Java使用方法和编程语法,更好的熟练掌握java语言的特点,并及时反省和提高自己的知识和技术。
研究目标:该五子棋游戏应主要包括下述方面:1.初始化界面时棋盘的规格;2.响应鼠标点击并在相应位置画出棋子;3.有一定的智能(可以判断胜负);4.利用java语言中的panel放置棋盘显示棋子(注:其内包含鼠标响应)。
5.参考文献[1]耿祥义.JAVA大学实用教程.北京:电子工业出版社.2005.3:85-113[2]朱战立,沈伟.Java程序设计实用指南.北京:电子工业出版社,2005.1:48-135[3] 唐大仕.Java程序设计[M]. 北京:北方交通大学出版社:2007.05:56-92[4]叶核亚. JAVA2程序设计实用教程[M].北京:电子工业出版社;2008.4:64-98[5]邢素萍. JAVA办公自动化项目方案精解[M].北京:航空工业出版社, 2006.9:35-1206.方法见表方法名功能备注Draw()方法在Graphics类中,绘制一些具体的东西paint()方法重绘图形setColor()设置颜色repaint() 一个具有刷新页面效果consume() 销毁实例的方法Show() 将所建窗口显示出来show()方法将所建窗口显示出来WindowEvent()方法用来处理点击窗体右上角关闭按钮的事件setSize ()方法设定固定大小4.设计任务与目的通过这次五子棋的课程设计,进一步加深对JA V A基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。
java开发实现五子棋游戏

java开发实现五⼦棋游戏本⽂实例为⼤家分享了java实现五⼦棋游戏的具体代码,供⼤家参考,具体内容如下此游戏具有双⼈对战功能和⼈机对战功能⼀、游戏界⾯的实现⼀个游戏⾸先从设计界⾯开始1、⾸先创建⼀个类,作⽤是通过对窗体组件的⼀些设置来实现简单游戏界⾯public void gameUI(){//窗体组件MyFrame jf = new MyFrame();jf.setSize(900, 800);jf.setTitle("冷丁-五⼦棋");//居中显⽰jf.setLocationRelativeTo(null);//设置退出进程jf.setDefaultCloseOperation(3);//流式布局管理器FlowLayout flow=new FlowLayout();jf.setLayout(flow);//边框布局BorderLayout border=new BorderLayout();jf.setLayout(border);//⾯板: JPanel 默认流式布局JPanel eastPanel=new JPanel();Dimension dm=new Dimension(100,0);//除了JFrame,其他组件设置⼤⼩都是该⽅法eastPanel.setPreferredSize(dm);jf.add(eastPanel,BorderLayout.EAST);}2、加⼊功能按钮JButton jbu=new JButton("开始");eastPanel.add(jbu,BorderLayout.EAST);JButton jbu2=new JButton("悔棋");eastPanel.add(jbu2,BorderLayout.EAST);JButton jbu3=new JButton("认输");eastPanel.add(jbu3,BorderLayout.EAST);JButton jbu4=new JButton("⼈机对战");eastPanel.add(jbu4,BorderLayout.EAST);//设置窗体可见jf.setVisible(true);每个按钮添加ActionListner监听jbu.addActionListener(mouse);jbu2.addActionListener(mouse);jbu3.addActionListener(mouse);jbu4.addActionListener(mouse);在GameMouse类中对过对actionPerformed⽅法的重新来判断当前是哪个按钮按下,并实现对应的功能public void actionPerformed(ActionEvent e) {//获取按钮上的内容String name=e.getActionCommand();System.out.println("点击按钮:"+name);if(name.equals("开始")){jf.removeMouseListener(this);jf.addMouseListener(this);startflag=false;flag=false;gameOver=false;for(int i=0;i<15;i++){for(int j=0;j<15;j++){}jf.paint(gr);}else if(name.equals("悔棋")){arrChess[nowx][nowy]=0;jf.paint(gr);this.flag=!this.flag;}else if(name.equals("认输")){if(this.flag){gr.setColor(Color.red);gr.setFont(new Font("TimesRoman", Font.BOLD, 50));gr.drawString("⿊⽅获胜!",300,300);}else{gr.setColor(Color.red);gr.setFont(new Font("TimesRoman", Font.BOLD, 50));gr.drawString("⽩⽅获胜!",300,300);}}else if(name.equals("⼈机对战")){jf.removeMouseListener(this);jf.addMouseListener(this);startflag=false;flag=false;gameOver=false;for(int i=0;i<15;i++){for(int j=0;j<15;j++){arrChess[i][j]=0;}}this.aiflag=true;jf.paint(gr);}}3、游戏效果是通过画笔画在组件上实现的,获取画笔:图形显⽰在哪个组件上,画笔就从该组件上获取。
JAVA课程设计 五子棋(内附完整代码)

JAVA课程设计设计题目:五子棋游戏一.简要的介绍五子棋1.五子棋的起源五子棋,又被称为“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”。
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
2.现在五子棋标准棋盘(如图所示)3.五子棋的棋子五子棋采用两种颜色棋子,黑色棋子和白色棋子,和围棋相同,4.五子棋规则五子棋就是五个棋子连在一起就算赢,黑棋先行,下棋下在棋盘交叉线上,由于黑棋先行,优势太大,所以对黑棋设了禁手,又规定了“三手交换”,就是黑棋下第 2 手棋,盘面第 3 着棋之后,白方在应白 2 之前,如感觉黑方棋形不利于己方,可出交换,即执白棋一方变为执黑棋一方。
和“五手两打法”,就是黑棋在下盘面上关键的第 5 手时,必须下两步棋,让白方在这两步棋中任选一步,然后再续下。
不过一般爱好者不需要遵循这么多规则。
二.程序流程三.代码设计与分析main方法创建了ChessFrame类的一个实例对象(cf),并启动屏幕显示显示该实例对象。
public class FiveChessAppletDemo {public static void main(String args[]){ChessFrame cf = new ChessFrame();cf.show();}}用类ChessFrame创建五子棋游戏主窗体和菜单import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessFrame extends JFrame implements ActionListener { private String[] strsize={"标准棋盘","改进棋盘","扩大棋盘"}; private String[] strmode={"人机对战","人人对战"};public static boolean iscomputer=true,checkcomputer=true; private int width,height;private ChessModel cm;private MainPanel mp;构造五子棋游戏的主窗体public ChessFrame() {this.setTitle("五子棋游戏");cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,"Center");this.setResizable(false);this.addWindowListener(new ChessWindowEvent());MapSize(14,14);JMenuBar mbar = new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu = new JMenu("游戏");mbar.add(makeMenu(gameMenu, new Object[] {"开局", null,"棋盘",null,"模式", null, "退出"}, this));JMenu lookMenu =new JMenu("外观");mbar.add(makeMenu(lookMenu,new Object[] {"类型一","类型二","类型三"},this));JMenu helpMenu = new JMenu("版本");mbar.add(makeMenu(helpMenu, new Object[] {"关于"}, this));}构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items[], Object target){ JMenu m = null;if(parent instanceof JMenu)m = (JMenu)parent;else if(parent instanceof String)m = new JMenu((String)parent);elsereturn null;for(int i = 0; i < items.length; i++)if(items[i] == null)m.addSeparator();else if(items[i] == "棋盘"){JMenu jm = new JMenu("棋盘");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int j=0;j<strsize.length;j++){rmenu=makeRadioButtonMenuItem(strsize[j],target);if (j==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}else if(items[i] == "模式"){JMenu jm = new JMenu("模式");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int h=0;h<strmode.length;h++){rmenu=makeRadioButtonMenuItem(strmode[h],target);if(h==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}elsem.add(makeMenuItem(items[i], target));return m;}构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target){ JMenuItem r = null;if(item instanceof String)r = new JMenuItem((String)item);else if(item instanceof JMenuItem)r = (JMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}构造五子棋游戏的单选按钮式菜单项public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item, Object target){JRadioButtonMenuItem r = null;if(item instanceof String)r = new JRadioButtonMenuItem((String)item);else if(item instanceof JRadioButtonMenuItem)r = (JRadioButtonMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}public void MapSize(int w,int h){setSize(w * 24, h * 27);if(this.checkcomputer)this.iscomputer=true;elsethis.iscomputer=false;mp.setModel(cm);mp.repaint();}public boolean getiscomputer(){return this.iscomputer;}public void restart(){int modeChess = cm.getModeChess();if(modeChess <= 3 && modeChess >= 0){cm = new ChessModel(modeChess);MapSize(cm.getWidth(),cm.getHeight());}}public void actionPerformed(ActionEvent e){String arg=e.getActionCommand();try{if (arg.equals("类型三"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");else if(arg.equals("类型二"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");elseUIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel" );SwingUtilities.updateComponentTreeUI(this);}catch(Exception ee){}if(arg.equals("标准棋盘")){this.width=14;this.height=14;cm=new ChessModel(1);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("改进棋盘")){this.width=18;this.height=18;cm=new ChessModel(2);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("扩大棋盘")){this.width=22;this.height=22;cm=new ChessModel(3);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人机对战")){this.checkcomputer=true;this.iscomputer=true;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人人对战")){this.checkcomputer=false;this.iscomputer=false;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("开局")){restart();}if(arg.equals("关于"))JOptionPane.showMessageDialog(null, "第一版", "版本",JOptionPane.PLAIN_MESSAGE );if(arg.equals("退出"))System.exit(0);}}用类ChessModel实现了整个五子棋程序算法的核心import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessModel {规定棋盘的宽度、高度、棋盘的模式private int width,height,modeChess;规定棋盘方格的横向、纵向坐标private int x=0,y=0;棋盘方格的横向、纵向坐标所对应的棋子颜色,数组arrMapShow只有3个值:1,2,3,-1,其中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子private int[][] arrMapShow;交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOdd,isExist;public ChessModel() {}该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘public ChessModel(int modeChess){this.isOdd=true;if(modeChess == 1){PanelInit(14, 14, modeChess);}if(modeChess == 2){PanelInit(18, 18, modeChess);}if(modeChess == 3){PanelInit(22, 22, modeChess);}}按照棋盘模式构建棋盘大小private void PanelInit(int width, int height, int modeChess){ this.width = width;this.height = height;this.modeChess = modeChess;arrMapShow = new int[width+1][height+1];for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){arrMapShow[i][j] = -1;}}}获取是否交换棋手的标识符public boolean getisOdd(){return this.isOdd;}设置交换棋手的标识符public void setisOdd(boolean isodd){ if(isodd)this.isOdd=true;elsethis.isOdd=false;}获取某棋盘方格是否有棋子的标识值public boolean getisExist(){return this.isExist;}获取棋盘宽度public int getWidth(){return this.width;}获取棋盘高度public int getHeight(){return this.height;}获取棋盘模式public int getModeChess(){return this.modeChess;}获取棋盘方格上棋子的信息public int[][] getarrMapShow(){return arrMapShow;}判断下子的横向、纵向坐标是否越界private boolean badxy(int x, int y){if(x >= width+20 || x < 0)return true;return y >= height+20 || y < 0;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public boolean chessExist(int i,int j){if(this.arrMapShow[i][j]==1 || this.arrMapShow[i][j]==2)return true;return false;}判断该坐标位置是否可下棋子public void readyplay(int x,int y){if(badxy(x,y))return;if (chessExist(x,y))return;this.arrMapShow[x][y]=3;}在该坐标位置下棋子public void play(int x,int y){if(badxy(x,y))return;if(chessExist(x,y)){this.isExist=true;return;}elsethis.isExist=false;if(getisOdd()){setisOdd(false);this.arrMapShow[x][y]=1;}else{setisOdd(true);this.arrMapShow[x][y]=2;}}计算机走棋说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,最后得出棋子数最大值的坐标,下子public void computerDo(int width,int height){int max_black,max_white,max_temp,max=0;setisOdd(true);System.out.println("计算机走棋 ...");for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){算法判断是否下子if(!chessExist(i,j)){判断白子的最大值max_white=checkMax(i,j,2);判断黑子的最大值max_black=checkMax(i,j,1);max_temp=Math.max(max_white,max_black);if(max_temp>max){max=max_temp;this.x=i;this.y=j;}}}}setX(this.x);setY(this.y);this.arrMapShow[this.x][this.y]=2;}记录电脑下子后的横向坐标public void setX(int x){this.x=x;}记录电脑下子后的纵向坐标public void setY(int y){this.y=y;}获取电脑下子的横向坐标public int getX(){return this.x;}获取电脑下子的纵向坐标public int getY(){return this.y;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public int checkMax(int x, int y,int black_or_white){ int num=0,max_num,max_temp=0;int x_temp=x,y_temp=y;int x_temp1=x_temp,y_temp1=y_temp;判断右边for(int i=1;i<5;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)num++;elsebreak;}判断左边x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;if(x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num<5)max_temp=num;判断上面x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断下面y_temp1=y_temp;for(int i=1;i<5;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断左上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1-=1;y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断右下方x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<5;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断右上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断左下方x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;max_num=max_temp;return max_num;}判断胜负public boolean judgeSuccess(int x,int y,boolean isodd){ int num=1;int arrvalue;int x_temp=x,y_temp=y;if(isodd)arrvalue=2;elsearrvalue=1;int x_temp1=x_temp,y_temp1=y_temp;判断右边胜负for(int i=1;i<6;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}判断左边胜负x_temp1=x_temp;for(int i=1;i<6;i++){x_temp1-=1;break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断上方胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断下方胜负y_temp1=y_temp;for(int i=1;i<6;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断左上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断右下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断右上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断左下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}if(num==5)return true;return false;}赢棋后的提示public void showSuccess(JPanel jp){JOptionPane.showMessageDialog(jp,"你赢了","结果",RMATION_MESSAGE);}输棋后的提示public void showDefeat(JPanel jp){JOptionPane.showMessageDialog(jp,"你输了","结果",RMATION_MESSAGE);}}用类MainPanel主要完成如下功能:1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class MainPanel extends JPanelimplements MouseListener,MouseMotionListener{设定棋盘的宽度和高度private int width,height;private ChessModel cm;根据棋盘模式设定面板的大小MainPanel(ChessModel mm){cm=mm;width=cm.getWidth();height=cm.getHeight();addMouseListener(this);}根据棋盘模式设定棋盘的宽度和高度public void setModel(ChessModel mm){cm = mm;width = cm.getWidth();height = cm.getHeight();}根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子public void paintComponent(Graphics g){super.paintComponent(g);for(int j = 0; j <= height; j++){for(int i = 0; i <= width; i++){int v = cm.getarrMapShow()[i][j];draw(g, i, j, v);}}}根据提供的棋子信息(颜色、坐标)画棋子public void draw(Graphics g, int i, int j, int v){ int x = 20 * i+20;int y = 20 * j+20;画棋盘if(i!=width && j!=height){g.setColor(Color.darkGray);g.drawRect(x,y,20,20);}画黑色棋子if(v == 1 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.black);g.fillOval(x-8,y-8,16,16);}画白色棋子if(v == 2 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.white);g.fillOval(x-8,y-8,16,16);}if(v ==3){g.setColor(Color.cyan);g.drawOval(x-8,y-8,16,16);}}响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等public void mousePressed(MouseEvent evt){int x = (evt.getX()-10) / 20;int y = (evt.getY()-10) / 20;System.out.println(x+" "+y);if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){cm.play(x,y);System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]); repaint();if(cm.judgeSuccess(x,y,cm.getisOdd())){cm.showSuccess(this);evt.consume();ChessFrame.iscomputer=false;}判断是否为人机对弈if(ChessFrame.iscomputer&&!cm.getisExist()){puterDo(cm.getWidth(),cm.getHeight());repaint();if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){ cm.showDefeat(this);evt.consume();}}}}public void mouseClicked(MouseEvent evt){}public void mouseReleased(MouseEvent evt){}public void mouseEntered(MouseEvent mouseevt){}public void mouseExited(MouseEvent mouseevent){}public void mouseDragged(MouseEvent evt){}响应鼠标的拖动事件public void mouseMoved(MouseEvent moveevt){int x = (moveevt.getX()-10) / 20;int y = (moveevt.getY()-10) / 20;cm.readyplay(x,y);repaint();}}import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;响应退出窗口class ChessWindowEvent extends WindowAdapter{public void windowClosing(WindowEvent e){System.exit(0);}ChessWindowEvent(){}}四.程序调试与运行运行:标准棋盘改进棋盘:扩大棋盘:外观类型二:外观类型三:人机对战:结果:五.结论通过对五子棋游戏的编写,使自己对java语言有了更深的了解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5 详细设计5.1 人机界面设计
5.1 五子棋游戏界面
6 测试
6.1 白盒测试
1.白盒测试:白盒测试的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。
这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否能按预定的要求正确工作。
本次课程设计采用语句覆盖的方法:
图6.1 五子棋流程图
6.2 黑盒测试
1.黑盒测试:黑盒测试把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。
也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当的接受输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。
图 6.2 黑盒测试图。