java實(shí)現(xiàn)簡(jiǎn)單美女拼圖游戲
拼圖小游戲,學(xué)習(xí)階段。很多不足,改進(jìn)了一下
J_Puzzle.java
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
class J_JPanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
Image m_image;
int showpicture=0;
@SuppressWarnings("static-access")
public J_JPanel()throws IOException
{ J_Puzzle a = new J_Puzzle();
if(a.changetime==-1)
showpicture = 1;
File f = new File("樣圖"+showpicture+".jpg");
m_image = ImageIO.read(f);
}
public void paintComponent(Graphics g)
{
g.drawImage(m_image, 0, 0, 360, 360, this);
}
}
public class J_Puzzle extends JFrame implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
int i,j;
static int changetime = 0;
Container c = getContentPane();
JButton b[] = new JButton[16];
ImageIcon ic[][] = new ImageIcon[2][15];
public J_Puzzle() throws IOException
{
super("拼圖小游戲");
String pic_name[] = new String[15];
for(i = 0;i < 2;i ++)
for(j = 0;j < 15;j ++)
{
pic_name[j] = String.valueOf(j+1+i*15)+".jpg";
ic[i][j] = new ImageIcon(pic_name[j]);
}
JMenuBar mBar = new JMenuBar();
setJMenuBar(mBar);
int k = 0;
JMenu []m = {new JMenu("菜單(M)"),new JMenu("幫助(H)")};
char mC[][] = {{'M','H'},{'S','X','C','Z'},{'E','T'}};
JMenuItem mItem[][] = {{new JMenuItem("開始(S)"),new JMenuItem("重置(X)"),new JMenuItem("背景更換(C)"),new JMenuItem("退出(Z)")},{new JMenuItem("查看樣圖(E)"),new JMenuItem("關(guān)于(T)")}};
for(i = 0;i < 2;i ++)
{
mBar.add(m[i]);
m[i].setMnemonic(mC[0][i]);
if(i==0)k = 0;
else k = 1;
for(j = 0;j < 4-i-k;j ++)
{
m[i].add(mItem[i][j]);
mItem[i][j].setMnemonic(mC[i+1][j]);
mItem[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mC[i+1][j]));
mItem[i][j].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
if(mItem.getText().equalsIgnoreCase("重置(X)")||mItem.getText().equalsIgnoreCase("開始(S)"))
{
int location[][] = {{17,13},{17,103},{17,193},{17,283},{107,13},{107,103},{107,193},{107,283}
,{197,13},{197,103},{197,193},{197,283},{287,13},{287,103},{287,193},{287,283}};
int rd_number[] = new int[16];
rd_number = randomnumber();
for(i = 1;i < 16;i ++)
b[i].setLocation(location[rd_number[i-1]-1][0],location[rd_number[i-1]-1][1]);
}
else if(mItem.getText().equalsIgnoreCase("背景更換(C)"))
{
changetime++;
for(i = 0;i < 15;i ++)
{
b[i+1].setIcon(null);
b[i+1].setIcon(ic[changetime][i]);
}
if(changetime==1)
changetime = -1;
}
else if(mItem.getText().equalsIgnoreCase("退出(Z)"))
{
int a = JOptionPane.showConfirmDialog(null, "您確定退出游戲?");
if(a==0)
System.exit(0);
}
else if(mItem.getText().equalsIgnoreCase("查看樣圖(E)"))
{
JFrame jj = new JFrame("樣圖");
jj.setSize(360, 360);
jj.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3-360,
Toolkit.getDefaultToolkit().getScreenSize().height/4);
jj.setVisible(true);
Container c1 = jj.getContentPane();
try {
c1.add(new J_JPanel(),BorderLayout.CENTER);
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if(mItem.getText().equalsIgnoreCase("關(guān)于(T)"))
{
JOptionPane.showMessageDialog(null, "簡(jiǎn)單拼圖小游戲\n制作人:菜鳥");
}
}
});
}
}
m[0].insertSeparator(1);m[1].insertSeparator(1);
GridBagLayout gr = new GridBagLayout();
c.setLayout(gr);
int gx[] = {0,1,2,3};
int gy[] = {0,1,2,3};
int k1;
Dimension d = new Dimension(90,90);
String s_number;
GridBagConstraints gc = new GridBagConstraints();
for(i = 1;i < 5;i ++)
{
if(i==4)k1=4;
else k1=5;
for(j = 1;j < k1;j ++)
{
gc.gridx = gx[j-1];
gc.gridy = gy[i-1];
gc.fill = GridBagConstraints.NONE;
s_number = String.valueOf(j+(i-1)*4);
b[j+(i-1)*4] = new JButton(s_number,ic[0][j+(i-1)*4-1]);
b[j+(i-1)*4].setPreferredSize(d);
b[j+(i-1)*4].setFont(new Font("宋體",Font.PLAIN,0));
gr.setConstraints(b[j+(i-1)*4],gc);
c.add(b[j+(i-1)*4]);
}
}
for(i = 1;i <16;i ++)
b[i].addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
int j;
JButton b = (JButton)e.getSource();
Point p = b.getLocation();
Point p1 = null;
for(j = -1;j < 2;j ++)
{
if(p.y+j*90>283||p.y+j*90<13)
continue;
else
{
Component a = c.getComponentAt(p.x, p.y+j*90);
if(a.getHeight()!=90)
p1 = new Point(p.x,p.y+j*90);
}
}
for(j = -1;j < 2;j ++)
{
if(p.x+j*90>287||p.x+j*90<17)
continue;
else
{
Component a = c.getComponentAt(p.x+j*90, p.y);
if(a.getHeight()!=90)
p1 = new Point(p.x+j*90,p.y);
}
}
if(p1!=null)
b.setLocation(p1.x, p1.y);
if(check()==true)
JOptionPane.showMessageDialog(null, "恭喜您成功了");
}
/*產(chǎn)生隨機(jī)數(shù)*/
public int[] randomnumber()
{
Random rd = new Random();
int n[] = new int[15];
for(int i = 0 ;i < 15;i ++)
{
int temp = rd.nextInt(15)+1;
n[i] = temp;
for(int j = 0;j < i;j ++)
if(n[j]==temp)
{
i--;
break;
}
}
return n;
}
/*判斷是否排序成功*/
public boolean check()
{
Point location[] = new Point[16];
boolean bo = false;
int count=0;
for(int i = 0;i < 4;i ++)
for(int j = 0;j < 4;j ++)
location[i*4+j] = new Point(17+j*90, 13+i*90);
for(int i = 0;i < 15;i ++)
{
if(b[i+1].getLocation().x==location[i].x&&b[i+1].getLocation().y==location[i].y)
count++;
if(count==15)
bo=true;
}
return bo;
}
public static void main(String args[]) throws IOException
{
J_Puzzle app = new J_Puzzle();
app.setDefaultCloseOperation(EXIT_ON_CLOSE);
app.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3, Toolkit.getDefaultToolkit().getScreenSize().height/4);
app.setSize(400,440);
app.setVisible(true);
app.setResizable(false);
}
}
以上所述就是本文的全部?jī)?nèi)容了,希望對(duì)大家學(xué)習(xí)java能夠有所幫助。
相關(guān)文章
如何使用JDBC連接數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句
JDBC是Java數(shù)據(jù)庫(kù)連接的縮寫,是Java程序與數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn)API。JDBC主要包括Java.sql和javax.sql兩個(gè)包,通過(guò)DriverManager獲取數(shù)據(jù)庫(kù)連接對(duì)象Connection,并通過(guò)Statement或PreparedStatement執(zhí)行SQL語(yǔ)句2023-04-04
Java非阻塞I/O模型之NIO相關(guān)知識(shí)總結(jié)
在了解NIO (Non-Block I/O) 非阻塞I/O模型之前,我們可以先了解一下原始的BIO(Block I/O) 阻塞I/O模型,NIO模型能夠以非阻塞的方式更好的利用服務(wù)器資源,需要的朋友可以參考下2021-05-05
8個(gè)簡(jiǎn)單部分開啟Java語(yǔ)言學(xué)習(xí)之路 附j(luò)ava學(xué)習(xí)書單
8個(gè)簡(jiǎn)單部分開啟Java語(yǔ)言學(xué)習(xí)之路,附j(luò)ava學(xué)習(xí)書單,這篇文章主要向大家介紹了學(xué)習(xí)java語(yǔ)言的方向,感興趣的小伙伴們可以參考一下2016-09-09
使用Java自帶的mail?API實(shí)現(xiàn)郵件發(fā)送功能全過(guò)程
電子郵件的應(yīng)用非常廣泛,例如在某網(wǎng)站注冊(cè)了一個(gè)賬戶,自動(dòng)發(fā)送一封歡迎郵件,通過(guò)郵件找回密碼,自動(dòng)批量發(fā)送活動(dòng)信息等,下面這篇文章主要給大家介紹了關(guān)于如何使用Java自帶的mail?API實(shí)現(xiàn)郵件發(fā)送功能的相關(guān)資料,需要的朋友可以參考下2023-04-04
Spring中的@Conditional注解實(shí)現(xiàn)分析
這篇文章主要介紹了Spring中的@Conditional注解實(shí)現(xiàn)分析, @Conditional是Spring 4出現(xiàn)的注解,但是真正露出價(jià)值的是Spring Boot的擴(kuò)展@ConditionalOnBean等,需要的朋友可以參考下2023-12-12
IDEA插件Statistic統(tǒng)計(jì)代碼快速分辨爛項(xiàng)目
這篇文章主要為大家介紹了使用IDEA插件Statistic來(lái)統(tǒng)計(jì)項(xiàng)目代碼,幫助大家快速識(shí)別出爛項(xiàng)目,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-01-01
Spring整合websocket整合應(yīng)用示例(下)
這篇文章主要介紹了Spring整合websocket整合應(yīng)用示例(下)的相關(guān)資料,需要的朋友可以參考下2016-04-04

