数独 JAVA实现
数独游戏的规则从很久之前就知道,但是一直都没怎么玩过,然后到了大学,大一下学期自己学dfs的时候,刚刚好碰到了一个数独的题目,做出来后,感觉还是挺有成就感的
然后大二学了JAVA,看了下那个一些有关于界面的一些函数的使用这些,就写出来一个比较粗糙的数独游戏,这个游戏我打算一直维护更新,直到我大学毕业,看看最后可以变成什么样子
public class Main {
public static void main(String[] args) {
gra f = new gra("数独",400,400,400,400);
}
}
package sodu;
import java.io.*;
import java.util.*;
import java.math.*;
import java.security.PrivateKey;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.security.auth.login.CredentialExpiredException;
import javax.security.cert.CertificateNotYetValidException;
import javax.swing.*;
import javax.swing.text.AbstractDocument.LeafElement; import org.omg.PortableServer.ServantLocator;
public class gra extends JFrame {
Scanner cin = new Scanner(System.in);
Random ran = new Random();
JMenuBar mbar;
JMenuItem ito,itt,its;
JMenu menu;
JTextField [][]tx = new JTextField [9][9];
GridLayout gri;
JPanel chess= new JPanel();;
int[][] ans = new int[9][9];
int []a = new int [11];
int [][]num = new int[9][9];
int [][]fat = {
{8,7,1,9,3,2,6,4,5},
{4,9,5,8,6,1,2,3,7},
{6,3,2,7,5,4,8,1,9},
{5,2,8,4,7,3,1,9,6},
{9,1,3,6,2,5,7,8,4},
{7,6,4,1,9,8,3,5,2},
{2,8,7,3,4,9,5,6,1},
{1,4,6,5,8,7,9,2,3},
{3,5,9,2,1,6,4,7,8},
};
gra(){
}
gra(String name,int a,int b,int c,int d){
ints(name);
setLocation(a,b);
setSize(c,d);
setVisible(true);
set();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
void Show(){
chess.updateUI();
chess.removeAll();
gri = new GridLayout(9,9);
for(int i = 0 ; i < 9 ; i++)
for(int j = 0 ; j <9 ; j++){
String s = String.valueOf(num[i][j]);
int n = ran.nextInt(13);
if(n%4==0){
ans [i][j] = num [i][j];
JLabel text = new JLabel(s,JLabel.CENTER);
text.setForeground(Color.white);
chess.add(text);
}else{
tx[i][j] = new JTextField();
tx[i][j].setHorizontalAlignment(SwingConstants.CENTER);
chess.add(tx[i][j]);
}
}
chess.setLayout(gri);
chess.setBackground(Color.DARK_GRAY);
add(chess);
}
void set(){
ito.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setVisible(false);
calc();
Show();
setVisible(true);
}
});
itt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
judge();
}
});
its.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
}); }
void ints(String s){
setTitle(s);
mbar = new JMenuBar();
menu = new JMenu("菜单");
ito = new JMenuItem("开始");
itt = new JMenuItem("提交");
its = new JMenuItem("退出");
menu.add(ito);
menu.add(itt);
menu.add(its);
mbar.add(menu);
setJMenuBar(mbar);
}
void calc(){
boolean []b = new boolean[11];
int i = 0;
b[0] = true;
while(i<9){
int n = ran.nextInt(10);
if(!b[n]) {
a[i++] = n;
b[ n ] = true;
}
}
for(int k = 0 ; k < 9 ; k++)
for(int m = 0 ; m < 9 ; m++)
for(int n = 0 ; n < 9 ; n++){
if(fat[m][n]==a[ k ] && k != 8){
num[m][n] = a[k+1];
}else if(fat[m][n]==a[k]&&k == 8){
num[m][n] = a[0];
}
}
void judge(){
int falg = 0;
for(int i = 0 ; i < 9 ; i++)
for(int j = 0 ; j < 9 ; j++){
if(ans[i][j] == 0) {
int tmp = Integer.valueOf(tx[i][j].getText());
ans[i][j] = tmp;
}
}
for(int i = 0 ; i < 9 ; i++){
boolean[]h = new boolean[10];
boolean[]s = new boolean[10];
for(int j = 0 ; j < 9 ; j++){
if(!h[ans[i][j]]&&!s[ans[i][j]]){
h[ans[i][j]] = true;
s[ans[i][j]] = true;
}else {
falg = 1;
break;
}
}
if(falg == 1) break;
}
if(falg == 1) {
JFrame a = new JFrame("错误");
JTextField text = new JTextField("你的答案错了");
text.setHorizontalAlignment(SwingConstants.CENTER);
a.add(text);
a.setSize(200,200);
a.setLocation(500,500);
a.setVisible(true);
}else{
JFrame a = new JFrame("成功");
JTextField text = new JTextField("你的答案正确");
text.setHorizontalAlignment(SwingConstants.CENTER);
text.setForeground(Color.red);
a.add(text);
a.setSize(200,200);
a.setLocation(500,500);
a.setVisible(true);
}
}
}
gra
数独 JAVA实现的更多相关文章
- LeetCode--036--有效的数独(java)
判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...
- [leetcode] 37. 解数独(Java)(dfs,递归,回溯)
37. 解数独 1A 这个题其实15分钟左右就敲出来并且对了...但是由于我输错了一个数..导致我白白debug一个多小时.. 没啥难度,练递归-dfs的好题 class Solution { pri ...
- [leetcode] 36. 有效的数独(Java)
没啥好说的,直接上就行 36. 有效的数独 class Solution { public boolean isValidSudoku(char[][] board) { Map<Charact ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java生成数独函数
突然想写一下生成算法.代码注释的比较多,应该比较好理解 使用了递归 import java.util.ArrayList; public class Sudoku { static int sudok ...
- 一次Java解析数独的经历
1. 背景 中午下楼去吃饭,电梯里看到有人在玩数独,之前也玩过,不过没有用程序去解过,萌生了一个想法,这两天就一直想怎么用程序去解一个数独.要去解开一个数独,首先要先了解数独的游戏规则,这样才能找到对 ...
- java程序计算数独游戏
兴趣来了,写了个简单的数独游戏计算程序,未做算法优化. 通过文件来输入一个二维数组,9行,每行9个数组,数独游戏中需要填空的地方用0来表示.结果也是打印二维数组. import java.io.Fil ...
- Java实现 蓝桥杯 数独游戏
你一定听说过"数独"游戏. 如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独的答案都是唯一 ...
- Java实现九阶数独
你一定听说过"数独"游戏. 如[图1.png],玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独 ...
随机推荐
- 【MySQL】花10分钟阅读下MySQL数据库优化总结
1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...
- iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43 阅读:630 评论:0 收藏:0 ...
- Vue.js基础篇实战--一个ToDoList小应用
距离开始学Vue已经过去一个多月了,总想把学到的东西柔和在一起,做点东西出来,于是有了这个Todolist小应用. 使用vuex 纯粹基础,没有用到web pack,vuex,npm,下次把它改造一下 ...
- 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
× 缘起---闲逛博客园 前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时, 第一反应我想多了~以为是XX种子(你懂的~ ...
- Socket编程(4)TCP粘包问题及解决方案
① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.T ...
- bzoj1078【SCOI2008】斜堆
题意: 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小.但斜堆不必是平衡的,每个结点的左右儿子的大 ...
- CSS-学习笔记三
绝对定位:1. 脱离了文档流,没有浮动效果2. 默认情况下,设置了绝对定位的块,它的Top,left是相对于浏览器的3. 当给设置了绝对定位的块的父元素设置定位的时候(绝对.相对.固定), 那么 ...
- MSSQLServer 纵向表转横向表 横向表转纵向表 行转列 列转行
MSSQLServer 纵向表转横向表 横向表转纵向表 建表语句及插入数据语句: CREATE TABLE Test_y( ) NULL, ) NULL, [Grade] [int] NULL ) ...
- 502 Bad Gateway深究
早上收到502报警,设置的报警规则是502错误两分钟超过500就报警. 排障流程: 日志分析系统报障-->查看日志系统日志-->nginx错误日志-->php错误日志-->ph ...
- nodejs URL解析
说到URL就需要提一下URI,一个网址就是一个URL,是一个具体的符号,说明了要通过什么协议来访问某种资源,URI是一个字符格式规范,URL是URI的一个子集,URL肯定是URI,但URI却不一定是U ...