java数独游戏完整版分享

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

自己写的数独游戏,共9关,代码如下:

1、DoShudu类用于产生数独数组

import java.util.Random; 

public class DoShudu { 

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub 

    int[][] cells=newshudu(); 

    //cells=changeShu(cells,9);
    for(int k=0;k<9;k++){
      for(int i=0;i<9;i++){
      System.out.print(cells[k][i]);
      }
      System.out.println();
    }
  } 

  public static int[][] newshudu(){ 

    int[][] cells=new int[][]{ 

        {1,2,3,4,5,6,7,8,9},
        {4,5,6,7,8,9,1,2,3},
        {7,8,9,1,2,3,4,5,6},
        {2,3,1,5,6,4,8,9,7},
        {5,6,4,8,9,7,2,3,1},
        {8,9,7,2,3,1,5,6,4},
        {3,1,2,6,4,5,9,7,8},
        {6,4,5,9,7,8,3,1,2},
        {9,7,8,3,1,2,6,4,5} 

    }; 

    int countH=new Random().nextInt(10);
    for(int k=0;k<countH;k++){
      cells=lineTolie(cells); 

    } 

    int count=0;
    for(int k=0;k<12;k++){
      count=new Random().nextInt(9);
      cells=changeLine(cells,count); 

    } 

    int countH2=new Random().nextInt(10);
    for(int k=0;k<countH2;k++){
      cells=lineTolie(cells); 

    }
    return cells;
  } 

  public static int [][] changeLine(int[][] cells,int m){//行与行交换
    int n=m;
    int [] temp=new int[9];
    n=((m+3)>=9)?(m+3-9):m+3;
      for(int j=0;j<9;j++){
        temp[j]=cells[m][j];
        cells[m][j]=cells[n][j];
        cells[n][j]=temp[j]; 

    }
    return cells; 

  } 

  public static int[][] lineTolie(int[][] cells){//行与列互换 

    int temp=0;
    for(int j=0;j<9;j++){
        for(int k=j+1;k<9;k++){
          temp=cells[k][j];
          cells[k][j]=cells[j][k];
          cells[j][k]=temp; 

        }
    }
    return cells; 

  } 

}

2、界面运行类

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.TextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.util.Random; 

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; 

import com.sun.awt.AWTUtilities; 

public class Sudoku extends JFrame { 

  final private TextField[][] txtGame; 

  static int num=20;//空白格数量
  static int guan=5;//关卡数量
  static int add=5;//没关过后增加的空白格数量
  public static void main(String[] args) {
    Sudoku shudu = new Sudoku(); 

  } 

  public Sudoku() {// 对JFrame进行布局初始以及监听设置
    txtGame = new TextField[9][9];// 建立81个TextField对象
    DoShudu shudu = new DoShudu();
    int[][] cells = shudu.getShudu();// 获取数独数组
    final JPanel jpl = new JPanel();// 建立JPanel对象
    final int spaceNum = num;// spaceNum表示需要设置空白TextField的数量
    jpl.setLayout(new GridLayout(9, 9));// JPanel布局
    final int[][] cellAn = new int[9][9];// 数独数组的答案
    System.arraycopy(cells, 0, cellAn, 0, cells.length);// 答案从建立的数独数组中Copy
    for (int i = 0; i < 9; i++) {// 把答案从Console打印出来 

      for (int j = 0; j < 9; j++) {
        System.out.print(cellAn[i][j]);
      }
      System.out.println();
    } // 打印结束
    this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
    this.setSize(600, 600);
    this.setResizable(false);
    this.setTitle("黑马-李德国-数独游戏 9关"); 

    for (int i = 0; i < 9; i++) { 

      for (int j = 0; j < 9; j++) { 

        txtGame[i][j] = new TextField(); 

        // 设置TextField背景颜色 

        if ((i < 3 && j < 3) || (i < 6 && i >= 3 && j >= 3 && j < 6)
            || (i < 9 && i >= 6 && j >= 6 && j < 9)) {
          txtGame[i][j].setBackground(Color.ORANGE); 

        }
        if ((i < 6 && i >= 3 && j < 3) || (i < 3 && j >= 6 && j < 9)
            || (i < 9 && i >= 6 && j >= 3 && j < 6)) {
          txtGame[i][j].setBackground(Color.GREEN);
        } 

        if ((i < 9 && i >= 6 && j < 3) || (i < 3 && j >= 3 && j < 6)
            || (i < 6 && i >= 3 && j < 9 && j >= 6)) {
          txtGame[i][j].setBackground(Color.PINK);
        } 

        txtGame[i][j].setFont(new Font("Dialog", Font.CENTER_BASELINE,
            60));// 设置字体大小
        txtGame[i][j].setText(Integer.toString(cells[i][j]));
        txtGame[i][j].setEnabled(false);
        txtGame[i][j].setVisible(true);
        jpl.add(txtGame[i][j]);
        jpl.setVisible(true);
      } 

    } 

    final int[][] tempArray = new int[spaceNum][2]; 

    final JFrame jfm = new JFrame("选择数字");
    // 取消JFrame title
    jfm.setUndecorated(true); 

    // 增加JFrame拖拽功能
    final Point origin = new Point();
    jfm.addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        origin.x = e.getX();
        origin.y = e.getY();
      }
    });
    jfm.addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent e) {
        Point p = jfm.getLocation();
        jfm.setLocation(p.x + e.getX() - origin.x, p.y + e.getY()
            - origin.y);
      }
    }); 

    // 设置JFrame为半透明
    AWTUtilities.setWindowOpacity(jfm, 0.7f); 

    final JPanel jpnl = new JPanel(new GridLayout(3, 3)); 

    jfm.setLayout(null);
    jfm.setSize(190, 200);
    jfm.setResizable(false);
    jpnl.setBounds(0, 0, 190, 120); 

    jfm.setResizable(false); 

    for (int i = 0; i < spaceNum; i++) {// 依据需要空白的TextField数量,随机对TextField设置为空 

      final int ranD1 = new Random().nextInt(9);
      final int ranD2 = new Random().nextInt(9);
      tempArray[i][0] = ranD1;
      tempArray[i][1] = ranD2;
      txtGame[ranD1][ranD2].setText(""); 

      if ((ranD1 < 3 && ranD2 < 3)
          || (ranD1 < 6 && ranD1 >= 3 && ranD2 >= 3 && ranD2 < 6)
          || (ranD1 < 9 && i >= 6 && ranD2 >= 6 && ranD2 < 9)) {
        txtGame[ranD1][ranD2].setBackground(Color.ORANGE); 

      }
      if ((ranD1 < 6 && ranD1 >= 3 && ranD2 < 3)
          || (ranD1 < 3 && ranD2 >= 6 && ranD2 < 9)
          || (ranD1 < 9 && ranD1 >= 6 && ranD2 >= 3 && ranD2 < 6)) {
        txtGame[ranD1][ranD2].setBackground(Color.GREEN);
      } 

      if ((ranD1 < 9 && ranD1 >= 6 && ranD2 < 3)
          || (ranD1 < 3 && ranD2 >= 3 && ranD2 < 6)
          || (ranD1 < 6 && ranD1 >= 3 && ranD2 < 9 && ranD2 >= 6)) {
        txtGame[ranD1][ranD2].setBackground(Color.PINK);
      } 

      txtGame[ranD1][ranD2].addMouseListener(new MouseAdapter() { 

        public void mouseClicked(MouseEvent mouseevent) { 

          jfm.getContentPane().removeAll();// 移出了所有的组件
          jpnl.removeAll(); 

          for (int f = 0; f < 9; f++) { 

            final Button btn = new Button((f + 1) + "");
            btn.setForeground(Color.RED);
            btn.setBackground(Color.WHITE);
            btn
                .setFont(new Font("Dialog",
                    Font.CENTER_BASELINE, 30));
            btn.addMouseListener(new MouseAdapter() { 

              @Override
              public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub
                txtGame[ranD1][ranD2].setText(btn.getLabel()
                    + txtGame[ranD1][ranD2].getText()); 

              }
            }); 

            jpnl.add(btn);
          }
          Button btnDel = new Button(" 清 空 ");
          btnDel.setForeground(Color.WHITE);
          btnDel.setBackground(Color.RED);
          btnDel
              .setFont(new Font("Dialog", Font.CENTER_BASELINE,
                  30));
          btnDel.setBounds(0, 120, 190, 50);
          btnDel.addMouseListener(new MouseAdapter() { 

            @Override
            public void mouseClicked(MouseEvent e) {
              // TODO Auto-generated method stub
              txtGame[ranD1][ranD2].setText(""); 

            }
          }); 

          jfm.add(jpnl);
          jfm.add(btnDel);
          jfm.setVisible(true);
        }
      });
      txtGame[ranD1][ranD2].addTextListener(new TextListener() {// 对空白的TextField添加监听,数值发生变化后进行答案对比,如果全部答对在Console打印“good”
            @Override
            public void textValueChanged(TextEvent e) {
              TextField tmp = (TextField) e.getSource();
              int count = 0;
              for (int u = 0; u < spaceNum; u++) {
                if ((txtGame[tempArray[u][0]][tempArray[u][1]]
                    .getText())
                    .equals(Integer
                        .toString(cellAn[tempArray[u][0]][tempArray[u][1]]))) {
                  count++;
                }
              }
              if (count == spaceNum) { 

                jpl.removeAll();
                FlowLayout blt = new FlowLayout();
                jpl.setLayout(blt); 

                if(num<=3){ 

                jpl.add(new JLabel("恭喜你过关"));
                Button btn = new Button("进入下一关"); 

                btn.addMouseListener(new MouseAdapter() { 

                  @Override
                  public void mouseClicked(MouseEvent e) {
                    // TODO Auto-generated method stub
                    Sudoku.this.dispose();
                    jfm.dispose();
                    num=num+add;
                    new Sudoku();
                  }
                }); 

                jpl.add(btn);
                }
                else{
                  jpl.add(new JLabel("恭喜 你已经完成所有关卡!"));
                }
                jpl.updateUI(); 

                System.out.println("good"); 

              } 

            }
          });
      txtGame[ranD1][ranD2].setEnabled(true);
    }
    this.add(jpl);
    this.setVisible(true);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java编程实现打地鼠文字游戏实例代码

    控制台输入数字,与随机数匹配,匹配正确则返回"打中了!" 匹配错误则返回"太遗憾!没打中!" package hitmouse; import java.util.Random; import java.util.Scanner; public class HitMouse { public static void main(String[] args) { // TODO Auto-generated method stub int[] map = new int

  • Java实现的剪刀石头布游戏示例

    本文实例讲述了Java实现的剪刀石头布游戏.分享给大家供大家参考,具体如下: ChoiceAnswer.java public class ChoiceAnswer { String texts[] = { "石头", "剪刀", "布" }; int value; // [1]石头\t[2]剪刀\t[3]布 String getText() { return texts[value - 1]; } ChoiceAnswer(int value)

  • Java swing框架实现的贪吃蛇游戏完整示例

    本文实例讲述了Java swing框架实现的贪吃蛇游戏.分享给大家供大家参考,具体如下: java是门高级语言,做游戏时适合做后台,但是用它也可以做游戏.闲来无事做的时候可以用来写点小游戏,练习练习预防早衰哈哈! 闲话不说了 下面是以前练习的作品,不怕大家笑话,那个时候用了一个礼拜才做出来的. 源码如下供大家学习. 使用的是java的 swing  Jframe Jpanel JButton   当然你也可以使用awt 先来看看运行效果: 具体代码: package Tcs; /** * * *

  • Java版坦克大战游戏源码示例

    整理文档,搜刮出一个Java版坦克大战游戏的代码,稍微整理精简一下做下分享. package tankwar; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.File; import java.io.FileInputStream; imp

  • Java游戏俄罗斯方块的实现实例

    Java游戏俄罗斯方块的实现实例 java小游戏主要理解应用java Swing,awt等基础组件的知识,通过本例应当掌握面向对象的知识. 实现代码: package cn.hncu.games; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import

  • Java编程实现游戏中的简单碰撞检测功能示例

    本文实例讲述了Java编程中的简单碰撞检测功能.分享给大家供大家参考,具体如下: 今天在家正在写一个坦克大战的小游戏来玩,遇到了一个简单的圆和圆的碰撞检测的小问题, 碰撞检测的过程处理主要有以下三步: 1.碰撞检测(Collision Detection):返回两个或多个物体是否发生碰撞的布尔判断. 2.碰撞确定(Collision Determination):找到物体之间实际相交位置. 3.碰撞响应(Collision Response):针对两个物体之间的碰撞决定采取何种操作. 下面是关于

  • Java实现打飞机小游戏(附完整源码)

    写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习. 效果如下 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy

  • java实现简单的弹球游戏

    弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint()方法来实现.这里我们用了键盘监听事件.Timer类等. 游戏说明: 该弹球游戏中的小球会随着时间增加速度且速度最多是横向速度和垂直速度为10.当小球的y坐标(垂直坐标)大于球拍的y坐标(垂直坐标)即判断游戏结束.控制台显示的是小球的x方向的速度和y方向的速度. import java.awt.*

  • java swing实现的扫雷游戏及改进版完整示例

    本文实例讲述了java swing实现的扫雷游戏及改进版.分享给大家供大家参考,具体如下: 版本1: package awtDemo; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import jav

  • java版实现2048游戏功能

    本文实例为大家分享了java实现2048游戏功能的具体代码,供大家参考,具体内容如下 功能要求:2048的基本界面,能够实现2048的游戏功能. 总思路:两个类:Game和GameListener. Game负责界面的实现和paint方法的重写 GameListener负责实现键盘和鼠标事件的处理.移动方法,相加方法,输赢判断和随机数的出现都要在键盘监听的方法中实现. 实现分析:要实现2048游戏,首先需要考虑2048都有些什么? 界面实现: 2048的游戏界面很简单,就是一些方格和数字.要实现

随机推荐