java实现简单美女拼图游戏
程序员文章站
2024-03-31 16:53:40
拼图小游戏,学习阶段。很多不足,改进了一下
演示图片:
j_puzzle.java
import java.awt.borderlayout;
impo...
拼图小游戏,学习阶段。很多不足,改进了一下
演示图片:
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("关于(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("关于(t)")) { joptionpane.showmessagedialog(null, "简单拼图小游戏\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, "恭喜您成功了"); } /*产生随机数*/ 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); } }
以上所述就是本文的全部内容了,希望对大家学习java能够有所帮助。
下一篇: ADO.NET之连接池技术的使用详解