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

代码思路

创建了一个九宫格按钮类(继承了JButton),定义了一个九宫格类,先随机生成8个数,用网格排版放入9个格子,然后在游戏创建了3x3的矩阵用于存储状态,再对每个按键加监听器,当按下去时判断能否移动,能移动则交换空格和这个按钮的名字,每次按下去判断是否从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;//所在位置的xprivate int y;//所在位置的yString 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<A.length;i++) {for(int j=0;j<A[i].length;j++) {if(i==2&&j==2) {continue;}A[i][j]=Rand[i*3+j];}}A[2][2]=0;for(int i=0;i<A.length;i++) {for(int j=0;j<A[i].length;j++) {System.out.print(A[i][j]+" ");}System.out.println();}setVisible(true);}int []Rand;void Init() {//生成1-8的随机数Rand = new int[8];//随机数Random r = new Random(1);int n;LinkedList<Integer> l = new LinkedList<Integer>();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<4;i++) {//判断四个方向是否可以移动int xi,yi;xi=x+Flag[i][0];yi=y+Flag[i][1];if(xi>=0&&xi<=2&&yi>=0&&yi<=2&&A[xi][yi]==0) {//有空格,可以移动move[0]=xi;move[1]=yi;return true;}}return false;//是否不可以运动}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{@Overridepublic 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();}}

运行结果:


最新2021整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君羊:547998459

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持,需要更多资料的同学可以评论私信我,记得一键三连哦谢谢大家

Java实现九宫格游戏相关推荐

  1. java九宫格游戏实践

    java九宫格游戏实践 1 问题描述 拼图游戏不仅能增强思维能力,提高智力而且富含哲理,有助于修身养性.它既有简单易学的特点,为人民群众喜闻乐见. 设计一款拼图游戏,本游戏主要完成:整幅图的现实,切换 ...

  2. java 九宫格数独_Java web - 数独九宫格游戏攻略

    分享游戏攻略,源代码集集:- String path = request.getContextPath(); String basePath = request.getScheme()+": ...

  3. java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器

    java通用象棋游戏 The Universal Chess Interface (UCI) has been around a long time and used by many chess en ...

  4. JAVA实现拼图游戏

    JAVA实现拼图游戏 package org.test; /**  * <p>Title: LoonFramework</p>  * <p>Description: ...

  5. java 3d游戏_不放一行代码分享一下java实现3D游戏逻辑

    这篇日记是对最近几周Java大作业写的一个3D打怪挖矿游戏进行记录和总结.另一个目的也是因为我发现身边很多朋友对3D游戏逻辑很有兴趣.所以写这篇日记可以介绍一下一个3D游戏是如何实现基础功能的.即使没 ...

  6. java生命小游戏_Java修炼——飞机生存小游戏

    在学习了java入门的课程之后,自己动手跟着老师写的一个小游戏,用的是Frame.总共有七个类. 1.飞机游戏的主窗口(MyGameFrame)继承Frame. package com.bjsxt.p ...

  7. java游戏暂停弹出字体_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一次写java的小游戏 想实现点击右下角的暂停 实现游戏的暂停和继续 不知道该怎么加,自己找了线程的内容但试了还是成功不了,求大佬们帮一下小白.代码有点 ...

  8. 用JAVA制作小游戏——飞机大战(三)

    本篇博客是对飞机大战游戏项目完整代码的展示 详细代码讲解: 用JAVA制作小游戏--飞机大战(一) 用JAVA制作小游戏--飞机大战(二) 最下方附整个程序的文件下载链接 代码展示 主界面 impor ...

  9. 用JAVA制作小游戏——飞机大战(二)

    本篇博客是对飞机大战游戏使用代码的展示 重难点: 首先需要鼠标能够控制战机,使鼠标在窗口内时始终能够使战机的位置与鼠标相同,实现鼠标控制战斗机移动. 其次需要能够以一定的速度产生子弹和敌机,并且以一定 ...

  10. 用JAVA制作小游戏——推箱子(三)

    本篇博客主要是对推箱子地图编辑器功能的代码讲解. 首先给出这段代码的部分运行截图: 重难点: 地图编辑器主要有三个重难点: 需要有一个绘制地图的界面 能够实现地图绘制的功能 地图绘制完成后需要将地图内 ...

最新文章

  1. 文巾解题1588. 所有奇数长度子数组的和
  2. python怎么安装turtle_Python3.6安装turtle模块
  3. minigui linux 安装与运行
  4. 数据库阻塞---SQL的隔离级别
  5. (1-e^(-j5w))/(1-e^(-jw))=e^(-j2w)*sin(5w/2)/sin(w/2)的证明过程
  6. java——Runtime
  7. I.MX6 Android 设备节点权限
  8. Spring 的学习
  9. Linux内核剖析之回收页框
  10. kettlejava脚本的api_kettle java api 执行 Kettle 的作业和 转换
  11. cv python 画直线_Python进阶之Matplotlib入门(一)
  12. 并查集之Wireless Network(一)
  13. MySQL基础知识思维导图大纲
  14. Android11(R) system_ext 分区 system_ext_specific 属性
  15. JavaScript调用pc和手机摄像头
  16. 【R语言数据科学】:(三)数据基础处理(mutate、filter、select等)
  17. python如何识别特殊字符_Python怎么判断过滤特殊字符
  18. 如何正确选择集体渲染(云渲染)和gpu离线渲染
  19. 打开word时提示需要安装包gaozhi.msi
  20. 黑马JAVA P163 字节缓冲流的性能分析

热门文章

  1. 物联网碎片化的一些思考
  2. 好的编码习惯是一场代码驱邪仪式
  3. Monte Carlo算法
  4. 中文分词工具安装教程及分词和词性标注应用(jieba、pyhanlp、pkuseg、foolnltk、thulac、snownlp、nlpir)
  5. lol超长id注册手把手教程 第一期
  6. WordStream:谷歌广告各指标分析
  7. 黑暗森林定律:对费米悖论的解释
  8. 读《三体_黑暗森林》
  9. 2019西安交大计算机专业研究生分数线,西安交通大学公布2019年硕士研究生招生复试基本分数线...
  10. 作为一名优秀的程序员,如何选购适合自己的显示器