这是我写的另一个小游戏,界面什么的不美观,先来看下效果神马的。
曾经看过一部动漫,叫做秦时明月,里面就有这样一种棋,里面的叫法是墨攻棋局,突然想到,我也就想写写看了,花了些小时写好了这货。。。
看下源码:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class Reversi extends JFrame implements ActionListener{
JButton jbStart = new JButton("开始游戏");
JButton jbStop = new JButton("结束游戏");
MyPanel panel = new MyPanel();
Container c = this.getContentPane();
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
boolean canPlay = false;
boolean isBlack = false;
int count = 0;
int f = 1;
int cntBlack = 0;
int cntWhite = 0;
int reversi[][] = new int[9][9];
public Reversi() {
Init();
addListener();
}
public void Init() {
this.setTitle("Reversi");
this.setSize(500, 500);
this.setResizable(false);
this.setLayout(null);
this.setVisible(true);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setLocation((width - 500)/2, (height - 500)/2);
jbStart.setBounds(135, 430, 100, 30);
jbStop.setBounds(265, 430, 100, 30);
panel.add(jbStart);
panel.add(jbStop);
panel.setLayout(null);
panel.setSize(500, 500);
c.add(panel);
}
public void addListener() {
this.jbStart.addActionListener(this);
this.jbStop.addActionListener(this);
this.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
if(canPlay) {
if(e.getX() >= 50 && e.getX() <= 450 && e.getY() >= 50 && e.getY() <= 450) {
//System.out.println(e.getX() + "---" + e.getY());
int x = e.getX();
int y = e.getY();
x = (x - 50) / 50;
y = (y - 50) / 50;
// System.out.println(x + " - " + y);
if(reversi[x][y] == 0) {
if(isBlack) {
if(!isOK(x, y, 1))
return;
reversi[x][y] = 1;
//System.out.println(x + "-" + y + reversi[x][y]);
//System.out.println(reversi[4][3]);
isEated(x, y);
repaint();
//System.out.println(reversi[4][3]);
isBlack = false;
if(Check(2)) {
if(cntBlack > cntWhite)
JOptionPane.showMessageDialog(null, "黑子多于白子 ,黑方赢");
else if(cntBlack < cntWhite)
JOptionPane.showMessageDialog(null, "白子多余黑子,白方赢");
else
JOptionPane.showMessageDialog(null, "双方不分胜负!");
}
System.out.println(cntBlack + "---" + cntWhite);
}
else {
if(!isOK(x, y, 2))
return;
reversi[x][y] = 2;
isEated(x, y);
repaint();
isBlack = true;
if(Check(1)) {
if(cntBlack > cntWhite)
JOptionPane.showMessageDialog(null, "黑子多于白子 ,黑方赢");
else if(cntBlack < cntWhite)
JOptionPane.showMessageDialog(null, "白子多余黑子,白方赢");
else
JOptionPane.showMessageDialog(null, "双方不分胜负!");
}
System.out.println(cntBlack + "---" + cntWhite);
}
}
repaint();
}
}
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == jbStart) {
canPlay = true;
jbStart.setEnabled(false);
InitFrame();
repaint();
}
if(e.getSource() == jbStop) {
System.exit(0);
}
}
public class MyPanel extends JPanel {
public void paintComponent(Graphics scr){
BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
g.setColor(Color.BLACK);
for(int i = 1; i <= 9; i++) {
g.drawLine(i*50, 20, i*50, 420);
}
for(int i = 1; i <= 9; i++) {
g.drawLine(50, i*50-30, 450, i*50-30);
}
for(int i = 0; i <= 7; i++) {
for(int j = 0; j <= 7; j++) {
int x;
int y;
x = i * 50 + 50;
y = j * 50 + 20;
if(reversi[i][j] == 1) {
g.fillOval(x, y, 50, 50);
}
else if(reversi[i][j] == 2) {
g.setColor(Color.WHITE);
g.fillOval(x, y, 50, 50);
g.setColor(Color.BLACK);
g.drawOval(x, y, 50, 50);
}
}
}
scr.drawImage(bi, 0, 0, this);
}
}
public void isEated(int x, int y) {
int color;
if(isBlack)
color = 1;
else
color = 2;
int flag = 0;
int tempx = x;
int tempy = y;
while(tempx > 0) { //左
tempx--;
if(reversi[tempx][tempy] == color) {
for(int i = tempx + 1; i <= x; i++) {
if(reversi[i][tempy] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = tempx + 1; i <= x; i++) {
reversi[i][tempy] = color;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx < 7) { //右
tempx++;
if(reversi[tempx][tempy] == color) {
for(int i = x + 1; i <= tempx; i++) {
if(reversi[i][tempy] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = x + 1; i <= tempx; i++) {
reversi[i][tempy] = color;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempy > 0) { //上
tempy--;
if(reversi[tempx][tempy] == color) {
for(int i = tempy + 1; i <= y; i++) {
if(reversi[tempx][i] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = tempy + 1; i <= y; i++) {
reversi[tempx][i] = color;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempy < 7) { //下
tempy++;
if(reversi[tempx][tempy] == color) {
for(int i = y + 1; i <= tempy; i++) {
if(reversi[tempx][i] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = y + 1; i <= tempy; i++) {
reversi[tempx][i] = color;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx > 0 && tempy > 0) { //左上
tempx--;
tempy--;
if(reversi[tempx][tempy] == color) {
for(int i = tempx + 1, j = tempy + 1; i <= x && j <= y; i++, j++) {
if(reversi[i][j] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = tempx + 1, j = tempy + 1; i <= x && j <= y; i++, j++) {
reversi[i][j] = color;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx > 0 && tempy < 7) { //左下
tempx--;
tempy++;
if(reversi[tempx][tempy] == color) {
for(int i = x - 1, j = y + 1; j < tempy; i--, j++) {
if(reversi[i][j] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = x - 1, j = y + 1; j < tempy; i--, j++) {
reversi[i][j] = color;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx < 7 && tempy > 0) { //右上
tempx++;
tempy--;
if(reversi[tempx][tempy] == color) {
//System.out.println("11");
for(int i = x + 1, j = y - 1; i < tempx; i++, j--) {
//System.out.println(i + "--" + j + reversi[i][j]);
if(reversi[i][j] == 0) {
flag = 1;
System.out.println(i + "----" + j + reversi[i][j]);
}
}
if(flag == 1)
break;
for(int i = x + 1, j = y - 1; i < tempx; i++, j--) {
reversi[i][j] = color;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx < 7 && tempy < 7) { //右下
tempx++;
tempy++;
if(reversi[tempx][tempy] == color) {
for(int i = x + 1, j = y + 1; i <= tempx && j <= tempy; i++, j++) {
if(reversi[i][j] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = x + 1, j = y + 1; i <= tempx && j <= tempy; i++, j++) {
reversi[i][j] = color;
}
break;
}
}
}
public boolean isOK(int x, int y, int color) {
f = 0;
int flag = 0;
int tempx = x;
int tempy = y;
while(tempx > 0) { //左
tempx--;
if(reversi[tempx][tempy] == color) {
for(int i = tempx + 1; i < x; i++) {
if(reversi[i][tempy] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = tempx + 1; i < x; i++) {
//reversi[i][tempy] = color;
f = 1;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx < 7) { //右
tempx++;
if(reversi[tempx][tempy] == color) {
for(int i = x + 1; i < tempx; i++) {
if(reversi[i][tempy] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = x + 1; i < tempx; i++) {
//reversi[i][tempy] = color;
f = 1;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempy > 0) { //上
tempy--;
if(reversi[tempx][tempy] == color) {
for(int i = tempy + 1; i < y; i++) {
if(reversi[tempx][i] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = tempy + 1; i < y; i++) {
//reversi[tempx][i] = color;
f = 1;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempy < 7) { //下
tempy++;
if(reversi[tempx][tempy] == color) {
for(int i = y + 1; i < tempy; i++) {
if(reversi[tempx][i] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = y + 1; i < tempy; i++) {
//reversi[tempx][i] = color;
f = 1;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx > 0 && tempy > 0) { //左上
tempx--;
tempy--;
if(reversi[tempx][tempy] == color) {
for(int i = tempx + 1, j = tempy + 1; i < x && j < y; i++, j++) {
if(reversi[i][j] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = tempx + 1, j = tempy + 1; i < x && j < y; i++, j++) {
//reversi[i][j] = color;
f = 1;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx > 0 && tempy < 7) { //左下
tempx--;
tempy++;
if(reversi[tempx][tempy] == color) {
for(int i = x - 1, j = y + 1; j < tempy; i--, j++) {
if(reversi[i][j] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = x - 1, j = y + 1; j < tempy; i--, j++) {
// reversi[i][j] = color;
f = 1;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx < 7 && tempy > 0) { //右上
tempx++;
tempy--;
if(reversi[tempx][tempy] == color) {
//System.out.println("11");
for(int i = x + 1, j = y - 1; i < tempx; i++, j--) {
//System.out.println(i + "--" + j + reversi[i][j]);
if(reversi[i][j] == 0) {
flag = 1;
//System.out.println(i + "----" + j + reversi[i][j]);
}
}
if(flag == 1)
break;
for(int i = x + 1, j = y - 1; i < tempx; i++, j--) {
//reversi[i][j] = color;
f = 1;
}
break;
}
}
flag = 0;
tempx = x;
tempy = y;
while(tempx < 7 && tempy < 7) { //右下
tempx++;
tempy++;
if(reversi[tempx][tempy] == color) {
for(int i = x + 1, j = y + 1; i < tempx && j < tempy; i++, j++) {
if(reversi[i][j] == 0)
flag = 1;
}
if(flag == 1)
break;
for(int i = x + 1, j = y + 1; i < tempx && j < tempy; i++, j++) {
//reversi[i][j] = color;
f = 1;
}
break;
}
}
if(f == 1)
return true;
else
return false;
}
public boolean Check(int color) {
// for(int i = 0; i <= 7; i++) {
// for(int j = 0; j <= 7; j++) {
// if(reversi[i][j] == color)
// return false;
// else if(reversi[i][j] == color % 2 + 1)
// count++;
// }
// }
// return true;
cntBlack = 0;
cntWhite = 0;
int cnt = 0;
for(int i = 0; i <= 7; i++) {
for(int j = 0; j <= 7; j++) {
if(reversi[i][j] == 1) {
cntBlack++;
}
else if(reversi[i][j] == 2) {
cntWhite++;
}
else {
cnt++;
}
}
}
for(int i = 0; i <= 7; i++) {
for(int j = 0; j <= 7; j++) {
if(reversi[i][j] == 0 && isOK(i, j, color))
return false;
}
}
JOptionPane.showMessageDialog(null, color == 1?"黑子无处可下,换白子行动":"白子无处可下,换黑子行动");
color = color % 2 + 1;
for(int i = 0; i <= 7; i++) {
for(int j = 0; j <= 7; j++) {
if(reversi[i][j] == 0 && isOK(i, j, color)) {
if(color == 1) {
isBlack = true;
}
else {
isBlack = false;
}
return false;
}
}
}
JOptionPane.showMessageDialog(null, "双方均无处可下,游戏结束");
return true;
}
public void InitFrame() {
reversi[3][3] = reversi[4][3] = 1;
reversi[3][4] = reversi[4][4] = 2;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Reversi();
}
}
游戏基本没什么BUG了,我改了好久T T,注释什么的也没写,哎呀,好失败-。-算了,就那样了~
有什么问题欢迎指出。。。