本文目錄一覽:
JAVA五子棋中如何實現重新開始和悔棋的功能
一般來說是不應該像你這樣寫的,應該是把要畫的步驟寫在組件的被覆寫的paintComponent函數里,然後在你響應事件的函數里直接掉用該組件的repaint()函數即可。repaint函數是會去掉該組件的paintComponent()函數的。至於你這麼寫為啥不行,這個我也不清楚,據我猜測,repaint函數要做的事情是刷新組件,並且重新去畫一遍,不過這個步驟不一定是立即完成,可能有延遲。總之在你畫那些棋子之後,它又幹了一些事情,導致你畫的棋子沒了(但這不會影響到它自己想去畫的東西,即paintComponent()函數里的東西),另外不要忘了,覆寫paintComponent時,第一行要寫,super.paintComponent(g),這是去畫它原來有的東西(比如加上去的按鈕,文本框之類的東西)
例如下面:
12345678910111213141516171819202122232425262728293031323334353637class PanelM extends JPanel{ ImageIcon icon = new ImageIcon(“app.gif”); JLabel jl = new JLabel(icon, SwingConstants.CENTER); int x, y; private ListInteger listX = new ArrayListInteger(); private ListInteger listY = new ArrayListInteger(); public PanelM() { add(jl); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent m) { x = m.getX(); y = m.getY(); listX.add(x); listY.add(y); repaint(); } }); } public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i listX.size(); i++) { g.fillOval(listX.get(i), listY.get(i), 20, 20); } }}
java五子棋怎麼畫ER圖
先畫正方形,然後畫兩條對摺線完成。
第一步、我們先來畫一畫五子棋的棋盤,畫出一個棋盤,畫一個四方形。
第二步、接著我們畫一畫棋盤的棋盤格,橫橫豎豎的橫要平,豎要直溜溜。
第三步、接著我們畫出棋盤裡面的棋子,黑色和白色的棋子就完成啦。
想用Java 做五子棋遊戲而且是多線程的應該怎麼做
直接上程序吧:
//wuziqi.java
import java.applet.Applet;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
@SuppressWarnings(“serial”)
public class wuziqi extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener
{
int color_Qizi=0;//旗子的顏色標識 0:白子 1:黑子
int intGame_Start=0;//遊戲開始標誌 0未開始 1遊戲中
int intGame_Body[][]=new int[16][16]; //設置棋盤棋子狀態 0 無子 1 白子 2 黑子
Button b1=new Button(“遊戲開始”);
Button b2=new Button(“重置遊戲”);
Label lblWin=new Label(” “);
Checkbox ckbHB[]=new Checkbox[2];
CheckboxGroup ckgHB=new CheckboxGroup();
public void init()
{
setLayout(null);
addMouseListener(this);
add(b1);
b1.setBounds(330,50,80,30);
b1.addActionListener(this);
add(b2);
b2.setBounds(330,90,80,30);
b2.addActionListener(this);
ckbHB[0]=new Checkbox(“白子先”,ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=new Checkbox(“黑子先”,ckgHB,false);
ckbHB[1].setBounds(380,20,60,30);
add(ckbHB[0]);
add(ckbHB[1]);
ckbHB[0].addItemListener(this);
ckbHB[1].addItemListener(this);
add(lblWin);
lblWin.setBounds(330,130,80,30);
Game_start_csh();
}
public void itemStateChanged(ItemEvent e)
{
if (ckbHB[0].getState()) //選擇黑子先還是白子先
{
color_Qizi=0;
}
else
{
color_Qizi=1;
}
}
public void actionPerformed(ActionEvent e)
{
@SuppressWarnings(“unused”)
Graphics g=getGraphics();
if (e.getSource()==b1)
{
Game_start();
}
else
{
Game_re();
}
}
public void mousePressed(MouseEvent e){}
@SuppressWarnings(“unused”)
public void mouseClicked(MouseEvent e)
{
Graphics g=getGraphics();
int x1,y1;
x1=e.getX();
y1=e.getY();
if (e.getX()20 || e.getX()300 || e.getY()20 || e.getY()300)
{
return;
}
if (x1%2010)
{
x1+=20;
}
if(y1%2010)
{
y1+=20;
}
x1=x1/20*20;
y1=y1/20*20;
set_Qizi(x1,y1);
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void paint(Graphics g)
{
draw_qipan(g);
}
public void set_Qizi(int x,int y) //落子
{
if (intGame_Start==0) //判斷遊戲未開始
{
return;
}
if (intGame_Body[x/20][y/20]!=0)
{
return;
}
Graphics g=getGraphics();
if (color_Qizi==1)//判斷黑子還是白子
{
g.setColor(Color.black);
color_Qizi=0;
}
else
{
g.setColor(Color.white);
color_Qizi=1;
}
g.fillOval(x-10,y-10,20,20);
intGame_Body[x/20][y/20]=color_Qizi+1;
if (Game_win_1(x/20,y/20)) //判斷輸贏
{
lblWin.setText(Get_qizi_color(color_Qizi)+”贏了!”);
intGame_Start=0;
}
if (Game_win_2(x/20,y/20)) //判斷輸贏
{
lblWin.setText(Get_qizi_color(color_Qizi)+”贏了!”);
intGame_Start=0;
}
if (Game_win_3(x/20,y/20)) //判斷輸贏
{
lblWin.setText(Get_qizi_color(color_Qizi)+”贏了!”);
intGame_Start=0;
}
if (Game_win_4(x/20,y/20)) //判斷輸贏
{
lblWin.setText(Get_qizi_color(color_Qizi)+”贏了!”);
intGame_Start=0;
}
}
public String Get_qizi_color(int x)
{
if (x==0)
{
return “黑子”;
}
else
{
return “白子”;
}
}
public void draw_qipan(Graphics G) //畫棋盤 15*15
{
G.setColor(Color.lightGray);
G.fill3DRect(10,10,300,300,true);
G.setColor(Color.black);
for(int i=1;i16;i++)
{
G.drawLine(20,20*i,300,20*i);
G.drawLine(20*i,20,20*i,300);
}
}
public void Game_start() //遊戲開始
{
intGame_Start=1;
Game_btn_enable(false);
b2.setEnabled(true);
}
public void Game_start_csh() //遊戲開始初始化
{
intGame_Start=0;
Game_btn_enable(true);
b2.setEnabled(false);
ckbHB[0].setState(true);
for (int i=0;i16 ;i++ )
{
for (int j=0;j16 ;j++ )
{
intGame_Body[i][j]=0;
}
}
lblWin.setText(“”);
}
public void Game_re() //遊戲重新開始
{
repaint();
Game_start_csh();
}
public void Game_btn_enable(boolean e) //設置組件狀態
{
b1.setEnabled(e);
b2.setEnabled(e);
ckbHB[0].setEnabled(e);
ckbHB[1].setEnabled(e);
}
public boolean Game_win_1(int x,int y) //判斷輸贏 橫
{
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i5 ;i++ )
{
if (x115)
{
break;
}
if (intGame_Body[x1+i][y1]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
for (int i=1;i5 ;i++ )
{
if (x11)
{
break;
}
if(intGame_Body[x1-i][y1]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
if (t4)
{
return true;
}
else
{
return false;
}
}
public boolean Game_win_2(int x,int y) //判斷輸贏 豎
{
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i5 ;i++ )
{
if (x115)
{
break;
}
if (intGame_Body[x1][y1+i]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
for (int i=1;i5 ;i++ )
{
if (x11)
{
break;
}
if(intGame_Body[x1][y1-i]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
if (t4)
{
return true;
}
else
{
return false;
}
}
public boolean Game_win_3(int x,int y) //判斷輸贏 左斜
{
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i5 ;i++ )
{
if (x115)
{
break;
}
if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
for (int i=1;i5 ;i++ )
{
if (x11)
{
break;
}
if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
if (t4)
{
return true;
}
else
{
return false;
}
}
public boolean Game_win_4(int x,int y) //判斷輸贏 左斜
{
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i5 ;i++ )
{
if (x115)
{
break;
}
if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
for (int i=1;i5 ;i++ )
{
if (x11)
{
break;
}
if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y])
{
t+=1;
}
else
{
break;
}
}
if (t4)
{
return true;
}
else
{
return false;
}
}
}
原創文章,作者:OYLWT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329761.html