利用JFrame创建五子棋游戏(最简版)

来源:互联网 发布:成都英文seo外包 编辑:程序博客网 时间:2024/06/05 21:17

package Test;
import javax.swing.JFrame;


//1,创建MainFrame类,继承JFrame,在MainFrame的构造方法中
//设置基本属性setSize,setDefaultCloseOperation,setLocationRelativeTo,setResizable,setVisible
public class MainFrame extends JFrame{
public MainFrame() {
setSize(550, 580);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
}
}

package Test;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;


import javax.imageio.plugins.jpeg.JPEGQTable;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;


//2,创建MyPanel类,继承JPanel类,在MyPanel构造方法中设置面板背景颜色为红色,
//在MyPanel类中重写父类的paint方法(在eclipse中输入paint提示可以跳出该方法,重写成功有个三角形标志,super.paint(g);不要删除)
//在该paint方法中使用g绘制五子棋棋盘(10x10)10条横线,10条竖线


//1,给上述第二步中的MyPanel添加MouseListener,具体操作如下:
//MyPanel实现MouseListener接口,实现其抽象方法,在点击方法中绘制棋子,使用fillOval方法(详情请查看API文档)


public  class MyPanel extends JPanel implements MouseListener{
private int x,y; //鼠标点击的坐标
private int a,b;//棋子的坐标
private int board[][];    //棋子坐标的集合
private int lieNum,hangNum;//列,行
private boolean flag=true;   //设定棋子颜色,默认为黑色
private List<Chess> chesses;//建立已下棋子的集合
private int[][] arr=new int[10][10];//建立所有交点坐标的集合,设定0为无棋子,1为黑棋,2为白棋
private int ar[]=new int[100];
private boolean bl=true;

public MyPanel () {
chesses=new ArrayList<Chess>();
setBackground(new Color(255, 0, 0));
// setBackground(new Color(0XFF0000));
// setBackground(Color.red);
addMouseListener(this);
}
public void paint(Graphics g) {
super.paint(g);
for (int i = 0; i < 10; i++) {
g.drawLine(50, 50+i*50, 500, 50+i*50);
}
for (int j = 0; j < 10; j++) {
g.drawLine(50+j*50, 50, 50+j*50, 500);
}
for (int i = 0; i < chesses.size(); i++) {
Chess c = chesses.get(i);
g.setColor(c.isBlack==true?Color.black:Color.white);
g.fillOval(c.x, c.y, c.chessWidth, c.chessWidth);
}
}


public void mouseClicked(MouseEvent e) {
x=e.getX();
y=e.getY();
Graphics g=getGraphics();

if (x>50&&x<500&&y>50&&y<500&&bl==true) {
lieNum=(int) (Math.round((x-50)*1.0/50));
hangNum=(int) (Math.round((y-50)*1.0/50));
g.setColor(flag==true?Color.BLACK:Color.WHITE);
Chess c = new Chess();
a=lieNum*50+50-c.chessWidth/2;
b=hangNum*50+50-c.chessWidth/2;
c.x=a;
c.y=b;
c.isBlack=flag;
if (!chesses.contains(c)) {
g.fillOval(a, b, c.chessWidth, c.chessWidth);
chesses.add(c);
arr[lieNum][hangNum]=c.isBlack==true?1:2;
flag=!flag;
}


//判断胜负,共四种情况
for (int i = 0;i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (i<6&&bl==true) {
// //判断横向
if (arr[i][j]==1&&arr[i+1][j]==1&&arr[i+2][j]==1&&arr[i+3][j]==1&&arr[i+4][j]==1) {
System.out.println("黑棋获胜!");

bl=false;
break;
}
if (arr[i][j]==2&&arr[i+1][j]==2&&arr[i+2][j]==2&&arr[i+3][j]==2&&arr[i+4][j]==2) {
System.out.println("白棋获胜!");
bl=false;
// break;
}
}
if (i>=6&&bl==true) {
if (arr[i][j]==1&&arr[i-1][j]==1&&arr[i-2][j]==1&&arr[i-3][j]==1&&arr[i-4][j]==1) {
System.out.println("黑棋获胜!");
bl=false;
// break;
}
if (arr[i][j]==2&&arr[i-1][j]==2&&arr[i-2][j]==2&&arr[i-3][j]==2&&arr[i-4][j]==2) {
System.out.println("白棋获胜!");
bl=false;
// break;
}
}
// //判断竖向
if (j<6&&bl==true) {
if (arr[i][j]==1&&arr[i][j+1]==1&&arr[i][j+2]==1&&arr[i][j+3]==1&&arr[i][j+4]==1) {
System.out.println("黑棋获胜!");
bl=false;
// break;
}
if (arr[i][j]==2&&arr[i][j+1]==2&&arr[i][j+2]==2&&arr[i][j+3]==2&&arr[i][j+4]==2) {
System.out.println("白棋获胜!");
bl=false;
// break;
}
}
if (j>=6&&bl==true) {
if (arr[i][j]==1&&arr[i][j-1]==1&&arr[i][j-2]==1&&arr[i][j-3]==1&&arr[i][j-4]==1) {
System.out.println("黑棋获胜!");
bl=false;
// break;
}
if (arr[i][j]==2&&arr[i][j-1]==2&&arr[i][j-2]==2&&arr[i][j-3]==2&&arr[i][j-4]==2) {
System.out.println("白棋获胜!");

bl=false;
// break;
}
}

// 判断左斜
if (j<6&&i>=6&&bl==true) {
if (arr[i][j]==1&&arr[i-1][j+1]==1&&arr[i-2][j+2]==1&&arr[i-3][j+3]==1&&arr[i-4][j+4]==1) {
System.out.println("黑棋获胜!");
bl=false;
break;
}
if (arr[i][j]==2&&arr[i-1][j+1]==2&&arr[i-2][j+2]==2&&arr[i-3][j+3]==2&&arr[i-4][j+4]==2) {
System.out.println("白棋获胜!");
bl=false;
break;
}
}
if (i<6&&j>=6&&bl==true) {
if (arr[i][j]==1&&arr[i+1][j-1]==1&&arr[i+2][j-2]==1&&arr[i+3][j-3]==1&&arr[i+4][j-4]==1) {
System.out.println("黑棋获胜!");
bl=false;
break;
}
if (arr[i][j]==2&&arr[i+1][j-1]==2&&arr[i+2][j-2]==2&&arr[i+3][j-3]==2&&arr[i+4][j-4]==2) {
System.out.println("白棋获胜!");
bl=false;
break;
}
}
// 判断右斜
if (j<6&&i<6&&bl==true) {
if (arr[i][j]==1&&arr[i+1][j+1]==1&&arr[i+2][j+2]==1&&arr[i+3][j+3]==1&&arr[i+4][j+4]==1) {
System.out.println("黑棋获胜!");
bl=false;
break;
}
if (arr[i][j]==2&&arr[i+1][j+1]==2&&arr[i+2][j+2]==2&&arr[i+3][j+3]==2&&arr[i+4][j+4]==2) {
System.out.println("白棋获胜!");
bl=false;
break;
}
}
if (j>=6&&i>=6&&bl==true) {
if (arr[i][j]==1&&arr[i-1][j-1]==1&&arr[i-2][j-2]==1&&arr[i-3][j-3]==1&&arr[i-4][j-4]==1) {
System.out.println("黑棋获胜!");
bl=false;
break;
}
if (arr[i][j]==2&&arr[i-1][j-1]==2&&arr[i-2][j-2]==2&&arr[i-3][j-3]==2&&arr[i-4][j-4]==2) {
System.out.println("白棋获胜!");
bl=false;
break;
}
}
}
}
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {

}
public void mouseReleased(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
}

package Test;


public class Chess {
public int x,y;//棋子坐标
public boolean isBlack;//棋子颜色
public static int chessWidth=30;//棋子大小
public int hashCode() {
return 1;
}
public boolean equals(Object obj) {
if (this==obj) {
return true;
}
if (obj instanceof Chess) {
Chess c=(Chess) obj;
if (c.x==this.x && c.y==this.y) {
return true;
}
}
return false;
}

}

package Test;


import java.text.SimpleDateFormat;
import java.util.Date;


//3,创建GameFrame类,继承第一步创建的MainFrame类,在GameFrame类构造方法中创建MyPanel类的对象,
//添加到GameFrame(注:因为GameFrame他爷爷是窗体,所以他也是窗体)窗体上
public class GameFrame extends MainFrame{
public GameFrame(){
MyPanel mp = new MyPanel();
add(mp);
setVisible(true);
}
public static void main(String[] args) {
new GameFrame();
// Date date = new Date();
// Long time = date.getTime();
// System.out.println(time);
Date d = new Date(System.currentTimeMillis());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d));
}
}

原创粉丝点击