Java实现九宫格游戏
本文实例为大家分享了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实现九宫格游戏相关推荐
- java九宫格游戏实践
java九宫格游戏实践 1 问题描述 拼图游戏不仅能增强思维能力,提高智力而且富含哲理,有助于修身养性.它既有简单易学的特点,为人民群众喜闻乐见. 设计一款拼图游戏,本游戏主要完成:整幅图的现实,切换 ...
- java 九宫格数独_Java web - 数独九宫格游戏攻略
分享游戏攻略,源代码集集:- String path = request.getContextPath(); String basePath = request.getScheme()+": ...
- java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器
java通用象棋游戏 The Universal Chess Interface (UCI) has been around a long time and used by many chess en ...
- JAVA实现拼图游戏
JAVA实现拼图游戏 package org.test; /** * <p>Title: LoonFramework</p> * <p>Description: ...
- java 3d游戏_不放一行代码分享一下java实现3D游戏逻辑
这篇日记是对最近几周Java大作业写的一个3D打怪挖矿游戏进行记录和总结.另一个目的也是因为我发现身边很多朋友对3D游戏逻辑很有兴趣.所以写这篇日记可以介绍一下一个3D游戏是如何实现基础功能的.即使没 ...
- java生命小游戏_Java修炼——飞机生存小游戏
在学习了java入门的课程之后,自己动手跟着老师写的一个小游戏,用的是Frame.总共有七个类. 1.飞机游戏的主窗口(MyGameFrame)继承Frame. package com.bjsxt.p ...
- java游戏暂停弹出字体_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一次写java的小游戏 想实现点击右下角的暂停 实现游戏的暂停和继续 不知道该怎么加,自己找了线程的内容但试了还是成功不了,求大佬们帮一下小白.代码有点 ...
- 用JAVA制作小游戏——飞机大战(三)
本篇博客是对飞机大战游戏项目完整代码的展示 详细代码讲解: 用JAVA制作小游戏--飞机大战(一) 用JAVA制作小游戏--飞机大战(二) 最下方附整个程序的文件下载链接 代码展示 主界面 impor ...
- 用JAVA制作小游戏——飞机大战(二)
本篇博客是对飞机大战游戏使用代码的展示 重难点: 首先需要鼠标能够控制战机,使鼠标在窗口内时始终能够使战机的位置与鼠标相同,实现鼠标控制战斗机移动. 其次需要能够以一定的速度产生子弹和敌机,并且以一定 ...
- 用JAVA制作小游戏——推箱子(三)
本篇博客主要是对推箱子地图编辑器功能的代码讲解. 首先给出这段代码的部分运行截图: 重难点: 地图编辑器主要有三个重难点: 需要有一个绘制地图的界面 能够实现地图绘制的功能 地图绘制完成后需要将地图内 ...
最新文章
- 文巾解题1588. 所有奇数长度子数组的和
- python怎么安装turtle_Python3.6安装turtle模块
- minigui linux 安装与运行
- 数据库阻塞---SQL的隔离级别
- (1-e^(-j5w))/(1-e^(-jw))=e^(-j2w)*sin(5w/2)/sin(w/2)的证明过程
- java——Runtime
- I.MX6 Android 设备节点权限
- Spring 的学习
- Linux内核剖析之回收页框
- kettlejava脚本的api_kettle java api 执行 Kettle 的作业和 转换
- cv python 画直线_Python进阶之Matplotlib入门(一)
- 并查集之Wireless Network(一)
- MySQL基础知识思维导图大纲
- Android11(R) system_ext 分区 system_ext_specific 属性
- JavaScript调用pc和手机摄像头
- 【R语言数据科学】:(三)数据基础处理(mutate、filter、select等)
- python如何识别特殊字符_Python怎么判断过滤特殊字符
- 如何正确选择集体渲染(云渲染)和gpu离线渲染
- 打开word时提示需要安装包gaozhi.msi
- 黑马JAVA P163 字节缓冲流的性能分析