热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

简单实现java数独游戏

这篇文章主要教大家如何简单实现java数独游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用...
数独代码是在之前寒假受命写的,学了一个月java的成果,现在看来有些不足但毕竟是第一个程序,就直接放上来,数独终盘的实现直接用了暴力,时间复杂度有点高,懒得改了直接放代码

终盘实现:

import java.util.Random; 
 
public class SudokuPuzzleGenerator { 
 private Random random = new Random(); 
  
 private static final int MAX_CALL_RANDOM_ARRAY_TIMES = 220; 
  
 private int currentTimes = 0; 
 
 public int[][] generatePuzzleMatrix() { 
 
  int[][] randomMatrix = new int[9][9]; 
 
  for (int row = 0; row <9; row++) { 
   if (row == 0) { 
    currentTimes = 0; 
    randomMatrix[row] = buildRandomArray(); 
 
   } else { 
    int[] tempRandomArray = buildRandomArray(); 
 
    for (int col = 0; col <9; col++) { 
     if (currentTimes 

界面及判断:
用swing写的

import javax.swing.*;  
import java.awt.*; 
import java.awt.event.*; 
import java.util.Random; 
 
public class ShuD extends JFrame{ 
 private static final long serialVersiOnUID= 5952689219411916553L; //序列化字段 
 private static JTextField a[][] = new JTextField[9][9];  //存储文本框中的数字 
 static int ans[][] = new int[9][9];  //存储输入后的两位数组 
 SudokuPuzzleGenerator example = new SudokuPuzzleGenerator(); 
 public int right[][] = example.generatePuzzleMatrix(); 
 public int rightans[][]; 
 private int[][] Wk(int a[][]){    //挖空 
  Random r = new Random(); 
  int a1, a2; 
  a1 = r.nextInt(9); 
  a2 = r.nextInt(9); 
  for(int i = 0; i <100; i++) 
  { 
   a[a1][a2] = 0; 
   a1 = r.nextInt(9); 
   a2 = r.nextInt(9); 
  } 
  return a; 
 } 
 public ShuD(){ 
  Container c = getContentPane(); 
  c.setLayout(new BorderLayout(2, 1));  //边框布局 
  JMenuItem jmiOk = new JMenuItem("提交");  //定义菜单 
  JMenuItem jmiExplain = new JMenuItem("详情"); 
  JMenuItem jmiMessage = new JMenuItem("信息"); 
   
  JPanel panel = new JPanel();  //定义一个容器 
  panel.add(jmiOk);     //将菜单在容器内显示 
  panel.add(jmiExplain); 
  panel.add(jmiMessage); 
  JPanel p1 = new JPanel(new GridLayout(9, 9, 5, 5));  //定义9行9列的网格布局 
  add(panel,BorderLayout.NORTH);   //将菜单放置在北面 
  add(p1,BorderLayout.CENTER);   //将数字放置在正中间 
  rightans = Wk(right); 
  for(int k = 0;k<9; k ++) 
  { 
   for(int n=0;n<9;n++) 
   { 
    if(rightans[k][n] != 0) 
    { 
     a[k][n] = new JTextField("" + rightans[k][n]); 
     a[k][n].setHorizontalAlignment(JTextField.CENTER);//将数字水平居中 
     a[k][n].setEditable(false);   //只可显示不可修改 
     p1.add(a[k][n]);     //添加文本框 
    } 
    else 
    { 
     a[k][n] = new JTextField();  
     a[k][n].setHorizontalAlignment(JTextField.CENTER); 
     p1.add(a[k][n]); 
    } 
   } 
  } 
  add(p1);   //将数字面板显示在容器里 
  jmiOk.addActionListener(new ActionListener(){//匿名创建事件监听器 
   public void actionPerformed(ActionEvent e) 
   { 
    if(gettext() == 1) 
    { 
     if(judge() == true) 
     { 
      JOptionPane.showMessageDialog(null, "Your answer is right!","Result",JOptionPane.INFORMATION_MESSAGE); 
     } 
     else 
     { 
      JOptionPane.showMessageDialog(null, "Your answer is wrong!","Result",JOptionPane.INFORMATION_MESSAGE); 
     } 
    } 
   } 
  }); 
  explainListenerClass listener2 = new explainListenerClass(); 
  jmiExplain.addActionListener(listener2); 
  messageListenerClass listener3 = new messageListenerClass(); 
  jmiMessage.addActionListener(listener3); 
 } 
  
 static int gettext()   //获取文本框的文字 
 { 
  int i,j; 
  for(i = 0; i <9; i++) 
  { 
   for(j = 0; j <9 ; j ++) 
   { 
    ans[i][j] = 0; 
   } 
  } 
  for(int k = 0;k <9; k++) 
  { 
   for(int n = 0;n <9; n++) 
   { 
    try   //异常处理 
    { 
     ans[k][n] = Integer.parseInt(a[k][n].getText());  
     //将答案类型转换之后传给ans 
    } 
    catch(NumberFormatException nfe) 
    { 
     JOptionPane.showMessageDialog(null,"数据中包括非数字,请重新输入"); 
     return 0; 
    } 
   } 
  } 
  return 1; 
 } 
 public static boolean judge()   //判断输入的答案是否正确 
 { 
  int i,j,k; 
  int [][]answer = ans;    
   
  for(i = 0; i <9; i ++) 
  { 
   if(judge9(answer[i]) == false)  //判断每列是否有重复数字 
    return false; 
  } 
  for(j = 0; j <9; j ++)     //判断每行是否有重复数字 
  { 
    
   int[] newAnswerColumn = new int[9]; 
   for(i = 0; i <9; i ++) 
   { 
    newAnswerColumn[i] = answer[i][j]; 
   } 
   if(judge9(newAnswerColumn) == false) 
    return false; 
  } 
  for(i = 0; i <3; i ++)   //判断每个小九宫格内是否有重复数字 
  { 
   for(j = 0; j <3; j ++) 
   { 
    k = 0; 
    int[] newAnswer = new int[9]; 
    for(int m = i * 3; m 

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


推荐阅读
  • 在《Python编程基础》课程中,我们将深入探讨Python中的循环结构。通过详细解析for循环和while循环的语法与应用场景,帮助初学者掌握循环控制语句的核心概念和实际应用技巧。此外,还将介绍如何利用循环结构解决复杂问题,提高编程效率和代码可读性。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 在Python编程语言中,字符串被视为不可变的Unicode字符序列。本文将详细介绍四种用于获取字符串长度的方法,并提供相应的代码示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 在第二课中,我们将深入探讨Scala的面向对象编程核心概念及其在Spark源码中的应用。首先,通过详细的实战案例,全面解析Scala中的类和对象。作为一门纯面向对象的语言,Scala的类设计和对象使用是理解其面向对象特性的关键。此外,我们还将介绍如何通过阅读Spark源码来进一步巩固对这些概念的理解。这不仅有助于提升编程技能,还能为后续的高级应用开发打下坚实的基础。 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • 大家好,我是梅巴哥er。本文将深入探讨Redux框架中的第三个实战案例,具体实现每两秒自动点击按钮以触发颜色变化的功能。该案例中,一个关键点在于是否需要使用异步操作来处理定时任务,我们将详细分析其必要性和实现方式。通过这一实例,读者可以更好地理解Redux在实际项目中的应用及其异步处理机制。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
  • 优化升级版数据采集与赋值方法,专为前文内容设计
    在前一篇文章中,方法的局限性主要体现在需要传递参数,并且参数数量受限。当页面布局与所需参数不匹配时,该方法将无法正常工作。为此,我们推出了优化升级版1.1,旨在解决这些问题并提高灵活性和适用性。 ... [详细]
  • 人人租机作为国内领先的信用免押租赁平台,为企业和个人提供全方位的新租赁服务。通过接入支付宝小程序功能,该平台实现了从零到百的迅猛增长,成为全国首家推出“新租赁小程序”开发服务的阿里巴巴小程序服务商(ISV)。这一创新举措不仅提升了用户体验,还显著增强了平台的市场竞争力。 ... [详细]
  • Java集合框架特性详解与开发实践笔记
    Java集合框架特性详解与开发实践笔记 ... [详细]
  • 去中心化媒体与去中心化内容:两者并非等同概念 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • ASP11:深入解析与应用展望本文详细探讨了 ASP11 中的 `AppRelativeTemplateSourceDirectory` 属性,该属性用于获取或设置包含控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。此外,文章还介绍了 1.0 版本中的 Binding 机制,分析了其在实际开发中的应用和优化方法,为开发者提供了全面的技术指导。 ... [详细]
author-avatar
超级冷笑话驿站料_663
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有