最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)九宮格游戲

 更新時間:2020年11月01日 10:01:51   作者:Who_Am_I.  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)九宮格游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)九宮格游戲的具體代碼,供大家參考,具體內(nèi)容如下

代碼思路:

創(chuàng)建了一個九宮格按鈕類(繼承了JButton),定義了一個九宮格類,先隨機生成8個數(shù),用網(wǎng)格排版放入9個格子,然后在游戲創(chuàng)建了3x3的矩陣用于存儲狀態(tài),再對每個按鍵加監(jiān)聽器,當(dāng)按下去時判斷能否移動,能移動則交換空格和這個按鈕的名字,每次按下去判斷是否從1-8排布,判斷是否贏。
由于隨機生成的排序,所以沒有考慮到無解的情況。如果要使有解,可以對于12345678這樣的排列,逆序?qū)?,因此為偶排列,我們對其中的任意兩個數(shù)進行交換一次,奇偶性對調(diào),變成奇排列,再交換一次又變成偶排列,因此你可以初始化游戲時,通過對12345678進行偶數(shù)次有效移動即可。

代碼

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);//根據(jù)指定字體名稱、樣式和磅值大小,創(chuàng)建一個新 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());//添加監(jiān)聽器
 }
 
 
 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的隨機數(shù)
 Rand = new int[8];//隨機數(shù)
 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];//移動坐標(biāo)
 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{

 @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", "你贏了,是否繼續(xù)", 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();
 
 }

}

運行結(jié)果:

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Native 基礎(chǔ)環(huán)境搭建過程

    Spring Native 基礎(chǔ)環(huán)境搭建過程

    Spring?Native可以通過GraalVM將Spring應(yīng)用程序編譯成原生鏡像,提供了一種新的方式來部署Spring應(yīng)用,本文介紹Spring?Native基礎(chǔ)環(huán)境搭建,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Hadoop環(huán)境配置之hive環(huán)境配置詳解

    Hadoop環(huán)境配置之hive環(huán)境配置詳解

    這篇文章主要介紹了Hadoop環(huán)境配置之hive環(huán)境配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 使用Mybatis時SqlSessionFactory對象總是報空指針

    使用Mybatis時SqlSessionFactory對象總是報空指針

    本文主要介紹了使用Mybatis時SqlSessionFactory對象總是報空指針,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Java中Instant的使用及轉(zhuǎn)換

    Java中Instant的使用及轉(zhuǎn)換

    Instant是java.time包中的一個類,本文主要介紹了Java中Instant的使用及轉(zhuǎn)換,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 關(guān)于dubbo的RPC和RESTful性能及對比

    關(guān)于dubbo的RPC和RESTful性能及對比

    這篇文章主要介紹了關(guān)于dubbo的RPC和RESTful性能及對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java基于BIO實現(xiàn)文件上傳功能

    Java基于BIO實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了Java基于BIO實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解JavaWeb過濾器 Filter問題解決

    詳解JavaWeb過濾器 Filter問題解決

    過濾器就是對事物進行過濾的,在Web中的過濾器,當(dāng)然就是對請求進行過濾,我們使用過濾器,就可以對請求進行攔截,然后做相應(yīng)的處理,實現(xiàn)許多特殊功能,今天主要給大家講解JavaWeb過濾器 Filter問題解決,感興趣的朋友一起看看吧
    2022-10-10
  • java開發(fā)線上事故理解RocketMQ異步精髓

    java開發(fā)線上事故理解RocketMQ異步精髓

    這篇文章主要介紹了java開發(fā)線上事故理解RocketMQ異步精髓
    2022-07-07
  • Java異或運算應(yīng)用場景詳解

    Java異或運算應(yīng)用場景詳解

    這篇文章主要給大家介紹了關(guān)于Java異或運算應(yīng)用場景的相關(guān)資料,異或運算會應(yīng)用在很多算法題中,這里整理了幾個最常見的應(yīng)用場景,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 哈希表在算法題目中的實際應(yīng)用詳解(Java)

    哈希表在算法題目中的實際應(yīng)用詳解(Java)

    散列表(Hash?table,也叫哈希表)是根據(jù)關(guān)鍵碼值(Key?value)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于哈希表在算法題目中的實際應(yīng)用,文中介紹的方法是Java,需要的朋友可以參考下
    2024-03-03

最新評論

衡东县| 寻乌县| 四子王旗| 保山市| 广宁县| 江永县| 沧源| 石景山区| 甘洛县| 建宁县| 河间市| 阿克苏市| 泾阳县| 宁都县| 武定县| 盱眙县| 富民县| 南宫市| 邳州市| 永登县| 太湖县| 西畴县| 农安县| 双流县| 蒙城县| 陇川县| 洛南县| 扶余县| 如皋市| 陆丰市| 江北区| 凯里市| 乐东| 冕宁县| 内丘县| 五莲县| 辽阳市| 福建省| 木兰县| 江川县| 武夷山市|