java-----五子棋小游戏(三)-----判断输赢
来源:互联网 发布:超级女声2016网络海选 编辑:程序博客网 时间:2024/04/30 20:14
一、代码实现
package org.like.game.frame;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JOptionPane;public class FiveChessFrame extends JFrame implements MouseListener{int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height; BufferedImage bgImage = null; int x = 0; int y = 0; int[][] allChess = new int[19][19]; boolean isBlack = true; boolean canPlay = true;//判断游戏可以继续落子,如果哪一方胜利,就置为false,不执行mousePressed的主体public FiveChessFrame(){this.setTitle("五子棋");this.setSize(500,500);this.setLocation((width-500)/2,(height-500)/2);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);this.addMouseListener(this);try{bgImage = ImageIO.read(new File("F:/mypicture/java/background.jpg"));}catch (IOException e){e.printStackTrace();}}public void paint(Graphics g){g.drawImage(bgImage,3,20,this);g.setFont(new Font("黑体",Font.BOLD,20));g.drawString("游戏信息:", 150, 50);g.setFont(new Font("宋体",0,14));g.drawString("黑方时间:无限制", 45, 470);g.drawString("白方时间:无限制", 260, 470);for(int i=0;i<19;i++){ g.drawLine(13, 70+20*i, 372, 70+20*i); g.drawLine(13+20*i,70,13+20*i,430);}g.fillOval(71, 128, 4, 4);g.fillOval(311, 128, 4, 4);g.fillOval(311, 368, 4, 4);g.fillOval(71, 368, 4, 4);g.fillOval(311, 248, 4, 4);g.fillOval(191, 128, 4, 4);g.fillOval(71, 248, 4, 4);g.fillOval(191, 368, 4, 4);g.fillOval(191, 248, 4, 4);for(int i=0;i<19;i++)for(int j=0;j<19;j++){if(allChess[i][j] == 1){x = i * 20 + 13;y = j * 20 + 70;g.fillOval(x-7, y-7, 14, 14);}if(allChess[i][j] == 2){x = i * 20 + 13;y = j * 20 + 70;g.setColor(Color.WHITE);g.fillOval(x-7, y-7, 14, 14);g.setColor(Color.BLACK);g.drawOval(x-7, y-7, 14, 14);}}}@Overridepublic void mouseClicked(MouseEvent e){}@Overridepublic void mousePressed(MouseEvent e){if(canPlay == true){ x = e.getX(); y = e.getY(); if(x >= 13 && x <= 372 && y >= 70 && y <= 430) { x = (x - 13) / 20; y = (y - 70) / 20; if(allChess[x][y] == 0) { if(isBlack) { allChess[x][y] = 1; isBlack = false; } else { allChess[x][y] = 2; isBlack = true; } this.repaint(); boolean winFlag = this.checkWin();//每下一个棋子就判断输赢 if(winFlag == true)//哪一方获胜就弹出窗口并将canPlay置为false { JOptionPane.showMessageDialog(this, "游戏结束"+(allChess[x][y] == 1?"黑方":"白棋")+"获胜!"); canPlay = false; } } else { JOptionPane.showMessageDialog(this, "当前位置已经有旗子了,请重新落子!"); } } } }@Overridepublic void mouseReleased(MouseEvent e){}@Overridepublic void mouseEntered(MouseEvent e){}@Overridepublic void mouseExited(MouseEvent e){}public static void main(String[] args){FiveChessFrame ff = new FiveChessFrame(); }private boolean checkWin()//判断输赢{boolean flag = false;int count = 1;int color = allChess[x][y];count = this.checkCount(1, 0, color);//判断横向if (count >= 5) {flag = true;} else {// 判断纵向count = this.checkCount(0, 1, color);if (count >= 5) {flag = true;} else {// 判断右上、左下count = this.checkCount(1, -1, color);if (count >= 5) {flag = true;} else {// 判断右下、左上count = this.checkCount(1, 1, color);if (count >= 5) {flag = true;}}}}return flag;}private int checkCount(int xChange, int yChange, int color) {int count = 1;int tempX = xChange;int tempY = yChange;while (x + xChange >= 0 && x + xChange <= 18 && y + yChange >= 0&& y + yChange <= 18&& color == allChess[x + xChange][y + yChange]) {//下一个需要判断的棋子在边界内并且与上一个棋子颜色相同则执行,这是判断x的右边和y的下边count++;if (xChange != 0)//xChange不为零,就判断x的右上和左下xChange++;if (yChange != 0) {if (yChange > 0)yChange++;else {yChange--;}}}xChange = tempX;yChange = tempY;while (x - xChange >= 0 && x - xChange <= 18 && y - yChange >= 0&& y - yChange <= 18&& color == allChess[x - xChange][y - yChange]) {//继续判断x的左边和y的上边count++;if (xChange != 0)//xChange不为零,就判断x的左上和右下xChange++;if (yChange != 0) {if (yChange > 0)yChange++;else {yChange--;}}}return count;//返回当前判断的方向共有多少个同色棋子相连,共四个方向,横竖对角线四个}}
二、效果展示
1 0
- java-----五子棋小游戏(三)-----判断输赢
- JAVA判断五子棋输赢
- java五子棋判断输赢算法
- JAVA 五子棋 判断输赢的代码实现
- 五子棋判断输赢C
- winform 五子棋 判断输赢
- 五子棋算法判断输赢
- 五子棋 判断输赢的函数
- 【java】五子棋小游戏
- 【java】五子棋小游戏
- Java写五子棋小游戏
- java----五子棋小游戏
- Java编写的五子棋小游戏
- Java程序实现五子棋小游戏
- 基于java的五子棋小游戏
- java课程设计五子棋小游戏(1)
- java小游戏第四弹 五子棋
- 五子棋--小游戏
- 【Android学习笔记】ListView适配器的基本理解
- 详谈Struts2的核心概念(上)
- 最全VS2010初级教程学习手册
- Android支持多屏幕(1)Overview of Screen Support
- 多数购房计划给客户尽快回家
- java-----五子棋小游戏(三)-----判断输赢
- url中文转码
- Redis 安装与配置
- struts2表单验证的fielderror不显示的问题(从一个Action chain调用另一个Action)
- 排序算法之插入排序
- 本地socket unix domain socket
- 赋值操作符和拷贝构造函数
- 黑马程序员____交通灯系统
- C语言结构体(struct)常见使用方法