五子棋1.0
只能进行一次游戏,之后的游戏棋子还在
感谢之前搜到的某位大佬的代码
package test;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
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;
import javax.swing.JPanel;
public class MyJpanel extends JFrame{
PicJpanel pj;
int map[][]=new int [16][16];
int flag = 2;
int winer = 0;
public int[][] getMap() {
return map;
}
public void setMap(int[][] map) {
this.map = map;
}
public MyJpanel() {
init();
}
private void init() {
this.setSize(750, 780);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setLayout(null);
this.setTitle("五子棋");
pj = new PicJpanel(this);
pj.addMouseListener(new MyMouse(this));
this.add(pj);
this.setVisible(true);
}
public static void main(String[] args) {
new MyJpanel();
}
}
class PicJpanel extends JPanel{
MyJpanel mj;
public PicJpanel (MyJpanel mj) {
this.setBounds(0, 0, mj.getWidth(), mj.getHeight());
this.mj = mj;
}
protected void paintComponent(Graphics G) {
try {
BufferedImage bi = ImageIO.read(new File(" "));
G.drawImage(bi, 0, 0, this);
} catch (IOException e) {
e.printStackTrace();
}
int map[][] = mj.map;
G.setColor(Color.BLACK);
for(int i = 0; i < 15; i++) {
for(int j = 0; j < 15; j++) {
G.drawRect(50 * i, 50 * j, 50, 50);
if (map[i][j] == 1) {
G.setColor(Color.white);
G.fillOval(50 * j, 50 * i, 50, 50);
}
G.setColor(Color.BLACK);
if (map[i][j] == 2) {
G.setColor(Color.black);
G.fillOval(50 * j, 50 * i, 50, 50);
}
}
}
}
}
class MyMouse extends MouseAdapter{
MyJpanel mj;
public MyMouse (MyJpanel mj) {
super();
this.mj = mj;
}
public void mousePressed(MouseEvent e) {
if (mj.winer != 0) {
mj.setMap(new int[16][16]);
mj.winer = 0;
mj.pj.repaint();
return ;
}
int map[][] = mj.map;
Point p = e.getPoint();
int x = (int) p.getX() / (750 / 15 );
int y = (int) p.getY() / (750 / 15 );
System.out.println("x=" + p.getX() + " y=" + p.getY());
System.out.println("x=" + x + " y=" + y);
if (map[y][x] == 0) {
map[y][x] = mj.flag;
}
if (mj.flag == 1) {
mj.flag = 2;
}else if (mj.flag == 2) {
mj.flag = 1;
}
MyMouse mouse = new MyMouse(mj);
if (mouse.isWin(y, x, map)) {
if (map[y][x] == 1) {
mj.winer = 1;
mj.pj.repaint();
JOptionPane.showMessageDialog(null, "白子胜");
mj.flag = 2;
return;
}
if (map[y][x] == 2) {
mj.winer = 2;
mj.pj.repaint();
JOptionPane.showMessageDialog(null,"黑子胜");
mj.flag = 2;
return;
}
}
mj.setMap(map);
mj.pj.repaint();
}
public boolean isWin(int x, int y, int [][]map) {
int num = 1;
for (int i = 0; i < 14; i++) {
if (map[x][i] != 0) {
if (map[x][i] == map[x][i + 1]) {
num++;
if (num >= 5) {
return true;
}
} else {
num = 1;
}
}
}
num = 1;
for (int i = 0; i < 14; i++) {
if (map[i][y] != 0) {
if (map[i][y] == map[i + 1][y]) {
num++;
if (num >= 5) {
return true;
}
} else {
num = 1;
}
}
}
num=1;
for (int i = 0; i < map.length*2-1; i++) {
for (int j = 1; j < map.length ; j++) {
if (((i - j) >= 0) && ((i - j) < map.length)) {
if(map[j][i-j] != 0){
if(map[j][i-j] == map[j-1][i-j+1]){
num++;
if (num >= 5) {
return true;
}
}else{
num=1;
}
}
}
}
}
num=1;
for (int i = -map.length; i < map.length; i++) {
for (int j = 1; j < map.length; j++) {
if(((i+j) >= 0)&&((i+j) < map.length)){
if(map[j][j+i] != 0){
if(map[j][i+j] == map[j+1][i+j+1]){
num++;
if (num >= 5) {
return true;
}
}else{
num=1;
}
}
}
}
}
return false;
}
}