那天看见yangtuo做了个 五子棋 心血来潮也写了个五子棋 ,用了他给我的图片!(注意是java写的,未完成的部分——————人机、联网 如有大神喜欢可以拿去完成接下来的部分 欢迎大家自己写 自己玩)(如果有bug也可以说。。。。)
package com.game;
import java.awt.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
public class wuziqi extends JFrame implements MouseListener {
int x=0;
int y=0;
int [][]ans=new int [19][19];
boolean iswhat=true;
boolean isrun=true;
private Image iBuffer;
private Graphics gBuffer;
public wuziqi()
{
int width=Toolkit.getDefaultToolkit().getScreenSize().width;
int height=Toolkit.getDefaultToolkit().getScreenSize().height;
this.setTitle("五子棋");
this.setSize(500, 500);
this.setResizable(false);
this.setLocation((width-400)/2,(height-300)/2);
this.addMouseListener(this);
this.setVisible(true);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
public void paint(Graphics g)//整个paint类实现重写 并使用双缓冲技术防止闪屏
{
if(iBuffer==null)
{
iBuffer=createImage(this.getSize().width,this.getSize().height);
gBuffer=iBuffer.getGraphics();
}
BufferedImage image=null;
try {
image=ImageIO.read(new File("F:/qwe.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
gBuffer.drawImage(image,0,20,this);//以上的部分是为了实现将图片放在放在jframe这个容器中
for(int i=0;i<19;i++){
gBuffer.drawLine(10,70+20*i,370,70+20*i);
gBuffer.drawLine(10+20*i,70,10+20*i,430);
}
gBuffer.fillOval(68,128,4,4);
gBuffer.fillOval(308,12,4,4);//(重复设置圆点)
Font font=new Font("",1,20);
gBuffer.setFont(font);
if(iswhat)
gBuffer.drawString("现在轮到黑方", 120, 60);
else
gBuffer.drawString("现在轮到白方", 120, 60);
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(ans[i][j]==1)
{
int tempx=i*20+10;
int tempy=j*20+70;
gBuffer.fillOval(tempx-7, tempy-7, 14, 14);
}
if(ans[i][j]==2)
{
int tmpx=i*20+10;
int tmpy=j*20+70;
gBuffer.setColor(Color.WHITE);
gBuffer.fillOval(tmpx-7, tmpy-7, 14, 14);
gBuffer.setColor(Color.BLACK);
gBuffer.drawOval(tmpx-7, tmpy-7, 14, 14);
}
}
}
g.drawImage(iBuffer, 0, 0, this);
}
public void update(Graphics g)//也是双缓冲的一部分
{
paint(g);
}
@Override
public void mouseClicked(MouseEvent arg0) {//把键的位置范围确定下来然后实现某个功能 ,我有一些没看到所以没实现
// TODO Auto-generated method stub
if(arg0.getX()>=400&&arg0.getX()<=470&&arg0.getY()>=320&&arg0.getY()<=350)
{
JOptionPane.showMessageDialog(this, "made by yangtuo");
}
if(arg0.getX()>=400&&arg0.getX()<=470&&arg0.getY()>=370&&arg0.getY()<=400)
{
System.exit(0);
}
if(arg0.getX()>=400&&arg0.getX()<=470&&arg0.getY()>=170&&arg0.getY()<=200)
{
JOptionPane.showMessageDialog(this, "只要某一方连续的五个棋子出现就为赢 ");
}
if(arg0.getX()>=400&&arg0.getX()<=470&&arg0.getY()>=270&&arg0.getY()<=300)
{
int n = JOptionPane.showConfirmDialog(this, "你确定要结束游戏吗?", "标题",JOptionPane.YES_NO_OPTION);
if(n==0)
{
isrun=false;
}
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {//这个是确定鼠标点击的位置在哪里
// TODO Auto-generated method stub
x=arg0.getX();
y=arg0.getY();
System.out.println(x+" "+y);
if(x>=10&&x<=370&&y>=70&&y<=430&&isrun==true)
{
x=(x-10)/20;
y=(y-70)/20;
//System.out.println(x+" "+y);
if(ans[x][y]==0)
{
if(iswhat==true)
{
ans[x][y]=1;
iswhat=false;
}
else if(iswhat==false)
{
ans[x][y]=2;
iswhat=true;
}
//System.out.println(ans[x][y]);
}
else
{
JOptionPane.showMessageDialog(this, "对不起这里已经有棋子了");
}
if(judge1(x,y)==1)
{
JOptionPane.showMessageDialog(this, "恭喜黑方赢了");
isrun=false;
}
else if(judge1(x,y)==2)
{
JOptionPane.showMessageDialog(this, "恭喜白方赢了");
isrun=false;
}
this.repaint();
}
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public int judge1(int x,int y)//看看名字就知道了 是为了判断有没有赢
{
int count=0;
int count1=0;
int count2=0;
int count3=0;
int count4=0;
int count5=0;
int count6=0;
int count7=0;
int count8=0;
int count9=0;
int count10=0;
int count11=0;
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(ans[i][j]==1)
{
count++;
if(count==5)
{
return 1;
}
}
if(ans[i][j]!=1)
{
count=0;
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(ans[i][j]==2)
{
count1++;
if(count1==5)
{
return 2;
}
}
if(ans[i][j]!=2)
{
count1=0;
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(ans[j][i]==1)
{
count2++;
if(count2==5)
{
return 1;
}
}
if(ans[j][i]!=1)
{
count2=0;
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(ans[j][i]==2)
{
count3++;
if(count3==5)
{
return 2;
}
}
if(ans[j][i]!=2)
{
count3=0;
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(i+j<19)
{
if(ans[j][j+i]==1)
{
count4++;
if(count4==5)
{
return 1;
}
}
if(ans[j][j+i]!=1)
{
count4=0;
}
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(i+j<19)
{
if(ans[j][j+i]==2)
{
count5++;
if(count5==5)
{
return 2;
}
}
if(ans[j][j+i]!=2)
{
count5=0;
}
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(i+j<19)
{
if(ans[i+j][j]==1)
{
count6++;
if(count6==5)
{
return 1;
}
}
if(ans[j+i][j]!=1)
{
count6=0;
}
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(i+j<19)
{
if(ans[i+j][j]==2)
{
count7++;
if(count7==5)
{
return 2;
}
}
if(ans[j+i][j]!=2)
{
count7=0;
}
}
}
}
for(int i=18;i>=0;i--)
{
for(int j=0;j<19;j++)
{
if(i-j<19&&i-j>=0)
{
if(ans[i-j][j]==1)
{
count8++;
if(count8==5)
{
return 1;
}
}
if(ans[i-j][j]!=1)
{
count8=0;
}
}
}
}
for(int i=18;i>=0;i--)
{
for(int j=0;j<19;j++)
{
if(i-j<19&&i-j>=0)
{
if(ans[i-j][j]==2)
{
count9++;
if(count9==5)
{
return 2;
}
}
if(ans[i-j][j]!=2)
{
count9=0;
}
}
}
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(i+j<19)
{
if(ans[18-j][i+j]==1)
{
count10++;
if(count10==5)
{
return 1;
}
}
if(ans[18-j][j+i]!=1)
{
count10=0;
}
}
}
}
for(int i=18;i>=0;i--)
{
for(int j=0;j<19;j++)
{
if(i+j<19)
{
if(ans[18-j][i+j]==2)
{
count11++;
if(count11==5)
{
return 2;
}
}
if(ans[18-j][j+i]!=2)
{
count11=0;
}
}
}
}
return 0;
}
}