• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java实现九宫格游戏

java 搞代码 4年前 (2022-01-05) 23次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了java实现九宫格游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现九宫格游戏的具体代码,供大家参考,具体内容如下

代码思路:

创建了一个九宫格按钮类(继承了JButton),定义了一个九宫格类,先随机生成8个数,用网格排版放入9个格子,然后在游戏创建了3×3的矩阵用于存储状态,再对每个按键加监听器,当按下去时判断能否移动,能移动则交换空格和这个按钮的名字,每次按下去判断是否从1-8排布,判断是否赢。
由于随机生成的排序,所以没有考虑到无解的情况。如果要使有解,可以对于12345678这样的排列,逆序对为0,因此为偶排列,我们对其中的任意两个数进行交换一次,奇偶性对调,变成奇排列,再交换一次又变成偶排列,因此你可以初始化游戏时,通过对12345678进行偶数次有效移动即可。

代码

Play.java

 package game; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.LinkedList; import java.util.Random; import javax.swing.*; import java.util.*; class Number extends JButton{//按键 Number(int x,int y,String name){ super(name); this.name=name; this.x=x; this.y=y; } private String name; private int x;//所在位置的x private int y;//所在位置的y String GetName() { return name; } int GetX() { return x; } int GetY() { return y; } } //九宫格 class Box extends JFrame{ /* * 成员变量 */ Number []n;//方块 int [][]A=new int[3][3];//地图 Box(){//初始化 super("九宫格"); final int N = 9; setSize(500,500); Container c = getContentPane(); setLayout(new GridLayout(3,3)); n = new Number[N]; Font f=new Font("华文行楷",Font.BOLD,20);//根据指定字体名称、样式和磅值大小,创建一个新 Font。 Init(); for(int i=0;i<N-1;i++) { n[i]=new Number(i/3,i%3," "+(Rand[i])); n[i].setBackground(Color.yellow); n[i].setFont(f); c.add(n[i]); n[i].addActionListener(new Change());//添加监听器 } n[N-1]=new Number(2,2,"");//空格 n[N-1].setBackground(Color.yellow); n[N-1].setFont(f); n[N-1].addActionListener(new Change()); c.add(n[N-1]); for(int i=0;i l = new LinkedList(); for(int i=1;i<=8;i++) { n = r.nextInt(8); n=(int)(Math.random()*8); n = n+1; while(l.contains(n)) { n = (int)(Math.random()*8); n = n +1; } l.add(n); } for (int i = 0; i <l.size(); i++) { Rand[i]=l.get(i); System.out.println(Rand[i]); } } int []move=new int[2];//移动坐标 boolean Move(int x,int y) {//是否可以移动 int [][]Flag = {//四个方向 {-1,0},{0,1},{1,0},{0,-1} }; for(int i=0;i=0&&xi=0&&yi<=2&&A[xi][yi]==0) {//有空格,可以移动 move[0]=xi; move[1]=yi; return true; } } return false;//是否不可以运<b style="color:transparent">来源gao@!dai!ma.com搞$$代^@码!网</b>动 } boolean Win() {//是否赢 boolean flag=true; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { System.out.print(A[i][j]+" "); if(i==2&&j==2) { if(A[i][j]!=0) flag = false; } else{ if((A[i][j]!=i*3+j+1)) flag=false; } } System.out.println(); } if(flag) { System.out.println("你赢了"); } return flag; } class Change implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 //((Number)e.getSource()).setText("取消"); int x=((Number)e.getSource()).GetX(); int y=((Number)e.getSource()).GetY(); System.out.print(x+" "+y+"|||"); String s = ((Number)e.getSource()).GetName(); System.out.print(s); if(Move(x,y)) { System.out.println("可以移动"); int t = A[x][y]; System.out.print(t); A[x][y]=0; A[move[0]][move[1]]=t; System.out.println(move[0]+" "+move[1]); ((Number)e.getSource()).setText(""); System.out.println(t); n[move[0]*3+move[1]].setText(t+" "); } else { System.out.println("不可以移动"); } if(Win()) { int res = JOptionPane.showConfirmDialog(null, "GameWin", "你赢了,是否继续", JOptionPane.YES_NO_OPTION); if (res == JOptionPane.YES_OPTION) { new Box(); } else { return; } } } } } public class Play { public static void main(String[] args) { // TODO 自动生成的方法存根 Box b = new Box(); } }

运行结果:

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是java实现九宫格游戏的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java实现九宫格游戏

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址